club description 작성 로직

DDANDARA ㅣ 2020. 12. 3. 22:54

update api를 만들어두지 않아 긴급하게 하려다보니 쿼리문이 나왔다. mapper의 insert함수에

description 데이터가 없으면 insert, 있으면 update하는 로직으로 쿼리를 짰다.

함수를 두개 만들어 두 번 호출하는것과 성능차이가 어떤지 찾아보았다.  

 

 

"데이터가 있으면 Update, 없을경우 Insert"

DB와 관련된 프로그램을 개발하다 보면 한번씩 만나는 경우이다. 이 경우 세 가지 방법으로 구현할 수 있다.

 

1. SELECT문으로 데이터가 존재하는지 확인 -> 리턴값에 따라 INSERT / UPDATE => 결국 디비에 두번 접근하는 비용, 그리고 INSERT 가 UPDATE, SELECT 보다 실행 속도가 빠른 걸 생각하면 좋은 방법이 아니다

 

2. UPDATE를 먼저 해본 후 리턴값에 따라 INSERT => UPDATE 리턴값이 0이라면 데이터가 존재하지 않는 것이기 떄문에 INSERT를 수행한다. 

 

3. ON DUPLICATE KEY UPDATE => - 서버에 불필요하게 왔다갔다 할 필요가 없어짐
- 5-6% 정도 빠름
- 데이터 입력이 많다면 더 커질 수 있음

결국 2번이나 3번 방법 중 하나를 골라야 한다.

이때 update가 자주 일어나는 서비스이면 2번을 선택한다.

Insert가 자주 일어나는 서비스이면 3번을 선택하여 사용한다.

즉 여기선 2번을 선택하는 것이 옳다. 바꾸자