SpringBoot5 [Cache] 다수 key로 CacheEvict, Page 직렬화 (CacheResolver, Mixin, DefaultTyping, Custom Se/Deserializer) 목차 해결 과제: 한 번에 다수의 캐시를 Evict 하기, Page 직렬화하기 문제: @CacheEvict는 복수의 key 불가 해결. SpEL과 CacheResolver를 통해 해결 개선. RedisCacheMange 설정들 문제: 직렬화 실패 해결Java8부터 추가된 LocalDateTime -> JavaTimeModule 모듈 추가 Lazy Loading으로 인한 Hibernate Proxy -> Mixin을 등록하여 직렬화 무시 문제: 역직렬화 실패 LinkedHashMap으로 역직렬화 -> ObjectMapper에 DefaultTyping 설정 기본 생성자가 없어 역직렬화 불가 -> Customize Serializer / Deserializer 성능 테스트 with JMeter 해결 과제 배.. 2023. 6. 16. [로깅 전략] 로그는 어떻게 남겨야할까? (중앙집중식 로깅) 로그를 어떻게 남겨야할지 찾다가 넷마블 기술 블로그에 좋은 자료가 있어 간략하게 기록을 남겨봅니다. 넷마블 기술 블로그 왜 로그를 남길까? 로그는 서비스의 이상현상을 파악하고 발생원인을 찾기 위해 남깁니다. 또한 요즘처럼 MSA를 도입하며 서비스가 커지고 복잡해지는 상황에서 문제를 파악하기 쉽도록 로그를 남기는 것이 중요합니다. 중앙집중식로깅 기존에는 로컬 서버에 로그를 축적했었지만, 이런 방법으로는 로그 정보에 접근하기가 어렵고, MSA가 등장함에따라 로그가 발생하는 서버의수가 많아지는 어려움이 있었습니다. 이런 문제를 해결하기 위해 중앙집중식로깅이 등장하게 되었습니다. 기본적으로 여러 곳에서 발생하는 로그를 한 곳으로 모아 관리하는 것입니다. 이렇게 되면 로그 정보에 접근하기는 쉬워졌지만, 너무 다양.. 2022. 10. 26. [SpringBoot] HttpSecurity 보안 설정 정리 SpringSecurity에 보안 설정을 하기위해서 Configuration Class에서 HttpSecurity를 통해 SecurityFilterChain을 Bean으로 생성하는데요. 이때 HttpSecurity에 어떤 설정들을 해줄 수 있는지 정리해보았습니다. 기본 형식 기존에는 WebSecurityConfigurerAdapter를 통해 보안설정되었지만, 현재는 deprecated되어 SecurityFilterChain를 통해 아래처럼 보안설정을 하게 되었습니다. @Configuration @EnableWebSecurity public class FormLoginSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecu.. 2022. 10. 13. [SpringBoot] 스프링부트 이해하기- 4편 Reflection(feat. 동적 로딩) Reflection 앞선 포스팅에서 스프링/스프링부트의 DispatcherServlet에 대해 알아보았습니다.. 짧게 요약하자면, DispatcherServlet은 클라이언트의 요청을 받아서 적절한 컨트롤러(또는 핸들러)를 찾아 동적으로 실행시킨 후 결과를 받아 Http형식에 맞게 리턴하는 기능을 합니다. 이때, '적절한 컨트롤러를 찾아 동적으로 실행'시키는 부분에서 '리플렉션(Reflection)'이라는 개념이 들어갑니다. Reflection이란? 오라클 홈페이지에서는 리플렉션을 아래와 같이 소개하고 있습니다. 더보기 Reflection is a feature in the Java programming language. It allows an executing Java program to examine.. 2022. 7. 16. [SpringBoot] 스프링부트 이해하기- 1편 Servlet이란(feat. Web Container) 최근 스프링부트 인강을 듣고 학원에서 나눠준 템플릿 위에 간단한 CRUD 게시판을 만들어보았는데, 스프링부트의 여러 설정파일이나 이 간단한 어플리케이션이 어떻게 동작하는지 전혀 모르는 것 같아서, 한번 이해해보고자 스프링부트 관련 개념들을 정리해보자한다. 누군가 프로그래밍을 배우는 과정은 눈감고 코끼리를 더듬거리며 코끼리를 알아가는 거랬는데, 엄청 와닿는 것 같다. 각설하고, 스프링부트는 우선 서버 개발을 편하게 해주는 프레임워크이기 때문에, 서버가 어떻게 동작하는지를 알아야할 것 같다. 그래서 우선 대망의 1편은 서블릿(Servlet)이다. 서블릿(Servlet)이란? 사실 개념이 잘 그려지지 않아서 여러 자료를 둘러본 후 스스로 내린 정의는 서블릿은 동적 웹 페이지(Dynamic web page)를 .. 2022. 7. 12. 이전 1 다음