Docker로 예약 서버 올리기 (8)

문과생 유목이의 개발일지 · 8화
구조를 이해했으니 이제 만들면 된다. 그렇게 생각했다. 실제로는 첫 화면이 뜨기까지 사흘이 걸렸다.
파일 세 개로 시작
NAS에 폴더를 하나 만들고, 그 안에 파일 세 개를 뒀다.
Dockerfile — 주방을 어떻게 차릴지 적는 설명서다. Node.js를 깔고, 내 코드를 넣고, 서버를 실행하라는 순서가 들어간다.
docker-compose.yml — 주방이 두 개 필요하다. 하나는 서버, 하나는 데이터베이스다. 이 둘을 같이 띄우고 서로 연결해주는 설정 파일이다.
소스 코드 폴더 — 실제 예약 로직이 들어갈 자리다. 이 시점에는 "안녕하세요"만 출력하는 파일 하나가 전부였다.
Container Manager에서 실행 버튼을 눌렀다. 컨테이너 두 개가 올라갔다. 여기까지는 순조로웠다.
그리고 사흘을 날렸다
첫 번째. 포트 충돌.
서버를 5000번 포트에 올렸더니 아예 뜨질 않았다. 알고 보니 DSM이 이미 쓰고 있는 번호였다. 남의 집 현관문에 내 문패를 달려고 한 셈이다. 3000번으로 바꾸니 바로 해결됐다.
두 번째. 데이터베이스 연결 실패.
이게 제일 오래 걸렸다. 서버가 계속 데이터베이스를 못 찾는다고 했다. 설정에는 분명 localhost라고 적혀 있었다.
문제는 컨테이너가 각각 별개의 공간이라는 점이었다. 서버 컨테이너 입장에서 localhost는 "나 자신"이다. 옆 컨테이너가 아니다. 그러니까 나는 주방에 대고 "창고 어디 있어?"가 아니라 "내가 어디 있어?"라고 물어보고 있었던 것이다.
localhost 대신 컨테이너 이름을 적으니 바로 붙었다.
세 번째. 비밀번호 인증 실패.
password authentication failed for user라는 메시지가 떴다. 설정 파일의 비밀번호와 데이터베이스가 처음 만들어질 때 저장된 비밀번호가 달랐다. 중간에 비밀번호를 바꿨는데, 이미 만들어진 데이터베이스는 옛날 것을 그대로 들고 있었다. 데이터가 없는 시점이라 아예 지우고 다시 만들었다.
화면에 글자가 떴다
사흘째 저녁, 브라우저 주소창에 NAS 주소와 3000번 포트를 치고 들어갔더니 흰 화면에 글자가 하나 떠 있었다.
안녕하세요
기능이라고 할 것도 없는 화면이다. 그런데 그날 퇴근길 기분은 꽤 좋았다. 회사 서버실에 있는 장비에서 내가 만든 무언가가 돌아가고 있었다.
이 단계에서 알게 된 게 하나 있다. 에러 메시지는 생각보다 친절하다. localhost도 authentication failed도, 메시지를 그대로 복사해서 검색하면 같은 일을 겪은 사람이 반드시 있었다.
무섭게 느껴졌던 건 에러 자체가 아니라, 에러를 읽을 줄 몰랐던 내 상태였다.
다음 편 — PostgreSQL과 친해지는 과정 (9)
※ 이 연재에 등장하는 ㈜세움과 모든 인물은 가상이다. 기술적인 구성과 시행착오는 실제 구축 경험을 바탕으로 재구성했다.
댓글
댓글 쓰기