DB
-
MySQL, MyBatis foreach문으로 여러건의 데이터 처리 (List)DB 2022. 4. 5. 20:01
개발을 하다보면 여러 건의 데이터를 한번에 넣어줘야 하는 경우가 있다. 이 때 아래처럼 그냥 서버에서 트랜잭션을 걸고 반복문을 돌려서 처리하는 방법으로 할 수도 있지만,@Transactionalpublic int insertSometing(List list) { for (Object obj : list) { mapper.insert(obj); }}반복을 많이 하게 될 수록 DB와 연결하는 데에 자원과 시간을 많이 쓰게 된다.또한 Transaction, Index 도 반복하는 수가 많을수록 성능이 나빠지는 원인이다. 따라서 DBMS에서는 솔루션을 제공하는데 그게 BULK INSERT 이다.INSERT INTO your_table VALUES (1,2);INSERT INTO your_table VALUES..
-
SQL 쿼리문에서 WHERE 1=1을 사용하는 이유DB 2020. 12. 24. 00:13
개발을 하거나 다른 코드를 보고 있으면, 쿼리문에서 WHERE 1=1 처럼 작성된 것을 볼 수가 있을 것이다. SELECT column_1, column_2, ... coulmnN FROM your_table WHERE 1=1 AND your_condition="something" ... 사실 1=1 은 무조건 true 이기 때문에 이 조건은 매우 쓸데없는 것처럼 보인다. 물론 2=2 또는 100=100 따위를 써도 코드는 그대로 작동한다. 이렇게 조건을 주는것은 동적 쿼리를 만들때이다. 수많은 쿼리를 만들다 보면 첫번째 조건에 어떤 것이 올지 몰라서 젤 먼저 1=1 같은 무의미한 조건을 걸어두고, 이후에 AND로 조건들을 쭉 붙이기 위해 사용하는 것이다. 이렇게 쓰지 않으면 쿼리마다 형태가 다르게 될 ..
-
DB 쿼리 명령어 공부 1DB 2020. 12. 2. 17:32
SELECT DATABASE(); SHOW DATABASES; - SQL 스키마에 있는 데이터베이스들을 조회하기 SELECT USER(); - 유저 목록 조회하기 CREATE DATABASE dbName; - 데이터베이스 생성하기 DROP DATABASE dbName; - 데이터베이스 삭제하기 CREATE USER 'username'@'hostname' IDENTIFIED BY 'password'; - username의 id와 password를 가진 유저 생성. hostname에는 localhost나 서버 ip주소가 들어간다. GRANT ALL PRIVILEGES ON *.* TO 'user'@'hostname' : 모든 권한을 user에게 부여한다. 이외에도 선택해서 권한을 부여할 수 있다. FLUSH..
-
SQL injectionDB 2020. 9. 25. 19:16
개발을 하면서 보안 이슈에도 관심을 가지게 되는데, 가장 먼저 눈에 들어온것은 SQL injection 이었다. RDBMS를 이용해서 서버와 클라이언트의 데이터를 주고 받을 때, 클라이언트에서 바로 서버로 넘어가면 문제가 생길수 있다. 예를 들면 아래와 같다. 간단한 회원가입 서비스가 있다고 할때, 쿼리문은 다음과 같을 것이다. INSERT INTO USER (이름) VALUES (이름); 일반적인 사용자라면, 이름과 정보들을 제대로 입력하겠지만, 이름'); DROP TABLE USER;-- //--는 뒤에 오는 내용을 주석처리한다 위의 값을 집어넣어버리면 고객 데이터가 전부 날아가버리는 참사가 발생할수도 있다. 또는 로그인 폼에서 아이디값에 admin'-- 처럼 입력하여 SELECT * FROM mem..