본문 바로가기

분류 전체보기311

Springboot - 템플릿, HtmlUnit Springboot - Web MVC 템플릿 엔진 템플릿 엔진은 주로 뷰를 만들 때 사용한다. 코드 제너레이션, 이메일 템플릿 등을 만들 때도 사용한다. 스프링 부트가 자동 설정을 지원하는 템플릿 엔진은 FreeMarker, Groovy, Thymeleaf, Mustache 이다. JSP 는 자동설정을 지원하지도 않고, 권장하지도 않는다. jar 패키징 할 때 동작하지 않고, war 로 패키징 해야하기 때문이고, 특히 톰캣이 아닌 undertow 웹서버의 경우는 jsp를 아예 지원하지 않는다. 템플릿 엔진 중 타임리프(Thymeleaf)를 간단히 사용해보자. org.springframework.boot spring-boot-starter-thymeleaf 의존성을 추가한다. 컨트롤러를 하나 만들어서 /b.. 2021. 1. 19.
Springboot - Web MVC Spring Web MVC 스프링부트에서는 sprin-boot-starter-web 의존성을 추가하면 스프링 webmvc 를 사용할 수 있다. spring-boot-autoconfigure 에서 자동으로 설정이 되는데 spring.factories 중에 WebMvcAutoConfiguration 클래스를 사용하게 된다. 스프링 부트 웹 MVC 는 이렇게 스프링 웹 MVC 에 몇가지 컨벤션을 더 추가하여 잘 정리해놓은 라이브러리이다. 스프링 MVC 를 확장하려면 @Configuration 과WebMvcConfigurer 를 사용하면 된다. 또한 스프링 MVC 를 재정의하려면 @Configuration 과 @EnableWebMvc 를 사용하면 된다. HttpMessageConverters HTTP 요청 본문.. 2021. 1. 18.
Springboot - Devtools, Live Reload Devtools 스프링부트는 devtools (개발도구) 라이브러리의 도움으로 좀 더 편한 환경에서 개발을 할 수 있다. 사용을 위해서는 의존성을 먼저 추가한다. pom.xml org.springframework.boot spring-boot-devtools Devtools 는 캐시 설정을 개발 환경에 맞게 변경해준다. 클래스패스 안의 파일들이 변경 될 때마다 자동으로 재시작을 해준다. 파일 변경후 빌드만 다시해주면 된다. 인텔리제이에서 빌드 단축키는 ⌘ + F9 이다. 어플리케이션 실행을 직접 끄고 켜는것 (cold starts) 보다는 빠르지만, 리로링보다는 느리다. 리스타트 하고 싶지 않은 리소스는 프로퍼티에 spring.devtools.restart.exclude 로 추가해주면 된다. Live R.. 2021. 1. 17.
Springboot - 테스트코드 @SpringBootTest @SpringBootTest 는 @SpringBootApplication 가 붙은 클래스를 참조하여 (주로 메인클래스) 그 밑의 모든 빈들을 찾아 테스트 빈으로 등록한다. 즉 @SpringBootTest 는 통합테스트용이다. 일부분만 테스트하는 슬라이스 테스트를 위해서는 아래 @WebMvcTest 를 참조한다. webEnvironment @SpringBootTest 의 webEnvironment 는 기본적으로 SpringBootTest.WebEnvironment.MOCK 으로 설정되어 있다. 내장 톰캣 구동을 하지 않고 가짜 빈을 만들어 테스트를 한다. 반면, RANDOM_PORT, DEFINED_PORT 는 내장 톰캣을 사용한다. 마지막으로 NONE은 서블릿 환경을 제공하지.. 2021. 1. 17.
Springboot - 로깅 Logging Facade vs Logger 로깅 퍼사드를 사용하면 그 안에서 다양한 로거들을 사용할 수 있다. Commons Logging, SLF4J (Simple Logging Facade for Java) 등이 있다. 스프링부트는 Commons Logging을 사용한다. Common Logging 은 Spirng-JCL을 통해서 slf4j 또는 log4j2로 바꿀 수 있다. 로거는 JUL, Log4J2, Logback 등이 있고 스프링부트는 기본적으로 Logback 을 사용한다. 어떤 로깅 퍼사드, 로거를 사용하든 결국 기본설정에서는 최종적으로 Logback 을 사용한다. (jul, log4j2 로거는 모두 slf4j 로 처리되어 결국 logback 을 사용하게 된다.) application.pr.. 2021. 1. 16.
Springboot - 외부설정, 프로파일 외부설정 스프링부트 외부에서 변수설정을 할 수 있다. 예를 들면 application.properties 에 변수를 등록하면, @Value 어노테이션으로 값을 가져와 사용할 수 있었다. 또한 YAML 파일, 환경변수 등록, 커맨드라인 아규먼트 (--var) 로 외부 변수를 등록할 수 있다. 예를 들어보자. application.properties blue.name = river blue.age=${random.int} # 랜덤 변수를 사용할 수도 있다. blue.nameage = ${blue.name} ${blue.age} # 프로퍼티 안의 변수들을 다시 사용할 수도 있다. 애플리케이션 러너로 테스트를 해보자. @Value 어노테이션으로 프로퍼티 변수값을 가져올 수도 있다. @Component publi.. 2021. 1. 16.
Springboot - SpringApplication SpringApplication 로깅 스프링 부트를 실행하면 출력물들이 뜬다. 이 때 출력된 로그들은 INFO 레벨이다. DEBUG 레벨로 하려면 다음과 같이 설정한다. Intellij > Edig Configuration > VM Options 에 -Ddebug라고 입력해준다. DEBUG 레벨에서는 좀 더 구체적인 로그정보가 나온다. 자동설정이 적용이 된 이유, 안 된 이유도 출력해준다. 배너 앞에 스프링부트라고 예쁘게 배너가 뜨는데, 이 또한 수정할 수 있다. resources 에 banner.txt 를 만들어서 표현하면 된다. gif, jpg, png 도 지원한다. application.properties 에서 이 banner.txt 의 경로도 변경할 수 있다. 기본 제공 변수도 사용할 수 있다. .. 2021. 1. 15.
Springboot - 내장 웹 서버, HTTPS, HTTP2 스프링부트는 내장 웹 서버로 톰캣이 자동 설정되어있다. spring-boot-starter-web이 톰캣을 가져온다. 톰캣은 아래와 같이 직접 구현하여 실행시킬 수도 있다. (대부분은 스프링부트로 바로 실행시킬 것이다..) public class Application { public static void main(String[] args) throws LifecycleException { // SpringApplication.run(Application.class, args); // 1 Tomcat 객체 생성 Tomcat tomcat = new Tomcat(); // 2 포트 설정, 커넥터 연결 tomcat.setPort(8080); tomcat.getConnector(); // 3 컨텍스트 추가 Con.. 2021. 1. 14.
Springboot 자동설정(AutoConfiguration) 자동 설정 @SpringBootApplication 안에 여러 어노테이션이 있다. 조금 살펴보면, @SpringBootConfiuration 은 기존 @Configuration 을 사용하며, 기능도 비슷하다. 빈 설정을 제공한다. @ComponentScan 는 어노테이션이 붙은 클래스의 같은 패키지 내(히위 패키지 포함)에서 컴포넌트들을 스캔하여 빈을 등록한다. 컴포넌트라 함은 @Component 애노테이션을 말하고, 이는 @Configuration, @Repository, @Service, @Controller, @RestController 를 포함한다. @EnableAutoConfiguration 은 추가적으로 빈을 한 번더 읽어 등록한다. 기본적으로 @Configuration 가 들어있고, 스프링부.. 2021. 1. 14.
Springboot 프로젝트 생성, 이니셜라이져 Springboot 001 스프링부트 목표 빠르고 폭넓은 사용성 컨벤션으로 정해져있는 설정 사용, 여기에 사용자 설정 추가 쉽게 가능 비즈니스 로직에 추가로 다양한 기능 제공 코드 생성하지 않고, xml 설정 필요없다. 스프링부트 프로젝트 생성 Intellij > File > New > Project Gradle > Name(ArtifactId) 및 GroupId 작성 > Finish gradle.build plugins { id 'java' id 'org.springframework.boot' version '2.4.1' id 'io.spring.dependency-management' version "1.0.10.RELEASE" } group 'me.wordbe' version '1.0-SNAPSHO.. 2021. 1. 14.
728x90