개발자
Duplicate 이슈를 막기위해 보통 insert 하기전에 조회 후 없으면 insert 쿼리를 날리는데 이럴 경우 스레드 환경에서 동시 쿼리가 실행될 경우 Duplicate 이슈가 생길 수 있습니다 Lock 을 이용하여 방지하는 방법도 있지만 성능을 떨어트리는 등 비용이 크다고 생각됩니다. 그래서 저는 insert ignore 쿼리를 통해 조회하지 않고 insert ignore 쿼리를 날린 후 조회하는 방법을 주로 이용합니다. 하지만 주변 지인분들은 잘 모르고 안쓰는 것 같더라구요.. 이 방법이 좋은 방법은 아닌가? 라는 생각에 다른분들은 어떻게 처리하고 계신지 궁금합니다.

답변 1
좋은 방법이네요. 다만, 여러 스레드에서 동시로 쿼리를 실행하더라도 UNIQUE키가 걸려있기 때문에, DB수준에서 늦게 도착한 요청은 UK위반 오류를 내서 무시될 것 같은데요, 어떻게 Duplicate가 되는지 궁금합니다. 결국, UK가 잘 걸려있으면 조회를 해보고 날릴 필요 없이, 그냥 INSERT하면 됩니다. UK 위반 오류를 무시하는 방법으로 INSERT IGNORE를 쓰는 방법은 좋은 것 같습니다.

김태훈
작성자
백엔드 개발자 • 2023년 10월 18일
네 맞습니다. 이미 물리키가 걸려있기 때문에 데이터가 생성되지는 않습니다. 하지만 어플리케이션 단에서 예외처리를 해주어야 합니다. (위에 작성한 이슈가 요것..ㅎ) insert ignore 를 이용하면 예외처리 또한 생략할 수 있어서 좋은 것 같습니다.

김대현
백엔드 개발자 • 2023년 10월 19일
결국 질문이 아니라, 팁 공유네요. 개발 블로그 같은데 써서 더 널리 공유하시면 좋을 것 같습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!