이 글은 크레이그 윌즈의 "스프링 인 액션(5판)"을 읽고 간략히 정리한 글이다.
스프링이란?
- Spring Application Context : 스프링에서 제공하는 컨테이너Container. 애플리케이션 컴포넌트들을 생성하고 관리한다.
- Bean 빈 : 애플리케이셔 컴포넌트
- 의존성 주입 Dependency Injection : 컴포넌트에 의존하는 다른 빈의 생성과 관리를 컨테이너가 해준다.
- XML 또는 자바로 Configuration 설정을 할 수 있는데, 보통은 Auto Configuration(자동 구성)이 있어서 알아서 다 해준다.
- Auto Configuration은 autowiring(자동 연결)과 component scan(컴포넌트 검색)을 기반으로 한다. component scan을 통해 classpath에 지정된 컴포넌트를 찾고 빈으로 생성할 수 있으며 qutowiring을 통해 자동으로 의존성을 주입할 수 있다.
스프링 프로젝트 구조
- 애플리케이션 소스코드는 src/main/java에, 테스트 코드는 src/test/java에, 자바 리소스가 아닌 것은 arc/main/resources에 저장된다.
- 기타 여러가지 파일 및 폴더들
- mvnw, mvnw.cmd : 메이븐 래퍼 스크립트 파일. 메이븐이 설치되어 있지 않아도 이 스크립트를 사용해 프로젝트를 빌드할 수 있다.
- pom.xml : 메이블 빌드 명세
- application.properties : 구성 속성 파일
- static : 정적인 콘텐츠를 둘 수 있는 폴더 (이미지, css, javascript)
- templates : 템플릿 파일을 두는 폴더 (Thymeleaf)
빌드 명세 (pom.xml)
- POM = Project Object Model
- <parent><version>에는 사용하는 spring-boot-starter-parent의 버전을 명시한다.
- 의존성은 <dependencies>에 정의된다. 각 의존성은 <dependency>
- 스프링 부트 스타터를 사용하면 얻을 수 있는 장점은, 관련된 라이브러리의 버전이나 의존성을 알아서 관리해준다는 것이다.
애플리케이션 부트스트랩(구동)
- @SpringBootApplication 애노테이션은 부트스트랩 클래스(애플리케이션을 실행하기 위한 클래스)임을 나타낸다.
- @SpringBootApplication은 다음 세가지 애노테이션이 결합한 것이다.
- @SpringBootConfiguration : 현재 클래스를 Configuration 클래스로 지정한다. @Configuration 애노테이션의 특화된 형태다.
- @EnableAutoConfiguration : 스프링 부트 Auto Configuration(자동 구성)을 활성화한다. 필요로 하는 컴포넌트들을 자동으로 구성하도록 스프링 부트에 알려준다.
- @ComponentScan : Component Scan(컴포넌트 검색)을 활성화한다. @Component, @Controller, @Service 등의 애노테이션과 함께 클래스를 선언할 수 있게 해준다. 스프링은 그런 클래스를 찾아 자동으로 Aplication Context에 컴포넌트로 등록한다.
애플리케이션 테스트
- @SpringBootTest는 스프링 부트 기능으로 테스트를 시작하라는 것을 JUnit에 알려준다. Spring Applicaion Context를 로드하는 작업을 수행한다.
- @SpringBootTest 애노테이션이 있어도 테스트 메서드가 없으면 아무 일도 하지 않는다.
스프링 애플리케이션 작성
- 컨트롤러 : 웹 요청과 응답을 처리하는 컴포넌트.
- @WebMvcTest는 스프링 부트에서 제공하는 테스트 애노테이션으로, 스프링 MVC 애플리케이션 형태로 테스트가 실행되도록 한다.
- 톰캣에 애플리케이션을 설치하지 않았는데도 실행이 가능한 이유는 스프링 부트 애플리케이션에 실행에 필요한 모든 것이 포함되기 때문이다.
DevTools의 유용한 기능
- 코드가 변경될 때 자동으로 애플리케이션을 자동으로 시작한다.
- 브라우저로 전송되는 리소스(템플릿, 자바스크립트, css)가 변경될 대 자동으로 브라우저를 새로고침한다.
- 템플릿 캐시를 자동으로 비활성한다.
- H2 데이터베이스를 사용중이라면 자동으로 H2 콘솔을 활성화한다.
개발에서만 사용되므로 운영에서는 자동으로 비활성화된다.
스프링 살펴보기
- 스프링 프레임워크 : 스프링의 기반. MVC, JDBC 지원, 리액티브 프로그래밍.
- 스프링 부트 : 스타터 의존성과 자동-구성, 그리고 여러 편리한 기능 제공
- 스프링 데이터 : JPA, Mongo, Neo4j
- 스프링 시큐리티 : 스프링의 보안 프레임워크
- 스프링 통합과 배치
- 스프링 클라우드
'공부 > Spring' 카테고리의 다른 글
[스프링 인 액션] Chapter 3 데이터로 작업하기 (0) | 2022.05.08 |
---|---|
[스프링 인 액션] Chapter 2 웹 어플리케이션 개발하기 (0) | 2022.04.18 |
[스프링 프레임워크 Core] 스프링 IoC 컨테이너와 빈 (0) | 2020.06.06 |
스프링 AOP & PSA (0) | 2020.05.31 |
스프링 IoC (0) | 2020.05.29 |