토비의 스프링 Vol.2 - 5장 AOP와 LTW

2020-11-04

AOP와 LTW

스프링은 AspectJ라는 뛰어난 AOP 프레임워크로부터 포인트컷 표현식과 함께 애노테이션을 이용해 AOP 모듈을 개발하는 방법도 도입했다. 또, 스프링의 프록시 방식 AOP 대신 AspectJ 라이브러리를 직접 활용하는 방법과 로딩 시점의 바이트코드 조작을 통해 DI 기능을 확장하는 방법등을 알아볼 것이다.


Read More

토비의 스프링 Vol.2 - 4장 스프링 @MVC

2020-11-04

스프링 @MVC

@RequestMapping 핸들러 매핑

@MVC의 가장 큰 특징은 핸들러 매핑과 핸들러 어댑터의 대상이 오브젝트가 아니라 메소드라는 점이다.

클래스/메소드 결합 매핑정보

DefaultAnnotationHandlerMapping의 핵심은 매핑정보로 @RequestMapping 애노테이션을 활용한다는 점이다. 그런데 @RequestMapping은 타입 레벨뿐 아니라 메소드 레벨도 붙일 수 있다. 스프링은 이 두 가지 위치에 붙은 @RequestMapping의 정보를 결합해서 최종 매핑벙보를 생성한다.

@RequestMapping 애노테이션 엘리먼트
  • String[] value(): URL 패턴
    • URL 패턴 및 와일드카드
      • @RequestMapping("/hello"), @RequestMapping("/main*"), @RequestMapping("/view.*"), @RequestMapping("/admin/**/user")
    • path variable
      • @RequestMapping("/user/{userid}")
    • 디폴트 접미어 패턴
      • @RequestMapping({"/hello", "/hello/", "/hello.*"})
  • RequestMethod[] method(): HTTP 요청 메소드
    • RequestMethod는 HTTP 메소드를 정의한 이늄(enum)이다. GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE 7개의 HTTP 메소드가 정의되어 있다. @RequestMapping에 HTTP 요청 메소드를 추가해주면 같은 URL이라고 하더라도 요청 메소드에 따라 다른 메소드에 매핑해줄 수 있다.
      • @RequestMapping(value="/user/add", method=RequestMethod.GET), @RequestMapping(value="/user/add", method=RequestMethod.POST)
  • String[] params(): 요청 파라미터
    • 요청의 파라미터와 그 값을 비교해서 매핑해준다. 같은 URL을 사용하더라도 HTTP 요청 파라미터에 따라 별도의 작업을 해주고 싶을 때 사용한다.
      • @RequestMapping(value="/user/edit", params="type=admin"), @RequestMapping(value="/user/edit", params="type=member")
    • 특정 파라미터가 존재하지 않아야 한다는 조건을 지정할 수도 있다.
      • @RequestMapping(value="/user/edit", params="!type")
    • params도 배열로 선언되어 있으므로 하나 이상을 지정할 수 있다.
  • String[] headers(): HTTP 헤더
    • HTTP 헤더정보. 자주 사용되지는 않는다.
      • @RequestMapping(value="/view", headers="content-type=text/*")
        타입 레벨 매핑과 메소드 레벨 매핑의 결합

        타입(클래스와 인터페이스) 레벨에 붙는 @RequestMapping은 타입 내의 모든 매핑용 메소드의 공통 조건을 지정할 때 사용한다. 그리고 메소드 레벨에서 조건을 세분화해주면 된다. 메소드 레벨의 매핑은 클래스 레벨의 매핑을 상속받는다고 보면 된다.

        메소드 레벨 단독 매핑

        메소드 레벨의 매핑조건에 공통점이 없는 경우라면 타입 레벨에서는 조건을 주지 않고 메소드 레벨에서 독립적으로 매핑정보를 지정할 수도 있다. 타입 레벨에는 조건이 없는 @RequestMapping을 붙여두면 된다. 컨트롤러 클래스에 @Controller 애노테이션을 붙여서 빈 자동스캔 방식으로 등록되게 했다면, 이때는 클래스 레벨의 @RequestMapping을 생략할 수도 있다.

        타입 레벨 단독 매핑

        @RequestMapping을 타입 레벨에 단독으로 사용해서 다른 타입 컨트롤러에 대한 매핑을 위해 사용할 수도 있다.

Read More

토비의 스프링 Vol.2 - 3장 스프링 웹 기술과 스프링 MVC

2020-11-04

스프링 웹 기술과 스프링 MVC

스프링의 웹 프레젠테이션 계층 기술

스프링에서 사용되는 웹 프레임워크의 종류

스프링 웹 프레임워크
  • 스프링 서블릿/스프링 MVC
  • 스프링 포틀릿
    스프링 포트폴리오 웹 프레임워크
  • Spring Web Flow
  • Spring JavaScript
  • Spring Faces
  • Spring Web Service
  • Spring BlazeDS Integration
    스프링을 기반으로 두지 않는 웹 프레임워크
  • JSP/Servlet
  • Struts1
  • Struts2
  • Tapestry 3, 4
  • JSF/Seam

    스프링 MVC와 DispatcherServlet 전략

    스프링은 특정 기술이나 방식에 억매이지 않으면서 웹 프레젠테이션 계층의 각종 기술을 조합, 확장해서 사용할 수 있는 매우 유연한 웹 애플리케이션 개발의 기본 틀을 제공해준다. 이 틀이 제공하는 다양한 전략의 확장 포인트를 이용해서 스프링 스스로 기본적인 MVC 프레임워크를 만들어뒀다.

Read More

토비의 스프링 Vol.2 - 1장 IoC 컨테이너와 DI

2020-11-04

IoC 컨테이너와 DI

IoC 컨테이너: 빈 팩토리와 애플리케이션 컨텍스트

스프링 애플리케이션에서는 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당한다. 이를 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다. 그래서 스프링 컨테이너를 IoC 컨테이너라고도 한다.

Read More