
@MappedSuperclass는 자식 클래스의 공통 매핑 컬럼 정보를 제공하는 어노테이션이다. 예를 들어 여러 테이블에서 생성 일시와 수정 일시 컬럼을 사용하려고 할 때, 생성되는 클래스에 동일한 날짜 필드를 매번 추가해줘야 한다. 이러한 중복을 공통화하기 위해 @MappedSuperclass를 사용한다. 해당 어노테이션이 붙은 클래스를 상속받아서 컬럼을 사용할 수 있다. @MappedSuperclass abstract class BaseEntity { @Column(name = "created_at") private LocalDateTime createdAt; @Column(name = "modified_at") private LocalDadteTime modifiedAt; protected Base..

Spring boot에서 통합 테스트를 진행하다가 아래 코드에서 에러가 발생했다. Error while extracting response for type [class com.tistory.rjvv.learntest.exception.format.ErrorResponse] and content type [application/json] org.springframework.web.client.RestClientException: Error while extracting response for type [class com.tistory.rjvv.learntest.exception.format.ErrorResponse] and content type [application/json] 내가 만든 ErrorRes..

grep의 종류 grep의 종류는 egrep, fgrep, grep 세 가지가 있습니다. egrep은 정규표현식을 활용해서 문자열들을 찾는 명령어입니다. fgrep은 문자열 그대로를 활용해서 문자열들을 찾는 명령어입니다. grep은 -E, -F 옵션으로 egrep과 fgrep을 대체할 수 있는 명령어입니다. grep 옵션들 옵션이 너무 많기 때문에 주로 사용되는 옵션을 추려서 작성했습니다. -A [n] : 일치하는 문자의 후행 컨텍스트를 n줄 출력합니다. -B [n] : 일치하는 문자의 전행 컨텍스트를 n줄 출력합니다. -C [n] : 일치하는 문자의 전후행 컨텍스트를 n줄 출력합니다. "-A n -B n"과 같습니다. -c : 일치하는 문자의 개수를 출력합니다. -E : 확장된 정규표현식을 사용할 수 ..

파일 찾기 which description which는 명령어 이름 목록을 확인하고 경로를 출력해 줍니다. (환경 변수 Path에 등록된 실행 가능한 모든 명령어 파일들) synopsis which [-as] program ... option -a : 기본적으로 파일을 하나만 리턴하지만, 해당 옵션으로 모든 파일의 경로를 반환합니다. (all) -s : 명령어 파일을 찾으면 0, 찾지 못하면 1을 반환합니다. (s..?) whereis descripton whereis는 표준 바이너리와 매뉴얼 페이지 디렉터리를 확인하고 찾은 모든 경로를 출력합니다. 표준 바이너리는 환경 변수 PATH에 등록된 실행 가능한 모든 파일들을 기준으로 검색 메뉴얼 페이지는 $MANPATH에 등록된 모든 파일들을 기준으로 검색 ..

오늘의 목표는 상속관계 매핑이 무엇이고, 어떤 테이블 전략이 있는지에 대해 이해하는 것을 목표로 한다. 상속 관계 매핑 관계형 데이터베이스에는 상속 관계라는 것이 없고, 슈퍼 타입과 서브 타입이라는 논리적 개념을 가지고 있다. 이러한 개념을 객체 지향 프로그래밍의 상속 관계에 매핑하는 것을 상속 관계 매핑이라고 한다. 슈퍼 타입과 서브 타입을 실제 물리적 모델로 구현하는 방법은 다음과 같다. 조인 전략 - 자식 테이블이 부모 테이블의 기본키를 받아서 pk+fk로 사용하는 전략 단일 테이블 전략 - 테이블 하나에 모든 데이터를 담는 전략 구현 클래스 별 테이블 전략 - 부모 테이블의 컬럼 모두 자식 테이블에 담아 각각의 테이블로 사용하는 전략 각각의 전략에 따라 어떻게 JPA를 활용할 수 있는지에 대해서 ..

오늘은 JPA의 연관관계 종류에 대해 이해하는 것을 목표로 한다. 시작하기 전에 테이블은 방향이 없다. 외래 키로 조인하면 양쪽 테이블을 확인할 수 있다. 객체는 방향이 있다. A 객체에 B 객체와의 조인 설정을 해주어도 B객체에서는 A객체를 확인할 수 없다. 이로 인해 JPA에서는 방향성이라는 개념이 존재한다. 다대일 단방향 연관관계의 주인이 다인 경우 기존 테이블의 설계와 같이 JoinColumn이 다에 있고, 일에는 다를 참조할 수 있는 객체가 없는 경우를 다대일 단방향 연관관계라고 할 수 있다. 다대일 양방향 다대일 단방향 연관관계에서 일에서도 다를 참조할 수 있도록 읽기 객체를 추가(mappedby)한 경우를 다대일 양방향 연관관계라고 할 수 있다. 위와 같이 작성했을 때 1차 캐시에는 team..

여러 기술을 공부하면서 `논블록킹 I/O 기반`, `비동기 처리`와 같은 표현을 쓰곤 하는데, 스스로 정리가 잘 안되어 정리해보는 글이다. 나는 synchronous blocking / asynchronouse blocking 등 다양한 표현이 있다는 것도 최근에 알게 되었다. Synchronous와 Asynchoronous 동기라는 사전적 의미는 다음과 같다. happening, existing, or arising at precisely the same time 정확히 같은 시간에 발생, 존재하는 것 실제 사전적 의미는 컴퓨터 공학의 동기가 명확하게 표현되지는 않는 것 같아 다른 의미를 찾아보았다. having the same period, also : having the same period and..

실무에서 javax.validation의 어노테이션을 주로 사용했는데, 궁금한 점이 생겨서 간단하게 javax.validation을 의존성에 추가해줬다. javax.validation validation-api 2.0.1.Final @PostMapping("/send") public ResponseEntity send(@RequestBody @Valid Letter letter) { return ResponseEntity.ok(letter); } @Getter class Letter { @NotNull private String from; @NotBlank private String to; @Size(min = 10, max = 1000) private String contents; public Lett..

원칙들은 만병통치약이 아니므로 모든 디자인 문제점들을 해결해줄 수는 없다. 하지만 객체지향 생활체조의 주요 목적이 특정 SOLID 원칙을 적용하기 위함이기 때문에, 이를 적용하면 보다 clean, flexible, agile, reusable 한 코드를 작성할 수 있다 - Jeff Bay 1. Use only one level of indentation per method 메서드는 하나의 역할만 담당해야한다. 코드 라인 수가 줄어드는 것은 아니지만 가독성이 향상된다. 함수를 더 작게 나누는 습관을 들일 수 있다고 생각한다. 2. Don’t use the else keyword but, use early return if-else에 해당하는 모든 로직을 수정하는 것보다, 조건을 추가하는 것이 리팩토링 시 ..

MapStruct org.mapstruct package 안에 있는 매핑 라이브러리이다. 이 녀석도 아주 강력한 기능을 제공하는데, 어노테이션 기반으로 작성하기에 Spring을 했다면 더 쉬워지는 라이브러리이다. 특히, 리플렉션을 사용하지 않기 때문에 다른 동적 맵핑보다 시간 절약성, 컴파일 시간 안전성, 오류 내용 확인성 등에서 높은 우위를 가진다. 나는 MapStruct를 설정하는 과정이 귀찮기도 하고 lombok 어노테이션과 순서를 맞춰야 한다는 제약 때문에 그냥 사용하기 싫어진다... 설정 4.0.0 org.mapstruct mapstruct 1.4.2.Final org.projectlombok lombok 1.18.22 17 17 1.4.2.Final 1.18.22 org.apache.maven..