본문 바로가기

Spring7

[스프링 MVC] 모델에 공통 데이터 자동으로 넣기 - @ModelAttribute 메서드에 붙은 @ModelAttribute 여러 컨트롤러에서 같은 데이터를 모델에 공통적으로 넣을 때 데이터를 반환하는 메서드를 만들고, @ModelAttribute 애노테이션을 해당 메서드에 사용하여 코드 중복을 제거할 수 있습니다. 예를 들어 다음과 같은 컨트롤러 클래스가 있다고 하겠습니다. @Controller public class HelloController { @GetMapping("/hello1") public String hello1(Model model) { List list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); model.addAttribute("list", list); return "hello1"; } @Ge.. 2021. 7. 12.
[스프링 MVC] 요청 파라미터 조회하기 - @RequestParam, @ModelAttribute 스프링에서 요청 파라미터를 편리하게 조회할 수 있도록 지원해주는 애노테이션 @RequestParam, @ModelAttribute를 알아보도록 하겠습니다. 참고 : 요청 응답 결과를 간편하게 보기 위해 POSTMAN 프로그램을 사용하였습니다. @RequestParam @RequestParam을 사용해서 컨트롤러 메서드 파라미터로 요청 파라미터를 편리하게 사용할 수 있습니다. import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @Res.. 2021. 7. 7.
[스프링] 프록시(Proxy) 프록시의 사전적 정의는 '대리인'으로, 간단하게 설명하면 내가 어떤 객체를 사용하려고 할 때 해당 객체에 직접 요청하는 것이 아닌 중간에 가짜 프록시 객체(대리인)를 두어서 프록시 객체가 대신해서 요청을 받아 실제 객체를 호출해 주도록 하는 것이다. 프록시 모드를 설정하게 되면, 의존성 주입을 통해 주입되는 빈은 실제 빈이 아닌 해당 빈을 상속받은 가짜 프록시 객체이다. 스프링은 CGLIB이라는 바이트 코드를 조작하는 라이브러리를 사용해서 프록시 객체를 주입해준다. 프록시 객체 내부에는 실제 빈을 요청하는 로직이 들어있어, 클라이언트의 요청이 오면 그때 실제 빈을 호출해준다.(실제 빈의 조회를 필요한 시점까지 지연 처리) 프록시 객체는 원래 빈을 상속받아서 만들어지기 때문에 클라이언트 입장에서는 실제 빈.. 2021. 3. 8.
[스프링] 의존관계 조회(Dependency Lookup) : ObjectFactory, ObjectProvider, JSR-330 Provider @Autowired HelloService helloService; 스프링에서 위와 같이 외부로부터 의존 관계를 주입받는 것을 의존성 주입이라고 한다. 또한 외부로부터 주입받는 것이 아닌 내가 필요할 때 직접 의존 관계를 찾을 수도 있는데 이것을 '의존관계 조회(Dependency Lookup)'이라고 하고, 의존 관계 조회를 사용하는 3가지 방법을 알아보도록 하자. 스프링에서 제공 : ObjectFactory, ObjectProvider 자바 표준 : JSR-330 Provider ObjectFactory @FunctionalInterface public interface ObjectFactory { T getObject() throws BeansException; } ObjectFactory의 get.. 2021. 3. 8.
스프링 @Autowired : 같은 타입의 빈이 여러개라면?(@Qualifier, @Primary) 스프링에서 자동 의존성 주입을 사용할 때, 같은 타입의 빈이 여러 개 조회되는 상황에 도움이 되는 몇 가지에 대해 알아보자. 목차 @Autowired @Qualifier @Primary 같은 타입의 빈을 모두 조회하고싶다면? @Autowired 의존성 자동 주입에 사용되는 애노테이션인 @Autowired는 먼저 애노테이션이 적용된 필드, 파라미터의 타입을 기준으로 빈을 조회한다. 같은 타입의 빈이 여러 개 조회되면 추가적으로 필드 또는 파라미터의 이름으로 빈을 조회한다. 다음과 같이 HelloService 인터페이스와 두 개의 구현체가 있다. public interface HelloService { String hello(); } @Component public class HelloServiceEng i.. 2021. 2. 26.
[스프링] 빈 초기화, 소멸 메소드 사용하기 생성자 안에서 무거운 초기화 작업을 하는 것보다는 객체를 생성하는 부분, 초기화 부분을 명확하게 나누는 것이 유지보수 관점에서 좋다. 초기화 작업이 내부 값들만 약간 변경하는 정도의 단순한 경우라면 생성자에서 한 번에 처리하는 게 더 나을 수 있다. 스프링 컨테이너가 생성되고 빈의 생성과 의존관계 주입이 완료료되면 콜백을 통해 초기화 시점을 알려주고, 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 스프링의 초기화, 소멸 작업 방법 스프링의 인터페이스 구현 빈을 등록할 때 초기화, 소멸 메소드 지정 @PostConstruct, @PreDestroy 애노테이션 사용(권장되는 방법) 인터페이스 구현 InitializingBean, DisposableBean 인터페이스를 구현한다. afterPropert.. 2021. 1. 12.