| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 개발서버
- 동기화 시스템
- kotlin 자료구조
- apache log4j2
- java Stack
- MSA
- log4j 2.1.5
- intelliJ utf-8
- java Deque
- java 자료구조
- php ?>
- 원격 코드 실행 취약점
- Micro Service Architecture
- intelliJ 인코딩
- php 태그
- interface Set
- php 태그 닫지 않는 이유
- php 태그 닫기
- java 버전업
- queue linkedList
- interface List
- echo system
- kafka
- javaList
- interface Map
- 개발은 어려워
- confluent
- 교육은 더 어려움
- 만남은 쉽고
- ksqldb
- Today
- Total
legato
Kotlin 친해지기 1 - VM에 DB(postgreSQL) 설치 및 springboot(kotlin) 연동 본문
Kotlin 친해지기 1 - VM에 DB(postgreSQL) 설치 및 springboot(kotlin) 연동
legato 2022. 4. 26. 10:24Kotlin 친해지기 1 - VM에 DB(postgreSQL) 설치 및 springboot(kotlin) 연동
Kotlin 친해지기 2 - VM에 DB(postgreSQL) 설치 및 springboot(kotlin) 연동
지속적으로 개발하기 위한 환경구성을 위해 VM에 docker 를 통해 DB와 이것 저것?(redis, elasticsearch)을 세팅해보려 합니다. 그 중 db 설정과 해당 db에 springboot를 연동하는 부분입니다.
docker-DB(postgreSQL) 설치
(Windows 또는 Mac 에 Virtualbox를 통해 Linux(Ubuntu 22.04 LTS)를 설치했다고 가정한 상태에서 진행됩니다.)
(docker 는 20.10.12가 설치되어 있다고 가정한 상태에서 진행됩니다.)
1. docker 권한 설정

linux에서 root 권한이 아닌 상태로 docker를 실행하면 권한 문제가 발생할 수 있다.
이런 경우 docker group에 해당 유저를 추가해주어야 한다.
docker 그룹에 해당 유저를 추가
sudo groupadd docker
로그아웃 후 다시 로그인하거나, 아래 명령어를 통해 적용
sudo usermod -aG docker $USER
newgrp docker
2. docker-postgreSQL 설치
기존 docker ps 에서 권한 없어서 확인 불가했으나, 그룹 추가 후 확인 가능.

postgreSQL docker official image(https://hub.docker.com/_/postgres)
postgreSEQ official image를 사용한다. (해당 페이지의 'How to use this image', 'start a postgres instance' 를 참고)
기본 명령어
docker run [OPTIONS] IMAGE[:TAG|@DIGEST][COMMAND] [ARG...]
옵션 - 설명
-d : detached mode 흔히 말하는 백그라운드 모드
-p : 호스트와 컨테이너의 포트를 연결 (포워딩)
-v : 호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e : 컨테이너 내에서 사용할 환경변수 설정
–name : 컨테이너 이름 설정
–rm : 프로세스 종료시 컨테이너 자동 제거
-it : -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
–link : 컨테이너 연결 [컨테이너명:별칭]
$ docker run -d \
--name backoffice \
-e POSTGRES_PASSWORD=qwer1234 \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v /custom/mount:/var/lib/postgresql/data \
postgres
| 옵션 | 설명 |
| –name postgres-container | 컨테이너 이름 지정 |
| –restart unless-stopped | 따로 stop 명령을 보내지 않으면 컨테이너 재시작의 경우에도 자동 실행됨. |
| -p 5432:5432 | postgreSQL이 사용할 포트 번호 기재 |
| -e POSTGRES_PASSWORD=qwer1234 | postgreSQL DB에 대한 비밀번호 설정 |
| -e PGDATA=/var/lib/postgresql/data/pgdata | 기본 데이터 경로(디렉토리 용량 문제가 우려되는 경우 변경) |
| -v 볼륨 정보 | 컨테이너가 사용할 볼륨 정보 |
| postgres:14.2 | 실행할 postgreSQL 컨테이너 버전.(지정하지 않는 경우 latest) |
3. 컨테이너 볼륨을 설정하는 이유
컨테이너가 run 명령에 의해 시작될때는 read-only 이미지로 시작되어, 컨테이너의 filesystem은 read-only layer 위에 read-write layer로 만들어진 virtual filesystem이다.
실제 컨테이너를 시작한 후 만들어진 파일은 persistent filesystem에 저장된 것 처럼 느껴지지만, 실제로는 disk에 쓰여지는 것이 아니라 in-memory file system에 쓰이는 것이므로, 컨테이너가 종료되면 사라진다.
따라서, 동일한 이미지로부터 컨테이너를 다시 만들어도 저장한 데이터는 사라지게 된다.
동일한 이미지로부터 컨테이너를 다시 만들면, 저장한 데이터는 사라지게 된다.

위에서 설치한 postgreSQL에 저장하여도 컨테이너가 종료되면 사라진다.
이런 문제를 해결하기 위해 컨테이너 볼륨을 제공한다.
4. postgreSQL 컨테이너 실행
위 2번의 "docker run..." 명령어를 통해 컨테이너를 띄운다.(image 가 없는 경우, 다운받고 실행된다.

아래 명령어를 통해 로그를 확인할 수 있다.(backoffice 는 실행시 지정한 --name)
docker logs backoffice
5. 실제 마운트한 데이터 확인

호스트OS(VM) 에 위와같이 마운트되어 있는 것을 확인할 수 있다.
6. postgreSQL 컨테이너 bash 접속

docker exec -it backoffice bash
docker run .... 명령어로 실행시 postgreSQL 컨테이너가 구동되고, 기본 database 가 postgres 이름으로 존재한다.
배쉬 접속 후 postgreSQL에 접속한다
psql -U postgres
7. pgadmin 사용

https://www.pgadmin.org/download/
windows용으로 설치
windows 에서 vm의 docker container 에 접속하려면,
당연히 컨테이너는 리눅스 VM의 브릿지 IP를 사용하므로, 호스트에선 해당 IP로는 접근이 불가하다.
8. 포트 포워드 설정
호스트 -> 리눅스 vm 접속시 10.0.2.15 IP를 사용한다는 것을 알 수 있다.
사용자 -> VM -> container(backoffice-postgreSQL)
호스트 -> 192.168.56.101:X --포트포워딩--> ?.?.?.?:X
포트 포워딩 하기 (기존 명령어에 "-p 5432:5432" 가 추가됨)
$ docker run -d \
--name backoffice \
-e POSTGRES_PASSWORD=qwer1234 \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v /custom/mount:/var/lib/postgresql/data \
-p 5432:5432 \
postgres
vm으로 접속시 위와같이 포트 포워딩이 필요하다. (vm 환경이 아니라면 설정할 필요 없다.)
docker ps 명령어로 container ID를 알아와서 docker rm 명령어로 해당 컨테이너를 제거하고,
위 명령어로 포트포워드 된 container 를 다시 띄운다.
9. postgre sql 설정
접속시 계정정보가 필요하기때문에 컨테이너->postgreSQL 에 접속해서 계정을 생성한다.
호스트OS 에서 컨테이너 접속
$ docker exec -it backoffice bash
컨테이너에서 postgreSQL 접속
$ psql -U postgres
postgreSQL 에서 계정정보 추가(실제 운영시에는 당연히 일반 사용자를 만들어서 사용해야 한다.)
CREATE USER w PASSWORD 'qwer1234' SUPERUSER;
10. pgadmin에 종합한 정보들을 세팅

11. pgadmin 접속화면 확인 가능

'programming > Kotlin' 카테고리의 다른 글
| Kotlin 친해지기 2 - VM에 DB(postgreSQL) 설치 및 springboot(kotlin) 연동 (0) | 2022.04.26 |
|---|