Languages | Frameworks/Spring

    [Redis] springboot + Redis cache(조회)

    💡문득 똑같은 데이터를 페이지 호출 시 마다 DB에 접근해서 가져온다면, 성능 이슈가 있을 수 있지 않을까? 라는 생각이 들었다.(데이터 수가 많을 때) 그래서 In-memory 기반의 데이터베이스인 Redis를 사용해서 데이터를 저장하고 불러온다면 성능 개선을 할 수 있을 것 같았다. (TTL 설정을 통한 휘발성 데이터 저장) 또한, Springboot에서는 Redis와 연동하기 위한 library도 지원해주고, cache 기능도 지원한다고 한다. Springboot에서 Redis를 활용하여 cache 기능을 설계하기 위한 전략은 [Redis] 캐시 설계 전략 지침을 참고하자. 이제 아래를 통해 Spring boot에 Redis를 연동하고, cache도 사용해보도록 하자! 1. 레디스 연동하기(의존성 ..

    [QueryDSL] N + 1 현상 해결 과정

    문제점 poi_basic 테이블 만을 조회하려했는데, 아래와 같이 N + 1 현상이 일어나고 있었다. 현상황 poi_basic 테이블과 poi_facility 테이블은 OneToOne관계이다. Entity로 DB 조회 테이블 조회 코드 고찰 그렇다면 왜 OneToOne관계에서 N+1 문제가 생기는지 생각해보았다. 분명 양쪽 테이블에 지연로딩(Lazyloading)을 설정했었는데, 지연로딩이 제대로 적용되지 않았던 것이다. 자 그럼 왜 N+1이 발생하는지 알아보자. N+1이 발생하는 이유는 프록시 초기화가 일어났기 때문이다. 예를들어, 아래와 같은 테이블 연관관계가 있다고 하자. Q. [Order_Item]테이블을 조회하는데 [Order]테이블과 [Product]를 항상 함께 조회해야 하나? 답은 “No”..

    @ControllerAdvice를 통한 예외처리 분리, 통합하기

    @ControllerAdvice @ExceptionHandler가 하나의 클래스에 대한 것이라면, @ControllerAdvice는 모든 @Controller 즉, 전역에서 발생할 수 있는 예외를 잡아 처리해주는 annotation이다. 예를들어 모든 jsp(ex. header)에 같은 modelAttribute를 던져줘야 한다면, 아래와 같이 사용하면 된다. @ControllerAdvice public class AdviceController { @ModelAttribute("modelAttribute key값") public String getWhereIP() { return "modelAttribute value값"; }

    [IntelliJ] 자주쓰는 단축키 정리

    Ctrl + spacebar 자동 코드생성 ⌘Shift + R 또는 Alt + Shift + F10 코드 실행 CTRL + Alt + L 자동 줄 정렬 CTRL + Y 한줄 삭제 Alt + Enter 코드에서 오류가 발견된 경우 해당 오류 위에 커서를 놓고 Alt+Enter를 누르면 문제에 대한 수정 제안 목록이 표시됩니다. ⌘1 또는 Alt+1 도구 창을 열 때도 마우스가 필요하지 않습니다. ⌘1(MacOS) 또는 Alt+1(Windows/Linux)를 사용하면 프로젝트 창이 열리고 거기에 포커스가 위치합니다. ⌘E 또는 Ctrl+E 프로젝트 창은 원하는 파일로 이동하는 최선의 방법이 아닐 수 있습니다. ⌘E(MacOS) 또는 Ctrl+E(Windows/Linux)를 사용해 최근 실행했던 파일을 확인할..

    [Springboot] spring-security 적용기(2) - OAuth2 구글 소셜 로그인

    이 글은 인프런 - 최주호 강사의 스프링부트 시큐리티 & JWT 강의의 내용을 포함하고 있습니다. 저번 포스팅에서는 spring-security를 사용하여, 일반 로그인 기능을 간단하게 알아보았습니다. 이번 포스팅에선, 저번 기능에 살을 덧붙여서 소셜로그인 기능을 구현해보도록 하겠습니다.(저번 포스팅 참고) 먼저 구글 창에 google api 콘솔을 입력해서 들어갑니다. 다음, 아래그림처럼 보이는 곳의 아래방향 화살표를 클릭해 새프로젝트를 생성해줍니다! 만들기를 통해 생성한 뒤, 아래 그림처럼 생성한 프로젝트를 선택해줍니다. 다음 왼쪽의 OAuth 동의 화면 탭에서 User Type을 외부로 설정해줍니다. 만들기를 누르면, 아래처럼 OAuth 동의 화면이 뜨는데, 애플리케이션 이름만 적어주고 하단의 저장..