본문 바로가기

Spring

(6)
Json 로그인 분석하기 - 스프링 시큐리티의 동작 과정 1. 개요앞의 게시글에서 json을 사용한 로그인을 스프링 시큐리티를 사용하여 구현해보았다. 구글 코드를 참고하여 작성하다가  해당 코드를 보았다.UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);//principal 과 credentials 전달return this.getAuthenticationManager().authenticate(authRequest); 해당 코드가 실제로 어떻게 동작하여 인증을 진행하는 지 궁금하여 이 게시글을 작성해보면서 공부하기로 하였다. https://runawayfromlazy.tistory.com/16 Hello, Sprin..
[Spring Security] 소셜 로그인 과정 이해하기 (Feat. Kakao) 1. 개요다음 프로젝트에서 카카오를 필두로 한 소셜 로그인을 구현하게 되었다. 이에 앞서 구구모 프로젝트의 코드를 이용하여 소셜 로그인의 진행 과정을 백엔드 입장에서 정리해보고자 한다.2. 진행 과정카카오에서 제시하는 소셜 로그인의 진행 과정은 다음과 같다. 이를 백엔드 입장에서 하나씩 살펴보자.2-1 인가 코드 받기우선 프론트 측에서 카카오 인증 서버와 연결하여 로그인을 한다. 이에 따른 인가 코드를 받아온다. 인가 코드를 받은 클라이언트는 서비스 서버에 이를 넘긴다.2-2 토큰 받기 @GetMapping("/kakao/login") public ApiResponse login(@RequestParam(name = "code") String code) { String access..
[SpringBoot] Hello, Multimodule! - 멀티 모듈 설정 1. 멀티 모듈?모듈: 프로그램을 구성하는 시스템을 기능 단위로 분할한 것멀티 모듈: 하나의 프로젝트를 모듈 단위로 분리한 것 멀티 모듈을 사용하여 프로그램을 설계하면 시스템을 역할과 책임 단위로 분리할 수 있어 유지보수성이 증가하고, 코드의 중복도 제거하여 코드를 깔끔하게 작성할 수 있다.2. 아키텍쳐초기의 멀티 모듈 아키텍쳐는 다음과 같이 간단하게 설계하였다.api: controller와 service로 구성, api 요청을 받아 이를 처리하는 작업 수행dbmodule: domain, dto, repository로 구성, 주로 도메인을 dao를 통해 관리하는 작업 수행다음 프로젝트에도 이를 적용하고, 필요 시 설계를 확장 및 분리할 계획에 있다. 3. 디렉토리 구조메인 프로젝트의 디렉토리이다. 다른 ..
람다 캡쳐링: Variable used in lambda expression should be final or effectively final 1. 개요멀티스레드를 사용하여 꿈나무 한입 프로젝트를 개선하는 동안 발생한 문제이다. 다음은 공공데이터를 가져오는 코드의 일부이다.공공데이터를 가져오기 위해 url을 만들고, 스레드에서 동작시키기 위해 람다식을 사용하였는데 위와 같은 에러를 잡아냈다. 람다 내부에서 사용되는 변수는 선언 후 수정되어서는 안된다는 뜻이다. IDE의 제안에 따라 다음과 같이 코드를 수정했다.그러나 왜 이런 오류를 잡아냈는지 궁금했고, 이에 대해 찾던 중 람다 캡쳐링의 개념을 알게 되었다. 다음은 이에 대해 정리한 내용이다. 2. 람다 캡쳐링?우선 람다 캡쳐링의 정의는 다음과 같다.스택 영역에 있는 변수를 사용할 수 있도록 지역 변수의 복사본을 람다의 스택에 제공 이게 무슨 말인가? 위 코드를 생각해보자. 위 코드에서 람다를 ..
Event 처리 1. 개요구구모 프로젝트에서 FCM을 사용하여 댓글 작성시 알림이 게시글 작성자에게 전송되도록 하는 기능을 구현하게 되었다. 이를 위해 다음 게시글의 코드를 참고하였다.https://velog.io/@kjy0302014/FCM-%EB%8C%93%EA%B8%80-%EC%95%8C%EB%A6%BC-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0 FCM 댓글 알림 구현하기FCM은 메세지를 안정적으로 전송할 수 있는 크로스 플랫폼 메시징 솔류션 입니다. 그렇기 때문에 Android, iOS, Unity, Flutter, Web 다양한 곳에서 적용 가능합니다. 그래서 이번에 Android Application 댓글 알velog.io이를 참고하여 댓글 작성 시 알림을 주는 방법은 다음과 같았다.@..
Hello, Spring Security 1. 스프링 시큐리티란?    인증, 인가 등 스프링 웹 개발 시 필요한 사용자 관리 기능을 구현하는데 도움을 주는 프레임워크이다.    이를 사용함으로써 보안 관련 기능을 보다 간편하고 빠르게 구현할 수 있다.  2. 작동원리? 1. 인증 요청을 하면 AuthenticationFilter가 요청을 가로채어 UsernamePasswordAuthenticationToken 인증 객체를 생성한다.2. 이 객체가 ProviderManager에게 전달되면 AuthenticationProvider(s)에 토큰을 보내 인증을 요구한다. 3. AuthenticationProvider(s)는 UserDetailsService에게 해당 로그인 폼에 대한 정보를 db에서 가져오라고 시킨다.4. UserDetailsServ..