묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpa 동시성 이슈
안녕하세요. 주옥같은 강의 정말 잘 보고 있습니다.https://www.inflearn.com/questions/158967/%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94-entitymanager%EC%97%90-%EB%8C%80%ED%95%B4-%EA%B6%81%EA%B8%88%ED%95%9C-%EC%A0%90%EC%9D%B4-%EC%9E%88%EC%96%B4-%EC%A7%88%EB%AC%B8-%EB%82%A8%EA%B9%81%EB%8B%88%EB%8B%A4이 질문에 답변 해주신 내용을 보면 결국 EntityManager는 동시성 이슈 없이 개발할 수 있다라고 해주셨는데, 한가지 궁금한게 있습니다.만약 A, B 요청이 동시에 들어온 경우 A, B는 동일한 데이터를 가지게 될 것입니다. 이때 A 요청에서 update 후 commit으로 데이터 변경이 발생되고, 이후 B 요청에서 update 후 commit으로 데이터 변경이 발생되면 A 요청의 update는 반영이 안되는 갱신 손실 현상이 발생할 것으로 생각됩니다. 이러한 경우 lock을 이용해서 처리를 한다고 알고 있는데 혹시 이러한 경우에 대해서 3가지의 질문을 좀 드리고 싶습니다.1. 위 예시로 적은 상황은 질문 글의 답변에서 말씀해주신 내용과는 다른 내용이라고 보는게 맞을까요?2. 저의 지식으로는 위 예시의 경우는 lock을 이용해서 갱신 손실을 방지하는 것으로 알고 있는데, lock을 사용하는 방법 말고 다른 방법이 존재하는 걸까요?3. 동시성 이슈 처리에서 thread-safe한 객체(Atomic 등등)와 db lock을 사용하는 방법 외에도 다른 방법이 있을까요?저의 지식으로는 명쾌한 해답이 나오지 않아 질문 드리게 되었습니다. 미리 답변 감사드립니다!!!
-
해결됨스프링 핵심 원리 - 고급편
ThreadLocal 동시성 이슈 (ArrayList, HashMap, HashSet)
안녕하세요! 김영한님!!수업 너무 유익하게 잘 듣고있습니다~!! 동시성 이슈를 막기 위해 ThreadLocal을 사용하는 부분 중에서 궁금한 점이 생겨서 질문 드립니다. String, TraceId의 타입에 대해서는 ThreadLocal을 사용해서 동시성 이슈를 해결하였는데, 필드로 ArrayList, HashMap, HashSet을 사용하고 싶은 경우에는 동시성 이슈를 어떻게 해결하면 될까요 ? 구글링을 했었을 때에는 멀티쓰레드 환경에서는 HashMap 대신에 ConcurrentHashMap을 사용해라고 봤었고, ArrayList 대신에 CopyOnWirteArrayList를 사용해라고 봤었고, HashSet에 대해서는 제대로 찾지 못했습니다. 멀티쓰레드 환경에서 Thread-Safe하게 ArrayList, HashMap, HashSet을 사용하려면 어떻게 해야하나요 ?