전체 글
Spring Security 인증 처리 과정 - 로그인 요청 - AuthenticationFilter에서 username과 password로 Authentication(인증되지 않은) 객체 생성 - Authentication 객체를 AuthenticationManager에 전달 AuthenticationManager는 인증 처리 역할을 하는 인터페이스, 인증을 위한 실질적인 관리는 AuthenticationManager를 구현하는 클래스 (ProviderManager) 를 통해 이루어짐 - ProviderManager로부터 전달받은 Authentication을 AuthenticationProvider는 UserDetailsService를 이용해 UserDetails 조회 - AuthenticationPr..
JPA는 엔티티라는 객체를 이용해서 데이터를 관리하고 관계형 데이터베이스는 테이블을 이용해 데이터를 관리한다. 관계가 없는 테이블은 컬럼과 엔티티의 필드를 매핑해서 작성하지만, 서로 관련 있는 엔티티들의 경우엔 관계형 DB에서 사용하는 외래키와 같은 연관관계를 매핑해주어야 한다. 엔티티를 관계형 DB의 테이블처럼 작성하면 다음과 같다. @Getter @Setter @Entity public class Member{ @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long memberId; private String name; } @Getter @Setter @Entity(name = "ORDERS") public class Order { @Id @Gen..
영속성 컨텍스트(Persistence Context) 영속성이란 지속성이라는 뜻을 가지고 있다. 즉, 데이터를 지속적으로 관리한다라는 목적을 가지고 있다. JPA(Java Persistence API)에도 Persistence가 들어가는데 그만큼 영속성의 개념이 중요한 개념으로 사용된다. JPA는 자바에서 사용하는 ORM 기술의 스펙이고 DB와 객체를 매핑한 뒤 영속성 컨텍스트를 통해 관리하게 된다. 영속성 컨텍스트는 논리적인 개념이고 EntityManagerFactory가 생성한 EntityManager를 통해 접근할 수 있다. 엔티티의 생명 주기 영속성 컨텍스트가 관리하는 엔티티의 생명주기는 비영속, 영속, 준영속, 삭제로 관리된다. 비영속 (new/transient) Member member = n..
스프링은 api요청, 응답에서 발생하는 예외들을 간편하게 처리할 수 있는 애너테이션을 지원한다. 예제로 쓰이는 패키지의 구조는 다음과 같다. @ExceptionHandler @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ExceptionHandler { /** * Exceptions handled by the annotated method. If empty, will default to any * exceptions listed in the method argument list. */ Class
Spring MVC 스프링의 웹 계층을 담당하는 모듈 중에 서블릿 API를 기반으로 클라이언트의 요청을 처리하는 모듈을 spring-webmvc라고 하고 MVC는 각각 Model, View, Controller에 해당한다. Model Spring mvc 기반의 웹 애플리케이션이 클라이언트의 요청을 전달받고 요청 사항을 처리하기 위한 작업을 하는데, 처리하고 클라이언트에게 응답으로 돌려주는 데이터 View Model 데이터를 이용해서 클라이언트 애플리케이션의 화면에 보여지는 리소스를 제공 HTML HTML 페이지에 Model 데이터를 채우고 렌더링 해서 전송 ex) Thymeleaf, FreeMarker,... PDF, Excel Model 데이터를 가공해서 PDF나 Excel 문서를 클라이언트에 전송 X..
스프링 컨테이너에서 관리하는 스프링 빈들의 의존관계를 주입하는 방법은 크게 네 가지가 있다. 생성자 주입 (Constructor Injection) 수정자 주입(Setter Injection) 필드 주입 (field Injection) 일반 메서드 주입 1. 생성자 주입 이름처럼 생성자를 통해 의존 관계를 주입하는 방법 생성자 호출 시점에 딱 1번만 호출되는 것이 보장되기 때문에 불편, 필수 의존관계에 사용된다. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Aut..
스프링 빈을 등록하기 위한 방법은 두 가지가 있다. 1. 설정 정보 클래스의 메서드 레벨에 @Bean 사용하기. -> 몇 개 안 되는 스프링 빈을 등록할 땐 괜찮지만, 많은 빈을 등록하게 되면 귀찮고 누락 문제가 발생할 수 있다. 2. ComponentScan 사용하기 ComponentScan @ComponentScan 애너테이션은 @Component 애너테이션이 붙어 있는 클래스를 스캔해서 자동으로 스프링 빈으로 등록해준다. @Configuration 애너테이션이 붙은 설정 정보도 자동으로 등록하는데, @Configuration 애너테이션에도 @Component 애너테이션이 달려있기 때문이다. 이외에도 @Controller, @Service, @Repository를 찾아서 빈으로 등록해준다. @Targ..
싱글톤 (Singleton) 패턴 싱글톤 패턴이란 애플리케이션 내에서 사용하는 객체의 인스턴스를 하나만 공유해서 사용하는 패턴이다. public class AppConfig { public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } public MemberRepository memberRepository() { return new MemoryMemberRepository(); } public OrderService orderService() { return new OrderServiceImpl(memberRepository(),discountPolicy()); } public DiscountPoli..
제어의 역전 IoC (Inversion of Control) 제어의 역전 (IoC)은 애플리케이션 흐름의 주도권이 뒤바뀌는 것을 뜻한다. public interface MemberService { void join(Member member); Member findMember(Long memberId); } public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); // } public interface MemberRepository { void save(Member member); Member findById(Long ..