반응형 개발 지식/Backend 반응형 7 [Redis] All keys must map to the same slot for MSETNX command 실무 개발 레디스 활용 중 값이 없을 경우 set하는 부분이 있었다. ReactiveRedisTemplate를 활용하여 MSETNX (multiSetIfAbsent) 을 하는 경우를 적용하여 테스트 진행 했는데 다음과 같은 오류가 발생하였다. All keys must map to the same slot for MSETNX command 해당 오류는 Redis Cluster에서는 MSET이 지원하지 않는 command라 발생한 상황이었다. 이에 반복분을 통해 SET하는 것으로 수정했는데 그 이유가 궁금했다. 예를 들어 Redis Cluster를 4개로 구성했다고 하였을 때 각각 Cluster당 hash slot를 배정 받게 된다. A-Node : 1 ~ 800 B-Node : 801 ~ 1600 C-No.. 2023. 11. 17. [Cache] Ehcache vs Caffeine Cache 서비스 플랫폼을 개발 운영하면서 가끔 사용자가 급작스럽게 늘어났을 때 DB Transaction Thread Dead Lock 또는 Collection Lock로 인하여 Exception이 터져 빨간 오류가 모니터링 페이지에 가득한 것을 볼 수 있습니다. Local Cache와 Global Cache로 주로 쓰고 있는 Redis Cache로 나뉘어 소개하고(예정..?) 이번 장에서는 Local Cache의 Caffeine Cache와 Ehcache와의 차이점에 대해서 서술해보려고 합니다. 현재 통합API에서 쓰고 있는 local Cache는 ehcache 입니다. Ehcache는 in memory 캐시로써 빠르고 컴팩트하며 Hibernate 및 MyBatis에서 제공하는 기본 캐시입니다. 1) Ehcac.. 2022. 9. 7. [WebFlux] WebFlux Kotlin MapStruct 적용 entity(document) -> DTO 로 변환시 mapStruct를 자주 활용한다. WebFlux kotlin 환경에서는 다음과 같은 설정으로 활용할 수 있다. // build.gradle.kts implementation("org.mapstruct:mapstruct:1.5.0.RC1") kapt("org.mapstruct:mapstruct-processor:1.5.0.RC1") plugins { ... kotlin("kapt") version "1.6.21" ... } mapper 인터페이스에서 toBaseDto 함수를 선언하였다 . BaseDocument -> BaseDTO로 변경할 것이다. // Mapper 인터페이스 import reactor.core.publisher.Flux @Mapper.. 2022. 5. 10. [RPC] gRPC 프레임 워크 적용기 MSA 아키텍처 그리고 API 개발에서 주로 Rest API를 활용했지만 서버와 클라이언트간 더 작은 payload값을 가지고 더 빠른 성능을 보여줄 수 있는 gRPC를 적용해보고자 한다. gRPC와 Rest API의 자세한 사항은 다음 페이지 참고 https://docs.microsoft.com/ko-kr/aspnet/core/grpc/comparison?view=aspnetcore-6.0 gRPC 서비스와 HTTP API 비교 gRPC와 HTTP API를 비교한 방법과 권장 시나리오를 알아봅니다. docs.microsoft.com Armeria grpc-spring-boot-starter 두가지를 모두 고려하였으나 내가 구현하고 싶은 범위는 단순히 gRPC를 활용하여 client에서 proto Ser.. 2022. 5. 9. [Log] Apache Log4j2 취약점 발견 및 원인 어느날 인터넷 서핑을 하던중 Log4j2 취약점 발견이라는 기사를 접하게 되었다. 실무에서 사용하는 @slf4j 또한 연관이 있기 때문에 해당 내용을 자세히 알고 싶어졌고 어떤 취약점이 있는지 찾아보게 되었다. (지극히 검색을 통해 알아낸 점이라 내용에 이상이 있으면 댓글 달아 주세요...) 일단 취약점 원인을 이해하기 위해서는 몇가지를 알고 있어야 한다. JNDI LDAP 1. JNDI (Java Naming and Diretory Interface) "디렉터리 서비스에서 제공하는 데이터 및 객체를 발견하고 참고하기 위한 자바 API이다." 라고 위키에 나와 있지만 이해가 되지 않아 구글링 해보며 결론적으로 내가 이해한 것 내용은 "DNS 서버랑 비슷하다" 였다. DNS서버가 사람이 읽을수 있는 도메인.. 2021. 12. 13. [JWT] JSON Web Token? 실무 개발 최적화를 위한 고민을 계속 하던 중 하나의 방법으로 Spring Session에 대해서 자세히 알아보고 정리를 하였다. 그리고 혼자 생각하기 보다 내 개발 멘토이자 친한 친구인 상원님에게 실무에서의 고민을 공유하였는데 JWT를 사용하는 것도 고민해보라고 이야기 해주었다. 그저 듣기만 했던 JWT에 대해 정리해보고자 한다. 서버 개발 같은 경우 주로 프론트와 데이터를 주고 받거나 API 서비스 호출을 통하여 데이터를 주고 받는다. 대부분 XML과 JSON의 데이터 포맷을 가지고 통신하게 되는데 각각의 장단점이 있지만 내가 생각하는 JSON의 큰 장점인 객체에 바로 매핑된다는 점은 많은 프로그래밍에서 XML보다는 JSON 형태를 많이 사용하는 것 같다. 1) JSON Web Token? Json .. 2021. 10. 14. [JWT] 서명을 위한 알고리즘 HS256과 RS256 JWT를 정리하다보니 JWT에 주로 사용되는 암호화 알고리즘 HS256과 RS256에 대해 언급이 필요할 것 같아 정리를 한다. 암호화 알고리즘 내 자세하고 복잡한 암호화 로직이 있지만 그 부분은 다음,, 언젠가 글로 남기기로 하고 지금은 2가지 알고리즘이 어떠한 프로세스를 가지고 있는지 정리하고자 한다. 1. HS256 (HMAC with SHA-256) 우선 클라이언트와 서버간 또는 서버 대 서버간 메시지를 주고 받았을 때 변조여부를 확인해야 한다. 원본 메시지와 공유된 메시지를 비교하여 변조 여부를 확인하는 것이 MAC(Message Authentication Code)이다. 여기서 HS256의 HMAC의 의미는 다음과 같다. HMAC (Hash based Message Authentication .. 2021. 10. 11. 이전 1 다음