Spring Boot (1) Spring Boot란?

넙데데맨·2022년 7월 14일
0
post-custom-banner

Spring 기초 개념

IoC(제어역전)

객체의 생명주기 관리를 프로그래머가 아닌 스프링 컨테이너가 해준다.

DI

제어 역전의 방법 중 하나
스프링 컨테이너가 생성한 객체를 주입 받아 사용하는 방식

DI 방식

생성자, 필드 객체 선언, setter 방식이 있으며 생성자 방식이 권장
=> 레퍼런스 객체가 없으면 객체를 초기화할 수 없게 설계할 수 있다.

AOP

OOP를 도와주는 개념
관점을 기준으로 묶어 개발하는 방식
핵심 기능과 부가 기능으로 나눠 부가 기능을 공통 로직으로 처리하도록 삽입한다.

AOP 방식

스프링에서는 프락시 방식을 통해 AOP 기능 지원

Spring vs SpringBoot

Spring 사용을 위해서 설정을 해줘야 하는데 이 설정이 복잡하다.
이를 해결하기 위해 등장한 것이 SpringBoot

Spring

DI

각 모듈의 의존성, 호환성을 직접 설정해야 함

Spring Boot

DI

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 캐시 기능

자동 설정

@SpringBootApplication

아래의 3개 어노테이션을 합쳐놓은 구성
@ComponentScan @Component 시리즈 어노테이션이 붙은 클래스를 발견해 빈으로 등록
@SpringBootConfiguration 환경설정 빈
@EnableAutoConfiguration spring.factories 내부에 여러 Configuration들을 조건에 따라 빈 등록

내장 WAS

톰캣에도 자동 설정 기능이 지원되기 때문에 설정 없이 톰캣 실행 가능하며 다른 웹 서버로 대체도 가능하다.

모니터링

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계층은 프레젠테이션(인터페이스), 비즈니스(서비스), 데이터 접근(퍼시스턴스) 계층으로 나뉜다.
레이어드 아키텍처

REST

분산 하이퍼미디어 시스템 아키텍처의 형식
주고 받는 자원에 이름을 규정하고 URI에 명시하고 HTTP 메서드를 통해 해당 자원의 상태를 주고 받는 것

특징

유니폼 인터페이스

플랫폼 기술에 종속되지 않고 호환해 사용할 수 있다는 것

무상태성

서버에 상태 정보를 보관하지 않는다.
세션, 쿠키 별도 보관 X

캐시 가능성

HTTP 표준을 그대로 사용하기 때문에 HTTP의 캐싱 기능 적용 가능
캐싱 가능에 대한 명시가 필요하며 가능할 시 클라이언트에서 캐시에 저장해두고 같은 요청에 대해 사용한다.

레이어 시스템

네트워크 상 여러 계층으로 구성될 수 있다.

클라이언트 서버 아키텍처

REST 서버는 API 제공 / 클라이언트는 사용자 정보 관리하는 구조로 분리해서 설계한다.

설계 규칙

URL 규칙

  • URI 마지막에 / 포함 X
  • _을 사용하지 않고 - 사용
  • URL에는 결과 포함(명사로 표현)
  • URI는 소문자로 작성 / 대소문자를 다른 문자로 인식할 수 있기 때문
  • 파일 확장자는 URI 포함 X / HTTP에서 제공하는 Accept 헤더 사용

프로젝트 생성

https://start.spring.io
프로젝트 생성시 lombok, spring configuration processor, spring web을 Dependencies에 추가한다.

Postman, Talend API Tester

HTTP 통신을 테스트 하고 확인할 수 있는 프로그램
요청 시 다음과 같이 해당 요청에 대한 Response Code, body 값을 띄워준다

스프링 부트 핵심 가이드
-장정우

profile
차근차근
post-custom-banner

0개의 댓글