AWS·GCP 인프라 지옥 탈출기


[메인 프로젝트 2편]

RAG 시스템에 들어갈 524건의 판례 데이터를 전수 정제하고 벡터 DB 구축을 마친 후, 저에게 주어진 다음 미션은 '인프라 아키텍처 설계 및 서비스 배포'였습니다. 아무리 훌륭한 AI 모델을 만들었어도 사용자가 인터넷 주소(URL)를 치고 들어와 쓸 수 없다면 그것은 서비스가 아닌 '연구실의 코드'일 뿐이기 때문입니다.

하지만 로컬 컴퓨터를 떠나 클라우드 가상 서버(Cloud Server)의 세계로 들어간 순간, 예상치 못한 거대한 인프라의 파도가 몰아쳤습니다. 밤낮없이 서버와 사투를 벌이며 끝내 서비스를 무중단으로 띄워낸 눈물겨운 트러블슈팅 기록을 공개합니다.


☁️ 1. 복잡한 클라우드 권한 전쟁: GCP IAM 및 결제 권한 장애

저희 서비스의 핵심 두뇌는 LLM API(오픈에이전트 및 클라우드 모델)를 호출하는 것이었습니다. 개발이 한창 진행되던 중, 갑자기 모든 분석 기능이 멈춰 서는 비상사태가 발생했습니다.

  • 문제점 (할당량 초과 및 권한 꼬임): 무료 제공 API의 할당량(Quota)이 초과되면서 발생한 문제였습니다. 즉시 유료 티어로 전환해 결제 계정을 연결하려 했으나, GCP(Google Cloud Platform) 특유의 복잡한 IAM(식별 및 액세스 관리) 권한 체계가 발목을 잡았습니다. 결제 계정과 프로젝트 간의 매핑 권한이 완전히 꼬여버린 것입니다.

  • 해결 전략 (인프라 우회 및 재매핑): 마냥 권한 승인을 기다리며 시간을 지체할 수 없었습니다. 기존 프로젝트의 꼬인 실타래를 푸는 대신, 과감하게 신규 프로젝트를 생성하고 해당 인프라에 결제 계정을 강제로 직접 매핑하는 우회 아키처를 수립했습니다. 결제 권한 설정을 최적화하여 크레딧을 확보함과 동시에 중단되었던 AI 분석 기능을 정상화했습니다.

🧠 아키텍트로서 얻은 인사이트 "클라우드 서비스 운영 시, '권한(IAM)' 관리는 단순한 보안 설정을 넘어 개발 스펙 그 자체만큼 중요하다는 것을 뼈저리게 실감했습니다."


🌋 2. 발표 직전의 악몽: React 빌드 실패와 메모리 부족(OOM)

가장 피를 말렸던 순간은 최종 프로젝트 발표를 불과 얼마 앞두지 않은 시점이었습니다. 서버 환경에 프론트엔드(React)를 올리는 과정에서 치명적인 장애가 연달아 터졌습니다.

  • 현상 1 (Node.js 버전 충돌): 서버 환경의 Node.js 버전 이슈로 인해 React 프로젝트의 최종 빌드(Build)가 계속해서 실패했습니다.

  • 현상 2 (OOM, Out Of Memory): 설상가상으로 가상 서버의 제한된 메모리 리소스로 인해 빌드 도중 프로세스가 강제로 종료되는 메모리 부족(OOM) 현상까지 겹쳤습니다. 한마디로 서버가 뻗어버린 것입니다.

🚨 위기 관리 전략: '로컬 시연'과 '사후 완벽 배포'의 분리

당장 몇 분 뒤가 발표인 상황에서 인프라를 전면 수정하는 것은 자살행위였습니다. 저는 리스크를 최소화하기 위해 "발표 시에는 로컬 환경 시연으로 안정성을 확보하고, 배포는 발표 직후 완수한다"는 냉정한 위기 관리 판단을 내렸습니다.

발표를 성공적으로 마친 직후, 저는 곧바로 서버 가상환경을 전면 재구성하고 꼬여있던 포트 충돌을 해소했습니다. 이어서 백엔드(FastAPI)와 프론트엔드(React)를 다시 빌드하여 마침내 클라우드 인프라 배포를 완수해 냈습니다.

💻 당시 포트 충돌 해소 명령어 (Bash)

# 당시 꼬여있던 서버 포트를 강제 해제하고 환경을 재구성했던 명령어


fuser -k 80/tcp


fuser -k 8000/tcp

(※ 위 fuser 명령어를 통해 80포트와 8000포트의 프로세스를 강제 종료하고 인프라를 정상화했습니다.)


🔄 3. 인프라 안정화: AWS EC2 기반 무중단 배포 시스템 구축

최종 배포 성공에 그치지 않고, 사용자가 24시간 언제든 접속할 수 있는 서비스 안정성을 확보해야 했습니다. 가상 서버 터미널을 닫아도 서비스가 꺼지지 않도록 백그라운드 실행 기법을 정교하게 적용했습니다.

💻 백그라운드 무중단 실행 및 세션 관리 명령어 (Bash)

# 백엔드 및 프론트엔드 프로세스의 무중단 백그라운드 실행 세션 관리


nohup uvicorn main:app --host 0.0.0.0 --port 8000 &


disown

그 결과, 현재까지도 아무런 리스크 없이 외부에서 접속 가능한 AWS EC2 기반의 무중단 인프라 시스템을 안정적으로 유지하고 있습니다.


넥스트 예고: 기술적 완벽주의 vs 일정 중심의 실용주의 ⚖️

모든 인프라가 마침내 정상 궤도에 올랐을 때, 문득 뒤를 돌아보니 프로젝트 과정에서 팀원들과 치열하게 부딪혔던 소통의 흔적들이 보였습니다. "왜 더 빨리 배포하지 않느냐"는 의견과 "시스템 체력을 먼저 키워야 안정적인 배포가 가능하다"는 저의 신념 사이의 온도 차.

단순한 기술 구현을 넘어, 팀의 리스크를 관리하고 동료의 관점을 이해하는 'AI PM'으로 성장하게 된 마지막 이야기는 [3편: 협업 및 최종 소회 편]에서 이어집니다. 마지막까지 함께해 주세요!


📚 [정주행 추천] 커널로그 & 메인 프로젝트 전편 보기

비전공자 만학도가 AI 리터러시를 깨우고, RAG 기반 프롭테크 서비스를 실제 론칭하기까지의 위대한 여정입니다. 궁금한 회차를 클릭하시면 해당 칼럼으로 바로 이동합니다.

[1부: 패러다임의 시프트 (챌린지 편)]

[2부: 실전 레이스 (메인 프로젝트 편)]

댓글

이 블로그의 인기 게시물

초등 한자 공부, 다산 정약용의 《아학편》으로 시작하는 어린이 문해력 가이드 (1. 天地父母)

[디지털 아학편 상권] 초등 한자 문해력 교육 로드맵 (총 250단계)

초등 한자 공부, 다산 정약용의 《아학편》으로 시작하는 어린이 문해력 가이드 (2. 君臣夫婦)