[AI로 웹서버] 02. 로컬 개발 환경을 구축해보자 (2) (Docker와 git 설정/실행)
기본 설치가 끝난 로컬 개발 환경이 제대로 작동하는지 본격적으로 점검해볼 시간이다. 물론 젬 대리(Gemini)와 클로 과장(Claude)이 함께할 예정이다.
이전에 준비한 Docker 이미지를 실행해본다.
(먼저 Docker Desktop이 백그라운드에서 실행되어 있는지 확인이 필수다. 그렇지 않으면 당연히 Docker 이미지가 실행안된다. Docker Desktop 실행 여부는 윈도우 우측 아래 상태 창에 고래가 떠 있는지 보면 된다)


어라? Docker 웹 이미지 빌딩하는 과정에서,
mysql.sock에 문제가 있다는 에러가 난다.

젬 대리는 .dockerignore 파일을 생성해서 해결하라고 한다.

클로 과장 역시 .dockerignore 파일로 해결하라고 한다.

둘의 설명을 들어보니, 비슷한 듯 하면서도 약간 다르다.
젬 대리는 단순히 mysql_data/만 Docker 이미지에 포함시키지 말라고 하는데, 클로 과장은 그 뿐만 아니라, 모든 .sock 파일, .env 파일, .git/ 관련 등까지 포함시키지 말라고 한다.
이번 건 문제해결에는 젬 대리의 의견도 상관없으나, 비슷한 유형의 문제를 원천 차단하기 위해서는 당연히클로 과장 의견이 더 낫다.
클로 과장의 의견을 따르기로 했다.
(역시 클로가 한 수 위다)

깨끗하게 에러는 해결되었다.
그 뿐만 아니라, 비슷한 유형의 에러는 이제 거의 없을 것이다.
이제 Docker 이미지는 모두 빌드가 되었고, 에러없이 시작되었다.
Docker 프로세스 상태는 어떤 지 확인해보았다.
docker compose ps
그런데 어제부터 mysql db가 계속 Restarting이 되고 있다. 처음 이미지 실행 후 40초 정도는 기다려주라고 해서, 그렇게 하는데도 계속 이런 상태다.
해당 컨테이너 로그를 뽑아서, 젬 대리와 클로 과장에게 확인을 지시했다.
docker logs sejongview-db


둘 다 진단은 똑같았다.
바로 적용했다.

오~ 바로 문제 해결!
그리고 기존의 백업해두었던 DB 백업본(.sql)을 새로 생성한 DB에 올렸다.
docker exec -it sejongview-db bash -c "mysql -u root -p데이터베이스루트비밀번호 sv_db < /tmp/backup.sql"그리고 브라우저에서 http://localhost 에 접속하면

개발중인 서버가 로컬에서도 제대로 돌아가고 있음을 알 수 있다.
이제 Git을 이용해서, 로컬의 파일을 리모트에 적용하는 절차를 테스트해보자. 여기까지 완료된다면, 로컬 개발 환경 구축은 모두 완료되었다고 볼 수 있을 것이다.
먼저 클로 과장에게 Git으로 로컬에서 리모트 서버로 파일을 옮기는 절차에 대해물었다.




로컬에서 소스코드를 변경했을 때, 기본 설정이 끝나고 나면 다음만 기억하면 될 거 같다.
(명령어 실행 위치는 Dockerfile, .gitignore파일 등이 있는 곳이다.)
# 1. .gitignore 작성 (환경변수, DB 데이터 및 백업, SSL 인증서, __pycache__ 등, .DS_Store나 Thumbs.db 등 git 백업 제외)
cd D:\ ... \sejongview
# 2. git 초기화
git init
git config --global user.email "your@email.com"
git config --global user.name "YourName"
# 3. push 준비
git add .
git commit -m "first commit"
# GitHub에서 새 저장소(repo) 만든 후 연결
git remote add origin https://github.com/YOUR_ID/sejongview.git
git branch -M main
git push -u origin main로컬 개발 환경에서 git 백업을 최초 실행할 때
# 1. 어떤 파일이 push될 것인지 먼저 확인(좋은 습관!)
git status
# 2. 변경 파일 전체 스테이징
git add .
# 3. 메모 적기
git commit -m "변경 내용 설명"
# 4. 파일 push
git push origin main로컬에서 git으로 파일을 수시로 올릴 때(push)
리모트 서버에서 git에 있는 소스코드를 가져올 때는 다음만 기억하면 된다.
(명령어 실행 위치는 마찬가지로 Dockerfile, .gitignore 등이 있는 곳이다)
# 1. (중요) 서버에서 인증서 백업 (정기적으로 실행 권장)
tar czf ~/certbot_backup_$(date +%Y%m%d).tar.gz ~/sejongview/certbot/conf/
# 2. 처음이면 clone (sejongview 폴더가 없는 상태에서 실행)
git clone https://github.com/treeinsight/sejongview.git
cd sejongview
# 3. .env 파일 직접 생성 (git에 없으므로)
nano .env
# 4. 로컬 .env 내용 그대로 붙여넣기 후 저장
# 5. 백업된 인증서 복원
tar xzf ~/certbot_backup_YYYYMMDD.tar.gz -C ~/sejongview/
# 6. Docker 이미지 빌드 및 실행
docker compose up -d --build리모트 서버에서 최초 실행할 때
cd sejongview
# 1. 변경된 파일만 자동으로 업데이트됨
git pull origin main
# 2. 코드 변경이 반영되도록 재빌드
docker compose up -d --build이후 git에서 리모트 서버로 파일을 수시로 가져올 때(pull)
리모트 서버에서 이를 적용하면 아래와 같이 나온다.

리모트 서버에서 최초로 Docker 이미지를 빌드했으니, MySQL은 비어있을 것이다.
먼저, 로컬에서 만든 DB 백업본으로 리모트 서버 db를 백업하면 ...
# 1. 백업 파일을 컨테이너 안으로 복사
docker cp sv_db_backup.sql sejongview-db:/tmp/sv_db_backup.sql
# 2. 기존 DB 삭제 후 재생성
docker exec -it sejongview-db mysql -u root -pYOURPASSWORD -e "DROP DATABASE sv_db; CREATE DATABASE sv_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 3. 백업 파일로 전체 복원
docker exec -it sejongview-db bash -c "mysql -u root -pYOURPASSWORD --default-character-set=utf8mb4 sv_db < /tmp/sv_db_backup.sql"
# 4. 복원 확인
docker exec -it sejongview-db mysql -u root -pYOURPASSWORD sv_db -e "SHOW TABLES;"아래처럼, https 역시 아무런 문제 없이 연결되는 것을 볼 수 있다.

지금까지 로컬 개발 환경을 구축하는 방법에 대해서 알아보았다.
로컬에서 개발한 소스를 git으로 백업하고, git에서 리모트 서버로 끌어오는 방식으로 변경사항을 리모트 서버에 반영하는 방법도 언급했다.
중요한 점은 서버 구축과 관리는 변수가 많으며, 언제든지 위의 설명이 적용되지 않는 순간이 올 수도 있다는 점이다. 이럴 때는 주저하지 말고, 에러코드를 긁어서 젬 대리나 클로 과장에게 물어보는 것이 문제 해결이 큰 도움이 된다는 것을 느꼈다.
#로컬개발환경 #Docker구축 #Git배포 #MySQL에러해결 #도커컴포즈 #세종뷰 #AI개발협업 #클로드 #제미나이 #웹서비스구축 #Docker #GitWorkflow #WebDevelopment