환전 요청 관리 프로젝트 회고
·
프로젝트 회고
프로젝트 소개https://github.com/Seonu-Jeong/user-exchange-manage GitHub - Seonu-Jeong/user-exchange-manageContribute to Seonu-Jeong/user-exchange-manage development by creating an account on GitHub.github.com위 깃헙 링크를 통해 프로젝트 소개를 확인할 수 있습니다. 프로젝트 요구 사항Lv 0. API 명세 및 ERD 작성더보기API 명세서 작성하기API 명세서는 프로젝트 최상위 경로의 README.md 에 작성ERD 작성하기ERD는 프로젝트 최상위 경로에 README.md 에 첨부SQL 작성하기설치한 데이터베이스에 ERD를 따라 테이블 생성최상위 경로에..
Proxy
·
JPA
Entity 조회em.getReference( ) 는 JPA의 EntityManager에서 제공하는 메서드로 특정 엔티티의 프록시 객체를 반환한다. 지연 로딩(Lazy Loading)을 활용해 데이터베이스 조회를 미루고 실제로 엔티티의 속성에 접근할 때만 데이터베이스를 조회하도록 한다. Entity 조회위와 같은 연관관계를 가지는 Entity가 있다고 가정한다. tutor만 조회하는 경우Tutor findTutor = em.find(Tutor.class, 1L);String tutorName = findTutor.getName();System.out.println("tutorName = " + tutorName);tutor만 조회하는 경우 Company도 함께하기 때문에 낭비가 발생한다. 이것을 프록시를..
상속 관계 매핑
·
JPA
테이블 전략JPA에서 엔티티 상속 구조를 데이터베이스 테이블에 매핑하는 방법을 말한다. JPA는 엔티티의 상속 구조를 처리하기 위해 3가지의 테이블 전략을 제공한다. 각각의 전략을 데이터 저장 방식과 성능에 차이가 있으므로 프로젝트의 요구사항에 맞게 선택할 수 있다. 💡 참고관계형 데이터베이스의 테이블에는 상속 관계가 없다. 테이블로 클래스 상속관계 구현 방법위는 상속 관계에 있는 클래스들의 관계를 나타낸다. 이 관계를 테이블로 나타낼 수 있는 다양한 전략들에 대해 알아본다. 1. 조인 전략 각각에 대한 클래스를 테이블로 만들고 외래키로 연관관계를 구성한다. Product 테이블의 DTYPE(Book OR Coat)으로 어떤 테이블의 데이터인지 구분한다. 2. 단일 테이블 전략모든 정보를 가진 하나의 ..
N:M 연관관계
·
JPA
N:M 연관관계두 Entity가 @ManyToMany를 통해 서로 다수의 관계를 가진다. 객체와 데이터베이스의 N:M 연관관계객체객체는 Collection을 사용하여 N:M 설정이 가능하다 데이터베이스관계형 데이터베이스는 N:M 연관관계를 구현할 수 없다. 그래서 중간 테이블을 추가해서 1:N, N:1 관계로 만들어서 N:M 관계를 구현한다. N:M 단방향, 양방향코드 예시(단방향)@Entity@Table(name = "language")public class Language { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name;}@Entity@Table(name = ..
1:1 연관관계
·
JPA
1:1 단방향두 Entity가 @OneToOne 을 통해 연관 관계를 맺는 경우를 말한다. 1:1 연관관계 단방향 그림1:1은 두 entity 중 아무나 외래키의 주인이 될 수 있다.(요기서는 Tutor로 가정) 1:1은 외래 키에 유니크 제약조건이 필요하다 코드 예시@Entity@Table(name = "address")public class Address { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name;}@Entity@Table(name = "tutor")public class Tutor { @Id @GeneratedValue(strategy = G..
1:N 연관관계에서 1이 연관관계 주인일 때
·
JPA
1:N 단방향1:N 단방향이란 한 엔티티가 @OneToMany를 통해 여러 엔티티와 관계를 맺는 경우를 말한다. 이 경우 연관관계의 주인은 1에서 가지고 있다. 1:N 단방향 예시1의 Entity가 외래 키(FK)를 관리한다. ( Company entity가 연관관계의 주인이 된다) DB 입장에서는 설계상 항상 외래키가 N(Tutor) 쪽에 있어야 한다.하지만 현재 상황에서는 1(Company)이 N(Tutor)의 외래 키를 수정해야 한다. 코드 예시@Entity@Table(name = "tutor")public class Tutor { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private S..
Spring Formatter
·
스프링 프레임워크
Formatter주로 사용자 지정 포맷을 적용해 데이터 변환을 처리할 때 사용된다. Formatter는 ConversionService와 비슷한 목적을 가지지만 문자열을 객체로 변환하거나 객체를 문자열로 변환하는 과정에서 포맷팅을 세밀하게 제어할 수 있다. 객체를 특정한 포맷에 맞춰서 문자로 출력하는 기능에 특화된 것이 Formatter이다.Converter 보다 조금 더 세부적인 기능이라고 생각하면 된다. 공식문서 Spring Field Formatting :: Spring FrameworkAs discussed in the previous section, core.convert is a general-purpose type conversion system. It provides a unified Co..
ConversionService
·
스프링 프레임워크
ConversionServiceSpring은 Converter를 모아서 편리하게 관리하고 사용할 수 있게 해주는 기능을 제공한다. 이것이 ConversionService이다. ConversionService 인터페이스canConvert( ) 메서드로 Convert 가능 여부를 확인한다. convert( ) 메서드로 실제 변환을 수행한다. DefaultConversionServiceSpring의 표준 ConversionService로 기본 제공 Converter와 확장 가능성을 통해 다양한 타입 변환을 유연하게 처리할 수 있도록 지원한다. ConversionService를 구현한 구현체이다. ConverterRegistry에 다양한 Converter를 등록한다. ConverterRegistry는 Conve..
TypeConverter
·
스프링 프레임워크
타입 변환Spring에서 객체의 타입을 서로 변환하는 데 사용되는 인터페이스로 Spring의 데이터 바인딩 과정에서 문자열을 특정 객체로 변환하거나 하나의 객체 타입을 다른 타입으로 변환할 때 사용한다. 💡 참고문자를 숫자로, 숫자를 문자로 변환하는 등 Web Application을 만들다보면 Type을 변환해야 하는 경우가 많이 발생한다. 문자열을 숫자로HttpServeltRequest를 숫자로 변환예시@Slf4j@RestControllerpublic class TypeConverterController { @GetMapping("/param") public void param(HttpServletRequest request) { // 조회시 : String Str..
WebMvcConfigure
·
스프링 프레임워크
WebMvcConfigureSpring MVC의 설정을 사용자 정의할 수 있도록 제공되는 인터페이스이다. 이것을 구현하여 설정을 확장하거나 커스터마이징할 수 있다. WebMvcConfigurer의 코드public interface WebMvcConfigurer { default void configurePathMatch(PathMatchConfigurer configurer) { } default void configureContentNegotiation(ContentNegotiationConfigurer configurer) { } default void configureAsyncSupport(AsyncSupportConfigurer configurer) { } d..