본문 바로가기

Java, Kotlin, Spring/Spring, Spring Boot53

Spring Data - 인메모리 DB Springboot - Spring Data - 인메모리 DB 스프링이 지원하는 인메모리 데이터베이스는 H2, HSQL, Derby가 있다. Spring JDBC (Java DataBase Connectivity) 가 클래스패스에 있으면 DB와 자바를 연결해주는 빈 클래스를 자동 설정해준다. 이렇게 H2, JDBC가 의존성에만 적혀있다면 스프링부트는 기본적으로 H2 인메모리 데이터베이스를 자동설정해준다. JDBC와 H2 database 의존성을 추가한다. org.springframework spring-jdbc com.h2database h2 아마존 제공 java 인 corretto 를 사용했었는데, 위와같이 jdbc를 연동하면 DataSource가 빈으로 자동등록이 안되었다. 따라서 jdbc 의존성 등.. 2021. 1. 20.
Springboot - Exception, HATEOAS, CORS Springboot - Web MVC ExceptionHandler 에러를 처리하는 클래스를 만들어보자. 스프링 MVC 에서 어노테이션 기반 에러처리이다. /except 요청을 받을 시 예외객체를 리턴한다. @Controller public class ExceptionController { @GetMapping("/except") public String except() throws SampleException { throw new SampleException(); } @ExceptionHandler(SampleException.class) public @ResponseBody AppError sampleError(SampleException e) { AppError appError = new AppEr.. 2021. 1. 19.
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.
728x90