- 단독실행 가능한 스프링 애플리케이션 생성
- 내장 컨테이너로 톰캣, 제티 혹은 언더토우 중에서 선택가능
- 스타터를 통해 간결한 의존성 구성 지원
- 스프링에 대한 자동구성 제공
- 더이상 XML구성 필요없음
- 제품출시 후 운영에 필요한 다양한 기능(상태점검, 모니터링) 제공
한마디로 스프링 프레임워크를 기반으로 한 개발 플랫폼
- 빌드도구(그레이들 vs 메이블)
- 스프링 프레임워크(4.X vs 5.x)
- 스프링 부트(1.5 vs 2.0)
- 스프링 부트 스타터
- sprint-boot-autoconfigure + sprint-boot-dependencies
- 스타터를 통해 간결한 의존성 구성 지원
- 개발자가 신경써야 하는 것
- 스프링 부트 버전
- 사용하려는 라이브러리의 스프링 부트 스타터 지원 여부
- 지원하지 않는 경우 사용하려는 라이브러리 등록 방법
- 스프링 부트가 기술흐름에 따라 제공하는 관례(Convention)적인 구성
- 봐야할 모듈: spring-boot-autoconfigure
- 동작선언
- @EnableAutoConfiguration(in @SpringBootApplication)
- @Configuration
- 사용 애너테이션
- @Configuration
- @ConditionOn
- 있거나 없거나
- ~AutoConfiguration 접미사
- 실행인자
- SPRING_APPLICATION_JSON
- 환경변수
- application.yml or application.properties
- application-(default|profiles).yml or application-(default|profiles).properties
- @ComponentScan을 통해 ApplicationContext 적재
- @Repository
- @Component
- @Service
- @Controller & @RestController
- @Configuration
- @Bean
- @ConfigurationProperties
- DI, IoC, @Autowired
- @Value vs @ConfigurationProperties
- AOP
rootProject.name = 'spring-boot'
- 멀티 프로젝트 구성시 사용
- 프로젝트 이름
- 하위 프로젝트 정의
- 하위 프로젝트 설명
Spring Boot를 사용했을때 WebMvcAutoConfiguration 클래스를 통해서 Spring MVC를 자동으로 설정한다. 여기서 자동설정이 되는 조건이 중요하다.
@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class,
WebMvcConfigurerAdapter.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class,
ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {
...
}Spring Boot에서 WebMvcAutoConfiguration이 자동으로 설정될 조건은 아래와 같다.
- 클래스패스에 Servlet.class, DispatcherServlet.class, WebMvcConfigurerAdapter.class가 존재해야한다.
- WebMvcConfigurationSupport 타입의 빈이 존재해서는 안된다.
- 웹 어플리케이션으로 실행된다. (ApplicationContext가 WebApplicationContext인 경우)
- 출처: https://gunju-ko.github.io/spring/2018/06/28/@EnableWebMvc.html
- 주로 개발자가 제어할 수 없는 외부 라이브러리 클래스 등록할 때 사용
- 주로 내가 작성한 클래스 등록할 때 사용
- 트랜잭션 필요할 때
- 필요없으면 @Component
- 스프링 IoC 컨테이너에서 생성하고 호출하고 소멸되기까지 생명주기를 관리하는 객체
- @SpringBootTest
- @WebMvcTest
- @WebFluxTest
- @DataJpaTest
- @JdbcTest
- ...
- 서비스 기획
- 기능분석 및 설계
- 구현
- 빌드
- 배포
- 운영
- 지원플랫폼: 웹, 아이폰, 안드로이드
- 개발언어: Java
- 개발도구: IntelliJ
- 빌드도구: Gradle
- 개발플랫폼: Spring Boot
- 운영플랫폼: AWS(에만 하고 싶지만 개인정보 보호법, IDC 사용해야 함)
- 필요한 기능
- 플랫폼에서 호출할 REST API
- 관리시스템(백오피스)
- 고객관리
- 도서유형관리
- 도서관리
- 메일발송 시스템
- Mail Chimp, SendGrid, ...
- 알림푸시 시스템
- AWS SNS, Firebase, ...
- 포인트 시스템
- 정산 시스템
- 통계 및 매출차트 지원
- ...
- 소스버전관리 시스템: Git with Github
- 빌드배포 시스템: 젠킨스
- 로그수집...
- 개발환경
- local, test, dev, beta(경우에 따라 생략했다가 나중에..), prod
- DB
- MariaDB
- common
- 프로젝트에서 공통으로 사용하는 유틸리티, 예외
- core
- 프로젝트 도메인(@Entity, @Repository)
- api
- 외부에 정보를 제공하는 REST API 모듈
- admin
- 서비스를 관리하기 위한 백오피스
- batch
- 정기적으로 실행될 배치 프로그램 모음
- message
- 알림톡, SMS, 메일 발송 등 담당
- README를 작성하라.
- 실행절차를 설명하라.
- 실행절차에 따라 빌드하고 실행되도록 하라.
- 커밋 및 푸시는 테스트 및 빌드가 성공되었을때 하라.
- 코딩 컨벤션은 팀원과 함꼐 만들자.
- local: 개발자 로컬 실행환경
- 개발자가 자유롭게 초기화 및 구성을 수행할 수 있다.
- test: 통합테스트 환경 (주로 빌드 전 실행된다)
- 테스트 실행때마다 초기화된다.
- dev: 개발서버 실행환경
- 운영서버와 동일한 환경을 가지며 개발기능을 확인하는 용도로 사용된다.
- beta: (준)운영서버 실행환경
- 운영서버와 동일한 환경으로 큰 배포에 앞서서 운영서버의 데이터를 복제하여 정상 동작을 확인
- prod: 운영서버 실행환경
- (가급적) 손대지 않아야 할 환경
- 기능을 정의하고 이를 관리받기 위한 이슈 발급
- 기능(feature)개발 하고 리뷰 받고 OK하면 develop 브랜치에 푸시
- 개발서버에 배포
- 개발서버에서 기능확인
- 베타서버 배포
- 베타서버에서 기능관련자(기획자)의 기능확인
- develop 브랜치 코드를 master에 머지하고 푸시
- 운영서버 배포
- 운영서버 적용
- 기본적인 개발방식은 도메인 계층을 먼저 개발한다.
- @Repository
- @Entity
- 그리고 도메인간 서로 연계되는 부분이 있는 경우 서비스 계층에서 개발한다.
- @Service
- @Transaction 트랜잭션 관리도 이 영역에서!
- 외부에 노출되는 부분에서는 표현 계층에서 개발한다.
- @Controller, @RestController + @ViewController
- @RequestMapping
- ModelAndView