스프링
-
Config 깃허브 Repository 구축스프링/스프링 클라우드 MSA 2024. 8. 4. 15:33
이전 포스팅에서 MSA 환경에서 공통으로 사용할 환경변수들이 지정된 Config Repository가 필요하다고 했었는데, 깃허브 리포지토리로 Config Repository를 구축할 수 있다. 리포지토리를 만들고 properties 파일을 하나 만들어준다. 이제 서버들에서 리포지토리를 사용할 수 있도록 키를 만들어줘야 한다. 접속하는 방법은 비대칭 키를 생성해서 public 키는 깃허브 리포지토리에 등록하고, Spring Config Server에서 private 키를 통해 접근한다. 터미널에 위와 같은 명령어를 입력해서 키를 생성했다. 해당 경로에 키가 생성되었다. 여기서 pulbic 키의 내용을 복사해서 깃허브 리포지토리에 넣어주면 된다. Settings > Deploy keys > Add dep..
-
스프링 클라우드 MSA스프링/스프링 클라우드 MSA 2024. 8. 4. 15:03
모놀로식 개발 vs MSA 개발 모놀로식 개발은 프로젝트에서 흔히 사용하는 모든 기능들이 하나의 서버로 동작하는 방식이다. 이 방식은 간편하지만, 오류 발생 시 모든 기능이 사용 불가능하다는 단점과 하나의 프레임워크로만 개발되어야 한다는 단점이 존재한다. 때문에, MSA 구조의 개발에 대한 관심이 생겼다. MSA의 장점하나의 기능에서 오류가 발생해도 나머지 기능 사용 가능언어, 프레임워크를 기능별로 다르게 사용 가능(스프링과 express 등)서비스별 스케일링 가능물론 장점만 존재하지는 않고, 초기에 구축하기 어려우며 분산 관리가 힘들다는 단점도 존재하긴 하지만, 그럼에도 불구하고 장점이 명확하기에 MSA를 공부하게 되었다. 스프링 클라우드 MSA의 구성 환경에 대한 그림이다. 각각의 스프링 부트..
-
jwt - JwtAuthorizationFilter스프링/스프링 시큐리티 2024. 1. 13. 18:08
저번 포스팅에서 사용자의 요청을 토큰으로 받는 코드를 작성했다. 이번 포스팅에서는 사용자가 개인정보에 접근하기 위해서 다시 로그인을 하는 것이 아니라 JWT 토큰을 이용하여 전자서명을 통해 접근할 수 있도록 하는 코드를 작성할 것이다. JwtAuthorizationFilter는 어떤 요청이 있을 때 작동하는게 아니라 SecurityConfig.class @Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig { private final UserRepository userRepository; private final CorsConfig corsConfig; private final PrincipalDetai..
-
jwt - JwtAuthenticationFilter스프링/스프링 시큐리티 2024. 1. 13. 16:54
로그인 동작 구조 @RequiredArgsConstructor public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter { private final AuthenticationManager authenticationManager; // login 요청을 하면 로그인 시도를 위해서 실행되는 함수이다. @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { System.out.println("JwtAuthenticatio..
-
jwt 임시 토큰을 만들어서 필터 테스트스프링/스프링 시큐리티 2024. 1. 12. 21:28
웹에 접근할 때 필터를 통해서 토큰이 제대로 전달되는지 확인한다. 실제 jwt 토큰을 만들기 전에 필터 테스트를 진행해볼 예정이다. SecurityConfig.class @Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig { private final CorsConfig corsConfig; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.addFilterBefore(new MyFilter1(), SecurityContextPersistenceFilter.class); ... (생략) } http..
-
jwt를 위한 security 설정스프링/스프링 시큐리티 2024. 1. 12. 20:38
jwt를 사용하기 위해서는 기본적인 스프링 시큐리티 설정이 필요하다. 이번 포스팅에서는 jwt를 사용하기 전에 기본적인 설정들을 해줄 것이다. SecurityConfig.class @Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig { private final CorsConfig corsConfig; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf(CsrfConfigurer::disable); http.sessionManagement(session -> session.sessionCre..
-
JWT(Json Web Token)스프링/스프링 시큐리티 2024. 1. 12. 19:33
세션은 간단하게 말하자면 클라이언트의 요청이 있을 때 세션 저장소에 사용자의 정보를 넣어두는 형식이다. 하지만 만약에 로드 밸런싱을 통하여 서버를 분할한다면 세션 저장소를 3개로 나누는 것도 애매하고, 하나로 통합하자니 너무 복잡하고 성능상 느려질 수 있다는 단점도 존재한다. 이러한 문제점을 해결하기 위해 JWT(Json Web Token)을 사용한다. 클라이언트가 요청을 보내면 서버는 세션이 아니라 JWT를 만드는 것이다. 또한 JWT는 통신에서 CIA를 지키기 위한 RSA를 사용하기 때문에 안전하다. JWT(Json Web Token)란? 정보를 JSON 객체로 안전하게 전송하기 위한 개방형 표준이다. 이 정보는 디지털 서명이 되어 있어서 신뢰할 수 있다. 서명된 토큰은 정보의 무결성을 확인할 수 있..
-
OAuth - 네이버 로그인 (provider 직접 등록)스프링/스프링 시큐리티 2024. 1. 10. 20:56
스프링에서 기본적으로 구글, 페이스북 같은 로그인을 할 때 각각의 provider를 넘겨준다. 하지만 우리나라에서만 사용되는 네이버, 카카오등은 제공되지 않는다. getAttribute 구글 - sub :1234 페이스북 - id : 1234 이런 것과 같이 네이버에도 attribute가 있을 것이다. 네이버는 기본적으로 provider가 아니기 때문에 직접 등록해줘야 한다. 구글, 페이스북과 같은 방식으로 개발자 사이트에서 애플리케이션 등록을 한 다음에 application.yml에 추가해준다. application.yml spring: security: oauth2: client: registration: naver: client-id: g1U5lR4UnvavwMI5XS1Y client-secret:..