필자는 학원에서 백엔드 과정을 배울 때, VMware라는 VM프로그램을 사용해서 거기에 리눅스를 설치하여, 오라클 DBMS를 설치해서 사용했었다. 그런데, 같은 프로그램을 현재 사용하고 있는 컴퓨터에 설치하려고 하니, AMD프로세서를 쓰고 있는 컴퓨터에 설치가 되지 않는 문제가 발생하였다.
그래서 대안책들을 살펴보니, 무료로 더 가볍게 쓸 수 있는 대안들이 많이 있는 것을 알게 되었다.
DBMS도 엄청 많이 있지만, postgreSQL을 선택한 이유는 오픈 소스인데다가, 기능도 많이 있어서이다. 이 외에도 수많은 장점이 있어, 전세계적으로 가장 많이 사용하는 DBMS라고 한다.
이번 프로젝트는 실제로 운영할 사이트를 만들거라 AWS로 서버를 구축하려 한다.
postgreSQL은 윈도우 환경에서도 쉽게 설치할 수 있긴 하지만, AWS EC2는 리눅스 환경이기 때문에, 운영 환경이 달라서 다양한 문제가 발생할 수 있다고 한다. 예를 들어, 윈도우와 리눅스는 파일경로 (\ vs /), 대소문자 구분(윈도우는 미구분, 리눅스는 구분), 권한 설정 등이 다르다.
그래서 윈도우에서 잘 돌아가던 코드가 리눅스 서버에 올렸을 때 에러를 뿜어내는 가장 흔한 원인이다.
이전에 했던 것처럼 VM에 설치하는 방법이 있지만, 이는 무겁고 리소스도 많이 차지하고 설정도 번거롭다.
VM 말고도 다양한 대안이 나왔는데, 첫번째 방법은 WSL2(Windows Subsystem for Linux)이다. 이는 윈도우에서 리눅스 커널을 직접 실행하는 기술이다. 이렇게 사용하면 IntelliJ에서도 바로 접근이 가능하다. 가장 많이 쓰는 프로그램이 Ubuntu이다.
두번째 방법은 컨테이너이다. 이는 하나의 앱을 격리된 박스에 담아 실행하는 기술이다. 이렇게 격리하면 좋은 점이 윈도우 PC를 전혀 건드리지 않는다는 점이다. 만약 DB를 지우고 싶으면 컨테이너만 삭제하면 끝이다. 또한 같은 특정 버전의 이미지를 사용하면, 내 PC, 동료의 PC, AWS EC2 서버 어디서든 100% 동일한 환경으로 DB를 띄울 수 있어 뜻하지 않은 에러를 맞딱드리는 일이 없어진다.
그래서 필자는 결국에는 AWS EC2를 통해 postgreSQL을 구동할 거라, 컨테이너를 사용하기로 했다.
컨테이너 프로그램 중 Docker를 선택했는데, 이도 postgreSQL을 선택한 것과 마찬가지로 가장 많이 사용하는 프로그램이라고 한다.
Docker를 설치하고 실행해보면

이런 첫 화면이 반겨준다. 필자도 그랬듯이, 이것만 보고 사용법을 알긴 힘들었다.
우선 맨 아래에 Terminal을 누르면 터미널이 나오는데, 윈도우 터미널이 나와서 당황했지만, Docker를 설치하면 자동으로 WSL2라는 경량화된 리눅스가 자동으로 설치되고 연동되어 있는 상태라서 그냥 바로 사용하면 된다고 한다.
그러니 터미널이나 윈도우 PowerShell에서
docker pull postgres:15
를 입력하면 postgreSQL 15버전이 설치가 된다.
docker라는 명령어로 docker 엔진이 돌아간다고 한다.
postgres 만 입력하면 postgres:latest와 같이 최신 버전을 받지만, 내가 사용할 Java 17, Spring 3.1.0버전과 호환되는 버전인 15버전으로 지정하여 설치를 하였다.
다음으로
docker run -d --name dreamshow-db -e POSTGRES_PASSWORD=0000 -e POSTGRES_USER=dreamshow_user -e POSTGRES_DB=dreamshow_db -p 5432:5432 postgres:15
명령어를 입력한다.
명령어가 길어서 복잡해보이지만, 각 옵션 의미는 다음과 같다.
이제
docker ps
를 입력해서 아까 설정했던 이름의 컨테이너가 Up상태로 보이면 성공이다.

이러면 이제 PostgreSQL 데이터베이스는 윈도우 배경(WSL2)에서 실행중이다.
DBeaver, pgAdmin, DataGrip 등 윈도우에 설치된 DB 접속 클라이언트를 켜고, 다음과 같이 접속 정보를 입력하면 바로 연결된다.
이렇게 격리된 환경에 DB를 구축할 수 있다.