북 스터디/스프링 부트 핵심가이드

스프링부트 란? / 기초 지식

EnoughTT 2023. 3. 18. 17:38

개념 정리 할 책!

스프링 프레임워크란?

자바 기반의 애플리케이션 프레임워크

제어 역전 (IoC)

제어의 역전은 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 의미

 

객체의 관리를 컨테이너에 맡기는 것이 제어 역전
제어 역전을 통해 의존성 주입 (DI), 관점 지향 프로그래밍 (AOP) 등이 가능해 짐

비즈니스 로직을 작성하는 데 더 집중할 수 있음

의존성 주입 (DI)

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

 

의존성을 주입 받는 방법

  • 생성자
  • 필드 객체 선언
  • setter 메서드

스프링에서는 @Autowired 라는 어노테이션을 통해 주입할 수 있음

관점 지향 프로그래밍 (AOP)

관점을 기준으로 묶어 개발하는 방식

 

핵심기능과 부가기능 관점으로 나누어짐

- 핵심기능 : 비즈니스 로직을 구현하는 과정에서 비즈니스 로직이 처리하려는 목적 기능을 말함

- 부가기능 : 핵심기능이 무관하게 로직이 수행되기 전 또는 후에 수행되기만 하면 됨

 

스프링에서 하이버네이트를 사용하기 위해 작성하는 설정파일이 있음

하이버네이트

자바 언어를 위한 객체 관계 매핑 프레임워크로, 객체 지향 도메인 모델을 관계형 데이터베이스로 매핑하기 위한 프레임워크를 제공함

 

모듈들을 계속 추가하면 복잡해져 이를 해결하기 위해 스프링 부트가 등장

스프링 부트

의존성 관리

'spring-boot-starter' 라는 의존성을 제공함

  • spring-boot-starter-web : 스프링 MVC를 사용하는 RESTful 어플리케이션을 만들기 위한 의존성 / 기본으로 톰캣이 내장되어 있어 jar 형식으로 실행 가능
  • spring-boot-starter-test : JUint Jupiter, Mockito 등의 테스트용 라이브러리 포함
  • spring-boot-starter-jdbc : JDBC 기능 제공
  • spring-boot-starter-security : 스프링 시큐리티 기능 제공
  • spring-boot-starter-data-jpa : 하이버네이트를 활용한 JPA 기능 제공
  • spring-boot-starter-cache: 캐시 기능 지원

자동설정

필요한 환경 설정을 알아서 찾아주는 자동 설정을 지원함

 

내장 WAS

각 웹 애플리케이션에는 내장 WAS가 존재

필요에 따라 다른 웹 서버(Jetty, Undertow) 등 대체할 수 있음

 

모니터링

스프링 부트 액추에이터라는 자체 모니터링 도구가 있음


기초 지식

서버 간 통신

하나의 서비스 단위로 개발하게 되면 추후 업데이트하거나 유지보수를 할때 마다 보수적인 입장을 취할 수 밖에 없음

이런 문제를 해결하기 위해 마이크로서비스 아키텍처 (MSA)가 등장

마이크로 서비스 아키텍처 (MSA)

서비스 규모를 작게 나누어 구성한 아키텍처

 

서버 간 통신은 한 서버가 다른 서버에 통신을 요청하는 것을 의미

가장 많이 사용되는 방식은 HTTP/HTTPS

 

스프링 부트의 동작 방식

스프링 MVC 구조 기반

 

레이어드 아키텍처

애플리케이션의 컴포넌트를 유사 관심사를 기준으로 묶어 수평적으로 구성한 구조

 

어떻게 설계하냐에 따라 용어와 계층의 수가 달라짐

일반적으로 3계층 또는 4계층을 구성

  • 프레젠테이션 계층 : 클라이언트의 요청을 해석하고 응답하는 역할 / UI나 API 제공 / 비즈니스 계층으로 요청 후 결과를 응답하는 역할
  • 비즈니스 계층 : 기능을 정의하고 세부 작업을 수행하는 도메인 객체를 통해 업무를 위임하는 역할 / DDD 기반 아키텍처에서 비즈니스 로직에 도메인이 포함되기도 하고, 별도로 도메인 계층을 두기도 함
  • 데이터 접근 계층 : 데이터베이스와 연동 작업 역할

특징

  • 각 레이어는 가장 가까운 하위 레이어의 의존성을 받음
  • 관심사에 따라 묶여있으며, 다른 레이어의 역할을 침범하지 않음
  • 단위 테스트에 용이

디자인 패턴

소프트웨어 설계 시 자주 발생하는 문제들을 해결하기 위해 고안된 해결책

 

GoF 디자인 패턴

생성, 구조, 행위 패턴으로 구분

  • 생성 : 객체 생성에 사용되는 패턴 / 객체 수정시 호출할때 영향을 받지 않음
  • 구조 : 객체를 조합해 더 큰 구조를 만드는 패턴
  • 행위 : 알고리즘이나 책임 분배에 관한 패턴 / 결합도 최소화를 고려할 필요가 있음

REST API

가장 많이 사용되는 애플리케이션 인터페이스
주고받는 자원에 이름을 규정하고 URI에 명시해 HTTP 메서드 (GET, POST, PUT, DELETE) 를 통해 해당 자원의 상태를 주고 받는 것

 

특징

  • 유니폼 인터페이스 : 일관된 인터페이스를 말함 / 플랫폼 및 기술에 종속되지 않고 호환해서 사용할 수 있음
  • 무상태성 : 서버에 상태 정보를 따로 보관하거나 관리하지 않음 / 개별적으로 처리
  • 캐시 가능성 : HTTP의 캐싱 기능 적용 가능 / 서버의 트랜잭션 부하가 줄어 성능이 개선됨
  • 레이어 시스템 : 네트워크 상의 여러 계층으로 구성 될 수 있음
  • 클라이언트-서버 아키텍처 : 의존성을 낮춰줌

REST URI 설계 규칙

  • URI 마지막에는 '/' 를 포함하지 않는다.
  • 언더바('_') 가 아닌 하이픈('-') 사용
  • 결과(명사)를 포함
  • 소문자로 작성
  • 확장자는 포함 하지 않음

'북 스터디 > 스프링 부트 핵심가이드' 카테고리의 다른 글

연관관계 매핑  (0) 2023.04.09
Spring Data JPA  (0) 2023.04.01
데이터베이스 연동 - 2  (0) 2023.03.26
데이터베이스 연동 - 1  (0) 2023.03.25
스프링 부트 개발하기 / API 작성  (0) 2023.03.19