제어역전(IoC: Inversion of Control)
의존성 주입(DI): 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식
의존성 주입받는 방법
1. 생성자를 통한 의존성 주입
@RestController
public class DIController {
MyService myService;
@Autowired
public DIController(MyService myService){
this.myService=myService;
}
@GetMapping("/di/hello")
public String getHello(){
return myService.getHello();
}
}
2. 필드 객체 선언을 통한 의존성 주입
@RestController
public class FieldInjectionController {
@Autowired
private MyService myService;
}
3. Setter 메서드를 통한 의존성 주입
@RestController
public class SetterInjectionController {
MyService myService;
@Autowired
public void setMyService(MyService myService){
this.myService=myService;
}
}
-> @Autowired라는 어노테이션(annotation) 통해 의존성 주입할 수 있음
관점 지향 프로그래밍(AOP)
:Aspect-Oriented Programming
AOP 구현하는 방법
1. 컴파일 과정에 삽입하는 방식
2. 바이트코드를 메모리에 로드하는 과정에 삽입하는 방식
3. 프락시 패턴을 이용한 방식
스프링 프레임워크를 이용하려면 설정이 복잡 -> 이런 문제를 해결하기 위해 스프링 부트(Spring Boot)가 등장
1. 의존성 관리
2. 자동설정
@SpringBootApplication
public class SpringBootApplication {
public static void main(String[] args){
SpringApplication.run(SpringBootApplication.class, args);
}
}
3. 내장 WAS
4. 모니터링
서버 간 통신
단일 서비스 아키텍처 vs. 마이크로서비스 아키텍처
스프링 부트의 동작 구조
(1) DispatcherServlet으로 요청이 들어오면 DispatcherServlet은 핸들러(컨트롤러) 매핑을 통해 요청 URI에 매핑된 핸들 러를 탐색함
(2) 핸들러 어댑터로 컨트롤러를 호출함
(3) 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView로 응답을 가공해 반환
(4) 뷰 형식으로 리턴하는 컨트롤러를 사용할 때는 뷰 리졸버를 통해 뷰를 받아 리턴함
레이어드 아키텍처(Layered Architecture)
프레젠테이션 계층
비즈니스 계층
데이터 접근 계층
레이어드 아키텍처 기반 설계의 특징
REST 특징
1. 제어역전(IoC)에서 IoC는 Inversion of ( Control )의 약자이다.
2. 제어역전의 방법 중 하나로 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식은?
->( 의존성 주입 )
3.
@RestController
public class InjectionController {
MyService myService;
@Autowired
public void setMyService(MyService myService){
this.myService=myService;
}
}
위의 코드는 의존성을 주입받는 세가지 방법 중 어느 방법을 이용한 것인가?
->( Setter 메서드를 통한 의존성 주입 )
4. 별도로 설정을 관리해줘야 하는 스프링 프레임워크의 불편함을 해결하기 위해 등장한 것은?
->( 스프링 부트 )
5. 내장 WAS에서 WAS가 각각 가리키는 단어는?
->( Web Application Server )
6. 개발이 끝난 후 서비스를 운영하는 시기에는 무엇을 해야하는가?
->( 모니터링 )
7. 레이어드 아키텍처에서 애플리케이션의 최상단 계층이자 클라이언트의 요청을 해석하고 응답하는 역할을 하는 계층은?
->( 프레젠테이션 계층 )
8. 핸들러 매핑 인터페이스의 구현체 클래스 중 ( SimpleUrlHandlerMapping )은 URL 패턴에 매핑된 컨트롤러를 사용하는 전략이다.
9. 필드 객체 선언을 통한 의존성을 주입하는 코드이다. 괄호 안에 코드를 작성하시오.
@RestController
public class FieldInjectionController {
}
답: @ Autowired
private MyService myService;
[출처] 장정우, 『스프링부트 핵심 가이드』, 위키북스(2022)
ⓒ jiwon
[스프링3] 5장. API를 작성하는 다양한 방법 (0) | 2023.11.03 |
---|---|
[스프링3] 4장. 스프링 부트 애플리케이션 개발하기 (1) | 2023.10.13 |
[스프링3] 3장 개발 환경 구성 (0) | 2023.10.13 |
[스프링3] 섹션6. 스프링 DB 접근 기술 JPA (0) | 2023.10.06 |
[스프링3] 섹션 4. 스프링 빈과 의존관계 (0) | 2023.09.29 |