Docker를 활용한 PostgreSQL 연동 및 로컬 개발 환경 설정

이직한 곳에서 Java Spring 프로젝트를 처음 경험하면서 새로운 개발 환경에 필요한 것들을 나와 회사에 추가하면서 같이 성장을 하고자 글을 시작합니다.

이미 다양한 부분을 적용을 했지만 이번에는 로컬 환경에서 개발할 때, 로컬 PostgreSQL 데이터베이스를 Docker를 통해 설정하고, 이를 프로젝트와 연동하는 방법을 다룹니다.

Docker를 활용하면 개발 환경을 손쉽게 재현할 수 있으며, 특히 팀 내 일관된 환경을 유지할 수 있을거라고 기대합니다. 

 

 

당면한 문제: 소스 코드는 각자 관리하는데 Database는 1대로 모두가 개발 하고있다. 심지어 해당 DB를 QA, 시연용에서도 같이 쓰고 있음.

 

해결: 각자 local db를 구성하자. OS환경이 나와 다른 이를 위해 Docker를 염두하고 공유하도록 하자.

 

 

1. Docker의 원리와 사용 이유

Docker의 원리

Docker는 애플리케이션을 컨테이너라는 독립적인 환경에서 실행할 수 있도록 해주는 플랫폼입니다. 각 컨테이너는 필요한 라이브러리, 의존성, 코드 등을 포함한 패키지로 애플리케이션을 묶어 어디서나 동일한 환경에서 실행할 수 있도록 해줍니다.

출처: https://docs.docker.com/guides/docker-overview/

 

Docker의 사용 이유

  • 일관된 개발 환경: 모든 개발자가 동일한 환경에서 작업할 수 있어, "내 로컬에서는 잘 되는데..."라는 문제가 사라집니다.
  • 빠른 설정 및 배포: Docker 이미지를 사용해 복잡한 설정 없이 빠르게 환경을 설정하고 배포할 수 있습니다.
  • 이식성: Docker 컨테이너는 어디서나 동일하게 동작하므로, 개발 환경, 스테이징, 프로덕션에서 일관성을 유지할 수 있습니다.

 

2. Docker 및 PostgreSQL 설치

로컬 개발 환경에서 PostgreSQL을 사용하기 위해 Docker를 활용하여 PostgreSQL 컨테이너를 설정합니다.

Docker 설치

PostgreSQL 컨테이너 실행

  • 터미널을 열고, 다음 명령어를 실행하여 PostgreSQL 16 버전을 설치하고 실행합니다.
docker pull postgres:16
docker run --name local-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres:16

 

 

PostgreSQL 컨테이너 확인

  • 다음 명령어를 사용하여 PostgreSQL 컨테이너가 실행 중인지 확인합니다.
docker ps

 

3. Spring Boot 프로젝트와 PostgreSQL 연동

application-local.yml 설정

  • 프로젝트의 src/main/resources/application-local.yml 파일을 열고, PostgreSQL에 연결하도록 설정합니다.
  • 이때 docker에서 54321:5432 라면 아웃바운드로 54321을 설정한다.
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/your_local_database
    username: postgres
    password: mysecretpassword
    driver-class-name: org.postgresql.Driver

  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate:
        format_sql: true
 

연동 테스트

  • 설정이 완료되면, 프로젝트를 실행하여 로컬 PostgreSQL과의 연동을 확인합니다.
./gradlew bootRun -Dspring.profiles.active=local

 

 

5. Docker 유용한 명령어 10가지

Docker를 사용할 때 알아두면 좋은 명령어.

 

 

1. Docker 이미지 목록 보기

docker images

- 로컬에 저장된 Docker 이미지를 나열합니다.

 

2. 실행 중인 컨테이너 확인

docker ps

- 현재 실행 중인 컨테이너 목록을 확인할 수 있습니다.

 

3. 모든 컨테이너(중지된 포함) 확인

docker ps -a

- 로컬에 저장된 Docker 이미지를 나열합니다.

 

4. 컨테이너 로그 보기

docker logs [컨테이너 ID 또는 이름]

- 특정 컨테이너의 로그를 확인할 수 있습니다.

 

5. 컨테이너 시작

docker start [컨테이너 ID 또는 이름]
docker images

- 중지된 컨테이너를 다시 시작합니다.

 

6. 컨테이너 중지

docker stop [컨테이너 ID 또는 이름]

- 중지된 컨테이너를 다시 시작합니다.

 

7. 컨테이너 삭제

docker rm [컨테이너 ID 또는 이름]

- 중지된 컨테이너를 삭제합니다.

 

8. 이미지 삭제

docker rmi [이미지 ID 또는 이름]

- 로컬에 저장된 Docker 이미지를 삭제합니다.

 

9. 컨테이너 실행 중 셸 접속

docker exec -it [컨테이너 ID 또는 이름] /bin/bash

- 실행 중인 컨테이너의 셸에 접속할 수 있습니다.

 

10. Docker 이미지 빌드

docker build -t [이미지 이름] .

- Dockerfile을 사용하여 이미지를 빌드합니다.

 

 

결론

  • Docker를 통해 PostgreSQL을 로컬에 손쉽게 설치하고, 이를 Java Spring 프로젝트와 연동할 수 있었습니다. 이를 통해 일관된 개발 환경을 유지할 수 있게 되었습니다.