Prisma를 배울때는 Prisma 공식 홈에서 제공하는 Prisma Cloud를 사용하는것이 간단하고 편리하지만 실제로 개발을 할 때에는 로컬 혹은 자신의 서버에 Prisma 서버를 띄우고 사용해야 합니다. Prisma 공식 문서에서 위의 방법을 Docker를 통하여 하도록 설명하고 있는데요 그 방법을 알아보겠습니다.
우선 몇가지 가정을 하고 시작하겠습니다.
- Prisma에 연결할 DB또한 Docker Container로 띄운다고 가정하겠습니다.
- DB는 가장 많이 사용하는 MySQL을 사용하도록 하겠습니다.
- Docker와 Docker-compose의 설치가 완료된 상황으로 가정하겠습니다.
먼저 프로젝트의 디렉토리(폴더구조)도 설정에서 꽤 중요한 역할을 합니다. 매끄럽게 흘러갈 수 있도록 이부분도 정해봅시다. 물론 이 글에서는 복잡할 필요가 없습니다.
Project
|- MySQL/
| |-data/
|
|- .env
|- .gitignore
|- docker-compose.yml
위 부분은 본인이 원하시는 대로 설정하셔도 무방합니다
위 디렉토리에 대한 설명은 다음과 같습니다.
- Project 폴더는 Project의 모든 파일과 폴더를 포함하는 폴더입니다. 우리의 Local Prisma를 띄우는 프로젝트의 모든 파일과 폴더를 포함합니다.
- Project 폴더 밑에 MySQL폴더 또 그 폴더 안에 data 폴더가 존재합니다. MySQL 폴더는 MySQL docker conatiner가 띄워질때 필요한 것들(설정 등)을 이 폴더 안에 있는 것은 모두 MySQL 관련 파일들 입니다 하고 쉽게 알 수 있도록 하는 것입니다.
- 이 중에서 data폴더가 꽤 중요한데 MySQL container안의 DB가 저장한 데이터들이 container를 없앴을 때에도 없어지지 않도록 host(즉 docker conatiner를 띄워낸 컴퓨터)에 다가 저장할때 사용하는 폴더입니다.
- 쉽게 말해 MySQL Conatiner의 DB가 데이터를 저장하면 그 데이터들은 data폴더에 저장됩니다.
- .env 파일은 서버가 띄워질때 사용하는 환경설정등을 저장해 놓는 곳입니다. 환경의 영어단어 environment을 줄여 env라고 하는 것 입니다. 이 파일은 주로 민감한 정보들이 저장되므로 git으로 추적하여 remote repository에 올라가지 않도록 하는 것이 중요합니다.
- 마지막으로 docker-compose.yml파일이 존재합니다. 이 파일에 우리가 어떤 서비스를 어떤 Conatiner로 어떻게 띄울 것인지를 정의하는 파일입니다. 이 파일에 대해서는 밑에서 더 자세하게 봅시다.
Prisma와 MySQL Container에 대한 설정인 docker-compose.yml
version: '3'
services:
prisma:
image: prismagraphql/prisma:1.34
container_name: prisma
restart: always
ports:
- '4466:4466'
environment:
PRISMA_CONFIG: |
managementApiSecret: my-server-secret-123
port: 4466
databases:
default:
connector: mysql
host: prisma-db
port: 3306
user: root
password: prisma
prisma-db:
image: mysql:5.7
container_name: prisma-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: prisma
volumes:
- mysql/data:/var/lib/mysql
위는 공식 문서에서 가져온 예를 아주 조금 수정한 것 입니다. 먼저 services: 밑에 크게 prisma:와 prisma-db:라고 적힌 것을 볼 수 있습니다. 이렇게 크게 두 개로 나누어 살펴봅시다.
prisma
- prisma: - 이렇게 정의한 것은 services라는 것에서 유추해 볼 수 있듯이 prisma라는 서비스를 정의하겠다라는 의미입니다. 매우 복잡한 설명은 제외하고 docker conatiner들 끼리 서로에게 액세스할 때 서비스명을 사용한다는 것을 알고 계십시기 바랍니다. 조금 뒤에 이 사용 예시가 나오게 됩니다.
- image – docker 이미지 중 prismagraphql/prisma:1.34이미지를 docker hub에서 pull해온다음 이 컨테이너를 만들겠다 라는 의미입니다.
- conatiner_name – 말 그대로 container 명입니다. 해당 컨테이너에대한 직접적인 제어를 할때 정의해 두는 것이 편리합니다.
- restart – optional한 설정인데 always로 설정하면 해당 container가 어떤 이유로 멈추게 되면 다시 실행하겠다라는 의미입니다.
- ports – prisma 컨테이너와 해당 컨테이너를 띄우는 호스트(컴퓨터 혹은 서버)의 포트를 매핑하는 것입니다. 왼쪽이 호스트의 port 번호이고 오른쪽이 컨테이너의 port번호 입니다.
- environment – 환경변수를 설정할 수 있는 부부인데 해당 도커 이미지를 만든 사람이 이미지 내부의 환경이 enviroment에서 설정하는 환경을 자동으로 가져와 사용하도록 키워드를 맞추어놓은 경우가 많습니다. 이런 환경설정 키워드들은 주로 공식 이미지를 설명해주는 docker hub에서 찾아 볼 수 있습니다.
- managementApiSecret – 공식 홈페이지에 따르면 prisma를 관리하는 Management API를 보호하기 위해 사용하는 암호라고 합니다. 밖으로 노출 시키지 않아야 하겠습니다. 이런 부분을 쉽게 보호하는 방법은 추후에 알아봅시다.
- port – prisma 컨테이너 내부의 실제 prisma 서버 프로그램이 통신을 할 port입니다. 만약 이것을 기본 포트인 4466이 아닌 것으로 바꾸게 되면 상위의 ports의 포트매핑에서 우측의 포트를 함께 바꾸어주어야 합니다.
- databases – prisma에 연결할 데이터베이스를 설정하는 곳 입니다.
- default – 기본으로 사용할 데이터베이스를 설정하는 곳 입니다.
- connector – 데이터베이스는 mysql을 사용할 것이기 때문에 prisma와 데이터베이스를 연결하는 connector를 mysql을 사용합니다.
- host – 데이터베이스가 띄어져있는 IP 혹은 URL을 제공해야 합니다. 하지만 위의 예를 보시면 prisma-db라고 적은 것을 볼 수 있습니다. 우리가 prisma 컨테이너의 서비스명을 prisma이라고 지은것 처럼 데이터베이스의 서비스명은 prisma-db입니다. 이 서비스명이 docker compose에서 생성하는 도커 컨테이너끼리의 네트워크안에서 사용되는 host명, 즉 URL으로 사용됩니다. 어렵다면 데이터베이스의 서비스명을 해당 설정에 적으면 된다는 것을 기억하시면 됩니다.
- port – 데이터베이스가 사용중인 포트번호를 적습니다.
- user – prisma가 데이터베이스에 액세스할 때 사용할 데이터베이스 사용자명 입니다.
- password – 위의 사용자명의 패스워드입니다.
PART2에서 prisma-db 컨테이너 설정에 대한 설명과 .env파일을 함께 사용하여 더 간단하고 안전한 설정방법을 알아봅시다.
'개발과 기술' 카테고리의 다른 글
[Python] Python 일정 시간 후 timeout 에러 내는 방법 (5) | 2020.04.14 |
---|---|
[Prisma] Prisma(Graphql) 로컬서버 설정 방법(+ docker 설정 방법) - PART 2/2 (0) | 2020.03.31 |
[Ubuntu] umask 명령어 (0) | 2018.11.28 |
[Ubuntu] 현재 user가 어떤 group에 속하는지 확인하는 방법 (0) | 2018.09.25 |
[Python, Django] Django Template에서 숫자에 콤마 넣는 방법 (0) | 2018.09.24 |
댓글