본문 바로가기

전체 글

(97)
[JPA] 지연 로딩과 즉시 로딩 예를 들어 두 개의 엔티티 Member와 Team이 서로 연관관계에 있다고 가정하자 나는 Member만 조회하고 싶은데 Team과 연관 관계에 있다고 해서 같이 조회해야 할까? 만약 90퍼센트 이상이 Member를 조회할 때 Team도 조회해야 한다고 한다면 상관없겠지만 그렇지 않다면 굉장히 비효율 적일 것이다. 이것을 더 효율적으로 할 수 있는 것이 지연 로딩이다. 지연 로딩 연관관계 매핑할 때 fetch = FetchType.LAZY를 넣어주면 지연 로딩이 설정된다. 이렇게 하면 Team은 프록시 객체를 조회하게 되는데, 즉 Member클래스만 DB에서 조회하게 되는 것이다. 만약 Member와 Team의 연관관계 매핑 시 지연 로딩을 설정하지 않고 find를 통해서 Member를 조회하게 되면 원하..
윈도우에서 사용중인 포트 검색 및 특정 포트 죽이기 개발을 하다가 보면 가끔 사용중인 포트라고 하면서 실행이 되지 않을 때가 있다. 그럴때는 그 포트를 검색 및 죽이기를 한다. cmd창을 열고 죽이고 싶은 포트번호가 8080이라고 가정해 보자 > netstat -a -o -n PID번호를 기억한 후 >taskkill /F /PID 12296
Lombok 어노테이션 - Lombok 이란? Getter, Setter등 불필요하게 반복적으로 만드는 코드를 어노테이션을 통해 줄여 주는 역할. @Data - @ToString - @EqualAndHashCode - @Getter - @Setter - @RequiredArgsConstructor -- 생성자를 생성해주는 어노테이션 @NoArgsConstructor : 파라미터 값이 없는 빈 생성자 @AllArgsConstructor : 모든 파라미터를 받는 생성자 @RequiredArgsConstructor : final이나 @NonNull이 붙은 변수들을 가진 생성자를 생성
CamelCase와 snake_case(네이밍 문법) 네이밍 문법이란? 컴퓨터가 띄어쓰기를 인식하지 못하기 때문에 이어진 두 단어의 구분을 쉽게 하기 위해서 생겨난 것인데 CamelCase와 snake_case가 있다. CamelCase란? 단어가 합쳐진 부분마다 맨 처음 글자를 대문자로 표기하는 방법이다. CameCase는 쌍봉낙타의 등과 닮았다고 하여 붙여진 이름인데 lowerCamelCase와 UpperCamelCase로 나뉠 수 있다. ※ loserCamelCase => 맨 앞글자를 소문자로 표기하고 뒤에 따라붙는 단어들의 앞글자를 대문자로 표기한다. username -> userName orderstatus -> orderStatus camelcase -> camelCase ※ UpperCamelCase => 맨앞글자로 뒤에 따라붙는 단어들의 앞글..
[JPA] 프록시란? 예를 들어) Member와 Team이 연관 관계를 가지고 비즈니스 로직을 설계할 때 member의 내용만 가져오고 싶어서 코드를 작성했더니 실제 쿼리에서는 Member와 Team 둘 다 가져오는 쿼리가 나가게 되기 때문에 이것을 최적화라고 볼 수 없다... 이것을 해결하기 위해 지연로딩을 설정해야 하는데 지연 로딩을 이해하기 위해서는 프록시를 이해하는 것이 우선이다. 프록시 DB에서 데이터를 조회하는 방법으로 find와 getReferece가 있다. - em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 - em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 즉, 결론적으로 디비에 쿼리가 안 나가는데 조회가 되는 것이다. 실제로 조회 (사용되는 시..
상속관계 매핑 상속관계 매핑 1. 조인 전략 -> 각각 테이블로 변환 2. 통합 테이블로 변환 -> 단일 테이블 전략 3. 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 주요 어노테이션 - @Inheritance(strategy=InhertanceType.XXX) - JOINED: 조인 전략 - SINGLE_TABLE: 단일 테이블 전략 - TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 - @DiscriminatorColumn(name = "DTYPE") - @DiscriminatorValuue("XXX") 예시로 아래의 그림같이 Item에 Album과 Movie, Book이 상속된다고 가정하자 1. 조인 전략 - 테이블을 정규화하며 저장공간을 효율화 하지만 조회 시 조인을 많이 사용하여 성능을..
연관관계 매핑 회원과 팀이 다대일 관계에 있다고 가정 객체를 테이블에 맞추어 모델링(식별자로 다시 조회, 객체 지향적인 방법 X) - 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. - 객체는 참조를 사용해서 연관된 객체를 찾는다. 단방향 연관관계 양방향 연관관계와 연관관계의 주인 양방향으로 연관관계를 설정하면 반대 방향으로 객체를 탐색해도 가능하다. 연관관계의 주인과 mappedBy 양방향 매핑 규칙 - 객체의 두 관계 중 하나를 연관관계의 주인으로 지정 - 연관관계의 주인만이 외래 키를 관리(등록, 수정) - 주인이 아닌 쪽은 읽기만 가능 - 주인은 mappedBy 속성 사용 x - 주인이 아니면 mappedBy 속성으로 주인 지정 - 외래 키가 있는 곳을 주인으로 지정 연관관계 주인이 아닌 곳에서 처..
엔티티 매핑 @Entity JPA를 사용해서 테이블과 매핑할 클래슨는 @Entity 필수( 기본 생성자 필수 ) 데이터베이스 스키마 자동 생성 create 기존테이블 삭제 후 다시 생성(DROP + CREATE) create-drop create와 같으나 종료시점에 테이블 drop update 변경분만 반영 validate 엔티티와 테이블이 정상 매핑되었는지만 확인 none 사용하지 않음(주석처리) 결과>> 기존 테이블을 drop하고 다시 create한다. 매핑 어노테이션 정리 @Column 컬럼 매핑 @Temporal 날짜 타입 매핑 : LocalDate, LocalDateTime 사용 시 생략 가능 @Enumerated enum 타입 매핑 : ORDINAL, STRING이 있는데 ORDINAL은 사용 X @Lob..