목록Programing (115)
월루를 꿈꾸는 대학생
프론트 컨트롤러 패턴 소개 일단 지금은 손수 다 만들고.... 나중에 스프링 mvc패턴까지 가서 mvc패턴을 깊게 이해해보자 공통 로직을 각각 처리 아무거나 다 들어올 수 있으니까 컨트롤러마다 공통로직을 도입했어야했다 = 중복 프론트 컨트롤러 도입 후 특징 프론트 컨트롤러 서블릿 하나로 클라언트 요청을 받음 (수문장) 이 프론트 컨트롤러가 알아서 요청에 맞는 컨트롤러로 토스함 입구를 하나로 만들어서 공통 처리를 중복되지 않도록 하여 유지보수가 쉽도록 프론트 컨트롤러 제외한 나머지 컨트롤러는 서블릿 필요없음 서블릿이라는 것은 http요청이 들어왔을 때 was서버가 req,resp 객체를 만들어서 서블릿 컨테이너에 등록된 서블릿에다가 던져 준 다음 서블릿이 그 요청에 맞는 로직을 실행하는 것이었음 근데 이 ..
회원관리 웹 애필리케이션 요구사항 그냥 회원정보에 이름과 나이를 넣고 저장 및 조회하는 기능을 구현한다! 지금은 그냥 자바로만! 스프링없으니까 싱글톤 보장도 안 되니까 싱글톤도 알아서 만든다 public class MemberRepository { private Map store = new HashMap(); private static long sequence = 0L; private static final MemberRepository instance = new MemberRepository(); public static MemberRepository getInstance(){ return instance; } // 생성자를 프라이빗으로 해줘야 밖에서 생성못함 private MemberRepositor..
서블릿 http 요청을 어떻게 받고 http응답을 어떻게 내려줄 것인지 개발자가 편하게 해주도록 서버에서 구현해준 것 프로젝트 생성 gradle lomnbok hello 서블릿 스프링 부트 서블릿 환경 구성 @SpringBootApplication @ServletComponentScan // 스프링이 내 패키지 하위부터 싹 훝어서 서블릿 자동등록 해줌 public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } } /hello http요청이 오면 request, response 객체를 was에서 만들어주고 이걸 서블릿에 전달해줌 서..
웹은 http 기반이고 html, json , image 등 거의 모든 형태의 데이터 전송이 가능 서버간에 데이터 주고 받을 때도 http를 사용 웹서버 http 기반 동작 *정적 리소스 제공 * 정적 (파일) htmol , css , js , 이미지, 영상 등등 nginx , apache 웹 애플리케이션 WAS (Web Application Server) http 기반 동작 웹서버 기능 포함 + 정적 리소스 제공 프로그램 코드 실행해서 애플리케이션 로직 수행 -> 요청온 사용자마다 다르게 표현 가능 프로그래밍 할 수 있으니까 동적 html ,http api (json) 서블릿 , jsp , 스프링 mvc ex ) 톰캣 웹서버와 was 차이 웹서버는 정적 리소스 (파일) / was는 애플리케이션 로직 자..
보통 디폴트로 사용한 거는 싱글톤 스코프임 스프링 컨테이너 시작과 종료까지 함께한 친구 스코프 : 빈이 존재할 수 있는 범위 싱글톤 : 디폴트 , 시작과 종료를 함께하는 가장 넓은 범위 프로토 타입 : 빈 생성과 의존관계 주입까지만 하는 가장 짧은 범위 웹 관련 1. request : 웹 요청이 들어오고 나갈때 까지 유지 2. session : 웹 세션이 생성되고 종료될 때 까지 유지 3. application : 웹 서블릿 컨텍스트 같은 범위로 유지 프로토타입 스코프 프로토타입 스코프는 싱글톤과 다르게 조회할 때마다 새로운 인스턴스를 만들어서 반환해줌 클라이언트 요청 시점에 새로 프로토타입 빈 생성하고 의존관계 주입한다 그 후 클라이언트에 객체 주고 컨테이너에서는 지워버림 관리 x 핵심 : 컨테이너는 ..
빈 생명주기 콜백 시작 디비 커넥션 풀 (서버 올라올 때 미리 디비 연결시킴 - 요청올 때 바로 대응 가능 ), 네트워크 소켓처럼 미리 열어놔서 필요한 연결 미리 해두고 어플리케이션 종료 시점에 연결을 모두 종료하는 작업하려면 객체의 초기화와 종료 작업이 필요하다! 다음과 같은 예시로 어떻게 움직이는지 확인해보자 스프링 빈의 라이프 사이클 객체 생성 -> 의존관계 주입 일단 객체부터 만들어 놔야 그 다음에 의존관계 주입이 가능하지 (생성자 주입 예외) 스프링 빈은 객체를 생성하고 , 의존관계 주입 끝난 다음 필요한 데이터 사용 가능 초기화 : 객체에 필요한 값이 다 세팅되어 있는거 개발자가 의존관계 주입 완료 시점을 어떻게 알 수 있을까? 스프링 빈에게 콜백 메서드를 통해서 초기화 시점 알려줌 스프링 빈..
다양한 의존 관계 주입 방법 생성자 주입 수정자 주입 (setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해서 의존관계를 주입받는 방법 지금까지 썼던 코드들 생성자 호출 시점에 딱 1번만 호출되는 것이 보장 한번만 세팅하고 그 후 수정 못하도록 하는 것이 가능 -> 불변 , 필수 의존 관계에서 사용 협업시 아무나 못 건들게 만들도록... final로 못 건들임 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public Orde..
컴포넌트 스캔과 의존관계 자동 주입 시작하기 스프링빈 등록시 @Bean 이나 으로 설정정보를 등록했음 일일이 등록해야하니까 귀찮고 휴먼에러도 생김 스프링은 설정정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능 제공 의존 관계 자동 주입하는 @Autowired 도 있음 @Configuration @ComponentScan( // 스캔 할 때 제외할 거 넣어줌 -> AppConfig를 등록방지하기 위해 excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Configuration.class) ) // @Comoponet 애노테이션 붙은 거를 다 빈에 등록시켜줌 public class AutoA..
웹 애플리케이션과 싱글톤 스프링은 기업용 서비스 기술 목적이며 이런 경우 보통 여러 고객이 동시에 요청을한다 AppConfig는 new해서 새로 만들어서 반환하지 그래서 클라이언트가 요청할 때마다 생성해서 반환해서 주는 거임.. 무수한 인스턴스가 생성이 된다! 메모리 낭비가 심하다 호출마다 서로 다른 객체가 생성되므로 효율적이지 않음 그래서 딱 1개의 객체만 생성되고 공유하도록 설계를 해야한다 =>싱글톤 패턴 싱글톤 패턴 인스턴스 1개만 생성하고 쓰는 것 2개 이상 못 만들도록 막아야함 -> private 생성자를 통해서 외부에서 맘대로 new 키워드 못 사용하도록 막아야함!!! public class SingletonService { // 자기 자신을 private로 선언한 후에 new로 인스턴스 생성..
스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); // 해당 구문이 ApplicationContxt의 구현체 다형성 ApplicationContext = 스프링 컨테이너 / 인터페이스 -> 다형성 애노테이션 기반의 자바 설정 클래스로 만들어서 사용 AppConfig 방식이 애노테이션 기반 자바 설정 클래스로 컨테이너 만든것 일반적으로 ApplicationContext를 스프링 컨테이너라고 한다 스프링 컨테이너 생성 과정 new AnnotationConfigApplicationContext(AppConfig.class) 스프링 컨테이너를 생성할 때는 구성 정보를 ..