구라로 서비스 최적화 하는법: Optimistic Response외 4가지
📺 원본 영상: 구라로 서비스 최적화 하는법. Optimistic Response외 4가지
🎙️ 채널: 코드팩토리
📅 정리 일자: 2026-02-16
⚠️ Note: 본 리포트는 영상의 음성을 텍스트로 변환(STT)하여 정리한 것입니다. 화면에 표시된 자료(차트, 코드, 슬라이드 등)는 포함되지 않을 수 있습니다.
개요
서비스 최적화라고 하면 보통 서버 성능 개선이나 복잡한 알고리즘 튜닝을 떠올린다. 그러나 물리적인 네트워크 레이턴시나 데이터베이스 처리 시간은 하드웨어 투자 없이는 근본적으로 해결하기 어렵다. 이 강연에서는 발상을 전환하여, 실제로 빠르게 만드는 것이 아니라 사용자에게 빠르다고 느끼게 만드는 5가지 실전 테크닉을 소개한다. Optimistic Response, Upload First Pattern, Background Submission, Presigned URL, 그리고 Client-side Compression까지, 모두 현대 웹 개발에서 Industry Standard로 자리잡은 기법들이다.
왜 “구라”인가: 최적화의 새로운 관점
전통적인 서버 최적화는 한계가 명확하다. 클라이언트에서 서버로, 서버에서 데이터베이스로 향하는 네트워크 레이턴시는 물리적 거리와 하드웨어 성능에 의존한다. 더 빠른 서버를 도입하거나 사용자와 가까운 위치에 서버를 배치하는 방법도 있지만, 이는 비용 투입이 필수적이며 단일 요청 단위로 보면 극적인 개선을 가져오지 못한다.
그러나 사용자 경험(UX) 관점에서 접근하면 상황이 달라진다. 사용자는 실제 처리 시간보다 체감 속도에 더 민감하기 때문이다. 로딩 인디케이터가 돌아가며 아무것도 할 수 없는 상황은 느리다고 인식되지만, 백그라운드에서 처리가 진행되는 동안 다른 작업을 할 수 있다면 사용자는 앱이 빠르다고 느낀다. 이러한 “착시”를 활용한 최적화 전략이 바로 강연자가 말하는 “구라”의 본질이다.
강연자는 이 기법들이 망상이나 실험적 아이디어가 아니라, 프로그래밍 업계에서 이미 검증되고 널리 사용되는 표준 기술들이라는 점을 강조한다. 심지어 AI 프롬프트에 “이거 해줘”라고 명령만 해도 구현 가능할 정도로 보편화된 패턴이다.
💡 핵심 전략 1: Optimistic Response (낙관적 응답)
원리: 성공을 미리 가정한다
Optimistic Response는 한국어로 “낙관적 응답”이라고 번역되지만, 그 핵심은 요청이 성공할 것이라고 미리 예측하고 행동한다는 점이다. 프론트엔드에서 폼 검증을 철저히 수행했다면, 백엔드 스키마와 일치할 가능성이 높고 따라서 API 요청은 거의 확실하게 성공한다는 논리다.
전통적인 방식에서는 사용자가 “좋아요” 버튼을 누르면 서버에 요청을 보내고, 서버가 데이터베이스를 업데이트한 후 응답을 받아야 비로소 UI가 업데이트된다. 이 과정에서 네트워크 레이턴시만큼 사용자는 대기해야 한다. 반면 Optimistic Response 패턴에서는 버튼을 누르는 순간 즉시 UI를 업데이트한다. 좋아요 카운트가 +1 되는 것을 즉시 보여주고, 백그라운드에서 서버 요청을 처리하는 것이다.
실행 흐름
강연자가 설명한 구체적인 흐름은 다음과 같다:
- 사용자 액션 발생: 사용자가 좋아요 버튼을 클릭한다.
- 즉시 UI 업데이트: 서버 응답을 기다리지 않고 로컬 캐시나 상태를 업데이트하여 좋아요 카운트를 즉시 증가시킨다.
- 이전 상태 저장: Rollback을 대비해 이전 상태를 임시로 저장해둔다.
- 서버 요청 전송: 백그라운드에서 실제 API 요청을 서버로 보낸다.
- 응답 처리:
- 성공 시: 서버에서 반환된 실제 데이터(예: 고유 ID, 이미지 URL 등)를 백그라운드에서 병합한다. 사용자는 이미 업데이트된 화면을 보고 있으므로 추가 대기 없이 자연스럽게 동기화된다.
- 실패 시: 저장해둔 이전 상태로 Rollback하고 에러 메시지를 표시한다.
이 방식의 핵심은 요청을 보낸 사용자에게만 즉각적인 피드백을 제공한다는 점이다. 다른 사용자들은 데이터베이스가 실제로 업데이트된 후에야 변경 사항을 확인할 수 있지만, 이는 실시간 동기화가 필수적이지 않은 대부분의 시나리오에서 문제가 되지 않는다.
적용 범위와 주의사항
Optimistic Response는 복잡한 캐싱 관리가 필요한 작업보다는 단순하고 실패해도 큰 문제가 없는 작업에 적합하다. 좋아요, 댓글 작성, 간단한 포스트 생성 등이 대표적이다. TanStack Query나 TRPC 같은 현대적인 상태 관리 라이브러리들은 Optimistic Response를 위한 내장 기능을 제공하여 구현을 단순화한다.
강연자는 이 기법이 가장 쉽고 즉각적으로 적용할 수 있으며, UX 개선 효과가 가장 큰 테크닉이라고 강조한다.
💡 핵심 전략 2: Upload First Pattern (선업로드 패턴)
문제 인식: 폼 제출 시 대용량 에셋이 병목이 된다
SNS나 블로그처럼 이미지와 영상을 다루는 서비스에서는 폼 제출 시 텍스트 데이터보다 에셋 파일의 업로드 시간이 압도적으로 길다. 사용자가 10장의 이미지를 첨부하고 업로드 버튼을 누르면, 모든 이미지가 서버로 전송되고 데이터베이스에 저장될 때까지 긴 대기 시간이 발생한다. 이는 UX 측면에서 치명적인 약점이다.
해결 방법: 파일 선택 즉시 업로드
Upload First Pattern의 핵심은 사용자가 파일을 선택하는 순간, 폼 제출 전에 이미 업로드를 시작한다는 것이다. 파일을 선택했다는 행위 자체가 해당 파일을 업로드하겠다는 사용자의 의도를 충분히 나타내기 때문이다.
구체적인 흐름은 다음과 같다:
- 파일 선택 즉시 업로드: 사용자가 이미지나 영상을 선택하면 즉시 임시 버킷(Temp Bucket)의 임시 폴더(Temp Folder)로 파일을 업로드한다.
- 경로 정보 저장: 업로드가 완료되면 파일의 경로나 고유 ID를 클라이언트에서 보관한다.
- 백그라운드 업로드: 사용자가 제목, 내용, 태그 등 나머지 폼을 작성하는 동안 파일 업로드는 백그라운드에서 계속 진행된다.
- 폼 제출 시 경로만 전송: 사용자가 최종적으로 “업로드” 버튼을 누를 때는 텍스트 데이터와 이미 업로드된 파일의 경로 정보만 서버로 전송한다. 파일 자체는 이미 업로드가 완료되었기 때문이다.
- 서버 측 처리: 서버는 유효성 검사를 수행하고, 성공하면 임시 폴더의 파일을 영구 폴더(Permanent Folder)로 이동시킨다. 실패하면 에러 메시지를 반환하고, 클라이언트는 문제를 수정하여 재시도한다.
기술적 고려사항
강연자는 몇 가지 중요한 구현 디테일을 언급한다:
- 임시 폴더 vs 임시 버킷: 다른 버킷을 사용하는 것보다 같은 버킷 내에서 폴더를 분리하는 것이 유리하다. 파일을 영구 폴더로 이동시킬 때 rename 작업이 더 빠르기 때문이다.
- 파일 생명주기 관리: 임시 폴더에 파일이 무기한 남아있으면 스토리지 비용이 증가한다. 따라서 주기적으로 일정 기간(예: 3일) 이상 경과한 파일을 자동 삭제하는 생명주기 정책을 설정해야 한다.
이 패턴은 현대 에셋 중심 서비스에서 Industry Standard로 자리잡았으며, 사용자가 폼을 작성하는 동안 업로드가 완료되기 때문에 체감 대기 시간이 거의 0에 가까워진다.
💡 핵심 전략 3: Background Submission (백그라운드 제출)
문제 인식: 업로드 중 UI가 블로킹된다
일반적으로 업로드 버튼을 누르면 버튼이 비활성화되고 로딩 인디케이터가 표시되며, 사용자는 업로드가 완료될 때까지 아무것도 할 수 없다. 이는 사용자에게 앱이 느리다는 인상을 강하게 남긴다. 대기 중에는 다른 작업을 할 수 없기 때문이다.
해결 방법: 즉시 페이지 전환 후 백그라운드 처리
Background Submission 패턴에서는 업로드 버튼을 누르는 즉시 사용자를 목적지 페이지(예: 리스트 페이지, 홈 피드)로 이동시킨다. 그리고 화면 상단이나 하단에 작은 로딩 컴포넌트를 표시하여 백그라운드에서 업로드가 진행 중임을 알린다.
강연자는 Instagram을 대표적인 예로 든다. Instagram에서 게시물을 업로드하면 즉시 피드로 돌아가고, 상단에 작은 프로그레스 바가 나타나 업로드 진행 상황을 보여준다. 사용자는 업로드가 완료되는 동안 다른 게시물을 구경할 수 있으며, 따라서 대기 시간을 느리다고 인식하지 않는다.
고급 구현: 메시지 큐와 워커
대규모 서비스나 무거운 작업(영상 인코딩, PDF 생성, 대량 메일 발송 등)에서는 메시지 큐(Message Queue)를 활용한다. 강연자가 제시한 정석 흐름은 다음과 같다:
- API 요청 전송: 사용자가 제출 버튼을 누르면 서버로 요청을 보낸다.
- 메시지 큐에 작업 등록: 서버는 Redis, AWS SQS, RabbitMQ 같은 메시지 큐에 작업을 등록한다.
- 백그라운드 워커 처리: Lambda나 전용 CPU-intensive 서버(백그라운드 워커)가 큐에서 작업을 가져가 처리한다.
- 완료 후 알림: 작업이 완료되면 데이터베이스를 업데이트하고, WebSocket이나 폴링을 통해 사용자에게 완료를 알린다.
💡 [영상 참조] 강연자는 이 시점에서 메시지 큐 아키텍처 다이어그램을 참조하며 설명합니다. 상세 내용은 원본 영상을 확인하세요.
이 패턴은 사용자가 블로킹되지 않고 계속 서비스를 이용할 수 있게 하여, 체감 성능을 극적으로 개선한다.
💡 핵심 전략 4: Presigned URL (사전 서명된 URL)
문제 인식: 파일이 서버를 두 번 거친다
전통적인 파일 업로드 방식에서는 클라이언트가 파일을 서버로 전송하고, 서버가 다시 객체 스토리지(예: AWS S3)로 전송한다. 이는 네트워크 경로를 두 번 거치기 때문에 레이턴시가 증가하고 에러 처리도 복잡해진다. 서버가 파일 전송의 중개자 역할을 하는 것은 보안을 위한 선택이지만, 성능 측면에서는 비효율적이다.
해결 방법: 직접 업로드 권한 부여
Presigned URL은 클라이언트가 객체 스토리지에 직접 업로드할 수 있도록 임시 권한을 부여하는 메커니즘이다. 과정은 다음과 같다:
- Presigned URL 요청: 클라이언트가 서버에 “파일을 업로드하고 싶다”고 요청한다.
- Presigned URL 생성: 서버는 보안 키(Secret Key)를 사용하여 특정 파일에 대한 업로드 권한이 포함된 서명된(Signed) URL을 생성한다. 이 URL은 보통 5~10분의 짧은 유효 기간을 가진다.
- 직접 업로드: 클라이언트는 받은 Presigned URL을 사용하여 객체 스토리지에 직접 파일을 업로드한다. 이때 별도의 인증 키나 시크릿이 필요 없다.
장점
- 레이턴시 감소: 서버를 거치지 않고 직접 스토리지로 전송되므로 업로드 시간이 단축된다.
- 엣지 네트워크 활용: AWS S3 같은 클라우드 스토리지는 전 세계에 엣지 네트워크를 가지고 있어, 사용자와 가장 가까운 지점으로 업로드가 이루어진다.
- 서버 부하 감소: 파일 전송 트래픽이 서버를 거치지 않으므로 서버 리소스를 절약할 수 있다.
강연자는 Presigned URL이 클라우드 시대의 객체 스토리지(Object Storage) 환경에서 거의 필수적인 패턴이며, 사용하지 않는 경우가 드물다고 강조한다.
💡 핵심 전략 5: Client-side Compression (클라이언트 압축)
원리: 업로드 전에 파일 크기를 줄인다
위의 모든 테크닉을 적용하기 전에 클라이언트에서 파일을 압축하면 업로드 속도를 근본적으로 개선할 수 있다. 파일 크기가 작아지면 네트워크 전송 시간이 단축되고, 스토리지 비용도 절감된다.
WebP vs AVIF
강연자는 두 가지 현대적인 이미지 포맷을 소개한다:
| 포맷 | 특징 |
|---|---|
| WebP | 거의 모든 브라우저에서 호환되며, 압축률과 품질의 균형이 좋다. 강연자가 기본적으로 사용하는 포맷. |
| AVIF | 압축 대비 이미지 품질이 월등하지만, 호환성이 약간 떨어진다. 인코딩 시 컴퓨팅 시간이 WebP보다 약 30% 더 소요될 수 있어, Lambda나 엣지 네트워크에서 처리 비용이 증가할 수 있다. |
강연자는 “생각하기 귀찮아서” WebP를 디폴트로 사용한다고 솔직하게 밝히면서도, 데이터 비용 절감이 중요한 대규모 서비스라면 AVIF를 테스트해보고 사용자 반응을 확인한 후 결정할 것을 권장한다.
구현
클라이언트 측 압축은 직접 구현할 필요 없이 JavaScript 라이브러리를 활용하면 된다. 다양한 오픈소스 라이브러리가 존재하며, 사용 목적에 맞는 것을 선택하여 적용하면 된다.
마무리: 비즈니스 관점의 최적화
강연자가 소개한 5가지 테크닉은 모두 알고리즘 최적화나 하드웨어 투자가 아닌, 관점의 전환에서 나온 전략이다. 실제로 처리 시간을 단축하는 것이 아니라, 사용자에게 즉각적인 피드백을 제공하고 대기 시간을 비가시화하여 빠르다고 느끼게 만드는 것이 핵심이다.
이러한 접근은 “구라”라는 다소 유머러스한 표현으로 소개되지만, 실제로는 UX 중심의 현실적이고 효율적인 최적화 전략이다. Optimistic Response, Upload First Pattern, Background Submission, Presigned URL, Client-side Compression은 모두 현대 웹 서비스에서 널리 검증된 Industry Standard이며, AI 프롬프트로도 쉽게 구현 가능할 정도로 보편화되었다.
강연자는 이 기법들을 적용하면 복잡한 알고리즘 최적화 없이도 사용자 만족도를 크게 향상시킬 수 있다고 강조하며, 구독과 알림 설정, 댓글을 독려하는 것으로 강연을 마무리한다.
📚 출처 및 참고
| 구분 | 내용 |
|---|---|
| 원본 영상 | 구라로 서비스 최적화 하는법. Optimistic Response외 4가지 |
| 채널 | 코드팩토리 |
| 리포트 작성 | 2026-02-16 |
| 작성 방식 | YouTube 영상 STT 변환 후 에디팅 |
💬 본 리포트는 영상 내용을 바탕으로 재구성되었습니다. 정확한 내용은 원본 영상을 참조해 주세요.