Springboot에서 SpringSecurity는 어떻게 초기화되는가? - 중
·
Web-Spring
개요이전 포스팅에서 Springboot의 초기화 시작점에서 SpringSecurity의 세팅이 어떻게 이뤄지는지 보았다면,이번 포스팅에서는 SpringSecurity내에 기본 필터들이 어떻게 초기화과정을 거치는지 알 수 있어요. 흔히 `securityFilterChain` Bean을 설정하는 코드에서`addFilterBefore()` 이나 `addFilterAfter()` 등을 사용하여 커스텀 시큐리티 필터를 등록하곤 해요이 메소드들의 동작도 함께 알아봅시다. 사전지식이전 포스팅의 사전지식과 동일하며, 해당 포스팅의 글을 읽고 오면 더욱 좋습니다.이전 포스팅을 읽은 적이 없다면, SecurityArchitecture을 이해하고 오면 좋습니다. 저번 포스팅에서 넘어오자면...저번 포스팅의 마지막에서 `We..
Springboot에서 SpringSecurity는 어떻게 초기화되는가? - 상
·
Web-Spring
개요흔히 Springboot에서 로그인 관련 인증/인가를 구현한다고 하면 기계처럼 블로그를 뒤져서라도 SpringSecurity를 도입하려고 시도해요// build.gradleimplementation 'org.springframework.boot:spring-boot-starter-security'implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'또한 SecurityConfig와 같은 Java Configuration 파일을 생성하여 SecurityFilterChain Bean을 구성하고@EnableWebSecurity와 같은 어노테이션을 붙여서 마무리해요.이 과정까지 성공한다면 SpringSecurity 덕에 쉽게 인..
SpringSecurity에서 OAuth2 로그인 시 쿼리 파라미터 유지하기
·
Web-Spring
개요이 문서는 SpringSecurity와 Authorization Code Grant 방식에서의 OAuth2 Client를 통한 소셜로그인이 구축된 환경에서 소셜로그인 요청시에 포함된 쿼리 파라미터를 최종 리다이렉트 주소까지 유지하는 방법을 알려줘요이 기능으로 OAuth2 Client 의 최종 리다이렉트 주소를 동적으로 지정하는 등의 다양한 활용이 가능해요Authorization Code Grant 개념OAuth2에서는 여러 인증방식이 있고, 그 중에서 kakao와 Google등의 소셜로그인 제공자에게 인가코드(Authorization Code)를 전달하는 방식을 Authorization Code Grant 이라고 해요Authorization Code Grant 기본 동작Authorization Cod..
쿠키와 SameSite, Secure, HttpOnly
·
Web-Spring
상황네이버카페의 경우 cafe.naver.com으로 본 네이버의 도메인에서 서브도메인을 사용한다.이와 같이 현재 개발중인 프로젝트도 서브도메인 양식을 사용하게 되는데,이에 따라 프론트에서도 서브도메인별 서로 다른 레포지토리를 활용한다고 들었다. 그러면 중요한것이 인증정보가 서브도메인별로 유지되어야 하는데, 이를 위해서 SSO라는 걸 도입하기도 한다.당장에 인증 체계를 빨리 구현하고 다른 도메인의 비즈니스 로직을 구현해야 한다고 판단했고,쿠키를 통해 서브도메인간 인증정보를 유지해야겠다는 생각이 들었다. 이 과정에서 쿠키를 추가할때 HttpServletResponse에 addCookie 메소드를 통해서 수행되고흔히 Spring에서 쿠키를 다룬다고 하면 JDK 21 기준 jakarta.servlet.http...
DNS와 레코드
·
Infra
상황가비아에서 도메인을 구매한 당시에는 구매한 도메인에 A타입 레코드로 EC2 배포환경에 연결하였다. 하지만, 프론트의 배포환경을 AWS S3에서 CloudFlare 로 옮기고 그거에 따라 DNS 관리도 CloudFlare로 옮기게 되었는데 이 과정에서 기존에 가비아에 가비아 네임서버로 등록되어있는 상태를 CloudFlare 네임서버를 등록하는것으로 교체하였다.가비아 에서 CloudFlare로 옮기면서 문득 1. 네임서버는 왜 바꿔야하는지, 2. 레코드는 어떤건지 궁금해서 파헤쳐본 내용을 이 글에서 기술한다. 네임서버흔히 DNS라고 부르는건 사실 Domain Name System의 약자로 하나의 체계를 뜻한다.실제로 도메인을 IP로 바꾸거나 혹은 다른 도메인으로의 요청으로 바꾸는 등의 역할을 수행하는것은..
@JsonTypeInfo 를 통해 유연하게 Json과 Java객체 매핑하기
·
Web-Spring
상황게시판에 대해서 JPA와 Springboot를 통해 CRUD를 개발하려 하는데게시판은 종류가 여럿 존재하고(자유 게시판, 공지 게시판 등등),게시판 종류와 상관없는 전체 조회의 기능도 제공해야 했었다.또한 게시판별 종류별로 세부 요소들이 다를 수 있었다. 예를들어 자유게시판은 텍스트 에디터로 만들어진 콘텐츠가 있으며,공지 게시판에는 다른 게시판에는 없는 "공지 종류"와 같은 추가적인 요소가 존재하는것이었다. 따라서 생각한 DB 테이블 설계는 게시판별로 다른 요소를가진 테이블을 게시판 종류별로 설계하고공통요소들 (조회수, 좋아요수, 생성날짜, 게시날짜, 업데이트 날짜 등) 을 하나의 테이블로 관리하는것이다.공통요소가 있는 테이블과 게시판 종류별 테이블과의 1:1 관계를 맺는것으로 결론지었다. 이 과정에..
[코드트리 조별과제] Grid Compression
·
CodeTree
좌표 정보를 문제를 풀기위해 재정렬 하는 과정이라고 생각하면 편하다. 보통 일정 범위내의 수직선에서, 특정 구간내 점의 개수를 구하는 문제를 볼 수 있다. 이럴 때, 모든 점을 해당 수 범위내에 표기하기 위해서 점이 있다 없다를 기준으로 boolean 배열을 사용하곤 한다. 그렇지만 이는 index == 점위치 가 되기 때문에 점의 값이 사실상 억을 넘어서면 "메모리 초과" 를 당하거나 안당하더라도 순회하면서 점을 전처리하는데 시간 복잡도를 초과할 가능성이 크다. 여기서 볼 수 있는 관찰은, 전처리를 해야함을 인지하였으나 주어진 점들을 표기하는 방법에 있어서 문제가 있다. 일반적으로 숫자가 매우 큰 상황에서 해당 숫자를 인덱스로 사용해야 한다면 배열이 아닌 HashMap을 사용하면 좋다. 왜냐하면 Has..
[코드트리 조별과제] 2차원 배열에서 한칸씩 이동하는 dp
·
CodeTree
DP문제는 다양하지만 2차원배열에서 한칸씩 전진하면서 그순간마다 최적의 선택을 통해 최종답을 구해나가는 DP가 있다. DP는 어디까지나 전체를 한번에 구한단 생각을 버리고 아주 작은구간 (예를들어 어떤 칸 하나 까지 오는 경우의수) 이런것부터 차곡차곡쌓아나가야 한다. 그러면 반복되는 수학식 즉, 점화식이 보이게 된다. 다음은 정수 사각형의 최소이자 최대 라는 문제인데 사실 문제제목만 보기에는 약간 이상하다. 왜냐하면 최소이자 최대라는게 무슨말일까? 최소이자 최대는 즉, 특정 도착지점까지의 경로들은 각각의 경로상의 최솟값이 있는데, 그들중 최대를 구하는것 여기서 서브프라블럼은 뭘까? 바로 특정칸까지 도달하기 전까지는 모두 어떤 특정경로의 최소일 것이다. 즉, 문제에서 주어진 방향대로 진행해 나가는것은 결국..