OSIVOSIV (Open Session In View = Open EntityManager In View) : 최초 데이터베이스 커넥션 시작 시점부터 응답이 끝날 때까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지하는 것.API의 경우 API가 유저에게 반환될 때까지 / 화면의 경우 화면을 렌더링할 때까지 영속성 컨텍스트를 유지시킨다. 지연 로딩을 가능하게 하는 기능지연 로딩은 영속성 컨텍스트가 살아있어야 가능하고 영속성 컨텍스트는 기본적으로 데이터베이스 커넥션을 유지한다.단점 - 오랜시간동안 데이터베이스 커넥션 리소스를 사용하기에 실시간 트래픽이 중요한 애플리케이션에서는 커넥션이 모자랄 수 있고 장애로 이어진다.ex) 컨트롤러에서 외부 API를 호출하면 외부 API 대기 시간만큼 커넥션 리소스를 반환..
컬렉션 조회 최적화@Dataprivate class OrderDto { //주문 DTO private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; private List orderItems;}DTO 설계 시 DTO 내부에도 엔티티가 존재하면 안된다.DTO 내부에 존재하는 엔티티 조차도 모두 필요한 데이터만을 가지고 DTO 형태로 만들어야 한다. 일대다 관계에서 페치 조인해서 조회하는 경우 ex) Member(N) - Team(1) 연관관계, Team1(Member1, Member2), Team2(Member3, Member..
지연 로딩과 조회 성능 최적화public class Member { ... @ManyToOne(fetch = LAZY) @JoinColumn(name = "team_id") private List team = new ArrayList();}public class Team { ... @JsonIgnore @OneToMany(mappedBy = team) private Member member;}엔티티를 외부에 직접 노출할 때, 양방향 연관관계가 걸린 곳은 Json 타입으로 데이터를 가져올 때 한 쪽 연관관계에 반드시 @JsonIgnore를 사용해야 한다.그렇지 않으면 Json 생성 시 서로 계속 참조하게 되면서 무한 루프에 빠지게 된다.엔티티를 외부에 직접 노출시키지 않는 것이 가장 좋다.ex) M..
API 개발API tool - postman API 개발 시 템플릿 엔진(화면) 사용하는 Controller와 API를 사용하는 Controller를 패키지를 통해 분리하는 것이 좋다.공통 처리를 할 때 패키지 단위로 많이 하는데 화면과 API는 공통 처리해야 할 부분이 많이 다르기 때문 @ResponseBody : 자바 객체를 json 기반의 HTTP Body로 변환한다.주로 데이터 자체를 바로 Json을 XML로 보낼 때 사용한다.@RequestBody : json 기반의 HTTP Body를 자바 객체로 변환한다.@RestController : @Controller + @ResponseBody 어노테이션을 합친 어노테이션이다.@Data : @Getter, @Setter, @ToString, @Equa..