docker exec -it <데이터베이스 컨테이너> bash # 컨테이너 접속 후 psql -U <name> -d <database> # psql 접속 후 COPY (select * from <tablename>) To '/path/fiilename.csv' With CSV DELIMITER ',' HEADER;
스크립트 작성으로 만들기
1 2 3 4 5 6
docker exec <데이터베이스 컨테이너> \ su - postgres -c \ ' psql -U <username> -d "<database name>" \ -c "COPY (select * from <table name>) To '"'/path/fiilename.csv'"' With CSV DELIMITER '"','"' HEADER; " '
주의사항: 따옴표 내부에서 문자열 조건이나 경로 입력 시 ‘“‘문자열’”‘로 감싸서 작성해야 문자열로 인식한다.
csv 파일 import 하기
psql 접속하여 실행하는 법
1 2 3 4 5 6 7
docker exec -it <데이터베이스 컨테이너> bash # 컨테이너 접속 후 psql -U <name> -d <database> # psql 접속 후 COPY <tablename> FROM '/path/filename.csv' DELIMITER ',' CSV HEADER;
# Add a script to be executed every time the container starts. COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE3000
# Configure the main process to run when running the image CMD ["rails", "server", "-b", "0.0.0.0"]
빌드를 시작해도 아직 레일스 세팅이 안되어있다. docker 컨테이너를 이용하여 레일스 설치를 진행한다.
1
docker-compose run --no-deps web rails new . --api --force --database=postgresql
실행 시 뭔가 쭉쭉 설치되고 로컬 디렉토리와 컨테이너 볼륨을 지정해줬기 때문에 작업 디렉토리에 레일스 폴더, 파일들이 생성된다.
3. database.yml 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# ./config/database.yml
default:&default adapter:postgresql encoding:utf8 # For details on connection pooling, see Rails configuration guide # https://guides.rubyonrails.org/configuring.html#database-pooling pool:5 host:database# docker 환경 데이터베이스와 연결을 하기위해서는 컨테이너 이름으로 지정해주어야 한다. username:juren password:juren
도커를 통해 데이터베이스를 띄우고 express를 실행시켜 연결을 해보았다. MySQL과 연결하여 데이터베이스를 사용하기 위해서 Sequelize를 사용하여 연결까지 성공적으로 연결을 진행하였다.
기존에 시퀄라이즈를 사용할때는 모델을 모두 정의한 후 데이터베이스를 생성하고 모델의 수정사항이 있을때마다 **Sync({ force: false || true })**옵션을 통해 데이터베이스를 수정하며 진행했다. 물론 혼자 사용하는 데이터베이스고 서비스를 하지 않는 디비여서 이런방식으로 사용해도 무방하지만 실무에서 사용하는 데이터베이스는 많은 데이터가 있고 구조의 변경이 일어날때 마다 데이터를 백업한다던지 새로 덤프 한다는 것은 현실적으로 어려움이 있다.
이러한 문제점을 보완하기 위해 ORM에서는 마이그레이션 기능을 지원한다. 마이그레이션이란 어떤 운영환경에서 다른 환경으로 환경의 변화를 위해 옮겨지는 작업을 의미한다.
데이터베이스 마이그레이션이란.
데이터베이스 마이그레이션이란 하나의 데이터베이스를 다른 종류의 데이터베이스로 데이터를 옮기는 경우 혹은 두개의 데이터베이스를 하나의 시스템으로 합치거나 분할 혹은 데이터베이스 모델의 구조적 변경을 진행 하는 모든 과정을 의미한다. 데이터 베이스 마이그레이션이란?
그렇다면 시퀄라이즈에서 제공하는 Migration 기능에는 어떤 기능이 있을까? 시퀄라이즈에서는 몇가지 명령어를 통해 마이그레이션 기능을 사용할 수 있다고 한다.
도커를 활용하여 Express를 구동하기 위해 이전 포스팅을 통해 기본적인 앱을 띄워 보았다. 도커를 통해 express를 실행하였지만 코드의 수정이 있을 때 마다 빌드를 다시 해주어야 하는 문제점이 있었다. node.js에서는 nodemon이라는 모듈을 사용하여 개발환경에서 코드의 변경사항이 감지되었을때 자동으로 코드의 반영사항을 포함하기 위해 서버를 재시동 해주며 개발을 진행한다.
도커를 통해 띄운 express를 로컬에서 작업 후 변경사항을 반영해주기 위해서는 도커의 작업 디렉토리와 로컬 작업 디렉토리를 볼륨 연결 설정을 통해 연결해주고 nodemon으로 express를 구동해주면 된다.