본문 바로가기
반응형

전체 글202

[jpa] 프록시란 ? 프록시란 ? - 실제 엔티티 대신에 사용되는 객체로서, 원본 엔티티를 상속받는다. 그렇기때문에 타입체크시에 주의해야함. 프록시의 특징 - 프록시 객체는 처음 사용할때 한번만 초기화된다. - 프록시 객체를 초기화 할 때, 프록시 객체가 실제 엔티티로 변환되는것이 아니라 프록시 객체를 통해서 실제 엔티티 객 체에 접근이 가능한 것이다. - 영속성 컨텍스트에 실제 엔티티가 이미 존재한다면 getReference()를 호출해도 실제 엔티티를 반환 프록시 사용 - 지연로딩때 사용된다. 출처 : 인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 [김영한] 2020. 1. 5.
[JPA] @MappedSuperclass 특징 @Map@MappedSuperclass 특징 1. 상속관계 매핑이 아니다. 2. 조회가 불가능하다 3. 직접 생성해서 사용할일은 거의 없으므로 추상클래스로 만드는것을 권장한다. 4. 테이블과 관계없으며 여러엔티티에서 공통으로 사용하는 매핑정보를 모으는 역할을 한다. ※참고사항 : @Entity클래스는 @Entity나 @MappedSuperclass 로 지정한 클래스만 상속가능하다. 2020. 1. 2.
[JPA] 상속매핑 종류와 특성 조인전략 (정석) 장점 - 정규화가 되어있다 - 외래 키 참조 무결정 제약조건 활용가능 - 저장공간의 효율화 단점 - 조회시 조인을 사용하기때문에 쿼리가 복잡하며 성능이 저하 - 데이터 저장시 insert sql 2번 호출 (부모, 자식을 넣어야하기때문) 단일테이블 전략 장점 - 조인이 필요없으므로 조회성능 빠름 - 조회쿼리 단순함 단점 - 자식 엔티티의 컬럼 null 허용 - 단일 테이블에 모든것을 저장하므로 테이블이 커질수도 있으며 상황에 따라서 성능저하가 올 수 있다. 구현 클래스마다 테이블 전략 - 사용추천하지않음 2020. 1. 2.
[JPA] @DiscriminatorColumn 속성 상속관계 매핑을 할때 사용되는 속성이다. 예를들어 아래와같이 Book 엔티티와 MAGAZINE 엔티티가 ITEM 엔티티를 상속받을때 ITEM에 @DiscriminatorColumn 속성을 추가하게 된다면 DTYPE 속성이 추가되어 BOOK과 MAGAZINE중에 어느 엔티티때문에 추가가 되었는지 알 수 있다. 기본값으로 DTYPE에는 엔티티의 이름으로 추가가되는데 @DiscriminatorValue 어노테이션을 사용하게 된다면 사용자가 직접 설정할수도 있다. 예를들어 BOOK때문에 추가될때는 ByBook , MAGAZINE때문에 추가할때는 ByMagazine 이라는값으로 설정하고싶을때 @DiscriminatorValue("ByBook") @DiscriminatorValue("ByMagazine") 이런식으.. 2020. 1. 2.
[JPA] 일대일 매핑 외래키 관리 주 테이블에 외래키가 있는경우 장점 : 주 테이블만 조회해도 대상 테이블에 데이터가 있는지 없는지 판별가능 단점 : 외래키에 null값 허용 대상 테이블에 외래키가 있는경우 장점 : 관계를 1:1에서 1:N으로 변경할때 테이블 구조 유지 가능 단점 : JPA의 기본 프록시기능의 한계로 지연로딩으로 설정해도 항상 즉시로딩된다. 2020. 1. 1.
[JPA] 일대다 관계 설정시 주의사항 - 1:N 에서 1이 연관관계의 주인이 되는 설정인데 실제 테이블에서는 N쪽이 외래키를 가지고있음. 그렇기때문에 원치않는 update 쿼리가 추가로 실행될 수 있음 - @JoinColumn 을 꼭 사용해야한다. 그렇지않으면 중간테이블을 하나 생성해서 사용한다. 1:N 보다는 N:1 매핑을 사용하는것이 낫다! 2020. 1. 1.
[JPA] 양방향 연관관계 설정시 주의사항 1. 최대한 단방향으로 처리할것 (어쩔수 없는경우에만 양방향 연관관계 사용) 2. 주인을 외래키 있는곳으로 지정할 것 3. 양방향 매핑시 무한루프 주의 (toString, lombok, JSON 생성 라이브러리) → toString 사용자제 → lombok에서 toString 생성은 빼고 사용 → 데이터를 주고받을때 엔티티를 사용하지말고 DTO를 만들어서 사용하자 2019. 12. 31.
[JPA] spring.jpa.hibernate.ddl-auto=update 주의사항 컬럼추가시에는 추가가되지만 존재하던 컬럼 삭제시에는 적용되지않는다. 2019. 12. 26.
[spring boot] war 파일 생성 1. build.gradle파일 수정 2. SpringBootServletInitializer 상속 3. war 파일 생성 더블클릭하면 프로젝트경로\build\libs 에 war파일이 생성된다. 2019. 12. 23.
AWS 배포순서 1. AWS 가입 2. IAM 생성 --> IAM을 생성해서 사용하는것이 AWS의 권장사항 3. 인스턴스 생성 --> ubuntu로 생성했음 4. 탄력적 IP생성 -> 탄력적 IP연동 --> 탄력적IP를 생성해놓고 사용을 안한다면 요금이 나온다니 주의하자 (알아보다가 알게되었다.) 5. 리눅스에 JAVA, TOMCAT 설치 6. 배포 (spring boot war 파일생성) --> 파일들을 잘 못읽어보길래 경로처음에 /를 다 삭제해주었다. --> ex) /css/~~.css --> css/~~~~.css 로 변경 2019. 12. 23.
[spring boot] src/main/resources 접근하기 (org.thymeleaf.exceptions.TemplateInputException) src/main/resources 하위에 있는 main.html 에 접근하고 싶을때가 있을거다 src/main/resources 하위에 있는 main.html 에 접근하기 위하여 위와 같이 작성을 하고 실행을 하게되면 org.thymeleaf.exceptions.TemplateInputException 오류를 마주하게 될것이다. 해결방법은 간단하다. Gradle파일에 thymeleaf 설정을 해주기만 하면된다. 위와 같이 타임리프를 implementation 해준후 buile clean을 해준 후 다시 실행을 하면 정상적으로 작동한다! 2019. 12. 18.
[01] intellij gradle project 생성하기 2019. 12. 17.