웹서버 - http 기반 동작http 요청 - http 응답웹어플리케이션 서버(WAS)\-http 기반동작\-웹 서버 기능 ,프로그램 코드 실행 어플 로직 \-WAS 많은 역할 담당,서버 과부하 우려웹서버 - 정적 웹어플서버 -어플리케이션 로직 ,정적도 제공가능웹서버에
서블릿 - 서버 TCP,HTTP요청 파싱등등 다지원(비즈니스 로직제외)서블릿 컨테이너 - 서블릿 객체 생성,초기화,호출,종료 생명주기관리 \- 동시요청을 위한 멀티쓰레드 처리 지원서블릿 객체 - 싱글톤관리 즉 객체하나만 생성해서 공유사용
쓰레드 - 어플코드 하나 순차적으로 실행하는 것장점 - 동시요청 가능단점 - 생성비용 비쌈, 요청마다 스레드생성하면 응답 속도 늦어짐정적 리소스 - 고정된 HTTML파일,CSS,JS HTML 페이지 - 동적필요 생성 전달HTML API - HTML이 아닌 데이터 전달

비즈니스 요구사항과 설계회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정)주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라
클라이언트 객체는 직접 구현 객체를 생성하고, 연결하고, 실행하는 다양한 책임을 가지고 있음SRP 단일 책임 원칙을 따르면서 관심사를 분리함구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당클라이언트 객체는 실행하는 책임만 담당새로운 할인 정책을 개발하고,

ApplicationContext는 스프링 컨테이너,인터페이스스프링컨테이너 생성시 구성 정보를 지정해줘야됨스프링빈 등록빈이름은 메서드 이름을 사용하기도 하고 직접 부여할수도 있다.스프링 빈 의존관계 설정스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있다.

BeanFactory스프링 컨테이너의 최상위 인터페이스다.스프링 빈을 관리하고 조회하는 역할을 담당한다.getBean() 을 제공한다.지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다.ApplicationContextBeanFactory

singleton pattern 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다.
singleton 방식의 주의점싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된

component scan설정 정보가 없어도 자동으로 스프링 빈을 등록하는 기능기능을 사용하기 위해선 @ComponentScan 설정정보에 붙여줘야됨컴포넌트 스캔은 이름 그대로 @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다

롬복 라이브러리가 제공하는 @RequiredArgsConstructor 기능을 사용하면 final이 붙은 필드를 모아서 성자를 자동으로 만들어준다

@Autowired 는 타입(Type)으로 조회한다.@Autowiredprivate DiscountPolicy discountPolicy@Componentpublic class FixDiscountPolicy implements DiscountPolicy {}@Comp
편리한 자동 기능을 기본으로 사용하자결론부터 이야기하면, 스프링이 나오고 시간이 갈 수록 점점 자동을 선호하는 추세다. 스프링은 @Component 뿐만 아니라 @Controller , @Service , @Repository 처럼 계층에 맞추어 일반적인 애플리케이션

스프링 빈은 간단하게 다음과 같은 라이프사이클을 가진다.객체 생성 -> 의존관계 주입스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다.따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야

scope 스코프는 번역 그대로 빈이 존재할 수 있는 범위스프링은 다음과 같은 다양한 스코프를 지원한다.싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입

DispatcherServletRestController

data생성예외 핸들러 생성 contolleradvice 통해 핸들예외 발생할 경우 생성되는 메시지404errorexception handler 에 추가valid 옵션 추가

@Springbootapplication있는 main 언어 설정@Jsonignore 해주면 정보 출력 안함윗단에서 처리가능 admin filteradmincontroller 생성 후 admin을 통하면 정보 다 볼 수 있게 지정

트랜잭션은 ACID(http://en.wikipedia.org/wiki/ACID)라 하는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)을 보장해야 한다.원자성: 트랜잭션 내에서 실행한 작업