[스타트업/기술] WebP 변환을 통한 이미지 로딩 최적화 및 GCS 업로드 자동화 | PNG 대비 용량 89%, 지연 시간 82% 개선

지난번 Firebase Storage의 오버헤드를 줄이기 위해 GCP Bucket 직접 호출로 전환 하며 Latency를 한 차례 개선한 적이 있다. 당시 네트워크 홉(Hop)을 줄임으로써 유의미한 성능 향상을 이뤄냈지만, 프로덕트를 직접 사용해 보며 여전히 아쉬움이 남았다. 이미지 하나를 불러오는 데 여전히 1초 남짓한 시간이 걸리고 있었기 때문 이다. 지난번 1차례 개선 결과 페이지 이동과 동시에 매끄럽게 이미지가 렌더링되는 다른 서비…

hyeon_B

[스타트업/기술] SSoT 기반 카탈로그 시스템 설계 | 파편화된 가격 데이터의 비효율성을 극복하고 프로모션 구조 구축하기

서비스를 고도화하는 작업을 진행하면 할수록 초기에 잘 동작하는 것처럼 보였던 설계가 발목을 잡는 순간이 온다. 최근 우리 서비스의 결제 및 가격 구조를 개편하면서 이 사실을 다시 한번 뼈저리게 느꼈다. 기존에는 각 콘텐츠마다 가격을 개별적으로 설정할 수 있도록 설계되어 있었다. 하지만 본격적으로 서비스 출시를 앞두고, 프로모션을 기획해야 하는 시점이 오자 이 구조는 기술 부채로 다가왔다. 오늘은 파편화된 데이터 구조의 한계를 SSoT(Sing…

hyeon_B

[스타트업/이슈] Google Play 인앱 결제 API | "insufficient permissions" 오류

지난 시간 을 통해 만든 서버에서 구글 플레이(Google Play) 인앱 결제 영수증 검증을 위해 백엔드 서버에서 API를 호출하는 과정 중 참 황당한 에러를 마주했다. 서버 로그에 남은 에러 메시지는 다음과 같았다. error_code: "internal" error_message: "The current user has insufficient permissions to perform the requested o…

hyeon_B

[스타트업/기술] Node.js & App Store 인앱결제 | 결제 시스템 아키텍처 (Part 2)

지난 글 에서는 안드로이드 생태계에서 구글 플레이 API를 활용하여 서버 검증 아키텍처를 어떻게 구축하는지 다루었다. 클라이언트의 상태를 신뢰하지 않고 서버가 주도권을 쥐어야 한다는 원칙은 iOS 환경인 앱스토어(App Store) 결제에서도 동일하게 적용된다. 하지만 Flutter를 통해 크로스 플랫폼 앱을 개발하면서, 구글과 애플이 Proof of Purchase을 다루는 방식에 꽤 큰 아키텍처적 차이가 있음을 알게 되었다. 애플은 WWD…

hyeon_B

[스타트업/기술] Node.js & Google Play 인앱결제 | 결제 시스템 아키텍처 설계 (Part 1)

이제 실제로 사용자에게 가치를 제공하고 그에 대한 정당한 대가를 받는 '결제 시스템'을 구축해야 할 시점이 왔다. 현재 개발 중인 서비스에 S-Coin이라는 재화 시스템을 도입하면서, 구글 플레이 스토어(Android)와 앱스토어(iOS)의 인앱결제(In-App Purchase) 프로세스를 연동하기로 했다. 이 글에서는 2편에 걸쳐 구성될 결제 시스템 구축기의 첫 번째로, 구글 플레이 스토어 인앱결제의 아키텍처와 검증 원리에 대…

hyeon_B

[스타트업/기술] GitHub Actions CI 파이프라인 | 프로덕션 배포 전 런타임 에러를 차단하는 테스트 자동화

서비스 출시 준비 중 발견한 치명적인 문제점 지난 시간 에 이어 sleuth의 백엔드 서버(FastAPI & Cloud Run) 로직을 프로덕션 환경을 위해 고도화하는 작업에 집중하고 있다. 평소처럼 로컬 환경에서 새로운 기능을 테스트해 보니 매끄럽게 잘 동작하기에, 큰 고민 없이 main 브랜치에 코드를 직접 푸시하고 배포를 진행했다. 팀에 개발을 담당하는 인력이 많이 없기도 하고, 백엔드 서버를 지금은 혼자 구축하고 있기에 편의를…

hyeon_B

[스타트업/기술] GCP Vertex AI | 프로덕션 환경을 위한 GeminiAPI 마이그레이션

지난 글들에서는 Sleuth의 코어 로직을 클라이언트에서 분리하여 FastAPI로 백엔드를 구축하고, 이를 GCP Cloud Run이라는 서버리스 인프라에 안착시킨 과정을 정리했다. (Cloud Run의 Scale-to-Zero와 콜드 스타트 최적화에 대한 내용은 이전 포스팅 을 참고하길 바란다.) 내부 아키텍처가 갖추어졌으니, 이제 실제 운영 환경의 쏟아지는 트래픽을 견뎌낼 수 있는지 검증할 차례다. 하지만 테스트를 시작하자마자 코드가 아닌…

hyeon_B

[스타트업/기술] FastAPI와 클라우드 네이티브 | Cloud Run 도입과 백엔드 전환기 (Part 2)

앞서 다룬 FastAPI 는 LLM serving을 최우선 목표로 삼은 서비스에서 파이썬의 AI 생태계를 완전히 활용할 수 있다는 점에서 최적의 기술이었다. 코드가 준비되었으니 다음은 '이 서버를 어디에 띄울 것인가'라는 물리적인 인프라 고민으로 넘어갈 차례다. 이 챕터에서는 FastAPI 기반의 Sleuth 백엔드가 어떻게 클라우드 네이티브의 이점을 활용할 수 있었는지 정리해보고자 한다. Cloud Run과 Scale-to-Z…

hyeon_B

[스타트업/기술] Firebase Storage 이미지 로딩 최적화 | GCP Bucket 직접 호출을 통한 Latency 개선

Firebase Storage의 편리함 속에 숨겨진 Latency 개발 중인 프로덕트에서 이미지 로딩 속도가 눈에 띄게 느리다는 것을 발견했다. 사실 처음 원격 파일 저장소를 활용할 때도 "왜 이렇게 로딩 속도가 느릴까" 생각은 하고 있었지만 지금껏 미뤄오다 드디어 해결하고자 한다. (연구에 따르면 지연시간이 1초 증가할 때마다 이탈률이 무려 10% 증가 한다고...!) 네트워크 탭을 열어 프로파일링을 해보니, 이미지 한 장…

hyeon_B

[스타트업/기술] FastAPI와 클라우드 네이티브 | 클라이언트 LLM 호출의 한계와 백엔드 전환기 (Part 1)

창업을 준비하며 AI 기반의 인터랙티브 추리 게임 'Sleuth(슬루스)'를 개발하고 있다. 유저가 용의자와 직접 대화를 나누며 단서를 찾아내는 것이 핵심 코어 로직이다 보니, 자연스럽게 LLM(거대 언어 모델)과의 통신이 서비스의 척추 역할을 하게 되었다. 초기 프로토타입에서는 개발 속도를 위해 클라이언트(프론트엔드)에서 직접 API를 호출하는 방식을 택했었다. 당장의 결과물은 눈에 보였지만, 게임의 룰이 복잡해지고 출시가 다…

hyeon_B

[스타트업/협업] 디스코드(Discord), 단순한 메신저를 넘어 우리 팀의 가상 오피스가 되기까지

물리적 거리라는 장벽 속 협업에 대한 고민  지난 회고 의 마지막 부분에서 언급하였듯, 1년 동안 팀을 이끌어가며 가장 큰 고민 중 하나는 '팀의 Alignment'이었다. 우리 팀원들은 모두 물리적으로 떨어져 작업한다. 각자의 공간에서 몰입하는 것도 좋지만, 서로가 지금 무엇을 고민하는지, 어떤 작업을 하고 있는지 실시간으로 체감하기 어렵다는 점이 늘 발목을 잡았다. (학교의 창업 사무실에 있으면서 다른 팀들이 옆에서 곧바로 …

hyeon_B

2025년 회고, 끊임없이 Goin' up, up, up 했던 순간들

2025년 회고, 끊임없이 Goin' Up, up, up 했던 순간들 어느덧 2025년이 얼마 남지 않았다. 어째 매년 시간이 점점 빠르게 흐르는 기분인데, 1년 전의 나보다 훨씬 성장한 기분이라 느낌이 다르다. 항상 블로그를 시험 공부용, 정보 전달용으로 작성해왔지만 이번만큼은 내 경험을 온전히 반추해보고자 한다. 올해 있었던, 해왔던 일들을 정리해보면 크게 창업 과 학업 으로 나눌 수 있다. 세부적으로 보면 1년 동안 이렇게 많은…

hyeon_B

[컴퓨터네트워크] Application Layer | HTTP & WWW, SMTP & Email, DNS

Application Layer, 인터넷 세상은 어떻게 소통할까 TCP/IP라는 튼튼한 도로와 배송 시스템을 이해하고 나니, 이제 그 위를 달리는 '화물'의 정체가 궁금해졌다. 우리가 매일 마주하는 인터넷 세상은 크게 세 가지 축으로 움직인다. 정보를 탐색하고 보여주는 HTTP(웹) , 비동기적으로 소식을 전하는 Email(이메일) , 그리고 복잡한 숫자 주소 대신 친숙한 이름을 쓰게 해주는 DNS(도메인 시스템) 이다. 오…

hyeon_B

[컴퓨터네트워크] Transport Layer | UDP, TCP, Flow/Error/Congestion Control

전송 계층, 호스트를 넘어, 정확한 프로세스에 데이터를 전달하는 법 지난번에 우리는 Network layer(IP)에 대해 깊이 파고들었다. 수많은 라우터를 거쳐 패킷이 목적지 호스트(컴퓨터)에 도착하는 과정은 여러 물류센터를 거쳐 택배가 아파트 단지 앞까지 도착하는 것과 같았다. 하지만 여기서 이런 의문이 든다. "아파트 단지(IP)까지 도착한 건 알겠는데, 이 패킷이 101동 202호의 철수(특정 앱)에게 가야 하는지, 505호…

hyeon_B

[운영체제] Log-structured File System (LFS) | 디스크의 물리적 한계를 극복하는 순차 쓰기 전략

디스크의 물리적 한계를 극복하는 순차 쓰기 전략 지난번에 FFS(Fast File System) 를 통해 디스크의 물리적 구조(Cylinder Group)를 고려한 배치가 성능을 어떻게 개선하는지 확인했다. 하지만 여전히 해결되지 않은 문제가 있다. "데이터를 덮어쓴다(Update-in-place)"는 기존의 방식은 필연적으로 탐색 시간(Seek Time) 과 회전 지연(Rotational Latency) 을 유발한다. …

hyeon_B

[운영체제] 파일 시스템의 영속성(Persistence) | Crash Consistency, FSCK, Journaling

파일 시스템의 Persistence 우리가 프로그램을 사용할 때 가장 아찔한 순간은 저장하지 않았는데 갑자기 프로세스가 죽어버리는 상황일 것이다. 마찬가지로 OS에서 데이터를 저장하는 도중에 전원 플러그를 뽑으면 어떻게 될까? 메모리(RAM)에 있는 데이터가 날아가는 건 당연하지만, 하드 디스크에 쓰고 있던 데이터마저 깨져버린다면? 파일 시스템은 그 거대한 모순을 어떻게 견뎌내는 걸까. 오늘은 파일 시스템의 영속성(Persistence)을 …

hyeon_B

[운영체제] Fast File System (FFS) | 디스크의 물리적 구조를 고려한 성능 최적화

파일 시스템의 성능을 높이자 지난번 VSFS(Very Simple File System)를 공부하며 파일 시스템의 논리적인 뼈대를 세웠다. 하지만 '구현 가능하다'는 것과 '잘 동작한다'는 것은 완전히 다른 문제다. 초기 유닉스 파일 시스템은 단순했지만, 성능은 처참했다. 디스크를 마치 RAM처럼 임의 접근(Random Access) 가능한 장치로 취급했기 때문이다. (Random Access가 안되는 건 지난번…

hyeon_B

[운영체제] 파일 시스템 구현(VSFS) | Index Node(Inode) in deep

파일 시스템, 디스크에 데이터를 구조화하는 방법 매일 코드를 짜면서 수없이 많은 파일을 생성하고 저장한다. open() , write() 시스템 콜을 호출할 때마다 하드웨어 레벨에서 어떤 일이 벌어지는지 깊게 고민해 본 적이 드물다는 생각이 들었다. 이번 계기에 파일 시스템의 구현(File System Implementation)을 파고들면서, 우리가 당연하게 여기는 '파일 저장'이라는 행위가 실제 디스크 상에서 어떻게 구조화…

hyeon_B

[운영체제] 파일 시스템과 디렉토리 | Unix File System, Inode, Storage Virtualization

Storage Virtualization 지난 시간까지 우리는 HDD와 SSD라는 하드웨어 자체에 대해 알아보았다. 회전하는 플래터, 전자를 가두는 셀, 그리고 이들을 제어하기 위한 하드웨어적인 컨트롤러들의 이야기였다. 하지만 우리가 실제로 컴퓨터를 사용할 때 "3번 트랙 5번 섹터에 데이터를 써줘"라고 명령하지 않는다. 대신 "보고서.docx를 저장해 줘"라고 말한다. 여기서 나오는 개념이 바로 운영체제…

hyeon_B

[운영체제] SSD와 FTL | NAND Flash, Garbage Collection, Wear Leveling

SSD, 빠르지만 존재하는 의외의 단점 SSD(Solid State Drive)와 관련한 이번 글에서, SSD가 우리가 평소에 자주 사용하는 전자기기들(스마트폰, 태블릿, 노트북, ...)에 들어가는 저장장치이지만 모르고 있던 진실에 대해 파헤쳐보고자 한다. "SSD는 하드디스크보다 빠르지만, '덮어쓰기(Overwrite)'가 안 된다는 치명적인 단점이 있다." 덮어쓰기가 안 되는데 어떻게 우리가 매일 파일을 …

hyeon_B
게시물 더보기
검색결과 없음