멀티모듈 프로젝트에서 공통으로 필요한 코드는 모듈로 분리된다. 공통적으로 사용하는 코드를 한 모듈에서 관리하여 유지보수성이 크게 올라가기 때문이다.현 프로젝트의 경우 엔티티(DTO)는 core 모듈에서 서비스는 service 모듈에서 관리가 된다.외부 모듈에 있는 클래
JPA Repository 빈을 활성화하는 어노테이션
EnumType에는 총 두 가지 타입이 있다.EnumType.STRING : 각 Enum 이름을 컬럼에 저장한다. ex) G, PG, PG13..EnumType.ORDINAL : 각 Enum에 대응되는 순서를 칼럼에 저장한다. ex) 0, 1, 2..STRING, En
Spring에서 Controller 중 View로 응답하지 않는, Controller를 의미한다.method의 반환 결과를 JSON 형태로 반환한다.이 Annotation이 적혀있는 Controller의 method는 HttpResponse로 바로 응답이 가능하다.@R
함수의 네임스페이스일 뿐이다. 인스턴스는 존재할 수 없으며 모든 구성원은 정적이다.유틸리티 클래스는 인스턴스화할 수 없다. 로 클래스를 표시 @UtilityClass하면 lombok은 예외를 발생시키는 private 생성자를 자동으로 생성하고 추가한 명시적 생성자를 오
@EmbeddedId는 결합 된 pk가 의미있는 엔티티 자체이거나 코드에서 재사용 될 때 의미가 있음을보다 분명하게 전달한다.필수복합키를 정의한곳에 @Embeddable 어노테이션을 붙여준다.@Entity 선언한 곳에서 선언해야한다.Public 이어야한다.equals를
정보들은 자바빈즈패턴처럼 받되, 데이터 일관성을 위해 정보들을 다 받은 후에 객체를 생성한다.빌더패턴을 적용하면 다음과 같은 장점이 있다.불필요한 생성자의 제거데이터의 순서에 상관없이 객체생성 가능명시적 선언으로 이해하기가 쉽고각 인자가 어떤 의미인지 알기 쉽다.set
데이터를 주고 받을 때 해당 데이터는 Ignore되어서 응답값에 보이지 않게 된다.
두 가지 EnumType이 존재한다.EnumType.ORDINAL : enum 순서 값을 DB에 저장EnumType.STRING : enum 이름을 DB에 저장Gender.MALE 값으로 셋팅으로 셋팅했을 때
Spring Boot 에서 .properties나 .yml 파일에 있는 property를 자바 클래스에 값을 바인딩하여 사용할 수 있게 해주는 annotationSpring Boot에서는 운영에 필요한 정보를 프로퍼티 파일에서 Key-Value 형태로 저장하여 관리한다
@Repository 어노테이션이 붙어있을 때 사용SimplaJpaRepository.save(S entity) 메서드save() 내부 구현에서는 파라미터로 들어온 entity가 새로운 엔티티라면 persist를 호출하고 아니라면 merge한다.merge는 보통 det
빌더 패턴(Builder pattern)생성자를 통해 객체를 생성하는데 몇 가지 단점이 있어 객체를 생성하는 별도 builder를 두는 방법이 있다. 이를 빌더 패턴이라고 한다.객체를 생성할 수 있는 빌더를 builder() 함수를 통해 얻고 거기에 셋팅하고자 하는 값
@GeneratedValue(strategy = GenerationType.IDENTITY)기본 키 생성을 데이터베이스에 위임즉, id 값을 null로 하면 DB가 알아서 AUTO_INCREMENT 해준다\#1
@MappedSuperclass객체의 입장에서 공통 매핑 정보가 필요할 때 사용한다.id, name은 객체의 입장에서 볼 때 계속 나온다.이렇게 공통 매핑 정보가 필요할 때, 부모 클래스에 선언하고 속성만 상속 받아서 사용하고 싶을 때 @MappedSuperclass를
만약 궁금하다면 @PrePersist, @PostPersist, @PreUpdate, @PostUpdate 키워드로 찾아볼 것생성일/수정일/생성자를 자동화할 때 사용하는게 바로 JPA AuditingSpring Data JPA 에서 JPA 를 사용하기 위해서는 Spri
DDD에서는 왜 간접 참조를 더 권장할까? -> Article과 Comment 관계 같은 경우에도 간접 참조가 옳은걸까? 에서 시작되었다. Aggreegate는 lifecycle 같은 연관된 객체들의 집합이지만 실무에서는 확장성을 고려해 간접참조를 개발하고 시작하는 경
추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다.인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상되는 효과를 볼 수가 있다.개념보다는 사용하는 개발자의 입장에
연동테스트 도중 알게된 이슈였는데 최초 개발 후 테스트에서는 아무 이슈가 없었는데 조회가 잘되어 모르고 있었는데 다음 연동테스트에서 500 ERROR가 발생했다.java.lang.UnsupportedOperationException: null이 예외는 변경 불가능한(i