한화시스템 23기 12주차 회고록

hoony·2026년 2월 8일

한화시스템 23기

목록 보기
11/12

📚 이번주엔 뭘 배웠지?

단순 기능 개발을 넘어서 실무 백엔드에서 중요한 개념 집중적 학습

1. Redis Pub/Sub 기반 멀티 서버 알림 구조

멀티 서버 환경에서는 특정 사용자가 연결된 서버가 다르면 알림이 전달되지 않는 문제가 발생한다.

해결 방법
→ 모든 서버가 Redis 채널을 subscribe 하도록 구성

동작 흐름

  1. 각 서버가 Redis 채널 subscribe
  2. 메시지 발생 시 publish
  3. 모든 서버가 메시지 수신
  4. 해당 사용자 emitter가 있는 서버만 실제 전송
redisTemplate.convertAndSend("order-channel", message);

→ 핵심 정리

멀티 서버 환경에서는 서버 메모리가 공유되지 않기 때문에
Redis Pub/Sub 같은 메시지 브로커가 필요하다.


2. 동시성 문제와 해결 방법

테스트 중 다음과 같은 문제가 발생했다.

  • 재고 100
  • 동시에 주문 요청
  • 주문 수량 > 실제 재고

→ Lost Update 발생

해결 방법 비교

방법특징
Serializable안전하지만 성능 저하
select for updateRow 단위 배타락
Redis빠르고 안정적
SELECT * FROM product WHERE id = 1 FOR UPDATE;

→ 결론

DB만으로 동시성을 해결하면 성능 문제가 발생할 수 있다.
고트래픽 환경에서는 Redis가 효과적이다.


3. JWT 인증 구조 이해

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에 저장하면 로그아웃 및 토큰 무효화 관리가 가능하다.


4. SSE vs WebSocket

기술특징
SSE단방향, 간단
WebSocket양방향, 고성능

알림 기능 → SSE
실시간 상태 변경 → WebSocket


👊 어떤 문제점이 있었지?

  • 동시성 제어 실패 → 재고 불일치 발생

  • 멀티 서버 환경이라면 특정 사용자에게 알림이 전달되지 않음

  • 성능 테스트 경험 부족 → 시스템이 어느 정도까지 버티는지 감이 없음

  • 프로젝트 개발 : 기능 중심 개발 → 구조 정리가 부족

🙏 무엇을 깨달았고, 어떤 생각이 들었지?

CRUD는 쉽게 만들 수 있지만,

동시 요청이 들어오면?

서버가 여러 대라면?

트래픽이 몰리면?

이 질문을 코드를 통해 구현할 수 있어야 실무 개발이라고 생각이 드는 한 주였다.
백엔드 개발자는 단순히 API만 만드는 사람이 아니라
시스템을 설계해야 하는 것.

😄 결과적으로, 현재 나의 상태는?

  • CRUD 개발 : 익숙함
  • Redis / JWT / SSE : 경험 있음
  • 동시성 / 성능 : 개념 이해 단계
  • 테스트 코드 : 부족

기능 개발 단계에서
실무 백엔드 구조를 이해하는 단계로 넘어가는 중
기술은 어느정도 접했지만,
아직 완전히 내 것으로 정리하는 과정이 필요하다.

👨‍🚀 앞으로 어떻게 하는게 좋을까?

  • 기능 → 정리 습관 만들기

  • 기능 구현 후 반드시 정리

  • 왜 Redis 사용했는가?

  • DB로는 왜 안 되는가?

  • 트래픽 상황에서는 어떻게 되는가?

profile
코딩정복하자

0개의 댓글