//////
Search
🗒️

스프링부트

날짜
2022/10/26
작성자
황민우
카테고리
회고

목차

스프링부트에 들어가기 앞서..

IoC

Inversion of Control : 제어 역전
일반적으로 객체를 사용하기 위해 사용자가 직접 객체를 선언하고 해당 객체의 의존성을 생성한 후 객체에 제공
함.
IoC를 적용한 환경에서는 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임함.
외부란? 스프링 컨테이너 또는 IoC 컨테이너를 말함.

DI

Dependency Injection : 의존성 주입
객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식.

DI 방법

1.
필드 주입
public class UserController { @Autowired private UserService userService; // ... }
Java
복사
2.
설정자 주입
public class UserController { private UserService userService; public setUserSerivce(UserService userService) { this.userService = userService; } // ... }
Java
복사
3.
생성자 주입
public class UserController { private UserService userService; public UserController(UserService userService) { this.userService = userService; } // ... }
Java
복사
스프링부트 공식 문서에서는 3번 생성자 주입을 권장함.
생성자 주입 방법은 참조객체(UserService)가 없으면 객체(UserController)생성이 제한되기 때문이다.

AOP

Aspect-Oriented Programming : 관점지향 프로그래밍
관점이란 어떤 기능을 구현할 때 그 기능을 핵심 기능과 부가 기능으로 구분해 각각을 하나의 관점으로 보는 것을 의미.
여러 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식.

레이어드 아키텍처

특징

가장 가까운 하위 레이어를 의존
다른 레이어의 역할을 침범하지 않음.
다른 레이어의 의존성을 낮춰 단위 테스트에 용이.

레이어 (계층)

프레젠테이션 계층 : Controller
비즈니스 계층 : Service
데이터 접근 계층 : Dao, Repository
영속화 : DB에 저장하여 application이 꺼지더라도 데이터를 유지할 수 있도록하는 것.

REST API

REST:

주고 받는 자원에 이름을 규정하고 URI에 명시해 HTTP 메서드를 통해 해당 자원의 상태를 주고받는 것.

REST API:

API : Application Programming Interface, 서버 또는 프로그램 사이를 연결
REST API : REST 아키텍처를 따르는 API

특징

유니폼 인터페이스 HTTP ㅍ준 전송 규약을 따르기 때문에 어떤 프로그래밍 언어로 만들어졌느냐와 상관없이 호환 가능.
무상태성 서버는 클라이언트가 보낸 요청에 대해 세션이나 쿠키를 보관하지 않음.
캐시 가능성 HTTP 캐싱 기능 적용 가능

규칙

1.
URI 마지막에 ‘/’를 포함하지 않음.
2.
언더바(_)는 사용하지 않음. → 하이픈(-)으로 대체
3.
URI에는 동사가 아닌 명사를 사용.
4.
URI는 소문자로 작성.
5.
URI에 파일의 확장자는 포함하지 않음.

HTTP

메소드

Get
Post
Put
Delete
기타…

스프링 ≠ 스프링부트

스프링과 스프링부트는 다르다. 스프링부트는 스프링 프레임워크에 WAS, 편의 기능 등이 추가된 것이다.

스프링부트 특징

내장 WAS
WAS(Web Application Server) 기본적으로 톰캣이 내장되어 있음.
의존성 관리
라이브러리를 추가할때 다른 라이브러리의 호환성을 체크해야함.
하지만 spring-boot-starter 라이브러리는 서로 호환되는 버전의 모듈 조합을 제공함.
자동 설정
애플리케이션에 추가된 라이브러리를 실행하는 데 필요한 환경 설정을 찾아줌.
모니터링
스프링 부트 액추에이터라는 모니터링 도구 제공.

스프링부트 프로젝트

생성

인텔리제이 Ultimate

Spring.io

빌드

Gradle

Gradle탭 - Task - build - build

Maven

Maven탭 - 프로젝트명 - Lifecycle - package
jar 실행
java -jar {빌드된 jar파일}

어노테이션(애노테이션)

@RestController @RequestMapping("/api/v1/hello") public class HelloController { @GetMapping("") public String hello() { return "Hello World"; } @GetMapping("/{value}") public String pathValue(@PathVariable("value") String value) { return "echo " + value; } }
Java
복사

@RestController

dispatcherServlet이 매핑해줄 Controller를 등록.

@RequestMapping

경로와 HTTP메소드를 매핑해주는 어노테이션.
클래스에 붙일 경우 클래스에 속한 모든 메소드에 공통적으로 적용됨.

@GetMapping

@GetMapping@RequestMapping 에 HTTP 메소드를 미리 설정해서 제공해줌.
그 외
@PostMapping
@PutMapping
@DeleteMapping
등이 존재함.

@PathValue

경로에 담겨온 변수를 받는 어노테이션
@GetMapping("/{value}") // {} 안에 변수 이름을 넣는다 public String pathValue(@PathVariable("value") String value) { // 파라미터의 변수명과 URI경로에 적은 변수 이름이 같다면 @PathVariable() 안에 인자는 생략 가능함. // 만약 다르다면 인자로 URI경로에 적은 변수 이름을 넣어준다. return "echo " + value; }
Java
복사