Spring 90

[Spring Boot] 2-6. Core Features: JSON

1. Jackson jackson은 Spring Boot에서 기본적으로 제공되는 JSON 직렬화 도구입니다. spring-boot-starter-json 모듈의 도구입니다. auto-configuration 기능으로 제공되는 도구입니다. 직렬화를 담당하는 클래스인 ObjectMapper가 자동으로 설정됩니다. Custom Serializers and Deserializers ObjectMapper는 JsonSerializer와 JsonDeserializer 클래스를 사용하여 직렬화 및 역직렬화를 담당합니다. @JsonComponent public class MyJsonComponent { public static class Serializer extends JsonSerializer { @Override..

Spring/Spring Boot 2023.10.09

[Spring Boot] 2-3. Core Features: Profile

profile은 애플리케이션의 설정을 분리하여 특정 프로파일에 필요한 환경설정을 제공할 수 있습니다. @Profile 어노테이션을 통해 해당 클래스가 어떤 profile에 적용될지 가리킬 수 있습니다. 어떤 프로파일을 활성화할지 명시할 수 있습니다. property : spring.profiles.active command line args : --spring.profiles.active 기본 프로파일을 명시할 수 있습니다. property : spring.profiles.default 프로파일 활성화 조건을 명시할 수 있습니다. property : spring.config.activate.on-profile 1. Adding Active Profiles spring.profiles.active 프로퍼티..

Spring/Spring Boot 2023.10.09

[Spring Boot] 2-2. Core Features: Externalized Configuration

Spring Boot는 외부 설정을 통해 같은 코드를 다양한 환경에서 실행할 수 있게 지원합니다. 이 설정은 프로퍼티 파일, YAML 파일, 환경 변수, 명령행 인자 등을 통해 제공될 수 있습니다. 이러한 설정 값들은 @Value 어노테이션 또는 @ConfigurationProperties를 사용하여 애플리케이션의 빈에 주입될 수 있습니다. Spring Environment는 여러 PropertySource를 관리하며, 각 PropertySource는 정해진 우선순위에 따라 동작합니다. 동일한 프로퍼티 키가 여러 PropertySource에 존재할 경우, 늦게 등장하는 순서의 PropertySource 값으로 오버라이드됩니다. 0. PropertySource 순서 Default properties (Sp..

Spring/Spring Boot 2023.10.09

[Spring Boot] 2-1. Core Features: SpringApplication 클래스

1. SpringApplication SpringApplication 클래스는 Spring application을 편리하게 기동하는 방법을 제공하는 클래스입니다. SpringApplication.run 메서드가 main method로부터 호출되어 bootstrapping 작업을 시작합니다. 기본적으로 INFO 레벨의 로그가 찍이도록 설정됩니다. startup과 연관된 메시지가 출력됩니다. Startup Failure FaliureAnalyzers는 Spring Boot 기동중 에러 발생 시 문제 해결을 담당합니다. 여러 구현체를 가지고 있습니다. 에러 메시지를 출력합니다. 에러를 처리할 수 없다면, 원인 파악을 위해 DEBUG 레벨의 로그를 확인해야 합니다. DEBUG 레벨 로그는 Full Conditi..

Spring/Spring Boot 2023.10.08

[Spring Boot] 1-1. Spring Boot 사용하기

1. Build System Spring Boot는 의존성 관리를 위한 build system을 선택하여 사용할 수 있습니다. build system은 repository에 있는 공개된 artifact들을 가져오는 기능을 지원합니다. Spring Boot에서는 Maven, Gradle이 자주 사용됩니다. Ant, lvy 등도 지원되지만 기능이 제한되어 있습니다. Dependency Management 각 Spring Boot 버전별 사용하는 의존성의 버전을 큐레이션 해 두었습니다. Spring Boot 버전이 올라가면 해당 버전의 적절한 의존성 버전이 제공됩니다. 사용자는 Spring Boot 버전별 의존성에 대한 버전을 따로 지정하지 않아도 됩니다. 큐레이션된 의존성 버전을 사용하지 않고 원하는 버전을..

Spring/Spring Boot 2023.10.07

[Spring Security] 4-1. 보안: CSRF

1. CSRF 공격이란? 위조된 사이트에서 클릭을 통해 사용자가 의도하지 않은 요청을 특정 사이트로 전송하는 공격입니다. 공격자가 피해자의 웹 브라우저를 통해 웹 사이트에 대한 위조된 요청을 생성하는 공격입니다. 의도하지 않은 요청에 대한 인증은 브라우저의 쿠키정보를 사용하여 통과합니다. 사용자의 쿠키정보가 브라우저에 남아있는 점을 이용합니다. example 사용자가 은행 웹사이트에서 이체 거래를 마쳤습니다. 사용자는 메일 확인중, 모르는 자로부터 링크가 담긴 메일을 받았습니다. 사용자는 경각심없이 메일의 링크를 클릭하였습니다. 링크를 통해 이동한 웹 페이지에는 클릭만 하면 상품을 준다는 버튼이 있었습니다. 사용자는 클릭을 하였습니다. 이 버튼은 이전에 사용자가 사용했던 은행 웹사이트로 송금을 요청하는 ..

[Spring Security][KoLiving] 4-5. BlackList Token

BlacklistToken 시스템은 AccessToken의 보안 취약성을 보완하는 방법입니다. AccessToken은 짧은 유효기간으로 설정되도록 설계되어 탈취되더라도 오랫동안 사용할 수 없습니다. 그러나 그 기간동안 악의적인 공격자로 인해 피해를 받는 것은 사실이며 짧은 기간내에도 큰 피해를 줄 수 있습니다. 이러한 위험으로부터 보호하기 위해 유효하지 않은 AccessToken를 무효화하기 위해 도입되었습니다. 1. 인증 시 검증 절차로 확인 @Slf4j @RequiredArgsConstructor public class JwtAuthenticationFilter extends OncePerRequestFilter { private final JwtProvider jwtProvider; private ..

[Spring Security][KoLiving] 4-4. RefreshToken Rotation

* 이전 포스팅의 시리즈입니다. 3. RefreshToken Rotation RefreshToken Rotation은 RefreshToken 의 보안 취약점을 최소화하는 기법입니다. 만약 RefreshToken가 탈취되었다면, 서버는 RefreshToken 사용자가 악의적인 사용자인지 식별할 수 없습니다. RefreshToken Rotation은 이러한 취약점을 보완하고자 도입되었습니다. 클라이언트가 새로운 AccessToken을 요청할 때마다 RefreshToken도 함께 새로 발급해주는 방식을 말합니다 RefreshToken를 통해 AccessToken를 새로 발급받을 경우 만약 AccessToken을 요청할 때마다 RefreshToken을 새로 발급하게 되면 공격자가 RefreshToken를 새로 ..

[Spring Security][KoLiving] 4-3. RefreshToken

RefreshToken는 AccessToken을 재발급 받기 위한 토큰입니다. 노출되면 여러 문제가 발생하므로 보안에 각별히 주의해서 관리해야 하는데요. 구현하면서 어느 지점에서 어떻게 쓰이고 관리하는지 포스팅하겠습니다. 1. 최초 생성 보안을 강화하고 발급한 AccessToken을 효과적이고 중앙 집중적으로 관리하기 위해 RefreshToken을 저장합니다. 회원가입 완료 후 Redis에 저장됩니다. Redis는 다른 클라우드 인스턴스에 위치하여 클러스터로 구성합니다. Hash 자료구조에 {email : RefreshToken} 형식으로 저장합니다. RefreshToken 유효기간을 TTL로 설정합니다. 2. AccessToken 만료 사용중인 AccessToken이 만료된다면, RefreshToken..