단순 기능 개발을 넘어서 실무 백엔드에서 중요한 개념 집중적 학습
멀티 서버 환경에서는 특정 사용자가 연결된 서버가 다르면 알림이 전달되지 않는 문제가 발생한다.
해결 방법
→ 모든 서버가 Redis 채널을 subscribe 하도록 구성
동작 흐름
redisTemplate.convertAndSend("order-channel", message);
멀티 서버 환경에서는 서버 메모리가 공유되지 않기 때문에
Redis Pub/Sub 같은 메시지 브로커가 필요하다.
테스트 중 다음과 같은 문제가 발생했다.
해결 방법 비교
| 방법 | 특징 |
|---|---|
| Serializable | 안전하지만 성능 저하 |
| select for update | Row 단위 배타락 |
| Redis | 빠르고 안정적 |
SELECT * FROM product WHERE id = 1 FOR UPDATE;
DB만으로 동시성을 해결하면 성능 문제가 발생할 수 있다.
고트래픽 환경에서는 Redis가 효과적이다.
Access Token / Refresh Token
AT : 짧은 만료, DB 저장 X
RT : 긴 만료, Redis 저장
@PostMapping("/refresh")
public String refresh(@RequestBody RefreshTokenDto dto) {
// 1. RT 검증
// 2. Redis 조회
// 3. 새로운 AT 발급
}
RT를 Redis에 저장하면 로그아웃 및 토큰 무효화 관리가 가능하다.
| 기술 | 특징 |
|---|---|
| SSE | 단방향, 간단 |
| WebSocket | 양방향, 고성능 |
알림 기능 → SSE
실시간 상태 변경 → WebSocket
동시성 제어 실패 → 재고 불일치 발생
멀티 서버 환경이라면 특정 사용자에게 알림이 전달되지 않음
성능 테스트 경험 부족 → 시스템이 어느 정도까지 버티는지 감이 없음
프로젝트 개발 : 기능 중심 개발 → 구조 정리가 부족
이 질문을 코드를 통해 구현할 수 있어야 실무 개발이라고 생각이 드는 한 주였다.
백엔드 개발자는 단순히 API만 만드는 사람이 아니라
시스템을 설계해야 하는 것.
기능 개발 단계에서
실무 백엔드 구조를 이해하는 단계로 넘어가는 중
기술은 어느정도 접했지만,
아직 완전히 내 것으로 정리하는 과정이 필요하다.
기능 → 정리 습관 만들기
기능 구현 후 반드시 정리
왜 Redis 사용했는가?
DB로는 왜 안 되는가?
트래픽 상황에서는 어떻게 되는가?