Spring Boot
정의
최소한의 설정으로 단독 실행 가능하고 제품 수준의 스프링 기반 애플리케이션을 만들 수 있게 해주는 프레임워크
주요특징
- Stand-alone : Tomcat, Jetty와 같은 WAS가 임베딩되어 바로 실행 가능
- 라이브러리를 간편하게 추가하는 starter 제공
- 자동화된 구성 : starter를 추가하거나 직접 jar 추가 시 이를 분석하여 스프링 부트에서 자동으로 구성
H2 DB 라이브러리가 존재하고 DB연결 설정을 하지 않은 경우 자동으로 인메모리 DB 구성 수행함
라이브러리 의존성
의존성을 가진 객체에 Spring IoC Container가 해당 클래스의 구현체 인스턴스를 제공하므로 선언만해서 사용 가능
의존성 주입
- 어떤 클래스에 의존성을 가진 객체에 해당 클래스의 구현체의 인스턴스를 제공하는 것
- 주입방식
. 생성자 주입 : 일반적으로 권장
. 메소드 주입 : 클래스간 순환 참조 발생 시 대안
. 필드 주입 : 간편하게 작성할 때 (테스트 케이스 등)
Inversion of Control
IoC는 Inversion of Control로 제어의 역전을 의미
Spring IoC Contatiner
Spring Bean의 인스턴스화(instantiating), 구성(configuring) 및 조립(assembling)을 담당
Spring Bean
- IoC Container 에서 관리하는 객체
- 생성 방법 3가지 : XML, 애노테이션, 직접 코드 작성
- 애노테이션을 이용하여 생성
. 클래스에 @Component 애노테이션 선언 / 일반적인 스프링 빈 생성
. 메소드에 @Bean 에노테이션 선언 / 클래스에 @Component 직접 선언 할 수 없는 라이브러리 활용 시
의존성 관리 도구 - Gradle & Maven
개발 시 필요한 라이브러리를 쉽게 추가하고 자동으로 다운받고 구성해 줌
REST API
정의
- REST 의 설계 원칙, REpresentational State Transfer 아키텍처 스타일을 준수하는 API
- REST 를 준수한다는 의미로 RESTful API 라고도 부름
설계 원칙
- Uniform interface : 리소스를 식별하고 수정하기 위해 URI와 HTTP 메소드 사용
- Client-server 아키텍쳐 : 서버와 클라이언트는 완전히 독립적
- Stateless : 세션 정보 서버에 저장하지 않고 클라이언트에 의해 전달되어야 함
- Cacheability : 캐싱에 대한 매커니즘 지원
- Layered system architecture : 여러 계층으로 나눌 수 있음
- Code on demand (optional) : 서버에서 코드를 클라이언트로 보내 실행 가능
Swagger
정의
REST API를 설계하고 문서화하기 위한 여러가지 도구 제공
도구 | 설명 |
Swagger Editor | UI를 통해서 API Spec을 설계 |
Swagger UI | API Spec에 대한 UI를 제공 |
Swagger Codegen | API Spec으로 부터 서버나 클라이언트 Code를 생성 |
OpenAPI
정의
Http API 설계를 위한 표준 사양서
Spring Boot Starter Test
정의
어떤 라이브러리에 의존성을 가지고 있는지 Compile Dependencies 에서 확인 가능
주요 라이브러리
- Junit Jupiter : JUnit 5, 단위 테스팅 프레임워크
- AssertJ : 다양한 Assertion 제공, Assertion 은 테스트 결과를 검증
- Hamcrest Matcher : 값을 비교할 때 좀 더 편리하게 해주는 라이브러리
- Mockito : mock object 를 편리하게 생성하는 라이브러리
- JsonPath : Json 데이터를 쉽게 접근하는 표현식을 제공
JUnit 5
정의
- 단위 테스팅 프레임워크
- JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
애노테이션
- @Test : 해당 메소드가 테스트 메소드라는 것을 지정/테스트 케이스
- @BeforeEach : 각 @Test 메소드를 실행하기 전에 매번 실행
- @AfterEach : 각 @Test 메소드를 실행한 후에 매번 실행
- @BeforeAll : 모든 @Test 메소드가 실행되기 전에 한 번 실행
- @AfterAll : 모든 @Test 메소드 후가 실행된 후에 한 번 실행
- @ExtendWith : JUnit Extension 을 등록
Controller Test 방식
- @springBootTest
. 애플리케이션 전체 로딩으로 속도 느림(통합 테스트)
. 단점 : 대상 및 컴포넌트도 함께 로딩
- @WebMvcTest
. 컨트롤러 클래스 로딩으로 속도 빠름(단위 테스트)
. 단점 : 컨트롤러만 로딩하므로 의존성 가진 컴포넌트 수동 추가 필요
JsonPath
Xml 의 Xpath와 유사하게 Json 데이터에 대한 간편한 접근 방법을 제공
Hamcrest
Matcher 라이브러리로 값을 비교할 떄 좀 더 편리하게 해주는 라이브러리
Springfox
Spring에서 웹기반의 Swagger UI를 제공하고, API 문서화를 편리하게 작성하게 해주는 라이브러리