Spring

    [JPA] 필드와 컬럼 매핑에 대해

    JPA 필드와 컬럼 매핑에 대해 본 내용은 자바 ORM 표준 JPA 프로그래밍 책을 토대로 정리했습니다. 필드와 컬림 패잉용 어노테이션은 다음과 같이 있다. @Column, @Enumerated, @Temporal, @Lob, @Transient, @Access 이것들을 간단히 살펴보자. @Column @Column은 가장 많이 사용되는 어노테이션이고 기능도 많다. 속성 중에 name, nullable이 주로 사용된다. 속성 기능 기본값 name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름 insertable 엔티티 저장 시 이 필드도 같이 저장한다. false로 설정하면 db에 저장하지 않는다. false 옵션은 읽기 전용일 때 사용한다. true updatable 엔티티 수정 시 이 필드도 같..

    [JPA] 영속성 컨텍스트에 대해

    영속성 컨텍스트에 대해 본 내용은 자바 ORM 표준 JPA 프로그래밍 책을 토대로 정리했습니다. 영속성 컨텍스트란 "엔티티를 영구 저장하는 환경"이라는 뜻이다. EntityManager.persist(entity) 이것은 entity를 영속성 컨텍스트에 저장한다는 뜻이다. 엔티티의 생명주기 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계까 없는 새로운 상태 영속(managed) : 영속성 컨텍스트에 관리되는 상태 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(removed) : 삭제된 상태 Member member = new Member(); member.setId("member1"); member.setUsername("회원 1");위의 상태는 비영속 상..

    [Spring] 의존관계 주입에 대해

    의존관계 주입에 대해 본 내용은 김영한 님의 스프링 핵심 원리 강의 내용을 토대로 정리했습니다. 의존관계 주입은 크게 4가지가 있다. 생성자 주입 수정자 주입(setter) 필드 주입 일반 메서드 주입 @Autowired의 기본 동작은 주입할 대상이 없으면 오류가 발생한다. 대상이 없어도 동작하게 하려면 @Autowired(required=false) 지정 순수한 자바 테스트 코드에는 @Autowired가 동작하지 않는다. @SpringBootTest처럼 스프링 컨테이너를 테스트에 통한 경우에만 가능 생성자 주입 @Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepos..

    [Spring] ComponentScan에 대해

    ComponentScan에 대해 본 내용은 김영한 님의 스프링 핵심 원리 강의 내용을 토대로 정리했습니다. 스프링 빈을 등록할 때에 @Bean을 사용해서 등록하고는 했다. 하지만 이런 빈이 수십, 수백개가 되면 문제가 생길 것이다. 그래서 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔을 제공한다. @Configuration @ComponentScan( //@Configuration 내부에 Component가 있음. 우리는 Configuration 에서 Bean 으로 등록해줬기 때문에 충돌할 수 있으므로 filter로 뺐다. excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration..

    [Spring] 빈 스코프

    Spring 빈 스코프 본 내용은 김영한 님의 스프링 핵심 원리 강의 내용을 토대로 정리했습니다. 빈 스코프란 빈이 존재할 수 있는 범위를 뜻한다. 지난번에 싱글턴 컨테이너에 대해 정리를 했었는데, 그때의 빈은 스프링 컨테이너의 시작 때에 생성되어 종료될 때 까지 유지됐었다. Spring 싱글턴 컨테이너 스프링은 싱글턴, 프로토타입, request, session, application과 같은 다양한 스코프를 지원한다. 빈 스코프는 다음과 같이 지정할 수 있다. //컴포넌트 스캔 자동 등록의 경우 @Scope("prototype") @Component public class HelloBean{} //수동 등록의 경우 @Scope("prototype") @Bean PrototypeBean HelloBean..

    [Spring] 빈 생명주기 콜백

    빈 생명주기 콜백 본 내용은 김영한 님의 스프링 핵심 원리 강의 내용을 토대로 정리했습니다. 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작과 종료 시점에 객체의 초기화와 종료 작업이 필요한 경우가 있다. 그 방법을 익혀보자. public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메시지"); } public void setUrl(String url) { this.url = url; } //서비스 시작시 호출 public void connect() { System.out.println("con..

    [Spring] Spring 싱글턴 컨테이너

    Spring 싱글턴 컨테이너 빈을 등록한 DI컨테이너(AppConfig)가 있다. 클라이언트 A가 memberService를 요청하면 new memberService를 해서 return 해준다. 클라이언트 B가 memberService를 요청하면 new memberService를 해서 return 해준다. 클라이언트 C가 memberService를 요청하면 new memberService를 해서 return 해준다. @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") public void pureContainer() throws Exception{ AppConfig appConfig = new AppConfig(); MemberService memberService = appConf..

    [Spring] Custom Validator 적용하기

    Custom Validator 적용하기 엔티티에 조건을 걸 때에, @NoArgsConstructor @Getter public class AccountCreateDto { @NotBlank @Length(min=2, max=20) private String loginId; @NotBlank @Length(min=8, max=50) private String password; 흔히 다음과 같은 어노테이션을 사용해서 검증을 한다. Controller단에서는 대충 다음과 같이 사용될 것이다. @PostMapping public ResponseEntity createAccount(@RequestBody @Valid AccountCreateDto accountCreateDto, Errors errors) thro..