Spring 33

Spring Profile

Spring Profile 이란 서버의 Application을 구동할 때 환경에 맞는 설정 값을 지정해야 하는 상황이 있다. 예를 들어 개발 / 테스트 / 운영 환경이 각각 다른 설정값을 가지고 있다고 했을 때 application.properties 혹은 application.yml 값을 계속 바꿔준다면 매우 번거로울 것이다. 이때 Profile 을 사용해서 환경에 맞는 설정값을 활성화할 수 있다. application.properties 적용 법 application-환경 설정명.properties 형식으로 특정 환경에 대한 설정값을 만든다. application.properties 에서 사용할 프로필에 대한 정보를 spring.profiles.active = 설정명 으로 지정하여 사용할 프로필을 활..

Spring 2024.02.03

MVC 모델 타임리프 폼 (체크 박스 / 셀렉 박스 / 라디오박스)

MVC 모델에서 특정 값을 받을 때 타임리프와 form 태그를 활용 하여 값을 받아올 수 있다. 아래 Entity의 예시에서 Boolean값과 enum타입, 특정 String 값을 유저가 직접 입력하는 것이 아닌 체크 박스 / 셀렉 박스 / 라디오박스 를 활용하여 받아오는 예시이다. Item Entity @Getter @Setter public class Item { private Long id; private String itemName; private Integer price; private Integer quantity; private Boolean open; private List regions; private ItemType itemType; private String deliveryCode; ..

Spring 2024.02.02

Spring MVC 구조 뜯어보기(2) - Spring MVC 사용

Spring 프레임 워크의 MVC 기능을 활용한 컨트롤러 모습을 알아보자. ModelAndView를 반환하는 방식 package hello.servlet.web.springmvc.v2; import hello.servlet.domain.member.Member; import hello.servlet.domain.member.MemberRepository; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpSe..

Spring 2024.01.21

Spring MVC 구조 뜯어보기(1) - Servlet

서블릿 스프링 부트는 톰캣 서버를 내장하고 있어, 톰캣 서버 설치 없이 서블릿 코드를 사용 가능하다. 디스패쳐 서블릿은 웹 애플리케이션 서버를 통해 특정 URL에 요청이 오면 요청값인 HttpServletRequest과 응답값인 HttpServletResponse (응답을 세팅하기 위해) 웹 애플리케이션 서버에서 받아온다. 이렇게 받아온 정보를 URL 정보와 일치하는 컨트롤러를 찾아 로직 수행한다. 코드 예시) URL에 따른 로직을 찾아 수행하는 구조 - 디스패쳐 서블릿 @WebServlet(name = "frontControllerV1", urlPatterns = "/front-controller/v1/*") public class FrontControllerV1 extends HttpServlet {..

Spring 2024.01.20

스프링 AOP 실제 프로젝트 적용

AOP 예제 @Aspect @Slf4j public class CallLogAspect { @Before("execution(* hello.aop.internalcall..*.*(..))") public void log(JoinPoint joinPoint) { log.info("aop={}", joinPoint.getSignature()); } } 특정 경로 값 하위에 AOP를 적용하도록 하는 예제이다. 하지만 실제로 사용할 때에는 재사용성이 떨어진다. 따라서 특정 경로(특정 클래스 전체 or 특정 패키지 하위)에 적용 할 때는 위의 방법을 활용하고 메서드 단위에서 PointCut의 재사용성을 높이기 위해서는 커스텀 어노테이션을 활용한다. 어노테이션 방식 적용 커스텀 어노테이션 @Target(Elemen..

Spring 2024.01.18

프록시의 한계와 해결방안(내부 호출)

Spring AOP의 특징 앞에서 알아본 바와 같이 Spring의 AOP는 프록시 기술을 기반으로 한다. 따라서 AOP를 적용하면 항상 프록시를 통해 Target의 메서드를 실행하게 된다. Spring은 또한 AOP를 적용하면 대상 객체 대신에 프록시를 스프링 빈으로 등록한다. 따라서 스프링은 의존관계 주입시에 항상 프록시 객체를 주입한다. 실제 객체를 직접 호출하는 경우는 없지만 대상 객체의 내부에서 메서드 호출이 발생하면 프록시를 거치지 않고 대상 객체를 직접 호출하는 문제가 발생한다. 코드 예시 Advicer 코드 @Aspect @Slf4j public class CallLogAspect { // 메서드를 실행하면 해당 메서드 시그니처(메서드 이름)을 로그로 남기는 코드 @Before("execut..

Spring 2024.01.13

Spring AOP / @Aspect (JoinCut와 Advice)

AOP 용어 - Target : 부가기능이 적용될 타 - Advice : 부가기능을 수행하는 로직 - JoinPoint : Advice 가 적용될 수 있는 위치(모든 메서드)를 일컷는다. - PointCut : Advice가 끼어드는(적용 ) 위치 - Aspect : PointCut + Advice 를 의미 = Advicer 코드 예시) 1. Adivice에 바로 PointCut을 넣은 코드 @Slf4j @Aspect public class AspectV1 { @Around("execution(* hello.aop.order..*(..))") public Object doLog(ProceedingJoinPoint joinPoint) throws Throwable { log.info("[log] {}", ..

Spring 2024.01.12

AOP의 정의와 프록시/데코레이션 패턴

AOP의 정의 AOP는 관점지향프로그래밍이라 불리며 어떤 로직을 기준으로 핵심적인 로직과 부가적인 기능의 관점을 나누어 보고 그 관점을 기준으로 모듈화 한다. 흩어진 관심사를 묶고 비즈니스 로직에선 분리하여 재사용 가능하게 한다. AOP(관점지향 프로그래밍)을 구현하기 위해 다양한 패턴이 등장했다. 대표적으로 템플릿 / 메서드 콜백 패턴과 프록시 / 데코레이션 패턴이 있다. 템플릿 / 메서드 콜백 패턴은 대표적으로 JDBC 템플릿이 있다. 템플릿 메서드 패턴의 단점으로는 추상화된 메서드 (추상 객체, 인터페이스)를 사용 시 직접 구현해야 하는 불편함이 있다. 템플릿은 객체를 생성하고 그에 맞는 파라미터를 넣고 기능을 다시 정의해야 하며 수정에 매우 불리하다(재정의된 메인 로직을 모두 찾아 다시 수정해야 ..

Spring 2024.01.04

의존 관계 자동 주입(@Autowired, @ComponentScan)

@ComponentScan @ComponentScan 어노테이션은 @Component 가 붙은 모든 클래스 스프링 컨테이너에 Bean으로 등록한다. 이때 @ComponentScan 가 붙은 클래스가 존재하는 패키지를 포함한 하위의 파일들을 Scan의 대상으로 한다. 클래스 상단에 @Component 어노테이션을 사용하여 기존 수동으로 하던 Config 클래스를 통한 @Bean 등록을 @Component와 @ComponentScan을 통해 자동화할 수 있다. Bean으로 컨테이너에 등록 되었다고 해서 의존관계에 있는 멤버 변수 (MemberService에서의 MemberRepository)가 주입이 된 것은 아니다. Spring은 이 또한 @Autowired 어노테이션을 통하여 의존관계 부여를 자동화하였다..

Spring 2024.01.02