분류 전체보기
-
[Spring] Apple OIDC 로그인 구현Spring 2025. 9. 25. 16:41
이전 글에 이어서 Apple 로그인 구현 방법에 대해서도 포스팅 해보겠습니다.카카오 로그인은 OIDC 기반으로 단순히 id_token을 검증하면 됐지만,애플은 조금 더 복잡한 구조를 가지고 있습니다. 특히, 아래 2개의 내용 때문에 좀 더 복잡하다고 생각합니다.최초 로그인 시에만 email, 등 scope 정보를 제공한다는 점회원 탈퇴 시 반드시 refresh_token을 사용해 revoke를 호출해야 한다는 점이 두 가지 때문에 단순 OIDC 검증만으로는 부족합니다.이번 글에서는 Spring Boot 3.4 + Java 21 환경에서 Apple OIDC 로그인을 구현 방법에 대해 포스팅 하겠습니다.(Kakao OIDC 로그인 및 해당 포스터에 없는 클래스 내용은 👉 이전 글을 참고해주세요 🙌)📑 ..
-
[Spring] Kakao OIDC 로그인 구현Spring 2025. 9. 25. 15:27
구현기최근에 소셜 로그인을 구현할 일이 있었는데,그중에서도 카카오 로그인을 OIDC(OpenID Connect) 방식으로 구현했습니다. 보통은 OAuth 2.0 방식으로 구현하는 경우가 많은데,이번에는 보안성과 표준성을 더 살리고 싶어서 OIDC 기반 카카오 로그인을 적용했어요. 이 글에서는 제가 직접 구현하면서 정리한 코드와 개념들을 공유하려고 합니다.특히, Redis 기반 공개키 캐싱, 인터페이스 기반 확장성 설계(타 소셜 로그인 대비) 등을 담았으니비슷한 작업을 하시는 분들께 도움이 되면 좋겠습니다.📑 목차 OIDC(OpenID Connect)란? OAuth 2.0 vs OIDC 카카오 OIDC 로그인 흐름 프로젝트 환경 아키텍처 개요 Kakao Developers ..
-
[Spring] Redis의 Redisson을 활용한 분산락 처리Spring 2025. 5. 10. 19:40
개요동시성 제어를 위한 락 방식은 여러 가지가 있고, 접근 레벨에 따라서도 적용할 락 방식이 다릅니다. 예를 들어, 하나의 프로세스 안에서의 동기화, 여러 프로세스 간의 동기화, 또는 분산 시스템에서의 동기화 등 목적에 따라 요구사항과 복잡성이 달라집니다. 그 중에서도 다중 스레드 환경과 분산 시스템 환경 모두에서 동시성 제어를 보장하기 위해 Redis의 Redisson을 통한 분산락 처리에 대해 알아보겠습니다.1. 락의 종류와 차이점동시성 제어를 위해 사용되는 락은 크게 다음과 같이 분류할 수 있습니다.종류설명정리락 (Mutex)단일 프로세스, 단일 스레드 간 동시성 제어관적락 (Monitor Lock)JVM의 synchronized 키워드로 구현된 락비관적 락데이터 접근 시마다 락 걸어 충돌 방지낙관..
-
[Spring] Lock 종류 정리 (낙관적 락, 비관적 락, 분산락, 데드락, 등) 및 예시Spring 2025. 5. 8. 10:21
1. Lock이란?1.1 설명Lock은 동시에 여러 개의 트랜잭션이나 프로세스가 같은 리소스(데이터, 파일 등)에 접근하려고 할 때 발생할 수 있는 경쟁 조건(Race Condition)을 방지하기 위한 제어 장치입니다. 데이터 정합성을 보장하고 예기치 않은 충돌을 방지하기 위해 필수적인 메커니즘입니다.1.2 원리Lock은 주로 다음의 방식으로 작동합니다.하나의 트랜잭션이 리소스를 점유하면, 다른 트랜잭션은 해당 리소스가 해제될 때까지 대기하거나 실패 처리됩니다.Lock의 종류에 따라 점유 방식(낙관적, 비관적)이나 위치(DB, 분산 시스템 등)이 달라집니다.2. 낙관적 락 (Optimistic Lock)2.1 낙관적 락이란?낙관적 락은 충돌이 거의 발생하지 않을 것이라고 가정하고 처리하는 방식입니다. ..
-
[Search Engine] SphinxSearch Engine 2024. 8. 22. 20:02
해당 포스팅에서는 Sphinx 검색엔진을 설치하고, 쿼리를 실행 해보겠습니다. Sphinx란?고성능, 오픈 소스 검색 엔진으로, 대량의 데이터를 신속하고 정확하게 검색할 수 있도록 설계된 시스템입니다. 특히 MySQL, PostgreSQL 같은 관계형 데이터베이스와의 통합이 뛰어나며, 다양한 애플리케이션에서 쉽게 사용할 수 있습니다. Sphinx의 특징빠른 검색 속도: Sphinx는 대용량 데이터에서도 매우 빠른 검색 성능을 자랑합니다. 이는 Sphinx가 데이터의 색인(Index)을 생성하고, 검색할 때 이 색인을 활용하여 속도를 극대화하기 때문입니다.확장성: Sphinx는 수백만 개의 문서를 색인하고 검색할 수 있는 능력을 가지고 있어, 대규모 애플리케이션에서도 사용하기 적합합니다. 또한, 분산 검색..
-
[MySQL] like, fulltext index, sphinx engine cost 비교Search Engine 2024. 8. 21. 00:10
검색 엔진 모듈화를 위한 3가지 방안의 차이점을 비교합니다.✍️ 목차1. LIKE Search1-1. 선형 검색으로 인한 속도 저하1-2. 인덱스 사용의 제한1-3. 문자열 패턴 매칭 한계2. Full-Text Index Search2-1. 전문 검색 기능2-2. 인덱스 기반 검색2-3. 정확성 및 유사성 검색2-4. 확장성 제한3. Sphinx Search Engine3-1. 가중치 기반 검색3-2. 문서 유사성 검색3-3. 유연성 및 통합4. 비교 분석sphinx검색 속도용량소요시간Fulltext indexing 시 리스크5. 선택 기준5-1. 데이터베이스 내장 Full-Text 검색 기능5-2. 외부 검색 엔진(Sphinx, Elasticsearch 등)1. LIKE SearchLIKE 검색은 매우..
-
[MQ] RabbitMQMQ 2024. 8. 20. 23:36
이번 포스팅에서는 Message Queue 중 하나인 RabbitMQ의 특징을 설명합니다. RabbitMQ란 AMQP 프로토콜의 메시징 모델을 기반으로 구현한 메시지 브로커로 Publisher에서 Consumer로 메시지를 전달할 때 중간에서 메시지 브로커 역할을 합니다. AMQP란? 시스템 간 메시지를 교환하기 위해 공개 표준으로 정의한 표준 메시징 프로토콜이며 ‘메시지 브로커’라는 미들웨어를 활용해서 비동기식으로 메시지 전달이 가능합니다. RabbiMQ는 높은 처리량보다는 지정된 수신인에게 원하는 방식으로 메시징을 신뢰성 있게 전달하는데 초점이 맞춰져 있어 대용량 트래픽에는 불리하지만 익스체인지 타입이나 라우팅 정책에 따라서 동작 방식을 선택할 수 있습니다. Publisher : 메시지를 생성..
-
[Nginx] Elastic Beanstalk Nginx RateLimit 설정 (2)Nginx 2024. 4. 20. 17:49
✍️ 저번 포스팅에서는 limit_req module, limit_req_zone, 사용자 지정 에러 등을 설정 했습니다. 이번 포스팅에서는 RateLimit 설정 마무리와 각 서비스에서 필요한 예외 설정까지 진행하고 최종적으로 AWS ElasticBeanstalk를 배포할 때 적용하는 방법까지 알아보겠습니다. 1. Client Max Body Size 제한 📘 /project/platform/nginx/conf.d/rate_limit.conf # limit body_size client_max_body_size 5M; 클라이언트가 전송할 수 있는 요청 본문의 크기를 제한 할 수 있는 설정입니다. 위 예시는 클라이언트가 보낼 수 있는 요청의 본문 크기를 5MB로 제한합니다. 2. Nginx 설정에서 클라..