본문 바로가기

반응형

Spring

(53)
연관관계 관리 (즉시 로딩과 지연 로딩) 즉시 로딩 (EAGER) JPA 구현체는 가능하면 조인을 사용하여 SQL 한 번에 함께 조회해온다. 그러나 비즈니스 로직 상, 필요없는 연관 데이터까지 조회할 경우 비효율적임 또한, 즉시 로딩을 적용하면 예상하지 못한 SQL이 발생한다. 또한, JPQL에서 N+1 문제를 일으킨다. 따라서 가급적 지연 로딩을 사용하도록 ( 실무에서는 즉시 로딩은 쓰지 말고 지연 로딩을 적용을 고려할 것 ) @ManyToOne, @OneToOne은 기본이 즉시 로딩 이기 때문에 LAZY로 추가 설정해야 함 @OneToMany, @ManyToMany는 기본이 지연 로딩 public class JpaMain { public static void main( final String[] args ) { EntityManagerFac..
Transaction Transaction 이란, 더 이상 나눌 수 없는 작업 단위(unit of work)을 말한다. ACID Atomicity transaction의 작업이 부분적으로 성공하는 일이 없도록 보장하는 성질이다. 송금하는 사람의 계좌에서 돈은 빠져나갔는데 받는 사람의 계좌에 돈이 들어오지 않는 일은 없어야 한다. Consistency transaction이 끝날 때 DB의 여러 제약 조건에 맞는 상태를 보장하는 성질이다. 송금하는 사람의 계좌 잔고가 0보다 작아지면 안 된다. Isolation transaction이 진행되는 중간 상태의 데이터를 다른 transaction이 볼 수 없도록 보장하는 성질이다. 송금하는 사람의 계좌에서 돈은 빠져나갔는데 받는 사람의 계좌에 돈이 아직 들어가지 않은 DB 상황을 다..
Restful API REpresentational State Ttransfer 구성 요소와 데이터 요소에 적용되어 구현을 간소화하고, 복잡성을 줄이며 퍼포먼스 향상에 도움을 주는 일련의 제약 사황이 있는 새로운 웹용 아키텍펴 스타일을 노출하는 방법. SOAP (SimpelObjectAccessProtocol) HTTP 표준 메서드 GET 리소스를 얻는다 POST 리소스를 생성한다 PUT 리소스를 수정한다 DELETE 리소스를 삭제한다 RESTful API의 특징 json, xml, images, atom 과 같은 데이터용 인터넷 미디어 타입 사용 https://juns.com/resoures/ 같은 베이스 URI 레퍼런스 상태에 대한 하이퍼링크 레퍼런스 리소스에 대한 하이퍼링크 HTTP 표준 메서드 (GET/POST/PUT..
다국어 처리하기 다국어를 처리하는 여러가지 방법 중 쿠키를 이용하는 방법을 알아보자. Spring LocaleResolver HTTP request를 통해 host로 접속 시에 browser의 cookie의 ip를 가지고 locale 정보를 확인한다. package org.springframework.web.servlet; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Interface for web-based locale resolution strategies that allows for * both locale resolution via the..
getting started with Spring Boot Spring Boot 소개 https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-introducing-spring-boot 제품 수준의 Application을 빠르고 쉽게 만들 수 있게 해주는 그들의 주관적인 의견이 들어가서 third-party 라이브러리(tomcat ,,, )를 제공하는 프레임워크 Spring Boot Project 시작하기 1. maven project 생성 pom.xml 수정하여 의존성 추가하기 https://docs.spring.io/spring-boot/docs/2.2.4.RELEASE/reference/html/getting-started.html#ge..
JPA 데이터 타입 entity type @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 앤티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변셩시 추적 불가 10 -> 20으로 변경하면 값이 완전히 대체 값 타입 분류 1. 기본값 타입 자바 기본 타입 (int, double) 래퍼 클래스 (Integer, Long) String 특징 - 생명주기를 엔티티에 의존 - 값 타입은 공유하면 안됨 기본 타입은 항상 값을 복사함, 둘은 전혀 다른 주소 공간을 사용 ex> 화원 이름 변경시 다른 회원의 이름도 함께 변경되면 안됨 (side effect) - Integer..
영속성 전이 CASCADE 영속성 전이 CASCADE 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들도 싶을 때 사용하는 기능 @Entity public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany( mappedBy = "parent" ) private List childList = new ArrayList(); } @Entity public class Child { @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn( name = "parent_id" ) private Parent parent; } Pare..
proxy Why proxy? Member를 조회할 때 team도 데이터베이스에서 함께 조회해야 할까? 만약, 비즈니스 로직 상, 맴버를 조회할 때, 그 맴버와 연관된 팀 정보도 함께 조회해야한다면, 팀 데이터까지 조회해야하지만, 그것이 아니라면, 굳이 팀 정보를 가져오는 것은 성능 상 불리할 수 있다. 비즈니스 로직에 의해 유동적일 수 있는 이러한 사항을 JPA는 프록시와 지연로딩을 통해 해결한다. JPA에서 제공해주는 두가지 메소드 1. em.find() 데이터베이스를 통해서 실제 엔티티 객체 조회 ( quary가 실행됨 ) 2. em.getReference() 데이터베이스 조회를 미루는 가짜(프록시)엔티티 객체를 조회( 디비에 quary를 실행하지 않음 ) getReference 메서드는 조회가 필수적으로 필..

반응형