2022-03-10-TIL TIL Today I Learned 연관관계 테이블 연관관계를 맺는 테이블이 있는게 나을까? 아니면 그냥 외래키를 두어서 참조하는 형태가 나을까? 관계의 다중성에 따라 답이 갈린다. 일대다 관계는 “다” 쪽 테이블에 외래 키를 두는 것으로 충분하고, 별도 관계 테이블을 두면 조인만 하나 늘어난다. 다대다 관계는 관계형 테이블 두 개로 직접 표현할 수 없... 2022/03/10 2022-TIL
2022-03-08-TIL TIL Today I Learned @OneToOne with @PrimaryKeyJoinColumn vs @MapsId 일대일 관계를 매핑하는 방법은 외래 키 컬럼을 두는 방법, 조인 테이블을 쓰는 방법, 그리고 자식 테이블의 기본 키를 부모의 기본 키와 공유하는 방법이 있다. 마지막 방법(shared primary key)을 JPA에서 표현할 때 @P... 2022/03/08 2022-TIL
2022-03-07-TIL TIL Today I Learned Convert Entity to DTO 컨트롤러가 JPA 엔티티를 그대로 응답으로 내보내면 몇 가지 문제가 생긴다. 엔티티 필드가 바뀔 때마다 API 응답 형식이 함께 바뀌고, 지연 로딩(lazy loading) 연관 필드가 직렬화되면서 예상치 못한 쿼리나 예외가 생길 수 있으며, 노출하면 안 되는 필드까지 나갈 수 있... 2022/03/07 2022-TIL
2022-03-06-TIL TIL Today I Learned JPA vs MyBatis JPA는 객체와 테이블을 매핑해 두고 엔티티를 조작하면 SQL이 생성되는 ORM 표준이고, MyBatis는 개발자가 쓴 SQL의 파라미터와 결과를 객체에 매핑해 주는 SQL 매퍼다. JPA는 단순한 CRUD와 도메인 모델 중심 개발에서 반복 코드를 크게 줄여 주지만, 영속성 컨텍스트, 지연 로... 2022/03/06 2022-TIL
2022-03-03-TIL TIL Today I Learned DTO의 사용범위 정해진 규칙은 없지만 DTO는 컨트롤러에서 request, response의 용도로 사용하며, 서비스 계층으로 내려가는 dto의 경우 SomethingDto 정도로 네이밍 하면 좋을 것 같다. 즉, 컨트롤러에서만 사용하는 DTO와 서비스에서도 사용되는 DTO를 구분하는게 좋다. 레파지토리에서는 JPA... 2022/03/03 2022-TIL
2022-03-02-TIL TIL Today I Learned Spring Boot Admin Spring Boot Admin은 codecentric이 만든 오픈소스로, Spring Boot Actuator 엔드포인트를 웹 UI로 모아 보여 주는 관리 도구다. Admin 서버를 하나 띄우고 각 애플리케이션이 클라이언트로 등록하거나(또는 Eureka 같은 서비스 디스커버리로 찾게 하... 2022/03/02 2022-TIL
2022-03-01-TIL TIL Today I Learned Spring Cloud Feign Feign은 HTTP API 호출 코드를 인터페이스 선언만으로 만들어 주는 선언형 HTTP 클라이언트다. RestTemplate으로 URL을 조립하고 응답을 변환하는 코드를 매번 쓰는 대신, 인터페이스에 애너테이션을 붙이면 구현체가 런타임에 생성된다. Spring Cloud OpenF... 2022/03/01 2022-TIL
2022-02-27-TIL TIL Today I Learned MapStruct MapStruct는 DTO와 엔티티처럼 모양이 비슷한 객체 사이의 매핑 코드를 생성해 주는 자바 애너테이션 프로세서다. 매퍼 인터페이스에 매핑 메서드를 선언하면 컴파일 시점에 구현 클래스가 만들어진다. 레퍼런스 문서에 따르면 생성된 코드는 리플렉션 없이 일반 메서드 호출로 값을 옮기므로 빠르고, 매핑할... 2022/02/27 2022-TIL
2022-02-26-TIL TIL 2022-02-26-TIL Today I Learned 리액티브 프로그래밍 리액티브 프로세싱 먼저 리액티브 프로세싱이란, 개발자로 하여금 논블로킹, 비동기 애플리케이션을 빌드할 수 있게끔 하여, 해당 애플리케이션이 back-pressure를 다룰 수 있게 하는 것이다. (플로우 컨트롤) Back-pressure Back-pressure는 또... 2022/02/26 2022-TIL
2022-02-24-TIL TIL Today I Learned 특정 문자열로 시작하는 파일 지우기 가장 간단한 방법은 셸의 패턴 매칭(glob)을 쓰는 것이다. Bash 매뉴얼에 따르면 *는 빈 문자열을 포함한 아무 문자열에나 매칭된다. 패턴은 rm이 아니라 셸이 먼저 파일 이름 목록으로 펼친 뒤 rm에 넘긴다. ls report_* # 먼저 무엇이 지워질지 확인한다... 2022/02/24 2022-TIL