0. 이 글을 쓰는 이유 통신 과정에서 method에 대한 정보를 가져온 후 특정 어노테이션이 붙은 경우에 대해 필터링을 하는 방법을 정리하기 위함 1. 가장 필요한 건 HandlerMethod Spring 공식 문서에 보면 HandlerMethod클래스에 이런 말이 적혀있다. Provides convenient access to method parameters, the method return value, method annotations, etc. 메서드의 어노테이션이나 파라미터, 리턴 등에 대해 쉽게 제공할 수 있게 해준다고 한다. 이걸로는 정보가 좀 부족한 것 같다. 요새 ChatGPT가 코딩조무사처럼 잘 도와주고 있던데 한번 예제 코드를 달라고 해 봤다. @RequestMapping("/use..
0. 이 글을 쓰는 이유 로깅을 정말 아무것도 없는 상태에서 처음부터 적용하려고 하면 어떻게 해야 하나 정리를 하기 위함 공식 도큐먼트 : logback : https://logback.qos.ch/manual/configuration.html spring-boot : https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.logging Chapter 3: Configuration In symbols one observes an advantage in discovery which is greatest when they express the exact nature of a thing briefly and, a..
0. 이 글을 쓰는 이유 평온하게 개발을 하던 중 환경에 따라 동적으로 flyway의 sql파일에서 값을 변경하여 넣어줘야 할 일이 생겼다. 다른 곳들은 뭐 @Value로 잘 가져오면 괜찮던데 Flyway는 딱 하나가 달라서 리마인드 겸 정리를 해보고자 한다. 1. 사건의 발단 proxy table(db link)를 위해 외부 ip를 가져와야하는데 flyway는 모든 프로파일에 걸쳐 동작을 하고 외부 database ip는 각 상황(dev, live)등에 따라 고정값이지만 다른 값이었다. 그러면 믿을 수 있는 부분은 application의 properties파일이고 어떻게 가져와야 할까 create table tmp_table( //중략 ) engine=CONNECT table_type=MYSQL dbn..
0. 이 글을 쓰는 이유 스프링에서는 컨트롤러를 통해 서비스가 동작하는 도중 내가 에러 핸들링을 하지 않은 경우에 대해도 was가 죽지 않고 계속 떠있는 것을 볼 것이다. 우리가 일반적으로 자바로 프로그램을 수행해 보면 별도의 예외 처리가 없는 경우 해당 애플리케이션은 바로 죽게 되는데 스프링에서는 그렇지 않다. 어떻게 이게 가능한 것일까에 대해 궁금해져서 알아보고자 했다. 1. 사전 지식 1-1. Filter 스프링에는 Filter라는게 존재한다. 이게 뭐 하는 놈이냐 하면 WAS가 servlet container에게 request를 던져주면 그걸 적절히 필터링한 후 servletrequest와 servletresponse를 servlet에게 던져준다. 이후 response가 나올 시점에 다시 Filt..
0. 이 글의 목적 BooleanExpression을 쓰는 게 best practice일 수 있지만 더 심플한 방법을 찾다 보니 가능한 방법을 찾아서 메모 겸 적어두고자 함 1. 상황 querydsl을 이용해 db에서 데이터를 가져오려고 하는데 where조건을 동적으로 해야할 일이 생김 e.g. //회사 로직을 제거하기 위해 최대한 단어를 추상화함 queryFactory .from(dataEntity) .groupBy(dataEntity.column1) .select( dataEntity.column1, dataEntity.column2.as("tmp"), dataEntity.column3 ) .where(dataEntity.column1.between( requestCondition.condition1..
1. 환경설정 h2랑 maven 사용안하고 gradle과 mariadb로 진행하는 경우 아래처럼 설정 build.gradle implementation 'org.hibernate:hibernate-entitymanager:5.6.14.Final' implementation 'org.mariadb.jdbc:mariadb-java-client:2.7.3' persistence.xml hellojpa.Member show_sql : query가 콘솔에 보임 format_sql : 콘솔에 보이는 query를 포맷팅 해줌 use_sql_comments: 왜 이 query가 호출되었는지 적어줌 jpa특징 Table, Column annotation으로 명시없이 사용하면 클래스의 이름을 table로, 필드의 이름을 ..