특정 API에 대해서 호출 가능한 IP를 제한하고 싶을 때 Spring Security의 hasIpAddress를 사용하면 제한 할 수 있다. 등록할 수 있는 방법은 2가지가 있다고 나온다 @PreAuthorize 어노테이션 사용 SecurityFilterChain 에 등록 그러나 현재 Spring Security 5.7.6 을 사용중인데 1번 방법인 @PreAuthorize에는 존재하지 않아서 2번째 방법인 SecurityFilterChain을 생성하면서 해당 설정을 등록해봤다. /member 하위 API에 대해 만약 특정 IP(192.168.0.32)의 요청만 허용한다가 가정하면 아래와 같이 작성할 수 있다. @Bean public SecurityFilterChain filterChain(HttpSe..

데이터를 수정하던 중에 이 모든 변경사항을 관리하는 방법은 없을까? 라는 의문이 들었다. 그래서 Aop, EventListener 등 생각을 해보고 관련 정보를 찾아보던 중 Hibernate의 envers라는 모듈을 알게 됐다. 정확히는 김영한님의 envers 모듈 세션을 듣게 됐고 해당 내용을 간략히 정리하려고 한다. 방법은 간단하다. 의존성을 추가하고 이력관리를 하고 싶은 Entity 위에 @Audited 어노테이션을 추가하면 된다. 예제를 통해서 좀 더 자세히 알아보자. Member 정보는 아래와 같다 create table member ( id serial primary key, name varchar ); @Entity @Builder @Getter @NoArgsConstructor(access..

업무를 진행하던 도중 QueryDsl에서 윈도우 함수(row_number)를 사용하려고 했다. 각 테이블의 정보는 아래와 같다 create table member ( id serial primary key, name varchar, team_id integer references team, created_at timestamp default now(), deleted_at timestamp ); create table team ( id serial primary key, name varchar ); 이때 QueryDsl에서 아래와 같은 코드를 실행하면 에러가 발생한다 public List getTeamMemberRows() { SimpleExpression rowNumber = SQLExpressions..

스프링에서는 트랜잭션을 사용할 때 @Transactional 어노테이션을 사용한다. @Transactional 어노테이션의 속성 중 propagation(전파) 이라는 것이 있는데, 이미 트랜잭션이 진행중일 때 추가 트랜잭션 진행을 어떻게 할지 결정하는 것이 전파 속성(Propagation)이다. 전파 속성에는 총 7가지가 옵션이 있는데 이에 대한 자세한 내용은 https://mangkyu.tistory.com/269 해당 블로그에 자세히 나와 있으니 참고하면 되겠다. 오늘은 이 중 Nested라는 옵션을 사용해보도록 하겠다. 위의 블로그에 나와 있듯이 Nested 옵션은 JPA에서 지원하지 않는다. 따라서 Jpa를 사용하지 않고 단순히 JdbcTemplate을 사용하면 될 것 같지만, 따로 설정을 해주..

HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해 주는 프론트 컨트롤러(Front Controller) 즉, 클라이언트로부터 어떠한 요청이 오면 Tomcat과 같은 서블릿 컨테이너가 요청을 받게 되는데 이 모든 요청을 프론트 컨트롤러인 디스패처 서블릿이 가장 먼저 받게 된다. 그러면 디스패처 서블릿은 공통적인 작업을 먼저 처리한 후에 해당 요청을 처리해야 하는 컨트롤러를 찾아서 작업을 위임한다. Front Controller(프론트 컨트롤러) 주로 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해 주는 컨트롤러로써, MVC 구조에서 함께 사용되는 디자인 패턴이다. DispatcherServlet의 동작 과정 클라이언트의 요청을 디스패처 ..
- Total
- Today
- Yesterday