728x90

Backend/Spring+Boot 64

SpringBoot 정적자원

SpringBoot 사용 전에는 jsp, html 같은 정적자원들은 src/main/webapp 디렉토리 하위에 배치했었다. 이는 클래스패스에 해당하는 경로로 패키징시 정적자원을 참조하는 특수경로이다. 하지만 SpringBoot 공식 메뉴얼에 보면 아래와 같이 이 경로를 사용하지 말라고 안내하고 있다. src/main/webapp애플리케이션이 jar로 패키징 된 경우 디렉토리를 사용하지 마십시오 . 이 디렉토리는 공통 표준이지만 전쟁 패키징 에서만 작동 하며 jar를 생성하면 대부분의 빌드 도구에서 자동으로 무시됩니다. 출처: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-spring-mvc-stati..

Backend/Spring+Boot 2021.04.20

SpringBoot 에러페이지 정의

SpringBoot 는 아무것도 하지 않더라도 아래와 같은 기본 에러페이지를 제공한다. 또한 view 자원 root 디렉토리에 error 디렉토리를 생성하고 그 하위에 에러상태코드에 해당하는 파일을 만들어 놓으면 각 에러 발생시 자동으로 해당 페이지가 연결된다. view자원의 root 디렉토리는 어떤 라이브러리를 사용하느냐에 따라 다르고 입맛에 맞게 얼마든지 커스텀이 가능한데 일반적인 경우을 살펴보면 아래와 같다. 기본 html: src/main/resources/public Thymeleaf: src/main/resources/templates jsp: src/main/webapp 즉, 각 라이브러리의 error 페이지는 아래 경로에 만들면 된다. 기본 html: src/main/resources/pu..

Backend/Spring+Boot 2021.04.19

h2 DB 초기 데이터 생성

SpringBoot를 사용한다면 jpa와 h2 DB 의존성을 추가하고 별도로 DataSource 를 정의하지 않는다면 h2 DataSource가 자동으로 생성되서 jpa와 연동된다. 이 경우 어플리케이션이 실행될때마다 @Entity 클래스를 스캔해서 h2 DB에 해당 테이블을 생성한다. 이를 통해 로컬테스트를 진행하면 되는데 경우에 따라 테스트를 위한 초기 데이터가 미리 생성되어 있을 필요가 있다. 이때는 resources 디렉토리 하위에 import.sql 파일을 만들어서 insert문 등을 정의해 놓으면 자동으로 수행된다. 다만 주의할 점은 import.sql 파일에는 작성되는 sql는 각 구문을 한 줄로 작성해야 문법 오류가 발생하지 않는다. 예를 들어 insert 문을 만든다고 하면 한줄로 작성해..

Backend/Spring+Boot 2021.03.30

SpringBoot Interceptor 구현

전체코드는 아래 github을 참고하도록 한다. github.com/mypiece/springboot-example/tree/master/intercepter-example mypiece/springboot-example 스프링부트 예제. Contribute to mypiece/springboot-example development by creating an account on GitHub. github.com Interceptor는 Controller 메소드 처리 전/후에 공통적으로 어떠한 작업을 처리할 수 있게 해준다. 이것 없이도 기능 구현에는 문제가 없지만 Controller 메소드마다 동일한 기능을 중복으로 정의해야 한다. Filter 와 동일하게 url 패턴을 지정할 수 있다. 구현 방법은 아..

Backend/Spring+Boot 2021.03.25

spring-config-server git 저장소 활용

spring-config-server 구축시 구성파일 저장소로 파일시스템과 github을 사용할 수 있는데 안정적인 형상관리로 인해 github 이 선호된다. github으로 접속방식은 id/pass, ssh 방식 중 ssh 가 선호되는데 클라우드 환경에서는 ssh 통신에서 로컬 .ssh 폴더의 privateKey를 활용하기가 참 애매해진다. (배포시마다 매번 새로운 컨테이너가 생성되기 때문...) 이런 경우를 위해 spring-cloud 에서는 application.yml에 privateKey를 명시하고 github ssh 연결 시 해당 키를 참조하도록 할 수 있다. 아래와 같이 spring.cloud.config.server.git.ignoreLocalSshSettings 를 true로 설정하면 된다..

Backend/Spring+Boot 2021.03.22

DelegatingFilterProxy

Servlet은 ServletContext를 사용하고 Spring은 ApplicationContext를 사용한다. 또한 ServletFilter는 ServletContext에서 동작하기 때문에 기본적으로 ApplicationContext 에 있는 Spring Bean을 참조하지 못한다. 하지만 ServletFilter에서 Spring Bean을 사용하고 싶은 경우가 있다. 그 때 DelegatingFilterProxy 를 활용하면 된다. DelegatingFilterProxy는 Spring에서 제공하는 ServletFilter 이기 때문에 ServletContext 에서 ServletFilter 지정시 DelegatingFilterProxy 객체를 지정하면 되고 생성자 인자로 Spring Bean 이름을..

Backend/Spring+Boot 2021.03.17

[Error] If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.

Spring Boot 어플리케이션을 실행하면 위와 같은 에러가 발생하는 경우가 있다. 결론부터 말하면 DataSource 설정이 제대로 되어 있지 않아서 그런 것이고 appliction.yml 파일에 DataSource 설정을 추가하면 간단히 해결된다. 그런데 Intellij의 Spring Initializr 통해서 프로젝트를 처음 생성하고 테스트를 위해 실행 어플리케이션을 실행해봤는데 이러한 에러를 마주하면 좀 당황스러울 수 있다. 일단 이러한 에러가 발생하는 이유는 Spring Boot 에서는 DataSource 를 필요로 하는 아래 같은 의존성이 추가만 되어 있어도 자동으로 DataSource 생성을 시도하기 때문이다. org.springframework.boot:spring-boot-starter..

Backend/Spring+Boot 2021.03.17

Spring Boot DevTools

Intellij 로 Spring Boot 프로젝트를 생성하다보면 아래와 같이 Spring Boot DevTools 의존성이 존재하는 것을 볼 수 있다. 나는 보통 Lombok, Spring Configuration Processor 만 선택하는데 Spring Boot DevTools 이건 대체 뭔지 항상 궁금했었다. 서칭해보니 아래와 같이 누군가 잘 정리해놨다. velog.io/@bread_dd/Spring-Boot-Devtools Spring Boot Devtools 알아보기 Spring Devtools에 대해 알아보았습니다. velog.io 어느정도 유용한거 같긴한데 개인적으로 Automatic Restart 기능은 별로 선호하지 않고 (양 것 수정하고 내가 재시작하고 싶을 때만 재시작하는 게 좋음)..

Backend/Spring+Boot 2021.03.17
728x90