새로 온 사람이 개발 환경을 만드는 데 사흘이 걸렸고 나도 처음에 비슷하게 걸렸다. 문서가 있기는 했는데 그대로 따라 해도 중간에 막히는 자리가 여러 군데였다.
Table of contents
Open Table of contents
사흘 걸리는 환경 구축
무엇이 필요한지를 정확히 아는 사람이 아무도 없다는 것이 이 상황의 성질이었다. 각자 자기 장비를 오래 쓰면서 필요한 것을 하나씩 깔았고 그 목록이 어디에도 없었다.
문서에는 네 줄이 적혀 있었다.
1. PHP 7.1 설치
2. MySQL 5.6 설치
3. composer install
4. .env 파일 만들기 (팀에 문의)
실제로는 Redis 와 이미지 변환 도구와 특정 확장 모듈과 다른 저장소의 코드 하나가 더 필요했다. 문서를 고치는 것으로는 안 되고 필요한 것을 다시 확인하는 것부터 해야 했다.
빈 장비에서 다시 해 보기
아무것도 안 깔린 장비를 하나 잡아서 처음부터 해 보면서 막히는 자리를 전부 적었다. 이미 깔려 있는 장비에서는 무엇이 필요한지가 안 보인다.
적어 보니 이렇게 나왔다.
- PHP 7.2 (7.1 아님. composer.json 이 7.2 를 요구)
- 확장: mbstring, gd, zip, redis, imagick
- MySQL 5.7 (5.6 에서는 마이그레이션 하나가 실패)
- Redis 4 이상
- Node 10 (프런트 빌드)
- ImageMagick
문서에 적힌 판과 실제로 필요한 판이 달랐다. 그동안 올라간 것이 문서에 반영이 안 된 것이었고 이 목록이 다음 작업의 입력이 됐다.
초기 자료까지 넣는다
필요한 것들을 docker-compose.yml 과 Dockerfile 에 담아서 명령 하나로 전부 뜨게 만들었다.
services:
app:
build: .
volumes: ['.:/app']
db:
image: mysql:5.7
environment: [MYSQL_DATABASE=app]
redis:
image: redis:4
FROM php:7.2-fpm
RUN docker-php-ext-install pdo_mysql gd zip
RUN pecl install redis imagick && docker-php-ext-enable redis imagick
무엇을 깔아야 하는지 몰라도 되는 상태가 목표였다.
여기에 초기 자료를 넣는 것까지 setup.sh 한 줄로 묶었는데 환경이 떠도 자료가 없으면 화면이 안 나오기 때문이다.
#!/bin/sh
set -e
docker-compose up -d
docker-compose exec -T app composer install
docker-compose exec -T app <마이그레이션 명령> --seed
docker-compose exec -T app npm ci && npm run dev
echo "http://localhost:8080 에서 확인하십시오."
기준 자료는 시드로 넣고 개인정보가 든 것은 가짜로 만들었다. 자료를 어디서 받아 어떻게 넣는지를 각자 알아내게 두면 거기서 다시 하루가 간다.
설정 예시 파일과 비밀 값
설정 파일은 .env.example 을 저장소에 두고 받는 사람이 .env 로 복사해서 쓰게 했다.
[ -f .env ] || cp .env.example .env
예시에는 실제 값 대신 형식과 설명을 넣어서 무엇을 채워야 하는지가 보이게 했다.
비밀 값은 .gitignore 에 넣어 저장소에 두지 않고 빈 채로 두되 어디서 받는지만 적었다.
# 결제 시험 키 (팀 저장소의 비밀 관리 항목에서 받는다)
PAY_TEST_KEY=
받는 경로를 안 적으면 결국 사람에게 물어보게 되고 그 사람이 자리에 없으면 또 멈춘다.
남이 해 보게 하기와 시간 재기
다 만들고 나서 내가 아니라 다른 사람이 처음부터 해 보게 했더니 내 장비에만 있던 것이 두 개 드러났다. 만든 사람이 해 보면 이미 있는 것을 안 보게 된다.
마지막으로 git clone 부터 돌리기까지 걸리는 시간을 재서 적어 뒀다. 나중에 다시 느려지면 그 숫자와 비교해서 알 수 있고 운영 환경과 어떤 점이 다른지도 함께 적어 뒀다.
정리
git clone부터 돌리기까지 오래 걸리면 그것부터 고친다- 무엇이 필요한지 아는 사람이 없으면 문서 수정으로는 안 된다
- 빈 장비에서 처음부터 해 보며 필요한 것을 적는다
- 필요한 것을
docker-compose.yml에 넣어 명령 하나로 뜨게 한다 - 초기 자료까지 넣는다
.env.example을 두고 비밀 값은.gitignore에 넣어 받는 경로만 적는다- 남이 해 보게 한다
- 걸리는 시간을 재서 적어 둔다