Backend 5

배포 시간 14분에서 53초로: 빌드 구조 개선과 ARM64 정합성 해결

CI/CD를 운영하면서 dev 배포를 돌리던 중 컨테이너가 Restarting 상태로 머물렀고, /dev/health, /dev/swagger-ui/index.html도 정상 확인이 되지 않았다.애플리케이션 설정 문제를 먼저 의심했지만, 로그에서 exec format error가 반복적으로 확인됐다.exec format error는 바이너리(또는 이미지 내부 실행 파일) 아키텍처가 런타임과 맞지 않을 때 발생하는 대표적인 에러다.실제 EC2는 ARM64(aarch64)인데, GitHub Actions에서 빌드한 이미지는 기본값으로 amd64가 생성되고 있었다.즉, 배포 성공과 실행 가능이 분리된 상태였고, 먼저 아키텍처 정합성을 맞추는 게 우선이었다. 1. 실행 실패부터 해결: ARM64 아키텍처 정합성..

Backend 2026.05.31

포트는 하나로, 배포는 더 명확하게: Nginx 리버스 프록시와 ECR 전환기

CI/CD 구성 이후 애플리케이션 배포 구조를 운영 관점에서 다시 한번 정리했다.다음과 같은 목적으로 작업을 진행하려고 했다.외부 접근 경로를 단순하게 만들고배포 흐름을 더 일관되게 정리하고dev/prod를 명확하게 분리하는 것이번 글에서는 Nginx 리버스 프록시 도입부터 ECR 기반 배포 전환까지를 단계별로 정리할 예정이다. 경로 기반 라우팅이 필요해진 이유초기에는 dev/prod 컨테이너를 포트로 분리해서 접근했다. 검증 단계에서는 빠르고 단순했지만, 운영 관점에서는 불편했다.어떤 포트가 어떤 환경인지 계속 기억해야 하고외부에 앱 포트를 직접 열어두는 구조가 되며라우팅 규칙이 애플리케이션 밖으로 분산된다그래서 외부 진입점은 80 포트 하나로 두고, 내부 라우팅은 Nginx가 맡는 구조로 바꿨다.Ng..

Backend 2026.05.08

서버 접속 배포에서 GitHub Actions 자동 배포까지, CI/CD 구성하기

Docker 기반 실행 구조와 CI/CD 워크플로우 구성 AWS 인프라, 콘솔 대신 Terraform으로 관리해보자그동안 프로젝트를 진행하면서 필요한 리소스들은 AWS 콘솔에서 직접 만들어서 사용했다. EC2, S3, RDS, Redis와 같은 리소스를 하나씩 늘려가면서 작업했다.콘솔에서 필요한 순간에 바로 만들 수 있zerozeroseven.tistory.com이전 글과 같이 Terraform으로 인프라 구성을 정리한 뒤에는 애플리케이션 배포 흐름을 잡는 작업을 진행했다. 이번에는 Dockerfile 추가부터 GitHub Actions 기반 CI/CD 워크플로우 구성까지 정리해보려고 한다. Dockerfile 추가애플리케이션을 서버에서 일관된 방식으로 실행하려면 먼저 컨테이너 실행 구조가 필요했다. ..

Backend 2026.05.02

AWS 인프라, 콘솔 대신 Terraform으로 관리해보자

그동안 프로젝트를 진행하면서 필요한 리소스들은 AWS 콘솔에서 직접 만들어서 사용했다. EC2, S3, RDS, Redis와 같은 리소스를 하나씩 늘려가면서 작업했다.콘솔에서 필요한 순간에 바로 만들 수 있고, 화면에서 설정을 확인할 수 있다보니 쉽게 느껴졌다. 그런데 리소스가 하나씩 늘어나다보니 생각보다 신경 쓸 부분이 많아졌다. 특히, 삭제할 때 불편했다. 인스턴스를 지웠다고 생각했는데 어디선가 비용이 청구되고 있었고, 어떤 리소스가 어떤 이유로 만들어졌는지도 시간이 지나면 점점 흐려졌다. 콘솔 기반 작업은 어떤 과정을 거쳐 리소스를 만들었는지 기록을 남기기 어려워서 배포 자동화를 고민하면서 다른 방식도 도입해보자는 생각이 들었다. 그래서 Terraform을 도입하게 되었다인프라로 코드를 관리할 수 ..

Backend 2026.04.16

콤마 하나 때문에 구글 로그인이 실패했던 이유

구글 소셜 로그인을 구현하던 중 아래와 같은 에러가 발생했다.ERROR 1167065 --- [emotion-storage] [io-8080-exec-10] c.g.a.c.a.openidconnect.IdTokenVerifier : id token signature verification failed. Please see docs for IdTokenVerifier for default settings and configuration options 로그 메시지 상으로는 구글 ID 토큰의 서명 검증이 실패한 것처럼 보여서 처음에는 아래와 같은 문제들을 의심했다.Google OAuth Client ID 설정 오류ID 토큰 만료JWT 서명 검증 실패GoogleIdTokenVerifier 설정 문제특히 구글 로..

Backend 2026.03.14