OSIV이란?JPA의 OSIV(Open Session In View) 는 웹 요청이 시작될 때 영속성 컨텍스트(EntityManager)를 생성하고, 응답이 끝날 때까지 유지하는 패턴이다. OSIV 설정 방법 아래는 Spring Boot 환경에서 yaml 파일에 대한 설정 방법이고, Spring Boot에서는 기본적으로 OSIV가 활성화되어 있다.spring: jpa: open-in-view: trueOSIV가 필요한 이유 JPA의 연관관계가 LAZY 로딩일 때 문제가 발생할 수 있다.// 엔티티@Entitypublic class Order { @ManyToOne(fetch = FetchType.LAZY) private Member member;}// 서비스@Transactionalpu..
쿼리 메서드란? Spring Data JPA에서 제공하는 쿼리 메서드 기능은 메서드 이름만으로 SQL/JPQL 쿼리를 자동 생성해주는 기능이다. 즉, 개발자가 쿼리를 작성하지 않아도 Repository 인터페이스에 메서드 작성만으로 DB 조회가 가능하다. 메서드 이름 규칙 쿼리 메서드는 아래와 같이 메서드 이름 규칙으로 만들어야 실제 JPQL로 변경하여 사용할 수 있으며, 키워드 + Entity 필드명 + CamelCase을 정확히 맞춰서 작성해야한다.1. 조회 키워드findByreadBygetByqueryByfindByUsername(String username)// SELECT u FROM User u WHERE u.username = :username2. 조건 키워드Equals (생략 가능)IsNo..
일대다(1:N) 연관관계란? 일대다(1:N) 연관관계는 하나의 엔티티가 여러 개의 엔티티와 관계를 맺는 구조를 의미한다. 예를 들어 객체 구조에서 Team과 Member가 있을 때, 하나의 Team에는 여러 명의 Member가 속할 수 있고 각 Member는 하나의 Team에만 속하게 된다. 이러한 관계를 데이터베이스 테이블로 설계할 경우, 외래키는 항상 ‘다(N)’에 해당하는 쪽에 위치하게 되므로 Member 테이블에 Team의 기본키를 참조하는 외래키가 포함된다. 이때 일대다 연관관계에서 일 쪽에 외래키를 관리하며 연관관계의 주인이 된다. 예제 아래의 코드는 일대다 관계에서 일 쪽에 단방향 연관관계의 주인이 될 때 주의할 점이다.@Entitypublic class Member { @Id @..
원자적 연산이란? 원자적 연산이란 연산이 더 이상 나눌 수 없는 단위로 수행된 것을 의미한다. 즉 멀티스레드 상황에서 다른 스레드의 간섭 없이 안전하게 처리되는 연산이다.// 원자적 연산인 경우int i = 0;// 원자적 연산이 아닌 경우i = i + 1;i++; 위의 연산을 보면 i = 0은 둘로 쪼갤 수 없는 원자적 연산이다. 그에 반해 i = i + 1과 i++은 원자적 연산이 아니다. 왜냐하면 이 연산은 아래와 같이 나누어 실행되기 때문이다.i의 값을 읽는다. i의 값은 0이다.읽은 0에 1을 더해서 1을 만든다.더한 1을 i 변수에 대입한다. 원자적 연산이 아닌 경우 멀티스레드 환경에서 안전하게 연산을 수행할려면 임계 영역을 만들어야 할 경우 synchronized 블록이나 Lock 등을 사용..