Skip to content

Day 04 개발일지 Web

Lee Dogyeong edited this page Nov 20, 2020 · 3 revisions

BE Sequelize Model 구현

  • 데이터 베이스 2개 연결
  • seeder 더미 데이터 구현
  • 데이터 베이스 2개의 연결을 위해서 config 파일 수정

개발용, 배포용 mysql User 생성 및 Database 권한부여

개발용 디비는 팀원들과 함께 사용할 외부로부터 접근가능한 User를 생성하여 ID, PW를 공유하기로 하였다. 배포용 디비는 외부로부터 접근이 불가능한 유저와 데이터베이스를 만들어서 초기 셋팅외에는 외부로 부터 접근할 수 없도록 만들었다.

  • 사용한 명령어
create user userid@localhost identified by '비밀번호';
create user userid@'%' identified by '비밀번호';
GRANT ALL privileges ON DB명.* TO 계정아이디@locahost IDENTIFIED BY '비밀번호';
GRANT ALL privileges ON DB명.* TO 계정아이디@'%' IDENTIFIED BY '비밀번호';

travis와의 싸움…

3주 프로젝트에서 불편했던 점을 보완해서 이번 프로젝트에서 적용해볼 생각을 하던중 Git에 코드가 Merge될 때 마다 매번 ssh로 직접 접근해서 코드를 pull했던 기억이 났다. 긴 시간이 걸리지는 않지만 횟수가 많아질 수록 반복되는 작업이 많이 진행되기 때문에 배포 자동화 작업이 꼭 필요할 것 같다는 생각이 들었다. 때문에 이번 프로젝트에서는 초기에 서버 배포 자동화를 진행하기로 결정 !!

Travis VS Jenkins

자동화를 진행하기 전 Travis냐 Jenkins냐를 고민했었다. 결과부터 말하면 Travis가 승리하였다. 그 이유는 Jenkins를 사용하려면 Jenkins를 호스팅, 설치 작업이 필요하기 때문에 ncloud의 경우 다시 서버를 빌드해야하기 때문이다😅

travis와의 싸움 2...

dev 브랜치 통합

문서를 보다보니 push된 브랜치 이름에 따라서 다른 동작을 지정할 수 있다는 걸 알게 되었다. 그래서 release-FE, release-BE에 같은 커밋을 push하고 travis에서 다른 동작을 하면 될 것 같았다.

CI !

일단 travis로 push된 소스를 가져와서 테스트, 빌드까지 하는 CI 작업을 시도했다. .travis.yml 파일에 설정을 해줬는데 브랜치 이름에 따라서 다른 폴더로 이동하는 설정을 추가했고, 이동한 후 npm run build를 하도록 해주었다. 테스트는 travis에서 기본적으로 npm test를 실행하기 때문에 package.json에 test 스크립트만 작성하면 될 것 같다.

이렇게 설정을 하고 push해보니 브랜치에 따라서 다르게 빌드,테스트하는 것을 확인할 수 있었다 🎉

before_script:
  - if [ "$TRAVIS_BRANCH" = "release-FE" ]; then cd ./WEB/FE; fi
  - if [ "$TRAVIS_BRANCH" = "release-BE" ]; then cd ./WEB/BE; fi
  - npm install
  - npm run build

CD ?

travis는 CI 도구라서 그런건지 배포 관련한 기능은 조금 불편하다는 생각이 들었다. 작업하기 전에 다른 사람들은 travis로 배포를 어떻게 하는지 찾아봤는데, 빌드한 소스를 서버로 ssh를 통해 복사/전달하는 방법을 많이 쓰고 있는 것 같았다. 그 중에 rsync로 파일을 전달하는 방법이 좋아보여서 이 방법으로 시도해보았다.

먼저 travis에서 ssh 연결하는 방법을 알아보니 travis에서 파일을 암호화/복호화 하는 기능을 제공하고 있었다. 그래서 ssh key를 암호화해서 소스와 같이 커밋하면 travis에서 key를 복호화해서 사용할 수 있었다.

이제 travis 가상환경에서 ssh key를 가지고 있기 때문에 ssh 연결을 할 수 있었다. 연결한 후 rsync로 webpack 빌드 결과물을 전송해봤는데 제대로 전송된 것을 확인할 수 있었다.

before_deploy:
  # openssl 라이브러리를 사용해서 암호화된 rsa key를 복호화합니다
  - openssl aes-256-cbc -K $encrypted_db2095f63ba3_key -iv $encrypted_db2095f63ba3_iv
    -in ../../deploy_rsa.enc -out ./deploy_rsa -d
  # ssh-agent를 실행합니다
  - eval "$(ssh-agent -s)"
  # rsa key의 권한을 조절합니다
  - chmod 600 ./deploy_rsa
  # ssh-agent에 rsa key를 등록합니다
  - ssh-add ./deploy_rsa
  # ssh 연결을 하고 pwd 명령을 실행해봅니다
  - ssh -i ./deploy_rsa [email protected] pwd

앞으로 해결해야 할 사항들 & 궁금한 점

  • .env 와 같이 GitHub에 없는 파일을 배포하는 방법
  • 지금은 iOS에 대한 설정이 없는데, 추가한다면 어떻게 해야할지
  • before_deploy 부분도 BE,FE 나눠야 하는데 if문으로 가능할지
  • CI는 배포랑 별개로 개발하면서 push할 때마다 진행되어야 하는 것 아닌가? 라는 생각이 듦
    • dev 브랜치도 CI(테스트,빌드)를 설정하면 좋을 것 같다?

개인 회고

강진구

  • 기초적인 셋팅에도 많은 시간이 걸린다는 것을 또 한번 깨달았다... Travis는 처음 접해봤지만 친해지기 힘든 친구였다😂 그래도 포기하지 않고 Travis와 꼭 친해져서 CI/CD를 성공해볼 것이다.

문석암

  • 모델 구현도 데이터 베이스를 2개로 나누려니 고려해야 하는 문제가 너무 많았습니다.
  • 아직 문제가 해결되지 않은 찝찝함...

이도경

  • travis를 계속 공부하고 있는데.. Travis CI라는 이름에 맞게 배포 기능은 약한 것 같음
  • 다음주부터는 기능개발해야 되니 이번주까지는 완성할 수 있도록 준비해야겠음
Clone this wiki locally