본문 바로가기
728x90

Programming/Spring25

[JPA] 상속관계 매핑 관계형 데이터베이스는 상속관계 x 부모만 @Id를 가진다, @Entity는 모두 가진다 슈퍼타입, 서브타입이 객체 상속과 비슷하다 전략 조인전략 : 각각의 테이블을 조인 테이블 정규화 외래키 참조 무결성 제약조건 활용 가능 저장 공간 효율화 조회시 조인 사용하여 성능저하 데이터 저장시 Insert 쿼리 두번 이상 사용 정석!!!, 설계 깔끔!!!, 조인만 잘하면 되지!!! 중요하고 복잡한 비즈니스 로직!!! 단일테이블 전략 : 통합 테이블에서 단일 테이블로 = 성능좋다 조인이 없어서 빠른 성능 단순한 조회쿼리 자식 엔티티가 매핑한 컬럼은 모두 null 허용 테이블이 커질 수 있다 ⇒ 조회가 느려질 수도 있다 확장 가능성 없을 때!!! ~~클래스마다 테이블 전략 :구현 클래스마다 테이블~~ 슈퍼클래스 : .. 2021. 3. 4.
[JPA] 엔티티타입 vs 값타입 종류 엔티티 타입 @Entity PK를 가진다 데이터가 변해도 식별자로 계속 추적가능한 것 값 타입 int, string... PK가 없다 (값 그 자체이므로...) 기본값 타입 (int, Integer, String...) 임베디드 타입 (사용자가 정의한다) 컬렌션 타입 (사용자가 정의한다) 1. 기본값 int, String 등의 기본타입 절대 공유되어서는 안되고 복사만 가능 immutable해야한다 2. 임베디드 타임 class Line { @Embedded private Sections sections; } @Embeddable class Sections { private List sections } embed된 객체의 멤버만 가져와서 사용 그냥 엔티티의 값이다 장점 재사용 가능하다 응집도가 높아진.. 2021. 3. 3.
톰캣 엑세스 로그 설정 application.yml 로그 파일이 생성될 위치를 설정한다 server.tomcat.basedir:/var/log/ AccessLoggingConfig 로깅 파일의 내용과 제목 등을 설정한다 @Configuration public class AdminAccessLogConfig implements WebServerFactoryCustomizer { @Override public void customize(WebServerFactory factory) { final TomcatServletWebServerFactory containerFactory = (TomcatServletWebServerFactory) factory; final AccessLogValve accessLogValve = new A.. 2021. 2. 24.
스프링부트 @CreatedDate 직접 만들어 보기 오늘은 Entity를 데이터에 저장 시, 시간 정보를 자동으로 입력해주는 @CreatedAt를 직접 구현해보았습니다. 순수 도메인 로직의 테스트 코드를 작성하면서 Entity 객체에 @CreatedDate가 있는지 모르고 객체를 생성하여 null을 보고선 문득 내부적으로는 어떻게 동작을 하는지 궁금해졌습니다. 소스코드는 github에서 찾으실 수 있습니다. 1. 코드 검색을 해본 결과 stack overflow에서 원하던 답변을 찾을 수 있었습니다. 결론만 말하자면, Entity가 영속성 컨테스트에 의해 저장되기 전에 @PrePersist라는 콜백에 의해 객체에 직접 날짜를 입력하는 방법을 사용하고 있었습니다. 코드를 보면 아래와 같습니다. 먼저 Person이라는 클래스를 생성합니다. @ToString .. 2021. 1. 26.
Docker에서 MySQL 데이터 연동하기 1. Docker에서 MySQL 실행 docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_DATABASE=db -e MYSQL_USER=user -e MYSQL_PASSWORD=1234 -v /Users/byeonggilpark/Desktop/db:/var/lib/mysql --name mysql mysql:5.7 --character-set-server=utf8 --collation-server=utf8_unicode_ci자세한 옵션들은 docker 공식 홈페이지의 mysql에서 확인 가능합니다 -d : 백그라운드에서 실행 -p : 포트 설정 -e : 환경변수 설정 -v : 볼륨 설정 (mysql의 데이터 저장소 설정) -name : 컨테이.. 2020. 11. 29.
QueryDSL 설정 이번 시간에는 QueryDSL 설정에 대해 알아보겠습니다. QueryDSL 설정 글이 있는데 각 설정들이 어떤 역할을 하는지에 대한 설명은 보이지 않은 것 같아서 정리를 한번 해보았습니다. 먼저 전체 코드를 보여드리고 각 부분에 대해 설명해보도록 하겠습니다. 전체 코드 build.gradle // 1. 플러그인 설치 buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" // 플러그인의 저장소 } } dependencies { classpath "gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.10" // 플러그인 디펜던시 } } apply plugin: "com.ewer.. 2020. 11. 28.
728x90