Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

Re:Build

[Log] 4월 회고: 쌓인다는 감각 본문

Log

[Log] 4월 회고: 쌓인다는 감각

Choi Jae Hyeok 2026. 5. 5. 00:07

돌이켜 보면, 4월은 꽤 많이 움직인 달이었다.

 

프로젝트 하나를 끝내면 다음 프로젝트가 이어졌고, 그 흐름이 계속 이어져 갔다. 뭔가 대단한 걸 완성했다는 느낌보다는, 조금씩 쌓이고 있다는 감각. 그게 이번 달의 전부였던 것 같다.


두 번째 프로젝트 → 세 번째 프로젝트

로컬 VM에서 만들었던 방명록 웹 페이지를 AWS EC2 3대로 옮기면서 두 번째 프로젝트를 마무리했다. VPC, 서브넷, IGW, 라우팅 테이블, NAT 인스턴스. 직접 손으로 만지면서 AWS가 어떻게 생겼는지 처음으로 제대로 감을 잡았다.

 

세 번째 프로젝트에서는 본격적으로 확장했다. RDS, ALB, EC2(ASG), S3, CloudFront를 붙여서 클라우드 네이티브 인프라 형태로 배포해봤다. 이 단계의 목표는 딱 하나, 데이터가 어떻게 흐르는지 파악하는 것이었다.

draw.io로 아키텍처 다이어그램도 그려봤다.

 

그리고 이번에 처음으로 Terraform을 썼다.

 

솔직히 말하면, 생각보다 어렵지 않았다. 리소스를 선언하고, terraform plan으로 확인하고, 적용하면 됐다. 모르는 부분은 공식 문서인 Terraform Registry를 뒤졌다. 물론 모르는 용어가 많아서 문서를 읽으면서도 헤매는 구간이 있었지만, 그래도 멈추지는 않았다.

 

사실 두 번째, 세 번째 프로젝트를 블로그에 포스팅할까 고민을 꽤 했다. 근데 '학습'보다는 '감을 익히는' 느낌이 강했고, 억지로 글로 만들면 기술적인 깊이 없이 '뭘 했는가'를 나열하는 일기가 될 것 같았다. 그래서 일단 넘어가기로 했다.

 

레이어 분리도 시도했다. Network / Database / App. 처음엔 NAT 인스턴스를 표준에 맞춰 Network에 뒀는데, 완성하고 나니 뭔가 이상했다. 레이어 분리를 하려던 목적은 VPC 같은 기초 네트워크는 놔두고, 비용이 나가는 App·Database 계층만 destroy하기 위함이었는데, 표준을 따르다 보니 NAT 인스턴스의 생명 주기가 Network 계층과 맞지 않는다는 걸 알게 됐다.

 

생명 주기가 같으면 같은 레이어에 있어야 한다. NAT Gateway는 따지고 보면 Network 계층이지만, 필요에 의해 NAT 인스턴스를 App 레이어로 옮기고, outputs.tf를 정리하고, terraform plan으로 계속 검증하면서 결국 원하는 대로 만들었다.

 

모듈화는 아직 어렵다. 시도는 해봤고, 실패했다. 일단 보류.

단순히 반복되는 리소스를 줄이려고 for_each와 map(object) type을 활용한 모듈화를 시도했다.

근데 막상 구현해보니 변수 구조가 복잡해지고, 오히려 코드 흐름이 한눈에 들어오지 않았다. 지금 단계에서는 코드의 양을 줄이는 것보다, 리소스가 어떻게 연결되고 동작하는지를 명확하게 이해하는 게 더 중요하다고 느꼈다.

그래서 모듈화는 잠시 보류하기로 했다. 인프라에 대한 이해가 더 쌓인 뒤에 다시 도전해볼 생각이다.

웹 서비스 구조를 들여다봤다

인프라에 올릴 서비스가 필요했다. Node.js(Express) + Vue 3(Vite)로 구성된 게시판 웹 서비스를 AI 에이전트를 활용해 구현하고, 코드를 직접 들여다봤다.

 

목표는 모든 코드를 이해하는 게 아니었다. 구조와 데이터 흐름을 파악하는 것.

 

브라우저가 들어오면 index.htmlmain.js → Vue 실행 → URL에 맞는 컴포넌트 렌더링 → 백엔드 API 호출 → 미들웨어 검증 → Controller에서 처리. 이 흐름을 따라가다 보니 전체 그림이 얼추 보이기 시작했다.

 

그리고 .envpackage.json의 중요성을 인프라 관점에서 다시 봤다. 어떤 포트를 쓰는지, 어떤 라이브러리를 쓰는지, 이 두 파일만 봐도 대략적인 인프라 설계가 가능하다는 걸 알았다.

 

처음엔 '이 방대한 코드를 어떻게 다 이해하지?'라는 막막함이 컸다. 근데 인프라 관점에서의 본질은 모든 로직을 이해하는 게 아니라, 서비스가 실행되고 유지될 수 있는 환경을 만드는 것이라는 걸 깨달았다. 그러고 나서 좀 홀가분해졌다.

Docker를 처음 만졌다

EC2에 직접 배포하면서 한 가지가 계속 걸렸다. 서버 환경 세팅, 수동 스크립트 실행. 매번 이걸 반복하는 게 귀찮다는 생각이 들었고, Docker가 자연스럽게 필요해졌다.

 

Dockerfile을 AI를 통해 작성하고, 구조를 직접 확인했다. docker build, docker run 같은 기본 명령어도 익혔다.

 

이후 Docker Compose도 접했다. 컨테이너 여러 개를 하나로 묶어서 올릴 수 있는 개념. 단일 장애 지점이라는 리스크가 있다는 것도 알고 있다. 지금은 로컬에서 연습 중인데, 컨테이너끼리 어떻게 연결하는지에 대한 개념이 아직 부족한 것 같다. 잘 안 풀리고 있는 구간이다.


5월이 되고 나서야

5월이 되자마자 든 생각이 "4월에 뭐했지?"였다.

 

루틴이 깨지기도 했고, 구조를 고민하다가 실행을 못 하는 날도 있었다. 해야 할 게 많아지면서 오히려 아무것도 못 하는 순간도 있었고, 하루 종일 생각만 하다가 그냥 넘어간 날도 있었다. 멘탈이 나간 날도 꽤 됐다. 그래서 회고를 쓰는 것조차 부담이 됐다.

 

근데 막상 기억을 되짚어 보며 초안을 작성하다 보니, 생각보다 많은 게 떠올랐다.

 

모든 걸 완벽하게 이해하고 나서 움직이려고 하면 계속 늦어진다는 걸, 이번 달에 몸으로 좀 느꼈다. 조금 부족하더라도 계속 시도하는 게 결국 쌓이게 만드는 방법이라는 것도. 기록으로 남기지 않으면 사라지는 것처럼 느껴지는데, 실제로는 이미 쌓이고 있었다.

 

5월에는 Docker Compose를 이용한 단일 EC2 배포부터 시작해서, 서브넷 분리와 RDS 연결, CI/CD 자동화, ALB·ASG 부하 테스트, 그리고 CloudWatch 모니터링까지 순차적으로 가져가 보려고 한다. 5월 안에 다 끝낼 수 있을지는 모르겠다. 그냥 멈추지 않으면 된다고 생각하기로 했다.