인프런 커뮤니티 질문&답변

kim님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

회원 서비스 개발

DB Insert할 때 질문입니다.

해결된 질문

19.10.06 14:15 작성

·

618

9

회원 서비스 개발에서

validateDuplicateMember를 할 때에 동시에 회원가입이 이루어질 때 방지로 name에 유니크를 걸어 주신다고 했는데 이해가 잘 되지를 않습니다. 보통 이름이 같은 사람도 많은데 name 에 unique를 주어도 되는건지 궁금하고요. 동시에 일어났을 때 방지하는 법에 대해 좀 더 자세히 알고 싶습니다~

답변 2

14

김영한님의 프로필 이미지
김영한
지식공유자

2019. 10. 06. 23:07

안녕하세요. kim님

하나씩 답을 해드릴께요^^

1. 보통 이름이 같은 사람도 많은데 name 에 unique를 주어도 되는건지 궁금하고요.

-> 이 예제에서는 이름이 같은 것을 허락하지 않는다는 비즈니스 정책을 잡았기 때문입니다. 게임 같은 경우 생각해보시면 같은 이름을 허용하지 않는 경우가 있습니다. 물론 비즈니스 상황에 따라 이름이 동일해도 되는 경우도 많습니다. 그러면 제약을 하면 안되겠지요.

2. validateDuplicateMember를 할 때에 동시에 회원가입이 이루어질 때 방지로 name에 유니크를 걸어 주신다고 했는데 이해가 잘 되지를 않습니다.

-> 서버가 한대만 있고, 자바(JVM)로 웹 애플리케이션을 단 하나만 구동하는 상황이면 자바 만으로 동시성 제어를 할 수 있습니다. 그런데 실무에서는 보통 서버 두 대 이상을 사용하기 때문에, 동시성 제어를 JVM안에서 해결하는게 어렵습니다. 관계형 데이터베이스는 이런 동시성 제어를 고려해서 개발되었기 때문에, 결국 관계형 데이터베이스에 동시성 제어를 위임해야 합니다. 그 중에 관계형 데이터베이스가 제공하는 유니크 제약조건을 사용하면, 같은 이름을 절대로 동시에 저장할 수 없습니다. 그래서 name에 유니크 제약조건을 실무에서는 걸어주어야 한다고 이야기 했습니다. 그런데 이런 유니크 제약조건은 정말 최악의 경우(진짜 초 단위로 같은 데이터가 저장되었을 때)가 발생했을 때 동작하는 것이고, 대부분은 validation에서 막힙니다.

관련해서 더 궁금하신 부분은 관계형 데이터베이스의 트랜잭션이나, 제약조건들을 공부해보시면 도움이 됩니다^^

2

kim님의 프로필 이미지
kim
질문자

2019. 10. 07. 08:41

답변 감사드립니다. 이해되었습니다

kim님의 프로필 이미지

작성한 질문수

질문하기