전체 글
SSO 연동과 쿠키 (feat. JWT 토큰, 보안)
하나의 서비스를 위해 사용자 인증 기능을 제공하던 "사용자 인증 애플리케이션"에서여러 서비스의 사용자 인증 기능을 제공하고, SSO 기능까지 지원해야하는 요구사항을 구현해야했습니다.어떤 방식으로 구현할 지 고민한 내용 중 JWT 토큰의 저장 위치 관련되어 쿠키에 대해 알아본 내용들을 정리합니다. SSO 기능에 대한 요구사항은 크게 2가지였습니다.1) 로그인 후, 새 탭에서 접속했을 때에도 로그인이 되어야 한다.2) 서브 도메인이 같으면 로그인 토큰이 공유되어야 한다. (다른 서브 도메인에 접속 시 쿠키가 전달되지 않아야 한다.) 기존 "사용자 인증 애플리케이션"은 사용자 인증 과정을 거치고 나면 JWT를 발급해주고 있었습니다. body에 토큰을 담아 응답하면 Frontend에서 이를 세션 스토리에 저장하..
[SQL, 프로그래머스] 주문량이 많은 아이스크림들 조회하기
Lv4 '주문량이 많은 아이스크림들 조회하기' 문제를 풀어보았습니다.구체적인 프로그래머스 문제는 링크 참고 바라며, 문제는 간략히 설명합니다. 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 사용할 테이블 정보두 테이블 모두 아이스크림 가게의 주문 정보를 담은 테이블입니다.first_half 테이블은 상반기의 아이스크림 주문 정보를 담은 테이블. (flavor 칼럼이 기본 키, shipment_id 칼럼이 july 테이블의 shipment_id의 외래 키)july 테이블은 7월의 아이스크림 주문 정보를 담은 테이블입니다. 7월에는 워낙 아이스..
예외(Exception) 처리
적절한 예외 핸들링은 애플리케이션에 필수적이지만 생각보다 중요성을 간과할 수 있는 부분이라 생각합니다.이 글에서는 예외를 다룰 때마다 고민했던 포인트들과 예외를 처리하고 생성하는 Best Practice에 대해 정리합니다.1) 예외 처리 (Handling Exceptions) 할 때메서드가 에러로 인해 완료되지 않았을 때 상태를 복구한다.메서드에서 예외가 발생했을 때, 호출자는 부작용이 없다고 가정할 수 있어야 합니다. 계좌 이체 코드 (한 계좌에서 출금하고 다른 계좌에 입금하는 코드)를 예로 들면,출금 로직은 정상적으로 성공했는데 입금 로직에서 예외가 발생하면, 출금이 그대로 완료되지 않도록 해야 합니다. 이를 위해 처리할 수 있는 방안은, 입금 거래 과정 중 한 곳이라도 예외가 발생하면 그전에 정상적..
[SQL, 프로그래머스] 상품 별 오프라인 매출 구하기
프로그래머스에 여러 문법들을 활용해서 SQL 쿼리문을 짜볼 수 있도록 다양한 문제들을 레벨 별로 제공하고 있습니다.Lv2 '상품 별 오프라인 매출 구하기' 문제를 풀어보았습니다.프로그래머스 문제 링크 참고 바라며, 문제는 간략히 설명합니다. 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 사용할 테이블 정보어느 의류 쇼핑몰에서 판매중인 상품들의 상품 정보를 담은 PRODUCT 테이블과오프라인 상품 판매 정보를 담은 OFFLINE_SALE 테이블이 있으며,두 테이블 모두 product_id 칼럼을 가지고 있습니다.생각의 과정product 테이블과 offline_..
[SQL, 프로그래머스] 조건에 맞는 도서와 저자 리스트 출력하기
프로그래머스에 여러 문법들을 활용해서 SQL 쿼리문을 짜볼 수 있도록 다양한 문제들을 레벨 별로 제공하고 있습니다.Lv2인'조건에 맞는 도서와 저자 리스트 출력하기' 문제를 풀어보았습니다.프로그래머스 문제 링크 참고 바라며, 문제는 간략히 설명합니다. 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 사용할 테이블 정보어느 한 서점에서 판매중인 도서 정보를 담고 있는 book 테이블과 저자 정보를 담고 있는 author 테이블이 있으며,두 테이블 모두 author_id 값을 갖고 있습니다.고민 과정book 테이블에 있는 정보와 author 테이블에 있는 정보를 ..
[Spring Security] permitAll() 적용되지 않는 이슈 해결
서론다운로드 도메인의 애플리케이션에는 권한 있는 사용자만 접근 가능한 API 1개로만 존재했습니다.최근, 권한 체크 없이 접근 가능한 API를 한개 더 추가해야하면서 Spring Security의 설정을 수정해야 했습니다.구체적인 기능에 대한 설명1) 권한이 있는 사용자에 한해 다운로드할 수 있도록 하기 위해 애플리케이션 내 API에서 요청을 처리하도록 하였고,2) 권한 체크가 필요 없는, 누구나 다운로드할 수 있는 파일들의 경우 Nginx에서 파일들을 나르도록 처리하고 있습니다.(해당 서버는 NAS 서버와 마운트 되어있었기 때문에 파일을 매핑하여 전달하는 것이 가능했습니다.)기존에는 VM 환경에서 구동 중이었으나 컨테이너 환경으로 전환해야하면서 Nginx가 수행하던 역할을 애플리케이션 내에서 처리하기로..