9osari.log

프로젝트

15 postsAll posts

[Spring Security] 카카오와 구글 소셜로그인 구현하기

도입 이유 기존 DevBid의 로그인 흐름은 세션 기반 인증이었다. 이 구조는 단순하고 안정적이지만, 경매 플랫폼 특성상 몇 가지 한계가 있었다. 회원가입 허들이 높다 경매는 충동적으로 참여가 이루어지는 경우가 많다. 가입 과정에서 이메일 인증, 비밀번호 규칙 등의 절차가 길어지면 이탈

devbid, spring, spring-boot

[Spring] Spring AOP 이해하고 적용하기

AOP란? Aspect-Oriented Programming (관점 지향 프로그래밍) 로깅, 트랜잭션, 보안 같은 공통 기능을 비즈니스 로직에서 분리하는 기법 AOP 없이 구현 비즈니스 로직보다 부가 기능 코드가 더 많다.. 이런 코드가 모든 메서드에 반복된다면..? ~~끔찍~~ AOP

java, spring, spring-boot

[DevBid - 실시간통신] AWS EC2 Redis 환경에서 Pub/Sub와 분산락 검증

📚 실시간 경매 시스템 구축기 시리즈 1. WebSocket으로 실시간 경매 구현하기 2. WebSocket 메시지 동기화 문제와 Redis 선택 3. Redis 분산락과 Pub/Sub으로 멀티서버 동시성 제어 4. Redis 도입 후 마주한 문제와 해결 5. 멀티서버 환경에서 Pub

devbid, redis, spring-boot

[DevBid - 실시간통신] Redis 도입 후 마주한 문제와 해결

📚 실시간 경매 시스템 구축기 시리즈 1. WebSocket으로 실시간 경매 구현하기 2. WebSocket 메시지 동기화 문제와 Redis 선택 3. Redis 분산락과 Pub/Sub으로 멀티서버 동시성 제어 4. Redis 도입 후 마주한 문제와 해결 ← 현재 글 5. 멀티서버 환

devbid, redis, spring-boot

[DevBid - 실시간통신] Redis 분산락과 Pub/Sub 으로 멀티서버 동시성 제어

📚 실시간 경매 시스템 구축기 시리즈 1. WebSocket으로 실시간 경매 구현하기 2. WebSocket 메시지 동기화 문제와 Redis 선택 3. Redis 분산락과 Pub/Sub으로 멀티서버 동시성 제어 ← 현재 글 4. Redis 도입 후 마주한 문제와 해결 5. 멀티서버 환

devbid, redis, spring-boot

[DevBid - 실시간통신] 멀티 서버 환경에서 Redis Pub/Sub이 필요한 이유

📚 실시간 경매 시스템 구축기 시리즈 1. WebSocket으로 실시간 경매 구현하기 2. WebSocket 메시지 동기화 문제와 Redis 선택 ← 현재 글 3. Redis 분산락과 Pub/Sub으로 멀티서버 동시성 제어 4. Redis 도입 후 마주한 문제와 해결 5. 멀티서버 환

devbid, redis, spring-boot

[DevBid - 실시간통신] WebSocket으로 실시간 경매 구현하기

📚 실시간 경매 시스템 구축기 시리즈 1. WebSocket으로 실시간 경매 구현하기 ← 현재 글 2. WebSocket 메시지 동기화 문제와 Redis 선택 3. Redis 분산락과 Pub/Sub으로 멀티서버 동시성 제어 4. Redis 도입 후 마주한 문제와 해결 5. 멀티서버 환

devbid, java, jpa

[DevBid - JPA] 낙관적 락 적용과 데드락

개인 프로젝트에서 경매 입찰 기능을 개발하던 중, JMeter로 동시 입찰을 테스트했더니 10명이 입찰했는데 3개의 입찰이 성공하고 입찰 카운트는 1만 증가하는 데이터 정합성 문제가 발생했습니다. 실제 저장된 입찰 수와 경매 객체의 상태가 일치하지 않았고, 이는 여러 트랜잭션이 동시에

jpa, devbid, java

[DevBid - AWS] 파일업로드 Presigned URL 리펙토링

📚 파일 업로드 시리즈: 1. [[DevBid - AWS] S3 파일업로드](/posts/aws-s3-file-upload/) - 기본 구현과 발견된 문제점 2. 파일업로드 Presigned URL 리팩토링 (현재 글) 기존 방식의 문제점 이전글 S3 파일업로드에서 서버를 경유하는 방

devbid, aws, spring-boot

[DevBid - AWS] S3 파일업로드

📚 파일 업로드 시리즈: 1. AWS S3 파일업로드 (현재 글) 2. [[DevBid - AWS] 파일업로드 Presigned URL 리펙토링](/posts/aws-s3-presignedurl/) 개요 개인 프로젝트 DevBid 경매 플랫폼에서 상품 이미지 업로드 기능을 구현했다.

devbid, aws, spring-boot

[DevBid - JPA] 카테고리 트리 N+1 최적화

개요 DevBid의 상품 등록 페이지에서 카테고리 트리를 로드할 때 N+1 문제가 발생했다. 루트 카테고리 수만큼 추가 쿼리가 실행되어 총 9개의 SQL이 발생했고, 이를 3개로 줄이는 과정을 다룬다. 상품 등록 페이지 로딩 시 Category 트리 로딩 때문에 9개의 SQL 발생 재귀

devbid, jpa, spring-data-jpa

[DevBid - HTTP] Form 환경에서 RESTful 설계

리팩터링 계기 개인 프로젝트를 만들면서 URL을 대충 /productsmain, /product/new 이런 식으로 만들었는데, 김영한 선생님의 HTTP 강의를 들으면서 "아, 내 URL 설계가 엉망이구나"를 깨닳았다. 특히 RESTful 원칙을 배우면서 URL은 자원(리소스)을 표현해

devbid, web, http

[리팩토링] UserEntity SRP/DIP 위반과 해결

User 엔티티의 문제점 엔티티는 도메인 모델이자 비즈니스 로직과 상태만 가져야 한다. 하지만 기존 코드는 SRP와 DIP를 위반하고 있었다. DIP(의존성 역전 원칙) 위반 도메인 계층의 User가 인프라 계층의 PasswordEncoder(기술 서비스) 에 의존한다. 즉 도메인 모델

devbid, java, design-pattern

[DDD] 도메인 주도 설계란 무엇인가

DDD 전체 구조 전략적 설계 (Strategic Design) "무엇을 만들 것인가?" - 큰 그림 관점 1. 유비쿼터스 언어 (Ubiquitous Language) 개발자, 기획자, 도메인 전문가가 똑같은 용어로 소통 예: 경매 시스템 "입찰한다" → placeBid() "낙찰된다"

java, design-pattern, oop

[DDD] Factory Method & Repository

Factory method “객체를 어떻게 만드는지” 보다 “왜/언제 만들어 지는지” 를 드러내고 복잡한 생성과정을 감추는 역할 Factory method의 장점 생성 로직이 복잡한 경우 new User(username, email, password, …) 같이 끝나지 않고 암호화, 중

devbid, java, design-pattern