반응형
소개
이번에 출간된 스프링부트 코딩 공작소를 읽고나서 해당 내용을 정리도 할겸, 기존에 SpringBoot에 대해서 깨알같이 사용하던 내용들도 포함해서 한번에 정리하게 되었다.
|
간편한 설정
- 기존에 SpringFramework가 기본적으로 해야할 셋팅이 너무 많고 어려웠던 점을 해소하기 위해 나옴
- RoR (Ruby on Rails)나 Express (Nodejs 웹프레임워크)를 사용해보니 그 차이가 더 심하게 느껴짐 (SpringFramework 으로 하루가 걸릴 CRUD 게시판이 express로 1~2시간만에 작성되니 멘붕)
- 이런 이유로 이전까지 직접 하던 설정들 중 변경요소가 크지 않는 많은 설정들을 기본적으로 지원하도록 나온것이 Spring Boot이다. (흔히 이런 변경요소 없이 계속 사용되는 코드를 보일러플레이트라고 한다. 스크립트 언어쪽은 이런쪽이 엄청 잘되어 있다.)
- 예를 들어, 템플릿엔진으로 Freemarker를 사용해야한다면 기존엔 ViewResolver를 Bean으로 등록하고, prefix, suffix를 설정해야한다. 하지만 boot의 경우 해당하는 의존성을 추가만 하면 별도로 설정이 필요 없다.
간단한 배포서버 구축
- 간편한 설정외에도 부트의 최고장점으로 꼽는것이 단독 어플리케이션만으로 배포가 되도록 하는것이다.
- 이전까지만 하더라도 서버가 새로 구축되면 해당 서버에 기존 프로젝트와 동일한 버전의 Tomcat을 설치하고, Tomcat의 여러 설정 xml값을 수정하고, maven/gradle같은 build 툴을 설치하는 등 서버 하나 확장하는것이 일이였다.
- 하지만 Boot의 경우 JDK 설치하고, java -jar ~~~.jar로 실행시키면 웹서버 구축 끝이다. Tomcat에 대한 설정도 application.properties/yml로 하기 때문이다
- Make jar, Not War
- Getting Started SpringBoot에서 나오는 대사로 war를 더이상 쓰지말고 jar를 사용하자는 주제가 나온다.
- war도 단독으로 실행이 가능하기 때문에 진짜 war말고 jar를 쓰자는 얘기라기 보다는 단독 파일로 실행이 가능한 방향으로 배포를 진행하자는 얘기로 보면 된다.
- 관련 영상은 여기를 참고 (영어라서 해석이 조금 틀릴수도 있음..)
편리한 의존성 관리
- 사용하고 싶은 의존성에 대해 호환성을 고려하지 않아도 된다.
- SpringFramework 시절엔 Freemarker를 사용하기 위해선 Freemarker의 몇 버전과 Spring의 몇 버전이 호환이 되는지, 추가로 어떤 의존성이 필요한지 확인하는 과정이 꼭 필요하였다.
- SpringBoot의 의존성 시리즈인 starter의 경우엔 사용하고 싶은 의존성이 Freemarker라면 spring-boot-starter-freemarker만 추가하면 그외에 어떤 의존성도 필요없다.
- starter 시리즈의 의존성이 버전, 추가의존성에 대한 호환성을 모두 보장하기 때문이다.
- 필요없는 의존성 혹은 교체하고 싶은 의존성이 있다면 제외(exclude)시킬수 있다.
(Gradle에서 Boot의 의존성 제외 코드)
오해
- 구 Spring프로젝트(2.x나 3.0)를 하다가 바로 Spring Boot로 넘어올 경우 오해하는것 중 하나가 Java 코드로 설정하는 것이다.
- Java 코드로 설정하는 것은 Boot에서만 되는것이 아니다. SpringFramework 에서도 된다.
- 다만 Boot는 Java code로 설정하는것조차 더욱 간단하게 application.properties/application.yml로 관리할수 있게 해준다.
- 링크를 가보면 application.properties/application.yml로 어떤것들을 설정할수있는지 나오는데, 보면 Tomcat port부터 시작해서 웹 어플리케이션에 관련된 설정 전부를 다루고 있음을 확인할수 있다.
Security
- Spring boot가 대부분의 설정을 자동화하여 준다고 해도 보안(security) 관련 부분은 대부분 개발자가 직접 구현해야 한다
- spring-starter-security 적용후 추가 설정이 없을 경우 기본 제공되는 자동설정이 적용된다.
- Spring Security가 적용된 간단한 Login 기능 코드보기
- 자동설정 vs 사용자설정 코드
(Spring-starter-security의 자동 설정 어노테이션)
- @Conditional~~ 어노테이션들의 조건을 모두 만족할 경우 SpringBootWebSecurityConfiguration이 자동 설정된다. 만족하지 않을 경우 생성되지 않는다
- @ConditionalOnClass({ EnableWebSecurity.class, AuthenticationEntryPoint.class })
- EnableWebSecurity.class, AuthenticationEntryPoint.class가 classpath에 포함되어있어야 한다 (즉, 프로젝트에 포함되어 있어야 함)
- @ConditionalOnMissingBean(WebSecurityConfiguration.class)
- WebSecurityConfiguration 타입의 Bean이 없어야만 한다.
- 즉, extends WebSecurityConfigurerAdapter 할 경우 자동설정을 사용하지 않게 된다.
(Spring-starter-security의 자동 설정을 사용하지 않고 직접 설정할 경우)
Test
- SpringBoot에 들어서며 테스트 코드 작성이 대폭 심플해졌는데 1.4.0 들어서며 더더욱 간편해졌다.
- 내용 자체가 많아 이는 별도의 포스트에서 정리했다.
Logger
- 기본적으로 SpringBoot는 logback(로그백)을 포함하고 있다. 자세한 가이드는 공식문서를 참고하자.
- logback을 완전히 제어하려면 src/main/resources에 logback.xml이 존재하면 된다.
- logback.xml이 없을 경우 기본설정이 적용된다.
- level : info
- appender : stdout
(logback.xml도 없고, application.properties/yml도 설정이 하나도 없을 경우 적용될 logback 기본설정)
- application.properties/yml로 logback 설정이 가능하다.
- logback의 상세한 설명은 링크를 참고한다
Banner
- Boot 실행시 등장하는 아스키 배너는 다른 배너로 수정이 가능하다.
- 이미지 to 아스키 에서 원하는 이미지를 아스키코드로 convert 한다.
- src/main/resources에 추출한 아스키 코드를 banner.txt 파일에 복붙한다.
- application.properties 혹은 application.yml에 banner.location=banner.txt로 등록하면 끝
소속 팀장님 사진으로 등록하면 고과+@, 설현 사진으로 하면 코딩력+@
(열심히 수강중^^)
ViewResolver
JSP를 제외한 다른 템플릿 엔진의 경우 의존성만 추가하면 다른 설정 없이 바로 사용이 가능하다
- 사용되는 의존성들은 spring-boot-starter-xxxx 의 이름을 가진다
- 예를들어 본인이 freemarker를 사용한다면 spring-boot-starter-freemarker, thymeleaf를 사용한다면 spring-boot-starter-tyhmeleaf를 추가하면 된다.
- 디폴트 설정은 prefix는 src/main/resources/templates 이며, suffix는 해당하는 템플릿의 확장자명이 된다.
freemarker를 예로 들면, 먼저 spring-boot-starter-freemarker 의존성을 추가한다.
src/main/resources/templates에 index.ftl을 만든다.
Controller에 return "index" 코드를 작성하고 확인
개발자가 집중해야하는 코드에만 집중할 수 있도록 Spring Boot가 얼마나 강력하게 지원해주는지 확인할 수 있다.
- JSP는 이제 하지 말자는 Spring 진영의 강력한 의지도 덤으로 볼 수 있다.
Actuator
소개
- SpringBoot의 가장 강력한 기능 중 하나
SpringBoot 어플리케이션의 상태를 실시간으로 확인할 수 있다.
- 현재 Context에 등록된 Bean 확인, 사용중인 Heap 사이즈, 최근 요청한 HTTP 상태 등등 관련한 모든 정보를 볼 수 있다.
특히나 헤로쿠와 같은 PaaS 환경에서는 정말 유용하게 사용됨
- spring-boot-starter-actuator 의존성을 pom.xml이나 build.gradle에 추가 후, 어플리케이션을 재시작하면 아래와 같은 로그를 확인할 수 있다.
사용법
- 아래 화면과 같이 브라우저에서 json 포멧팅이 된 화면을 보고싶다면 크롬 플러그인 설치를 권장한다
/beans
- 해당 웹 어플리케이션 컨텍스트의 모든 bean과 각 bean의 java type, 주입 받은 bean 정보를 보여준다
- bean : 해당 bean의 이름
- scope : bean의 스코프 (기본은 singleton)
- type : bean의 java type
- resource : .class 파일의 위치이지만, 현재는 로컬에서 구동중이며 jar/war로 만들게 되면 위치를 알 수 있다.]
- dependencies : 해당 bean에 주입된 bean들의 id목록
- 해당 웹 어플리케이션 컨텍스트의 모든 bean과 각 bean의 java type, 주입 받은 bean 정보를 보여준다
/autoconfig
bean을 왜 포함시켰는지, 포함시키지 않았는지를 표기
- condition
OnBeanCondition : Bean의 존재유무에 따라 Condition이 결정된다. OnClassCondition : Class의 존재유무에 따라 Condition이 결정된다.
- message
@ConditionalOnMissingBean : 해당하는 Bean이 없으면 생성하겠다 @ConditionalOnBean : 해당하는 Bean이 존재할 경우 생성하겠다. @ConditionalOnClass : 해당하는 class가 있을 경우 생성하겠다. 즉, 위 조건을 만족할 경우 생성, 하지 않을 경우 생성실패가 되는것이다.
/env
- 사용유무와 관계없이, 해당 어플리케이션이 사용할 수 있는 모든 환경 프로퍼티의 목록을 보여준다.
- 현재 구동중인 노트북의 환경변수를 포함해서 현재 프로젝트가 applicaton.properties에서 설정한 banner.location까지 포함되어서 노출되는것을 확인할 수 있다.
- 사용유무와 관계없이, 해당 어플리케이션이 사용할 수 있는 모든 환경 프로퍼티의 목록을 보여준다.
반응형