스프링과 JPA 환경에서 동시성 문제 해결하기
동시성 문제동시성 문제는 공유 자원을 여러 스레드가 수정할 때 공유 자원의 일관성이 깨지는 상황을 말한다. 예를 들어 내 계좌에 1000원을 두 스레드가 동시에 입금하려고 한다고 가정해보자. 병렬로 스레드가 작업을 수행하고 위에서 부터 시간순으로 진행됨을 나타낸다.스레드 A가 남은 금액 조회 : 0원스레드 B가 남은 금액 조회 : 0원스레드 A가 남은 금액
동시성 문제동시성 문제는 공유 자원을 여러 스레드가 수정할 때 공유 자원의 일관성이 깨지는 상황을 말한다. 예를 들어 내 계좌에 1000원을 두 스레드가 동시에 입금하려고 한다고 가정해보자. 병렬로 스레드가 작업을 수행하고 위에서 부터 시간순으로 진행됨을 나타낸다.스레드 A가 남은 금액 조회 : 0원스레드 B가 남은 금액 조회 : 0원스레드 A가 남은 금액
문제 상황전세계의 프로 축구 선수를 관리하는 시스템을 만든다고 가정하자. 이 시스템에는 나라, 리그, 선수 이렇게 세가지 엔티티가 있다. 이 세 엔티티 모두 직접 참조는 되어 있지 않은 상태로 모두 물리적인 연관관계는 없다. 다만 리그가 나라를 id로 간접 참조하고, 선수가 리그를 id로 간접 참조하고 있다고 하자. 그렇다면 코드는 다음과 같을 것이다. 1
요약 JPA는 객체지향 언어인 자바와 데이터베이스의 구조가 달라서 생기는 문제를 개발자가 더 쉽게 해결할 수 있도록 돕는다.객체지향은 행동과 책임 중심으로 설계되고, 데이터베이스는 데이터 중심으로 설계된다.객체지향은 참조의 방향이 정해져있지만, 데이터베이스는 하나의 외래키로 양쪽 모두 참조 가능하다.동일성 비교를 객체는 인스턴스의 주소값으로 하고 데이터
요약 @Embeddable를 붙인 복합키 클래스를 만든다 엔티티 클래스에 @EmbeddedId를 통해 복합키 필드를 만든다. 이때 엔티티 클래스의 모든 매개변수를 받는 생성자를 만든다.이때 복합키 필드는 new로 객체를 초기화해준다. 문제 상황챌린지 테이블과 태그 테이블이 다대다 관계인 상황이다.이때 태그 테이블은 이름이 기본키이고, 챌린지 테이블은