이 글은 Spring boot 3.1.5 버전을 사용하며 작성했다. 결론은 3.1.5 버전 기준으로는 MODE만 설정하면 된다. dialect는 필요 없다. 상황 테스트 환경용 H2 데이터베이스에서 MySQL로 dialect를 설정할 때 아래와 같은 에러가 발생했다. spring: datasource: url: jdbc:h2:mem:testdb;MODE=MySQL; jpa: properties: hibernate: dialect: org.hibernate.dialect.MySQL5Dialect 접근 내가 설정한 dialect를 사용하지 못하는 상황이였다. 어떤 dialect를 사용해야 하는지 알기 위해서 hibernate의 docs를 찾아봤다. https://docs.jboss.org/hibernate/..
Tool
Spring boot 환경에서 JUnit5로 테스트 코드를 작성하기 위한 애너테이션을 알아보자. 단위 테스트를 위한 JUnit5 애너테이션 @Test 적용하면 해당 메서드를 테스트 한다. @Test void create(){} @BeforeEach 적용하면 해당 메서드는 각각의 테스트가 실행하기 전에 실행된다. @BeforeEach void test() @AfterEach 적용하면 해당 메서드는 각각의 테스트가 실행된 후에 실행된다. @AfterEach void test() @BeforeAll 적용하면 해당 메서드는 전체 테스트가 실행되기 전에 단 한 번만 실행되는 메서드가 된다. static method여야 한다. @BeforeAll static void test() @AfterAll 적용하면 해당 메..
user가 다른 user를 follow 하거나 unfollow 하는 기능을 만들면서 고민한 내용이다. user가 follow 하는 다른 user들의 정보를 DB에 저장할 때, 하나의 user가 여러 user를 follow 할 수 있고, 여러 user가 하나의 user를 follow 할 수 있으므로 n:m 관계이다. @ManyToMany 사용을 지양하고 중간 Entity를 만들어서 두 개의 @ManyToOne으로 나눠서 개발해야 한다는 것을 어렴풋이 알고는 있었는데, 이참에 정확한 이유를 정리해보자. @ManyToMany 사용을 지양하는 이유 @ManyToMany를 사용하면 JPA는 자동으로 중간 조인 테이블을 생성하고 관리한다. 자동으로 생성해줘서 간편하다는 장점이 있지만, 테이블에 추가적인 필드나 제약..
"Spring Security를 사용할 때, 유저 인증 정보가 없을 때 @AuthenticationPrincipal을 사용하면 어떻게 될까?"에 대한 의문으로 예외를 던질지, null을 반환할지 궁금해서 인증 정보에 접근하는 방법들을 찾아봤다. 결론부터 말하자면 모두 SecurityContextHolder에서 Authentication 클래스를 사용하는 것이고, 인증 정보가 없다면 예외가 아니라 null을 반환한다. Spring Security를 사용할 때, 인증 정보가 담긴 Authentication 객체에 접근하는 방법을 알아보자. 1. SecurityContextHolder 사용 SecurityContextHolder 클래스는 싱글턴 클래스처럼 전역적으로 접근 가능하다. 현재 스레드의 인증 정보를 ..
Filter 실행 흐름 요약 Filter는 그림과 같이 요청에서 최초, 최종 처리 단계의 위치에 있다. 요청의 최초, 최종 시점에서 필요한 작업(로깅, 보안)들을 하기 편리하다. DispatcherServlet보다 앞서 요청을 처리하는 것에 집중하자. Filter Chain Filter는 여러 Filter가 연결된 FilterChain으로 이루어져 있다. Filter 사용 방법 Filter 인터페이스를 상속받은 클래스를 구현하고, 클래스를 FilterChain에 등록하는 방식으로 사용한다. Spring Boot 환경에서 Filter를 @Component 애너테이션을 적용해서 빈으로 등록하면, Spring Boot가 자동으로 Filter를 Filter Chain에 등록한다. @Component @Order..
구글 폼을 여러 번 제출해야 하는 일이 생겼다. 제출하기 너무 너무 귀찮아서 구글 시트에 필요한 정보를 적어두면 자동으로 제출할 수 있도록 했다. 구글 폼 분석 제출을 어떻게 하는지 볼려고 테스트용 폼을 하나 만들었다. 제출하면 https://docs.google.com/forms/u/0/d/e/1FAIp/formResponse 이런 형식의 요청을 보내는 것을 알 수 있다. HTML도 찾아보면 폼의 각 입력마다 매핑된 input 요소가 있다. 개발자도구로 요청의 페이로드를 보면 entry.숫자 형식의 input 요소들을 전송하니까 어떤 input이 어떤 값을 담는지 확인하고 스크립트를 작성하면 된다. 제출 스크립트 작성(Apps Script) 구글 시트에서 사용할 수 있는 앱 스크립트는 자바스크립트와 비..