공부/Spring

[스프링 인 액션] Chapter 1 스프링 시작하기

Lai_Khan 2022. 4. 8. 02:10
이 글은 크레이그 윌즈의 "스프링 인 액션(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
  • 스프링 시큐리티 : 스프링의 보안 프레임워크
  • 스프링 통합과 배치
  • 스프링 클라우드