[JPA] 연관관계 매핑
·
JPA
연관관계 매핑시 고려사항 세가지가 있다.다중성단방향, 양방향연관관계 주인하나씩 차례로 알아보자.  1. 다중성JPA에서 제공하는 어노테이션은 전부 다 DB와 매핑하기 위해 제공한다. 다대일(@ManyToOne)일대다(@OneToMany)일대일(@OneToOne)다대다(@ManyToMany) 2. 단방향 양방향테이블 외래키 하나로 양쪽 조인 가능하다. 그래서 사실 방향이라는 개념이 없다.하지만 객체는 참조용 필드가 있는 쪽으로만 참조 가능하다. 즉, 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향이다.   3. 연관관계의 주인테이블은 외래키 하나로 두 테이블이 연관관계를 맺는다. 하지만 객체 양방향 관계는 참조가 두곳 다 일어난다. 그래서 두 객체중 테이블의 외래키를 관리할 곳을 지정해줘야 한다. 즉..
[Spring] Bean Validation (검증) - 1
·
Spring Framework
해당 예제는 다음과 같은 기술 스택을 사용했습니다.JDK 11Spring BootThymeLeaf 1. Bean Validation이란?Bean Validation은 Java EE 환경에서 표준으로 제공되는 유효성 검증 프레임워크로, JSR-380(Bean Validation 2.0) 표준에 따라 정의된다. 애노테이션 기반으로 도메인 모델의 필드에 유효성 검증 규칙을 선언하여 자동으로 검증을 수행할 수 있게 해준다. Spring Boot는 기본적으로 Hibernate Validator를 통합하여 Bean Validation을 지원한다. Hibernate Validator는 Bean Validation의 레퍼런스 구현체로, 다양한 유효성 검증 기능을 제공한다. Bean Validation은 다양한 유효성 ..
[Spring] 스프링 메시지, 국제화
·
Spring Framework
기술 스택JDK 11.0.2Spring boot 2.4.4ThymeLeaf  메시지란?개요 만약 기획자가 화면에 보이는 문구가 마음에 들지 않는다고 상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하면 여러 화면에 보이는 단어들을 모두 변경해야 한다. 이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 한다. 개념 스프링 부트에서 제공하는 메시지 기능은 애플리케이션에서 텍스트 메시지를 별도의 파일로 관리하여 다양한 언어와 상황에 맞춰 텍스트를 쉽게 변경할 수 있게 한다. MessageSource라는 인터페이스를 통해 애플리케이션은 텍스트 메시지를 코드에 하드코딩하지 않고 별도의 메시지 파일에서 로드할 수 있다.  국제화란?개요 및 개념국제화 (i18n) 기능은 애플리케이션을 여러 언어..
[Spring] Argument Resolver 란?
·
Spring Framework
Spring MVC로 Web개발을 할 때 쿼리 파라미터 혹은 HTTP Body에 들어오는 값을 Controller 메소드의 매개변수로만 선언을 해도 자동으로 바인딩을 해준다. 이럴 때 왜, 어떻게 바인딩을 해주지? 라는 의문이 들 것이다. 이런 바인딩을 개발자가 아닌 자동으로 해주는 것이 바로 Argument Resolver이다.   1. Argument Resolver (HandlerMethodArgumentResolver)Argument Resolver는 컨트롤러 메서드의 매개변수에 값을 자동으로 주입하는 역할을 한다. 이는 HTTP 요청의 다양한 데이터를 컨트롤러 메서드의 인자로 전달하기 위해 사용된다. 예를 들어, 요청 파라미터, 헤더, 세션 정보 등을 컨트롤러의 인자에 맞게 변환하여 제공하는 작..
(실습)객체지향 설계 원칙를 지키면서 설계하기
·
Spring Framework
먼저 레거시입니다. 클라이언트 클래스가 MemberRepository라는 인터페이스뿐만 아니라 MemoryMemberRepository라는 구체 클래스에도 의존하고 있다. ​ 그래서 DIP, OCP를 위반하고 있다. ​ 이해를 안갈 수 있으니 예를 들어보자. 만약 구체(구현) 클래스가 JpaRepository로 바뀌었다. 그러면 클라이언트 클래스 (MemberServiceImpl) 에서 new JpaRepository로 변경할 것이다. ​ 의존관계에서 구체 클래스를 의존하고 있어 DIP를 위반하고 있다. 그리고 만약 구체 클래스를 변경하려면 클라이언트 클래스를 직접 수정해야 하므로 OCP를 위반한다. ​ ​ ​ 문제를 해결하는 방법이다. 인터페이스에만 의존하는 방법으로 생성자를 통해 구현 객체를 주입(D..