본문 바로가기

language, framework, library/Spring Cloud17

[Spring Security] 인증 Filter를 기준으로 Custom Filter 추가와 변경 안녕하세요. 오늘 포스팅에서는 인증 Filter의 추가와 변경하는 방법에 대해서 알아보도록 하겠습니다.FilterSpring Securtiy는 기본적으로 Filter를 기반으로 동작합니다. 따라서 Spring Security Framework를 이해하기 위해서는 Filter에 대해서 이해하는것이 필수입니다. Filter는 요청을 수신하고 그 논리를 실행하고 최종적으로 다음 Filter로 요청을 전달하는 역할을 합니다.아래의 이미지는 여러 필터가 동작하는 방식을 나타냅니다. Filter 1에서 로직을 실행하고 Filter 2로 전달, Filter 3으로 전달하고 마지막에는 Controller에서 Request를 받아서 처리합니다. 그리고 Controller의 Response가 만들어지고 이렇게 만들어진 R.. 2023. 1. 18.
[Spring Security + JPA] JPA를 사용해서 Spring Security User 인증 서비스 만들기 안녕하세요. 오늘은 유저 정보를 MySQL에 저장하고 JPA를 활용하여 이 정보를 기준으로 Spring Security에서 유저의 인증을 확인하는 샘플을 만들어보도록 하겠습니다. 오늘 구현할 부분은 아래의 이미지에서 색깔로 칠해져 있는 부분입니다. 이부분들을 커스터 마이징하면 DB에서 유저를 가져와서 이를 인증에 이용할 수 있게 됩니다.오늘 구현한 샘플은 github에 올려두었습니다. 전체 코드가 궁금하신 분들은 github repository에 접근하시면 확인이 가능합니다.구현 필요 부분오늘 실습에서 Spring Security의 Interface를 이해하고 있어야하는 부분은 아래와 같습니다. 해당 Interface가 하는 역할 및 구현 부분에 대한 정의는 이전 포스팅[Spring Security] S.. 2022. 12. 28.
[Spring Security] Spring Security에서 UserDetailsService와 PasswordEncoder Interface 분석하기 안녕하세요. 이전시간에 Spring Security의 전체적인 아키텍쳐와 기본적인 샘플에 대해서 알아보았습니다. 아래가 Spring Security의 전체적인 이미지였습니다. 오늘은 이어서 UserDetailsService와 PasswordEncoder의 디테일한 부분에 대해서 알아보도록 하겠습니다.UserDetailsService와 UserDetailsManager interfaceUserDetailsService는 이전시간에 사용자에 대한 세부 정보를 가져오는 역할을 한다고 했습니다. 실제로 인터페이스를 확인해서 UserDetailsService는 어떻게 활용해야하는지 확인해보도록 합시다./** * 유저의 데이터를 가져오는데 사용하는 Core Interface * * 이 인터페이스는 read-only.. 2022. 12. 18.
[Spring Security] Spring Security 기본 아키텍처, 맛보기 샘플, 그리고 default 값 안녕하세요. 이전시간에 서비스의 일반적인 보안 취약성 이라는 주제로 개발하면서 지켜야할 기본적인 보안에 대해서 알아보는 시간을 가져보았습니다. 오늘은 Spring Security를 이용하여 실전으로 서비스의 보안을 강화해 보는 시간을 가져보도록 하겠습니다. 오늘은 그 첫 시간으로 Spring Security의 기본에 대해서 알아보는 시간을 가져보겠습니다.Spring Security 란Spring Security는 인증(authentication)과 인가(authorization) 그리고 일반적인 서비스 공격을 막아낼 수 있는 프레임워크입니다. 이 프레임워크는 servlet 서비스 뿐만 아니라 reactive 서비스 역시 사용 가능하며 Spring 기반 어플리케이션 보안의 사실상 표준입니다. 최고의 장점으.. 2022. 12. 4.
[MSA] spring boot에서 resilience4j 사용해보자 - RateLimiter, BulkHead, TimeLimiter 편 안녕하세요. 이번 포스팅에서는 spring boot 환경에서 resilience4j의 ratelimiter와 bulkhead, 그리고 timelimiter 패턴에 대해서 실습해보는 시간을 가져보도록 하겠습니다. RateLimiter rateLimiter는 단위 시간동안 얼마만큼의 실행을 허용할 것인지 제한할 수 있는 메커니즘을 말합니다. resiliece4j에서는 단순하게 요청의 숫자를 이용하여 제한(limit)할 수 있으며 또는 제한에 걸린 요청은 queue를 생성하여 이후에 처리하거나 하는 방법도 제공합니다. 위 이미지는 공식 docs에서 가져온 이미지입니다. rateLimiter가 어떻게 동작하는지 매커니즘을 잘 나타내고 있습니다. System.nanoTime()을 JVM 시작과 함께 일정한 단위 .. 2021. 12. 15.
[MSA] spring boot에서 resilience4j 사용해보자 - Retry, CircuitBreaker 편 안녕하세요. 이번 포스팅에서는 resilience4j를 실제로 spring boot 환경에서 사용해보는 방법에 대해서 알아보는 시간을 가져보도록 하겠습니다. 환경 먼저 오늘 실습에 사용된 환경은 아래와 같습니다. Java 11 Spring Boot 2.5.5 resilience4j 1.7.1 Spring Boot 기본적으로 resilience4j는 Spring Boot 전용이 아닙니다. 다양한 프레임워크에서 돌아갈 수 있도록 모듈이 준비되어있는데요. 그래서 Spring Boot에서 지원하는 properties 또는 Bean을 활용한 설정을 하기위해서는 Spring Boot 전용 모듈을 함께 추가해 주어야합니다. 추가해주어야하는 모듈은 아래와 같습니다. dependencies { compile "io.gi.. 2021. 12. 12.
[MSA] Hystrix말고 resilience4j ? 안녕하세요. 오늘은 분산 시스템에서 장애 상황을 견딜 수 있게 하는 Hystrix가 maintenance mode에 들어감에 따라 대체로 떠올랐던 resilience4j에 대해서 알아보는 시간을 가져보도록하겠습니다. 이번 시간에는 Hystrix 프로젝트의 현재 상태와 resilience에서 제공하는 것은 어떤것이 있는지에 대해서 알아보고 다음시간에는 spring boot 환경에서 실습을 진행할 수 있도록 하겠습니다. 먼저 Hystirx와 fallback tolerance에 대해서 잘 모르신다면 이전에 제가 올렸던 [MSA] Spring Cloud Hystrix - 개념편 포스팅을 먼저 참고해주시기 바랍니다. Hystrix의 현재 상태(Status) Hystirx는 2017년 7월 13일 Version 1.. 2021. 12. 10.
[MSA] Spring Cloud Feign - With Hystrix 안녕하세요. 오늘은 Spring Cloud Feign의 마지막 시간입니다. 오늘 알아볼 내용은 Feign에서 Hystrix와 연동은 어떻게 이루어지고 어떻게 동작하는지, 그리고 이를 실습해보는 시간을 가져보도록하겠습니다. Hystrix에 대한 개념이 없으시거나 부족하신 분들은 제가 포스팅한 예전 포스트가 있으므로 참조해주시면 좋을 것 같습니다. [MSA] Spring Cloud Hystrix - 개념편 의존성 저는 현재 시점의 Spring Cloud의 최신버전인 Hoxton.SR8를 사용하고 있습니다. 해당 mavenBom으로 OpenFeign의 의존성을 가져오면 최신버전인 2.2.5.RELEASE를 사용할 수 있습니니다.있습니다. 다른 많은 포스팅을 보시면 hystrix의 의존성을 추가해야한다고 합니다.. 2020. 10. 10.
[MSA] Spring Cloud Feign - 커스터 마이징 설정편 안녕하세요. 오늘은 Spring Cloud Feign의 2번째 시간입니다. 오늘 함께 알아볼 내용은 Spring Cloud Feign의 설정을 커스터마이징 할 수 있는 것은 어떤것들이 있으며 어떻게 커스터마이징 할 수 있는가에 대해서입니다. FeignClient에 커터마이징 설정을 적용하기 위해서는 아래와 같이 @FeignClient에서의 configuration 속성을 이용하면 됩니다. 아래처럼 했을 때 AzureClient는 커스터마이징 설정인 AzureHttpConfiguration과 오버라이딩 되지 않은 부분에 대해서는 기본설정인 FeignClientsConfiguration가 적용됩니다. @FeignClient(name = "azureClient", url = "${external.bing.ur.. 2020. 9. 30.
[MSA] Spring Cloud Feign - 기본 사용 및 기본 설정편 안녕하세요. 오늘은 오랜만의 Spring Cloud에 대해서 알아보는 시간을 가지려고 합니다. 오늘 알아 볼 프로젝트는 Spring Cloud Feign 프로젝트입니다. MSA로 시스템 아키텍처가 많이 변경되면서 시스템간의 단일 책임 원칙으로 많은 시스템의 개선점을 보인 것은 사실입니다. 하지만 모든지 트레이드 오프는 있습니다. MSA로 변화의 큰 단점 중 하나로 꼽자면 바로 API 호출의 증가일 것입니다. 기존에 단순 DB 조회로 가능하던 부분들이 MSA로 전환되면서 직접 접근하는 것이 불가능해졌습니다. 따라서 이들이 모두 API가 되었습니다. MSA 처럼 분산되어있는 시스템을 사용하는 입장에서는 API를 호출하는 코드를 노가다 식으로 항상 만들어줘야하는 번거로움이 생겼습니다. 이를 해결해 줄 수 있는.. 2020. 9. 27.
[MSA] Spring Cloud Eureka - 실습편 안녕하세요. 오늘은 저번시간에 이어서 Spring Cloud Eureka에 대해서 알아보도록 하겠습니다. 저번시간에는 Eureka의 이론적인 부분에 집중했다면 이번시간에는 실제로 적용해보는 시간을 가지도록 하겠습니다. Client는 Zuul을 사용할 것입니다. Zuul에 대해서 잘 모르시는 분들은 Zuul에 대한 포스팅을 참고해주시기 바랍니다. 프로젝트 구성요소 Service( Eureka-Client ) : 실제 로직이 실행되는 서비스 Eureka-Server : 서비스들의 정보를 관리하는 Eureka Server Zuul (Eureka-Client) : 실제 서비스로 Routing하는 Edge 서비스 아키텍처 MSA를 구성하는 서비스들은 본인의 정보(IP, Port, AppName, instanceI.. 2020. 2. 10.
[MSA] Spring Cloud Eureka에 관하여 - 이론편 안녕하세요. 오늘은 Spring Cloud의 구성요소 중 Eureka에 대해서 알아보도록 하겠습니다. Eureka 란 개요 Eureka는 AWS와 같은 Cloud 시스템에서 서비스의 로드 밸런싱과 실패처리 등을 유연하게 가져가 위해 각 서비스들의 IP / Port / InstanceId를 가지고 있는 REST 기반의 미들웨어 서버입니다. Eureka는 마이크로 서비스 기반의 아키텍처의 핵심 원칙 중 하나인 Service Discovery의 역할을 수행합니다. MSA에서는 Service의 IP와 Port가 일정하지 않고 지속적을 변화합니다. 그렇기 때문에 Client에 Service의 정보를 수동으로 입력하는 것은 한계가 분명합니다. Service Discovery란 이런 MSA의 상황에 적합합니다. 아키.. 2020. 2. 5.