2025/06 7

[Spring] CRUD와 인증/인가 - 심화 프로젝트

시행 착오 1. Lv2 - N+1 문제 해결을 위한 @EntityGraphhttps://hyeonha.tistory.com/39 [Spring] @EntityGraph0. 개요 연관 엔티티를 동시 조회할 때 N+1 문제가 발생할 가능성이 있다. JPA는 기본적으로 LAZY 로딩을 사용하기 때문이다. 첫번째 방법으로는 N+1 문제를 해결하기 위해서는 JPQL로 쿼리를 작성하hyeonha.tistory.com 2. Lv4 - API 로깅 구현을 위한 Interceptor & AOPhttps://hyeonha.tistory.com/38 [Spring] Logging - Interceptor & AOP 활용0. 개요 어드민 / 유저의 권한이 나누어지는 Spring MVC에서 어드민 사용자가 특정 API에 접근..

카테고리 없음 2025.06.12

[Spring] @EntityGraph

0. 개요 연관 엔티티를 동시 조회할 때 N+1 문제가 발생할 가능성이 있다. JPA는 기본적으로 LAZY 로딩을 사용하기 때문이다. 첫번째 방법으로는 N+1 문제를 해결하기 위해서는 JPQL로 쿼리를 작성하여 fetch join을 하는 방법이 있다. 두번째 방법으로는 @EntityGraph 어노테이션을 사용하는 방법이다. 1. 설계 @EntityGraph는 연관된 엔티티를 한 번의 쿼리로 함께 조회하도록 지시하는 어노테이션이다. Repository 계층에서 N+1 문제 발생이 예상되는 메서드에 해당 어노테이션을 사용한다.public interface TodoRepository extends JpaRepository { @EntityGraph(attributePaths = {"user"}) ..

Spring 2025.06.12

[Spring] Logging - Interceptor & AOP 활용

0. 개요 어드민 / 유저의 권한이 나누어지는 Spring MVC에서 어드민 사용자가 특정 API에 접근할 때마다 접근 로그를 기록하는 기능을 만들어야 한다. 로그를 기록하는 것을 Logging 이라고 하는데 로깅은 Interceptor 또는 AOP로 구현할 수 있다. 1. Interceptor사용 목적 : 인증/인가, 로깅, 리퀘스트 수정 등위치 : DispatcherServlet -> Controller 사이HTTP 객체 접근 : HttpServletRequest, HttpServletResponse 직접 접근 가능예시 :@Componentpublic class AdminAuthInterceptor implements HandlerInterceptor { @Override public ..

Spring 2025.06.11

[Java] 알고리즘 - K번째 수

https://school.programmers.co.kr/learn/courses/30/lessons/42748 1. 설계배열이 주어지고 2차원 배열도 있어서 단계적으로 먼저 생각해보았다. 1. 배열 array를 주어지는 조건 commands를 참고하여 자르고,2. 배열을 정렬하여3. 배열에서 해당하는 값을 새로운 배열에 넣는다. 2-1. 구현for(int i=0; i 반복문으로 commands의 각 행의 0, 1 인덱스에 시작지점, 종료지점이 주어지므로copyOfRange 메서드를 통해 배열을 잘라서 새로운 배열로 만들었다. copyOfRanfe의 첫번째 파라미터는 원본 배열,두번째 파라미터는 시작 인덱스이기 때문에 주어진 값에 -1을 했다.세번째 파라미터는 종료 지점 앞 인덱스까지 자르기 때..

Java 2025.06.11

[Java] 알고리즘 - 삼총사

https://school.programmers.co.kr/learn/courses/30/lessons/131705 1. 설계주어진 요구대로라면 학생 목록 중 3명의 번호의 합이 0이 되는 결과를 찾기 위해0, 1, 2 / 0, 1, 3 / ... / 0, 2, 3 / ... / 1, 2 ,3이런 식으로 돌아가면서 찾아야 한다. 가장 기본적인 방법부터 생각해서 반복문을 3개 중첩하는 방법이 생각이 났다. 2-1. 작성for(int i=0; i 이렇게 작성하고 다시 생각해봤을때, 초기화 부분에서 i, j, k의 값은 동일하지 않아야 하기 때문에설계에서 생각한대로 학생을 고르려면 j는 i보다 1 많아야하고, k는 j보다 1 많아야 한다. 그리고 학생 3명의 번호를 지정했으면, 학생들이 가지고 있는..

Java 2025.06.09

[Spring] HandlerMethodParameterAnnotations에 관하여 (@PathVariable, @RequestParam, @RequestBody, @ModelAttribute)

0. 개요Spring의 컨트롤러 계층에서 HTTP 요청 데이터를 받아서 사용할 수 있게 하는@ModelAttribute, @RequestBody, @PathVariable 등의 바인딩 어노테이션이 있다. 해당 기능들이 각각 어떤 값을 받을 때 유용한지 궁금해졌기 때문에 찾아본 내용들을 정리하여 작성해보려고 한다. 1. 소개위의 어노테이션들은 HandlerMethodArgumentResolver라는 인터페이스에서 제공되는 기능이다. 해당 어노테이션을 사용하면 Spring에서 요청을 처리하는 순서는 아래와 같다.클라이언트가 요청을 보냄DispatcherServlet에서 해당 요청 처리HandlerMapping을 통해서 적절한 Handler를 탐색ex) 해당 어노테이션을 사용하는 컨트롤러 메서드를 찾아냄 ..

Spring 2025.06.05

중복 로그인 방지 필터

1. 개요로그인 코드를 작성하고 JWT를 활용하여 인증 토큰을 부여하는 코드를 추가했다.보안 config에서는 각 페이지마다 접근 허용 범위를 설정하여 관리하고 로그인 페이지에서는 토큰이 없어야하기 때문에 모든 접근을 허용했다.그렇지만 로그인한 상태를 확인할 수 있는 방법은 없어서 필터를 만들어서 확인하기로 했다. 2. 코드 적용2-1. OncePerRequestFilter중복로그인 방지 필터는 OncePerRequestFilter를 상속받는다. OncePerRequestFilter는 HTTP 요청 당 단 한 번만 필터 로직을 실행하기 때문에 하나의 요청에 대해 한 번만 실행되는 필터를 만들고 싶을 때 사용한다.public class JwtLoginBlockFilter extends OncePerRe..

Spring 2025.06.02