본문 바로가기

TIL

(52)
TIL) 소셜로그인 1. 스프링 시큐리티를 이용한 소셜로그인 스프링 시큐리티를 이용하여 구글 / 네이버 등의 플렛폼 계정을 이용하는 소셜로그인을 할 수 있습니다. 이때, 각 플렛폼에서 기본적인 설정을 한 후 client_id와 client_serect을 발급 받아야합니다. 발급 받은 후 token을 발급하여 access 토큰과 refresh 토큰을 생성해 줄 수 있습니다. 2. Access Token 및 Refresh Token 관리발생 상황OAuth2 인증 후 Access Token과 Refresh Token을 발급했으나:토큰 발급 시 발급자 정보(issuer)가 누락되어 인증 오류 발생.클라이언트가 Refresh Token을 사용해 Access Token 갱신 요청 시 오류.원인JWT 생성 시 필수 클레임(issuer,..
TIL) jpa 프로젝트 트러블 슈팅 1. 발견한 문제 테스트 코드 작성에서 문제가 발생했습니다.컨트롤러컨트롤러에서 @MockBean 어노테이션을 사용할 수 없다는 문제 발견로그인 필터로 인하여 api 테스트가 실행 되지 않는 문제 발견레포지토리local과 test의 application.properties 분리mysql로 test용 데이터베이스를 작성하였는데 자동적으로 h2로 잡히는 문제를 발견2. 문제 해결2.1 컨트롤러에서 @MockBean 어노테이션을 사용할 수 없다는 문제 스프링 부트 3.4.0부터 @MockBean이 사용되지 않는다는 오류메시지( @Deprecated )를 발견하였습니다. 이때 해결할 수 있는 방법으로 2가지를 발견하였습니다.@Mock으로 선언 후 @InjectMocks로 의존성을 주입합니다.@MockitoBean..
TIL) Self Join 1. Self Join이란?Self Join은 같은 테이블을 두 번 참조하여 데이터를 조합하는 SQL연산입니다.일반적으로 테이블 내의 데이터를 비교하거나 계층관계를 분석할 떄 사용합니다.같은 테이블을 두 번 참조하기 때문에 두 테이블을 구분하기 위해 별칭( as name)을 사용합니다. 2. Self Join의 기본 구조SELECT rFROM review rLEFT JOIN review rcON r.id = rc.parents; review r : review 테이블에 r이라는 별칭을 설정review rc : 같은 review 테이블에 rc라는 별칭을 설정하여 구분 3. Self Join의 장단점장점동일 테이블 내 데이터 비교 가능 : 셀프 조인을 사용하면 테이블 내에서 데이터를 비교하거나 분석할 수 있..
TIL) 세션에서 로그인 필터와 권한 필터 1. 문제상황 가입할 때, 권한을 주는데 로그인 후 필터에서 특정 URL에 대하여 오너(OWNER) 권한을 가진 사용자만 접근 할 수 있도록 제한하는 로직을 구현하였습니다.2. 구현 내용 특정 URL에 OWNER 권한을 가진 사용자만 접근할 수 있도록 제한을 하는 필터입니다. 권한이 없는 사용자 혹은 로그인하지 않은 사용자가 접근을 하려고 할 때에는 401 Unauthorized 상태와 메시지를 반환합니다. 핵심 로직 i) URL 매칭 특정 URL 패턴이 OWNER 전용 경로인지 확인한다.PatternMatchUtils.simpleMatch를 활용하여 요청 URL과 정의된 경로를 비교합니다.private boolean isForOwner(String requestUrl){ return PatternMa..
TIL) 테스트 코드 작성 1. 테스트 코드의 종류 테스트 코드는 테스트하는 방법에 따라서 나눕니다. 대표적인 테스트 코드의 구현 방식은 아래와 같습니다.유닛 테스트 : 코드의 가장 작은 단위( 메서드 등 )를 독립적으로 테스트 하는 방식통합 테스트 : 여러 모듈이나 컴포넌트 등의 상호작용할 때 예상대로 동작하는지 확인하는 방식각 방식의 특징은 다음과 같습니다.유닛 테스트 : 특정 기능이 예상대로 동작하는지 확인합니다. 빠르게 실행되며, 버그를 조기에 발견할 수 있습니다.통합 테스트 : 유닛 테스트보다 실행 시간이 길고, 상호작용 오류를 발견하는데 유용합니다.2. 테스트 코드 작성의 장점테스트 코드를 작성했을 때, 장점으로는 코드 품질의 향상, 버그 발견 등이 있습니다.코드 품질 향상 : 코드가 기대한 대로 동작하는지 확인할 수 ..
TIL) 디자인 패턴 1. 싱글톤  패턴정의 클래스의 인스턴스를 하나만 생성하고, 이 인스턴스를 공유하여 사용하는 패턴입니다.장점리소스 절약 : 인스턴스를 한개만 생성하여 리소스를 절약합니다.상태 관리의 용이성 : 전역적으로 접근하는 한개의 인스턴스를 사용하기 때문에 상태 관리에 유리합니다.단점테스트가 어렵다. : 클래스 전역 변수이기때문에 테스트에 불리합니다.의존성 증가 : 한개의 인스턴스에 의존하기때문에 결합도가 높아집니다.활용 방안설정 데이터를 관리하는 Config 클래스전역적으로 사용되는 Log 클래스데이터 베이스 연결2. 팩토리 패턴정의 객체 생성 로직을 캡슐화하여 객체 생성을 담당하는 별도의 팩토리 클래스를 사용하는 패턴입니다.장점유연성 : 객체 생성 방식을 변경해도 클라이언트 코드를 수정할 필요가 없습니다.캡슐화..
TIL) n^2 배열 자르기 1. 문제상황n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1], ..., arr[right]만 남기고 나머지는 지웁니다.이때, 정수 n, left, right가 매개변수로 주어집니다. 2. 최초 생각 처음에는 n * n의 2차언 배열을 선언한 후 row, col 변수를 이용하여 1차원 배열로 변환하고, left, right를 이용하여 답을 구하는 것이었습니다. 하지만 이때, 입력 제한사항이 아래와..
TIL) JPQL의 사용 1. JPQL이란? JPQL은 JPA보다 동적으로 쿼리를 만들어서 사용할 수 있는 쿼리입니다. JPA는 정해진 규칙에 따라 함수 명을 만들면 규칙에 따라 자동으로 쿼리를 생성해줍니다. 이때, 단점은 규칙에 맞게 작성하더라도 예상외의 쿼리가 동작할 수 있고, 길이가 길어지면 가독성이 떨어진다는 단점이있습니다. JPQL은 쿼리의 형식을 String으로 작성하여 EntityManager에게 전달해주면 EntityManager에서 쿼리를 실행 해 줍니다.  2. JPQL의 장점과 단점 쿼리를 String의 형태로 가지고 실행 시킬 수 있어서 쿼리를 직관적으로 이해할 수 있습니다. 또한 String의 형태이기 때문에 동적으로 쿼리를 설정할 수 있습니다. 하지만 String의 형태이기 때문에 띄어쓰기 등의 문법에 ..