본문 바로가기
JAVA/SpringDB

연속 Insert에 대해 써보려고 한다.

by 플람 2020. 3. 21.

 프로젝트를 하다보면 다중 Insert를 생각보다 많이 접하게 된다.

(나는 뭐.. 아직 1~2개 상황.. 하지만 요번에 새로 들어가는 프로젝트는 필수로 다중 Insert가 있어야한다.)

 

효율적인 DB테이블 구조로 인해 입력하는데에 다중 Insert를 해야할때가 많았다.

 

내가 접해본 대표적인 케이스는 PMS 권한부여이다.

 

  PMS 권한부여

 - PMS 권한부여를 만들때 MasterAdmin이 기본적으로 설정해놓은 권한 외에 PMS를 관리할 PM이 권한을 만들 수 있는 구조를 만들었다.

   그래서 커스텀권한 테이블과 권한설정 테이블로 Insert를 두번이나 했어야 했다.

   이때 나는 Mybatis SelectKey를 이용하여 해당 테이블의 Max값을 가지고와서 그 숫자로 Insert했다.

   잘 생각해보니깐 나중에 A라는 사용자와 B라는 사용자가 동시에 해당 Max값을 사용해버리면 값이 겹쳐서 들어갈 수도 있을 것이고

   트랜잭션 오류가 날 수도 있는 상황이라는 단점을 가지고 있는데도.. 해버렸다. 학생때 프로젝트고 짧은 시간에 만들어야하는 프로젝트라

   서 어쩔 수 없이 이렇게 끝내야했다.

 

 하지만 어떤 프로젝트를 하더라도 나의 발목을 잡던.. 이녀석... 요번에 해결책을 찾았다. 무려.. 4개월만이였다.

 

그때 프로젝트의 소스를 조금 변경시켜놓은 것이다.

방법은 여러가지였다.

 

1. selectKey를 이용하여 이녀석을 sid값으로 만들고  keyproperty를 이용하여 해당 맵에 넣어서 다음 Insert문에 sid값을 넣는것이다.

  (이 방법 시퀀스 방식으로 자동 증가하게 만들면 트랜잭션 오류가 발생하지도 않을 것이다.)

2. UUID를 선언해서 key값으로 만드는 방법

3. 자바단에서 특정key를 만들어서 키값으로 던지는 방법

 

3가지 방법이 있었다.

 

하지만 이 세가지 방법 이외에도 다른 방법이 있을 것이긴 하지만. 한번 다음 프로젝트 때 다중 Insert를 사용할때 하나하나 천천히 써보고

3가지 방법의 장단점을 찾아봐야되겠다. 

 

오늘 포스팅은 이걸로 끝이다. 읽어주셔서 감사합니다.

'JAVA > SpringDB' 카테고리의 다른 글

Spring - 트랜잭션관리  (0) 2020.03.11