Spring 42

[Spring] 스프링 MVC(4) - 서블릿 매핑

서블릿 매핑 컨트롤러 매핑 경로로 전체 경로를 사용하고 싶다면 다음과 같이 설정하면 된다. 서블릿 매핑 설정에서 URL 패턴을 "/"로 지정 스프링 MVC 설정에 디폴트 서블릿 핸들러를 설정 dispatcher org.springframework.web.servlet.DispatcherServlet ... dispatcher / ... ... 서블릿 매핑 설정에서 매핑 URL 패턴을 /으로 설정하면 jsp 요청을 제외한 나머지 모든 요청을 DispatcherServlet이 받게 된다. 만약 매핑된 컨트롤러가 없다면 404 응답 코드를 웹 브라우저에 전송하게 된다. 이때 404 응답 대신 컨테이너의 디폴트 서블릿을 이용해서 요청을 처리하도록 만들어주는 것이 설정이며, 다음과 같이 동작한다. 요청 URL에 ..

Spring 2022.03.12

[Spring] 스프링 MVC(3) - 스프링 MVC 설정

스프링 MVC 설정 스프링 MVC를 설정하려면 최소한 다음의 구성 요소를 빈 객체로 등록해주어야 한다. HandlerMapping 구현 객체 HandlerAdapter 구현 객체 ViewResolver 구현 객체 이 중에서 HandlerMapping과 HandlerAdapter는 다음과 같이 태그를 이용하면 설정이 끝난다. 따라서, ViewResolver만 추가로 설정해주면 된다. 태그는 다음의 두 클래스를 빈으로 등록해준다. RequestMappingHandlerMapping RequestMappingHandlerAdapter 이 두 클래스는 @Controller 어노테이션이 적용된 클래스를 컨트롤러로 사용할 수 있게 해준다. 이 두 객체 외에 태그는 JSON이나 XML 등 요청 / 응답 처리를 위해 ..

Spring 2022.03.12

[Spring] 스프링 MVC(2) - DispatcherServlet 설정

DispatcherServlet DispatcherServlet은 내부적으로 스프링 컨테이너를 생성한다. 별도의 초기화 파라미터 없이 DispatcherServlet을 설정하면, 웹 어플리케이션의 /WEB-INF/ 디렉토리에 위치한 [서블릿이름]-servlet.xml 파일을 스프링 설정 파일로 사용한다. 예를 들어, 다음과 같이 web.xml 파일을 설정했다면, DispatcherServlet은 dispatcher-servlet.xml 파일을 이용해서 스프링 컨테이너를 생성한다. dispatcher org.springframework.web.servlet.DispatcherServlet 한 개 이상의 설정 파일을 사용해야 하거나 이름이 [서블릿이름]-servlet.xml 형식이 아닌 파일을 사용해야 한다..

Spring 2022.03.12

[Spring] 스프링 MVC(1) - 기본 흐름과 구성 요소

Spring MVC 스프링 MVC는 여러 구성 요소가 맞물려 동작하기 때문에 스프링 MVC를 이용해서 웹 어플리케이션을 개발하려면 적어도 스프링 MVC가 어떤 식으로 동작하는지 이해하고 있어야 한다. 스프링 MVC는 다음 그림과 같은 과정을 거쳐 웹 브라우저에 응답을 전송하게 된다. 웹 브라우저 요청이 DispatcherServlet에 전달 HandlerMapping에서 요청 URL과 매칭 되는 컨트롤러 검색 HandlerAdapter에 처리 요청 컨트롤러 실행 결과를 리턴 컨트롤러 실행 결과를 보여줄 View 검색 View에서 응답 생성 후 웹 브라우저에 전송 위의 그림에서 각 구성 요소는 다음과 같은 역할을 수행한다. DispatcherServlet : 클라이언트의 요청을 전달받는다. 컨트롤러에게 클..

Spring 2022.03.12

[Spring] 스프링 AOP(7) - AspectJ 표현식

AspectJ의 Pointcut 표현식 AspectJ는 Pointcut을 명시할 수 있는 다양한 명시자를 제공하는데, 스프링은 메서드 호출과 관련된 명시자만을 지원하고 있다. execution 명시자 execution명시자는 Advice를 적용할 메서드를 명시할 때 사용되며, 기본 형식은 다음과 같다. 더보기 execution(수식어패턴? 리턴타입패턴 클래스이름패턴?메서드이름패턴(파라미터패턴) "수식어패턴" 부분은 생략 가능한 부분으로서 public, protected 등이 올 수 있는데 스프링은 public 메서드에만 적용 가능하기 때문에 사실상 public 이외의 값은 의미가 없다. 각 패턴은 "*"을 이용하여 모든 값을 표현할 수 있다. 또한, ".."을 이용하여 0개 이상이라는 의미를 표현할 수 ..

Spring 2022.02.20

[Spring] 스프링 AOP(6) - Proxy Target Class

프록시 객체 생성 방식 설정 앞서 이 글에서 프록시 객체를 생성할 때 대상 객체가 인터페이스를 구현하고 있다면 프록시 객체는 동일한 인터페이스를 구현한 객체가 생성된다고 언급하였다. 이는 클라이언트에서 인터페이스를 통해 메서드를 호출하는 경우에는 문제가 되지 않는다. 하지만 인터페이스가 아닌 대상 객체를 직접 이용하는 경우에는 문제가 발생한다. 다음 코드를 보자. public class MemberServiceLocator { // MemberServiceImpl은 MemberService 인터페이스를 상속 private MemberServiceImpl memberService; public MemberServiceImpl getMemberService() { return memberService; } ..

Spring 2022.02.20

[Spring] 스프링 AOP(5) - JoinPoint

JoinPoint 사용 Around Advice를 제외한 나머지 Advice 타입을 구현한 메서드는 JoinPoint 객체를 선택적으로 사용할 수 있다. 주의할 점은 JoinPoint를 파라미터로 사용할 때에는 반드시 첫 번째 파라미터로 지정해야 한다는 것이다. 그렇지 않으면 스프링은 익셉션을 발생시킨다. JoinPoint 인터페이스는 호출되는 대상 객체, 메서드, 전달되는 파라미터 목록에 접근할 수 있는 메서드를 제공하고 있다. org.aspectj.lang.Signature getSignature() : 호출되는 메서드에 대한 정보 Object getTarget() : 대상 객체 Object[] getArgs() : 파라미터 목록 Signature 인터페이스는 호출되는 메서드와 관련된 정보를 제공하기..

Spring 2022.02.19

[Spring] 스프링 AOP(3) - @Aspect 기반

@Aspect 어노테이션을 이용한 AOP @Aspect 어노테이션을 이용한 AOP 구현은 XML 방식과 별로 다르지 않다. Aspect 클래스에 @Aspect 어노테이션만 적용하면 된다. 그리고 Pointcut도 Aspect 클래스에서 정의한다. @Aspect public class Profile { @Pointcut("execution(public * com.mypackage..*(..))") private void profileTarget() { } @Around("profileTarget()") public Object trace(ProceedingJoinPoint joinPoint) throws Throwable { String signatureString = joinPoint.getSignatu..

Spring 2022.02.19

[Spring] 스프링 AOP(2) - XML 기반

XML 기반의 POJO 클래스를 이용한 AOP 구현 aop 네임스페이스를 사용하려면 루트 태그에 aop 네임스페이스에 대한 스키마를 지정해야 한다. ... 먼저 공통 기능을 제공할 Advice 구현 클래스는 다음과 같다. import org.aspectj.lang.ProceedingJoinPoint; public class Profiler { public Object trace(ProceedingJoinPoint joinPoint) throws Throwable { String signatureString = joinPoint.getSignature().toShortString(); System.out.println(signatureString + " 시작"); long start = System.cur..

Spring 2022.02.19

[Spring] 스프링 AOP(1) - 개요

프록시를 이용한 AOP 구현 스프링은 세 가지 방식으로 AOP를 구현할 수 있도록 하고 있다. 어떤 방식을 사용하더라도 내부적으로는 프록시를 이용하여 AOP가 구현되므로 메서드 호출에 대해서만 AOP를 적용할 수 있다. XML 스키마 기반의 POJO 클래스를 이용한 AOP 구현 AspectJ에서 정의한 @Aspect 어노테이션 기반의 AOP 구현 스프링 API를 이용한 AOP 구현 스프링은 Aspect의 적용 대상(target)이 되는 객체에 대한 프록시를 만들어 제공하며, 대상 객체에 직접 접근하지 않고 프록시를 통해 간접적으로 접근하게 된다. 스프링 컨테이너를 초기화하는 과정에서 설정 정보에 지정한 빈 객체에 대한 프록시 객체를 생성하고, 원본 빈 객체 대신에 프록시 객체를 사용하도록 한다. 대상 객..

Spring 2022.02.17