728x90

Backend 150

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

서버에서 클라이언트 Cookie 셋팅하기

HTTP 프로토콜은 기본적으로 Stateless 하다. 하지만 경우에 따라 클라이언트의 상태를 기억해야 할 수 있고 이때 Cookie가 활용된다. Cookie는 기본적으로 클라이언트에 저장되는 정보이기 때문에 javascript로 아래와 같이 간단하게 생성할 수 있다. document.cookie = "test01=test01"; document.cookie = "test02=test02"; console.log(document.cookie); //test01=test01; test02=test02 이렇게 생성한 Cookie는 크롬브라우저 개발자 도구에서 아래와 같이 확인할 수 있고 Request에 자동으로 포함되어 서버단에서는 아래와 같이 확인할 수 있다. @GetMapping("/hello") pub..

JSESSIONID

지금은 이렇게들 안하지만 내가 Jsp 로 개발할때는 로그인 처리시 Session을 활용했다. 로그인에 성공하면 Session에 아이디 값을 저장하고 추후 페이지 접근시 마다 Session에 해당 아이디 값이 있는지에 따라 로그인 여부를 체크했다. 이때 아이디 값을 저장하고 읽어오는 방법은 아래와 같았다. Session의 키값은 당연히 동일했다. request.getSession().setAttribute("id", "user01"); request.getSession().getAttribute("id"); 저장하는 구조를 보면 대략 Map과 비슷하고 우리가 아는 Map은 key, value 구조로 되어 있고 key가 중복될 수 없다. 그런데 A유저는 PC브라우저에서 로그인하고 B유저는 모바일브라우저에서 ..

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

Mysql 함수, 프로시저 생성시 주의사항

함수나 프로시저는 여러 sql 문이 조합되어 있다. 그런데 sql문의 종료태그가 기본적으로 ; 이기 때문에 생성시 프로시저나 함수의 전체 구문이 제대로 실행되지 않을 수 있다. 이에 생성 구문 실행시 임시로 종료태그를 변경할 필요가 있다. 아래와 같이 하면 된다. DELIMITER $$ #CREATE FUNCTION... #or #CREATE PROCEDURE... END $$ DELIMITER ; 보면 알겠지만 생성 구문 실행 전 DELIMITER $$ 를 통해 종료태그를 $$로 변경해서 END $$ 가 구문의 종료로 인식된다. 그리고 DELIMITER ; 를 통해 종료태그를 다시 ; 로 돌려놓는다.

Backend/Database 2021.03.19

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