객체의 생명주기 관리를 프로그래머가 아닌 스프링 컨테이너가 해준다.
제어 역전의 방법 중 하나
스프링 컨테이너가 생성한 객체를 주입 받아 사용하는 방식
생성자, 필드 객체 선언, setter 방식이 있으며 생성자 방식이 권장
=> 레퍼런스 객체가 없으면 객체를 초기화할 수 없게 설계할 수 있다.
OOP를 도와주는 개념
관점을 기준으로 묶어 개발하는 방식
핵심 기능과 부가 기능으로 나눠 부가 기능을 공통 로직으로 처리하도록 삽입한다.
스프링에서는 프락시 방식을 통해 AOP 기능 지원
Spring 사용을 위해서 설정을 해줘야 하는데 이 설정이 복잡하다.
이를 해결하기 위해 등장한 것이 SpringBoot
각 모듈의 의존성, 호환성을 직접 설정해야 함
spring-boot-starter 의존성을 제공해 호환되는 버전의 모듈 조합을 제공한다.
spring-boot-starter-web Spring MVC 사용 RESTful 어플리케이션 의존성
spring-boot-starter-test 테스트용 라이브러리
spring-boot-starter-jdbc JDBC 기능
spring-boot-starter-security 스프링 시큐리티
spring-boot-starter-data-jpa 하이버네이트 사용 JPA
spring-boot-starter-cache 캐시 기능
아래의 3개 어노테이션을 합쳐놓은 구성
@ComponentScan
@Component 시리즈 어노테이션이 붙은 클래스를 발견해 빈으로 등록
@SpringBootConfiguration
환경설정 빈
@EnableAutoConfiguration
spring.factories 내부에 여러 Configuration들을 조건에 따라 빈 등록
톰캣에도 자동 설정 기능이 지원되기 때문에 설정 없이 톰캣 실행 가능하며 다른 웹 서버로 대체도 가능하다.
Spring Boot Actuator
서비스 운영 시 사용하는 스레드, 메모리, 세션 등의 요소 모니터링하는 자체 모니터링 도구
애플리케이션을 기능별로 나눠 개발
독립적인 서비스 간 통신이 필요한 경우가 있다.
한 서버가 다른 서버에 통신을 요청하는 것을 의미하며 한 서버는 서버, 다른 한대는 클라이언트가 되는 구조
주로 HTTP/HTTPS 방식을 사용하며 다른 방식도 존재한다.(TCP/IP, SOAP 등)
spring-boot-starter-web 모듈 사용 시 톰캣 사용하는 스프링 MVC 구조 기반 동작
(1) 서블릿 컨테이너에 요청이 들어오면 DispatcherServlet
을 실행시킨다. 이때 컨테이너와 DispatcherServlet
은 설정 값(web.xml
)을 공유한다.
(2) DispatcherServlet
는 요청이 들어오면 핸들러 매핑을 통해 핸들러(컨트롤러) 탐색
(3) 핸들러 어댑터로 컨트롤러 호출
(4) 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView로 반환
(5) View 형식으로 리턴하는 컨트롤러 사용 시 ViewResolver를 통해 View를 받아 리턴
REST 형식 애플리케이션은 ViewResolver
를 호출하지 않고 MessageConverter
를 거쳐 JSON 형식으로 변환해서 응답한다.
애플리케이션의 컴포넌트를 유사 관심사 기준으로 묶어 설계한 수평적 구조로 보통 3계층, 4계층으로 이루어짐
3계층은 프레젠테이션(인터페이스), 비즈니스(서비스), 데이터 접근(퍼시스턴스) 계층으로 나뉜다.
레이어드 아키텍처
분산 하이퍼미디어 시스템 아키텍처의 형식
주고 받는 자원에 이름을 규정하고 URI에 명시하고 HTTP 메서드를 통해 해당 자원의 상태를 주고 받는 것
플랫폼 기술에 종속되지 않고 호환해 사용할 수 있다는 것
서버에 상태 정보를 보관하지 않는다.
세션, 쿠키 별도 보관 X
HTTP 표준을 그대로 사용하기 때문에 HTTP의 캐싱 기능 적용 가능
캐싱 가능에 대한 명시가 필요하며 가능할 시 클라이언트에서 캐시에 저장해두고 같은 요청에 대해 사용한다.
네트워크 상 여러 계층으로 구성될 수 있다.
REST 서버는 API 제공 / 클라이언트는 사용자 정보 관리하는 구조로 분리해서 설계한다.
/
포함 X_
을 사용하지 않고 -
사용https://start.spring.io
프로젝트 생성시 lombok, spring configuration processor, spring web을 Dependencies에 추가한다.
HTTP 통신을 테스트 하고 확인할 수 있는 프로그램
요청 시 다음과 같이 해당 요청에 대한 Response Code, body 값을 띄워준다
스프링 부트 핵심 가이드
-장정우