김영한 스프링 강의

김영한 스프링 강의/스프링 MVC 1편

4. MVC 프레임워크 만들기

프론트 컨트롤러 패턴프론트 컨트롤러 서블릿 하나로 클라이언트 요청을 받는다.이후 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출한다.입구가 하나이기 때문에 공통 부분을 프론트 컨트롤러에서 처리할 수 있다.프론트 컨트롤러 이외의 다른 컨트롤러는 서블릿을 사용할 필요가 없다. 프론트 컨트롤러 도입 - v1public interface ControllerV1 { void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; }@WebServlet(urlPatterns = "/front-controller/v1/*") public class FrontControllerServ..

김영한 스프링 강의/스프링 MVC 1편

3. 서블릿, JSP, MVC 패턴

서블릿만으로 HTML 생성모든 회원 조회 서블릿 작성@WebServlet(urlPatterns = "/servlet/members") public class MemberListServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List members = memberRepository.findAll(); response.setContentTy..

김영한 스프링 강의/스프링 MVC 1편

2. 서블릿

서블릿 등록 방법@ServletComponentScan // 하위 패키지의 서블릿 자동 등록 @SpringBootApplication public class ServletApplication { }psvm main()이 있는 클래스 위에 @ServletComponentScan애너테이션을 추가하여 서블릿 자동 등록을 할 수 있다. @WebServlet(urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {..

김영한 스프링 강의/스프링 MVC 1편

1. 웹 애플리케이션 이해

웹 서버 vs 웹 애플리케이션 서버(WAS)웹 서버HTTP 기반 동작정적 리소스 기능 + 기타 부가 기능정적 HTML, CSS, JS, 이미지, 영상 등 제공예) NGINX, APACHE 웹 애플리케이션 서버(WAS)HTTP 기반 동작웹 서버 기능 + 프로그램 코드 실행 해서 애플리케이션 로직 수행동적 HTML, HTTP API(JSON)서블릿, JSP, 스프링 MVC예) 톰캣, Jetty, Undertow 차이웹 서버는 정적, WAS는 애플리케이션 로직을 제공한다.근데… 사실은 경계가 모호하다. 웹 서버도 프래그램을 실행할 수 있고, 웹 애플리케이션 서버도 웹 서버의 기능을 제공한다.Java에서는 서블릿 컨테이너 기능을 제공하면 WAS로 분류한다. 웹 시스템 구성 종류WAS + DBWAS가 정적 리소스..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

9. 빈 스코프

빈 스코프란?지금까지는 스프링 빈이 스프링 컨테이너와 함께 생성되서 컨테이너가 종료될 때 유지된다고 학습했다. 왜냐하면 싱글톤 스코프로 생성되기 때문이다.스코프란? 말 그대로 빈이 존재할 수 있는 범위, 즉 생명주기를 얘기한다. 스코프 종류싱글톤: 기본 스코프로, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입, 초기화까지만 관여하고, 더는 관리하지 않는 가장 짧은 스코프이다. 즉, 종료메서드는 호출되지 않는다.웹 관련 스코프:request: 웹 요청이 들어오고 나갈 때 까지 유지되는 스코프이다.session: 웹 세션이 생셩되고 종료될 때 까지 유지되는 스코프이다.application: 웹의 서블릿 컨텍스트와 같..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

8. 빈 생명주기 콜백

빈 생명주기 콜백 시작데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다.이 작업이 어떻게 되는지 알아보자. 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해보자. (실제로 네트워크에 연결하는 것은 아니고, 단순히 문자만 출력한다. ) 이 NetworkClient는 애플리케이션 시작 시점에 connect()를 호출해서 연결을 맺어두어야 하고, 애플리케이션이 종료되면 disConnect()를 호출해서 연결을 끊어야 한다. public class NetworkClient { private String url; public NetworkCl..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

7. 의존관계 자동 주입

다양한 의존관계 주입방법생성자 주입수정자 주입(setter 주입)필드 주입일반 메서드 주입 생성자 주입이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법이다.지금까지 우리가 진행했던 방법이 생성자 주입이다.특징생성자 호출시점에 딱 1번만 호출되는 것이 보장된다.불변, 필수 의존관계에 사용@Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, Dis..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

6. 컴포넌트 스캔

컴포넌트 스캔과 의존관계 자동 주입 시작하기Class가 수백개가 되면 AppConfig에서 설정하는걸 누락하거나 중복하는 문제가 발생할 수 있다.그리고 귀찮다.따라서, 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다.의존 관계를 자동 주입해주는 @Autowired라는 기능도 제공한다. @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type=FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig{ }컴포넌트 스캔을 사용하려면 @ComponentScan을 설정 정보에 붙여주면 된다.기존의 AppConfig과 다르게 @Be..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

5. 싱글톤 컨테이너

웹 애플리케이션과 싱글톤스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생함.이런 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다.public class SingletonTest{ @Test @DisplayName("쓰프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.memberService(); System.out.println("memberService1 = " + memberService1); System.ou..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

4. 스프링 컨테이너와 스프링 빈

스프링 컨테이너 생성ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);ApplicationContext를 스프링 컨테이너라 하고, 인터페이스이다.스프링 컨테이너는 XML을 기반으로 만들 수 있고, 어노테이션 기반의 자바 설정 클래스로 만들 수도 있다.직전에 AppConfig을 사용했던 방식이 어노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다.요즘은 XML 기반으로는 잘 만들지 않는다. 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext로 구분해서 이야기한다. BeanFactory를 직접 사용하는 경우는 거의 없으므로 일반적..

피곤한투티
'김영한 스프링 강의' 카테고리의 글 목록 (3 Page)