2026. 7. 21. 15:56ㆍ부트캠프/TIL(Today I Learned)
대규모 스트림 처리와 MSA. 이제 진짜 실무가 시작되는 것 같다.
새로운 프로젝트가 시작됐다.
이번에는 단순히 기능 하나를 만드는 수준이 아니라 대규모 스트림 처리, MSA, Redis, Docker, CI/CD처럼 실무에서 정말 많이 사용하는 기술들을 중심으로 배우게 된다.
커리큘럼을 처음 봤을 때는 솔직히 조금 압도됐다. 예전 같았으면 "이걸 언제 다 배우지?"라는 생각부터 했을 텐데, 이번에는 이상하게 그런 부담보다 설렘이 더 컸다.
오히려 '이제 진짜 개발자가 배우는 것들을 배우는구나.' 라는 생각이 먼저 들었다.
그동안은 Spring Boot로 API를 만들고, 데이터베이스를 연결하고,
기능구현하고, 프로젝트를 완성하는 과정에 집중했다.
물론 그것도 정말 많은 공부였고, 그 과정에서 성장도 많이 했다.
하지만 서비스가 커지고 사용자가 많아지면 이야기가 달라진다.
수많은 요청을 어떻게 처리하는지.
서비스를 어떻게 분리하는지.
배포는 어떻게 자동화하는지.
서버가 여러 대일 때는 어떻게 운영하는지.
이런 고민들이 시작되는 단계가 바로 지금 배우는 과정이다.
개발자의 시야가 조금 더 넓어지는 느낌이다.
첫 시간에는 Docker에 대해 정말 깊게 배웠다.
예전에도 Docker를 몇 번 사용해본 적은 있었지만, 이번에는 단순히 명령어만 따라 하는 것이 아니라 왜 사용하는지, 어떤 구조로 동작하는지까지 이해하는 시간이었다.
가장 먼저 이미지(Image)와 컨테이너(Container)의 차이부터 다시 정리했다.
이미지는 실행에 필요한 모든 환경을 담고 있는 템플릿이고, 컨테이너는 그 이미지를 실제로 실행한 인스턴스라는 개념이다.
Spring Boot로 비유하면 Dockerfile은 Gradle 설정 파일처럼 이미지를 만드는 설계도이고, 이미지는 빌드된 결과물, 컨테이너는 그 결과물을 실제로 실행한 상태라고 이해하니 훨씬 와닿았다.
특히 컨테이너와 볼륨의 개념이 인상 깊었다.
처음에는 컨테이너를 삭제하면 데이터도 같이 사라지는 줄 알았는데, 볼륨을 사용하면 컨테이너를 새로 만들어도 데이터는 그대로 유지된다는 점이 정말 편리하게 느껴졌다.
실습은 Docker 명령어를 직접 하나씩 실행해보면서 진행됐다.
가장 먼저 이미지를 확인하는 것부터 시작했다.
docker images
실행 중인 컨테이너와 모든 컨테이너를 조회하는 명령어도 익혔다.
docker ps
docker ps -a
컨테이너를 생성하고 실행하는 과정도 직접 해봤다.
docker run -d --name postgres-db \
-p 5432:5432 \
-v postgres-data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=1234 \
postgres
실행한 컨테이너 내부에 접속해서 상태를 확인하는 명령어도 사용했다.
docker exec -it postgres-db bash
Spring Boot 프로젝트는 Dockerfile을 작성한 뒤 직접 이미지를 빌드했다.
docker build -t service-a .
docker build -t service-b .
빌드한 이미지를 컨테이너로 실행하면서 포트 매핑도 실습했다.
docker run -d --name service-a \
-p 18080:8080 \
service-a
docker run -d --name service-b \
-p 18081:8080 \
service-b
서비스끼리 통신하기 위해 Docker Network도 생성했다.
docker network create msa-network
그리고 컨테이너를 해당 네트워크에 연결한 뒤, 컨테이너 이름으로 서로 통신하는 것도 확인했다.
마지막에는 Docker Compose를 이용해 여러 서비스를 한 번에 실행했다.
docker compose up -d
docker compose down
예전에는 명령어 하나하나가 생소하게 느껴졌는데, 직접 실행해보면서 이미지와 컨테이너, 네트워크, 볼륨이 어떻게 연결되는지 조금씩 이해되기 시작했다.
특히 명령어를 외우는 것보다 왜 이 명령어를 사용하는지를 이해하는 것이 훨씬 중요하다는 걸 느낈 하루였다.
실제로 PostgreSQL 컨테이너를 생성하고 볼륨을 연결해보면서 데이터가 어떻게 유지되는지 직접 확인했다.
포트 매핑도 다시 한번 확실하게 이해하게 됐다.
컨테이너 내부 포트는 여러 개가 모두 8080이어도 상관없지만, 호스트 포트는 중복될 수 없다는 점.
예를 들어 18080:8080, 18081:8080처럼 외부 포트만 다르게 연결하면 여러 개의 Spring Boot 애플리케이션도 동시에 실행할 수 있다는 것을 다시 정리할 수 있었다.
오늘 실습에서 가장 재미있었던 부분은 두 개의 Spring Boot 서비스를 Docker로 직접 컨테이너화한 것이었다.
Service-A와 Service-B를 각각 이미지로 빌드하고, 사용자 정의 Docker Network를 생성한 뒤 컨테이너 이름으로 서로 통신하도록 구성했다.
예전에는 localhost와 포트 번호만 생각했는데, 같은 Docker Network 안에서는 컨테이너 이름 자체가 주소가 된다는 점이 꽤 신기했다.
실습 중에 openjdk:17-jdk-slim 이미지를 가져오지 못하는 오류도 만났다.
원인을 찾아보니 공식 이미지가 변경된 것이었고, eclipse-temurin:17-jdk-jammy로 수정하니 정상적으로 빌드됐다.
그리고 마지막에는 Docker Compose까지 실습했다.
지금까지는 컨테이너를 하나씩 실행했다면, Docker Compose는 docker-compose.yml 파일 하나만으로 여러 서비스를 한 번에 실행하고 관리할 수 있다는 점이 정말 편리했다.
직접 docker compose up -d 명령어 하나로 여러 컨테이너가 동시에 실행되는 모습을 보니 왜 실무에서 Docker Compose를 많이 사용하는지 바로 이해가 됐다.
오늘 하루를 정리하면서 가장 크게 느낀 건 Docker는 단순히 컨테이너를 실행하는 도구가 아니라는 것이다.
개발 환경과 운영 환경을 동일하게 만들고, 여러 서비스를 쉽게 관리하며, MSA와 CI/CD를 위한 기반이 되는 기술이라는 것을 조금씩 체감하기 시작했다.
아직은 시작 단계지만, 이런 기술들을 하나씩 익혀가는 과정 자체가 꽤 재미있다.
특히 MSA를 생각하면 Docker가 왜 필수인지 조금씩 이해되기 시작했다.
플랫폼 하나에서 여러 개의 서비스를 각각 컨테이너로 실행하고,
필요하면 독립적으로 배포하고,
네트워크로 서로 통신하고,
나중에는 Kubernetes 같은 오케스트레이션 도구로 관리하는 흐름까지.
예전에는 그냥 어려운 기술 이름처럼만 보였는데 이제는 하나씩 연결되기 시작한다.
퍼즐 조각이 맞춰지는 느낌이다.
이번 과정에서 가장 기대되는 건 대규모 스트림 처리다.
사용자가 몇 명이 아니라 수천 명, 수만 명이 동시에 접속하는 상황을 고려해서 시스템을 만드는 경험.
대규모 서비스가 어떻게 동작하는지 배우는 과정이라는 생각이 든다.
물론 쉽지는 않을 거다.
처음 보는 개념도 많고,
실습하면서 분명히 에러도 엄청 많이 만날 거다.
Docker 이미지 하나 빌드하는 데도 예상치 못한 오류를 만나고, 이미지도 바꾸고, 설정도 수정하면서 해결했던 것처럼 앞으로도 비슷한 일들이 계속 생길 것이다.
그런데 이상하게 이번에는 그런 과정도 기대된다.
요즘 가장 많이 드는 생각은 하나다.
나도 이제 실무과정을 배우고 있는거구나. 개발자로서 한단계 성장했구나.
많은 사용자가 사용하는 서비스를 설계하고,
배포하고, 운영하고, 고민하고 그런 것을 할 수 있는 개발자가 되고 싶다.
이번 프로젝트는 아마 쉽지 않을 것이다.
하지만 그래서 더 기대된다.
조금 힘들더라도 끝까지 따라가면서 하나씩 내 것으로 만들 생각이다.
과정이 끝났을 때는 지금보다 훨씬 더 넓은 시야를 가진 개발자가 되어 있었으면 좋겠다.
이제는 정말 진심전력을 다해 머릿속에서 사고할것이다.
그리고 개발자로서 한 단계 더 성장해보고 싶다.
이번 프로젝트가 그 시작점이 되었으면 한다.
내일은 프로젝트 관리심화를 완강하고 대규모 스트림처리에 대한 강의를 수강한뒤에 복습의 시간을 가져볼것이다.
'부트캠프 > TIL(Today I Learned)' 카테고리의 다른 글
| [내일배움캠프_사전캠프_8기] TIL Days-24 캐싱개념, 캐싱전략 (0) | 2026.07.24 |
|---|---|
| [내일배움캠프_사전캠프_8기] TIL Days-22 인 메모리 데이터베이스 (0) | 2026.07.22 |
| [내일배움캠프_사전캠프_8기]_Days_19 TIL_ 팀 프로젝트-발표 (0) | 2026.07.20 |
| [내일배움캠프_사전캠프_8기]_Days_18 TIL_ 팀 프로젝트-Day10 (0) | 2026.07.15 |
| [내일배움캠프_사전캠프_8기]_Days_17 TIL_ 팀 프로젝트-Day9 (0) | 2026.07.14 |