DevLog

엔지니어링 블로그를 한 곳에서 탐색하고, 최근 발행 흐름을 빠르게 파악할 수 있는 서비스 입니다.

Quick Links

  • Latest Feed
  • Engineering Directory

Support

  • 소개
  • 개인정보처리방침

Contribute

  • 원하는 블로그 추가 (준비 중)
  • Feedback

© 2026 DevLog Inc. All rights reserved.

본 사이트는 공개 RSS 피드를 통해 콘텐츠를 수집하며, 모든 콘텐츠의 저작권은 원저작자에게 있습니다.

Back to Feed
Read Original

Contents

Continue Reading

  • More from SSG
#Backend

2시 배포, 3시 오픈, 그리고 장애

2시 배포, 3시 오픈, 그리고 장애
01

Summary

"왜 운영에서만 안 될까?" 시니어 개발자를 당황시킨 FlashAttribute의 함정

다중 WAS 환경을 고려하지 못한 세션 기반 설계의 위험성과 해결책

SSG닷컴의 신규 멤버십 오픈 직후 발생한 실제 장애 사례를 통해, 분산 시스템에서 Spring FlashAttribute가 일으킬 수 있는 문제를 심도 있게 다룹니다. 이론적으로 완벽해 보이는 PRG 패턴이 실제 운영 인프라와 만났을 때 어떤 예외 상황을 만드는지, 그리고 이를 해결하기 위한 단순화의 미학을 공유합니다.

  • 01단일 서버와 다중 서버(WAS) 환경 차이에서 발생하는 세션 불일치 장애 분석
  • 02Spring MVC FlashAttribute의 내부 동작 원리와 세션 의존성 위험 파악
  • 03사용자가 머무르지 않는 '브릿지 페이지' 설계 시 과잉 엔지니어링 방지
  • 04리다이렉트 없이 자동 서브밋 폼을 활용한 상태 없는(Stateless) 데이터 전달 기법
  • 05'깔끔한 구조'보다 '운영 환경에 안전한 구조'가 우선이라는 엔지니어링 교훈

+RECOMMENDATION

Spring MVC 환경에서 리다이렉트와 함께 데이터를 전달해야 하는 백엔드 개발자라면 반드시 읽어보시기 바랍니다. 특히 L4/L7 로드 밸런서 뒤에 여러 대의 서버를 운영 중인 분산 시스템 환경에 큰 도움이 됩니다.

The Problem

다중 WAS로 구성된 운영 환경에서 SSG7CLUB 가입 프로세스 중 데이터가 유실되어 랜덤하게 에러가 발생하는 장애가 발생했습니다. 로컬과 단일 WAS인 스테이징 환경에서는 정상 작동했으나, 리다이렉트 과정에서 요청이 다른 서버로 배분될 때 데이터가 사라지는 것이 핵심 문제였습니다.

The Solution

Spring의 FlashAttribute를 제거하고 세션 의존성을 없애기 위해 구조를 단순화했습니다. 리다이렉트 대신 게이트 페이지에서 직접 데이터를 렌더링한 후, 클라이언트 측에서 즉시 다음 단계로 자동 전송(Auto-submit)하는 방식을 도입하여 서버 상태와 무관하게 동작하도록 수정했습니다.

The Result

분산 서버 환경에서도 가입 프로세스가 100% 안정적으로 작동하게 되었으며, 불필요한 세션 관리와 리다이렉트 로직을 제거하여 코드의 복잡성을 낮추고 장애 포인트를 원천 차단했습니다.

Trade-off

보안과 사용자 경험을 위해 URL 파라미터를 숨기고 PRG 패턴을 유지하려 했으나, 다중 WAS 환경에서의 세션 정합성 비용을 고려하여 가장 단순하고 확실한 폼 전송 방식으로 선회하며 기술적 세련미보다 운영 안정성을 우선시했습니다.

03

Key Concepts

Concept · 01

FlashAttribute

Spring MVC에서 한 요청에서 다른 요청(주로 리다이렉트)으로 속성을 전달하기 위해 사용하는 객체로, 내부적으로 HTTP 세션에 임시 저장됩니다.

  • 리다이렉트 후 한 번의 요청에만 유효하고 자동으로 삭제됨
  • 분산 WAS 환경에서는 세션 클러스터링이 없으면 데이터 유실 가능성 높음
Concept · 02

Load Balancing

네트워크 트래픽을 여러 대의 서버로 분산시켜 부하를 조절하고 가용성을 높이는 기술입니다.

  • 사용자의 첫 번째 요청과 두 번째 요청(리다이렉트)이 서로 다른 WAS에 도달할 수 있음
  • 세션 스티키니스(Sticky Session) 설정 없이는 서버 간 상태 공유가 어려움
Concept · 03

PRG Pattern

Post-Redirect-Get의 약자로, POST 요청 후 GET으로 리다이렉트하여 브라우저 새로고침 시 발생할 수 있는 중복 제출을 방지하는 패턴입니다.

  • 사용자 경험을 개선하고 데이터 무결성을 보장하는 데 유용함
  • 리다이렉트 과정에서 데이터를 유지하기 위해 FlashAttribute 등의 추가 수단이 필요함
Continue reading · same source

SSGMore from SSG

View all posts from SSG
  • 돌아오지 않는 메모리를 찾아서

    JVMKubernetesG1GC
    1개월 전
  • 이상적인 구조가 빠른 성능은 아닙니다

    MongoDBAPI PerformanceData Modeling
    2개월 전
  • 쓱닷컴이 접근성을 대하는 방식

    AccessibilityWAI-ARIADesign System
    2개월 전
  • “장보기 지원금이 곧 소멸돼요” 알림 뒤에서 일어난 일

    Spring BatchDatabase ConnectionResource Optimization
    3개월 전
  • 낯선 오타와 싸워서 이기고 싶은 마음

    Deep LearningNLPTranslation Model
    4개월 전

Source

SSG
SSG
Engineering Blog

Published · February 5, 2026

Topics

Spring MVCFlashAttributeDistributed SystemsLoad BalancingPRG Pattern