국비학원에서 최종 프로젝트를 진행하면서 총 3대의 PC(학원, 집, 카페)를 사용하다 보니, 개발환경을 구축하는데 어려움을 겪었었다. 이런 문제를 해결하기 위해 도커를 도입하였지만, 결국에는 리액트나 스프링을 개발하기 위해서는 내 PC에 jdk나 node를 설치해야 했었다.
개인적으로 내 PC에 이것저것 설치하는 거를 선호하지 않는 나였기에... '도커로 개발환경을 구축하면 되지 않을까?' 라는 생각이 들어 구글링을 해보다가 마이크로소프가 제안한 개발환경 컨테이너인 Dev Containers를 알게 되었다.
최종 프로젝트에서 Dev Containers를 적용했던 내용에 대해 기록해보고자 한다. 필자는 IntelliJ Ultimate에서 지원해주는 Dev Containers를 사용하였다. 시작하기에 앞서 Dev Containers를 사용하기 위해서는 반드시 도커를 먼저 설치해야 한다.
처음에는 Mount로 생성하고 깃허브 원격 저장소에 Dev Containers 구성 파일도 같이 올려놓으면 다른 PC에서는 Clone으로 생성하면 되기 때문에 개발환경을 빠르게 구축할 수 있다.
Dev Containers 구성 파일 속성에 image 또는 Dockerfile과 Docker Compose를 지원하기 때문에 필자는 Docker Compose를 사용했고 내용은 아래와 같다.
devcontainer.json
{
dockerComposeFile: [
"../docker-compose.yaml"
],
service: "application",
remoteUser: "root",
workspaceFolder: "/workspaces/${localWorkspaceFolderBasename}"
}
docker-compose.yaml
services:
web:
container_name: nginx
image: hsyoodev/gplayus-dev-nginx:1.0
ports:
- 80:80
volumes:
- nginx:/etc/nginx
depends_on:
- application
application:
container_name: spring-boot
image: hsyoodev/gplayus-dev-spring-boot:1.0
ports:
- 35729:35729
expose:
- 8080
depends_on:
- database
database:
container_name: mysql
image: hsyoodev/gplayus-dev-mysql:1.0
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: gplayus
volumes:
- mysql:/var/lib/mysql
expose:
- 3306
- 33060
volumes:
nginx:
mysql:
여기서 중요한 점은 반드시 Dev Containers로 사용할 서비스를 지정해야 하는데
docker-compose.yaml의 서비스 이름과 devcontainer.json의 서비스 이름이 같아야 한다.
아직은 베타라서 완벽하다고 할 순 없지만, 개발환경에 대한 스트레스를 받을 일이 없어서 최종 프로젝트를 하면서 정말 편하게 개발했다. 앞으로 개인 프로젝트 시에는 계속 사용할 것 같다. 내 PC에 도커, IDE, Git만 설치하면 되니 무척 깔끔하다!!!
다만 단점이라면 인터넷이 느린 환경에서는 사용하기가 많이 불편했다. 그리고 도커도 어느 정도 알고 있어야 하기에 러닝 커브가 상당히 높은 부분도 있다.