회원가입

백엔드 서버 새로 구축 작업

NULL 2021-11-26

예전에 "달고나" 라고 하는 큰 동아리?? 말로는 이제 더이상 동아리가 아니고 연합? 이다??? 라고 하는 조직이있다.

 

이곳에서 Django 이용하여 백엔드 서버를 구축한 적이있다.

그런데, 2021년 11월 정도에 이제 만든 프로젝트를 사용하지 않고 "그누보드" 를 이용하여 한다는 말과 함께 AWS 에 올려놓은 EC2, S3, RDS 전부 사라지게 생겨서 어떻게 할까 고민을 했다.

 

그래도 나름 열심히 노력해서 만든 프로젝트여서 그래도 '남길 수 있으면 남기자!' 라는 마인드로 Oracle Cloud 를 이용하여 공짜 인스턴스를 이용해 백엔드 서버와 프론트엔드 서버를 구축하기로 마음 먹었다.

 

이 작업을 하기 위해 무엇을 해야하는지 순서대로 생각해보았다.

  1. Django 백엔드 서버 만들기
  2. 데이터베이스 복사하기
  3. S3 이미지, 파일 로컬서버로 옮기기
  4. 데이터베이스에 저장되어있는 이미지 url 주소 S3 가리키고 있는 것 로컬로 Update 시키기
  5. React Build 후, 프론트엔드 서버 만들기 (새로운 백엔드 바라보기)

정도가 있었다.

 

1. Django 백엔드 서버 만들기


이 작업을 하기 위해 우선 Oracle Cloud 를 가입했다.

Oracle Cloud 같은 경우, 총 2개의 인스턴스를 무료로 계속 사용할 수 있었다.

그렇기 때문에 인스턴스 1개는 백엔드 서버용, 다른 1개는 프론트엔드 서버용으로 이용하려고 인스턴스를 생성했다.

 

인스턴스 생성 후, VPC 에 Subnet 규칙 중에 포트 80(HTTP), 443(HTTPS), 3306(MySQL) 가 제한되어 있어 규칙을 추가했다.

그런데, ssh 로 접속하려고 하는데 안되던 것이다...

분명 22 포트는 열려져있는데.. '왜 이러지??' 생각을 하면서 다시 인스턴스를 껏다 켰다...

이 과정에 인스턴스 재부팅 시간이 너무 오래 걸려 '일단 다른 인스턴스에 접속해보자...' 라는 생각으로 다른 인스턴스에 접속했을 때는 잘 되었다...

 

ssh 원격 접속 후, 내 github 주소에 Private 로 올려놓았던 프로젝트를 clone 받았다.

그리고, WAS Django 배포를 위한 Nginx, uWSGI, MySQL 등을 설치하고, 구성을 완료했다.

HTTPS 도 적용했다.

 

2. 데이터베이스 복사하기


기존 데이터베이스는 AWS 서비스 중, RDS로 이용하고 있었다.

어떻게 데이터를 가져올까... 라는 생각에 MySQL WorkBench 를 이용해 데이터베이스 스키마랑 데이터 전부 Dump 떠서 가져오는 결정을 했다.

 

그래서 RDS 주소로 WorkBench 를 연결 후, 데이터를 Export 하려고 했는데... 뜬금 없이...

mysqldump.exe: unknown variable 'column-statistics=0'

에러가 나오는 것이다...

 

문제를 찾아보니, 현재 내가 사용하고 있는 WorkBenchDump 역할을 수행해주는 mysqldump Tool 버전이 맞지 않아 문제가 되는 것이었다.

 

아래 사진과 같이 해결 방법을 찾아 아래 사진에 보이는 링크에 들어가 다운로드 받았다.

그리고 Edit -> Preference -> Administration Path to mysqldump Tool 경로를 다운로드 받은 압축파일을 풀고, bin 폴더에 있는 mysqldump.exe 을 새로 연결시켜주었다.

 

이제 잘 데이터를 Dump 할 수 있었다.

 

이제는 WorkBench 를 이용해 새로운 백엔드 서버에 설치한 MySQL 서버에 연결하여 이 Dump 뜬 데이터를 집어넣어야 했다.

이 또한 WorkBench 기능 Import 로 쉽게 해결될 줄 알았지만... 어림도 없이 에러가 발생했다.

Access denied; you need (at least one of) the SUPER privilege(s) for this operation

이런 에러가 나왔다....

 

이 해결 방안은 dump 뜬 파일 안에 몇 줄만 주석처리 했으면 됐다.

위에 사진과 같이 저 부분만 주석처리하면 문제가 해결 되었다.

 

3. S3 이미지, 파일 로컬서버로 옮기기


기존 백엔드 서버는 media 파일을 전부 S3 에 업로드 하여 관리했다.

그렇지만 S3 조차 돈을 낭비하기 싫기 때문에 Oracle Cloud 에서 생성한 인스턴스로 제어하고 싶었다.

그래서 모든 S3 이미지를 로컬서버로 옮기는 작업을 해야 했다.

 

S3 에 들어가보니 폴더로 파일들을 다운로드할 수 없었다.

그래서 찾아보니 AWS CLI 를 이용하여 폴더 기준으로 다운로드 하는 방법을 찾았다.

sudo apt install awscli

 

우선 AWS CLI 를 백엔드 서버에 설치하고, aws configure 명령어로 기본 AWS 설정을 잡아줬다.

aws configure

 

설정을 마치고 aws s3 명령어로 모든 파일을 원하는 위치에 다운로드 했다.

aws s3 cp s3://{버켓이름}/media ./media --recursive

 

그러고 Django 설정에 S3 설정을 기존 로컬 static media 설정으로 바꾸었다.

 

4. 데이터베이스에 저장되어있는 이미지 url 주소 S3 가리키고 있는 것 로컬로 Update 시키기


게시글에 이미지를 삽입할 수 있었는데, 이때 url 경로를 이용해서 이미지를 띄우고 있었다.

하지만 기존 이미지는 S3 url 을 가지고 있어서 변경이 필요했다.

 

그래서 데이터베이스에 전에 사용하고 있는 S3 url 을 전부 현재 로컬서버 url 주소로 변환이 필요했다.

SELECT REPLACE(body, '이전주소', '현재주소') AS body
FROM dalgona.board_board_post 
WHERE body LIKE '%이전주소%';

UPDATE 데이터베이스.board_board_post  SET body = REPLACE(body, '이전주소', 'https://dalgonabackend.shop') WHERE body LIKE '%이전주소%';

위에는 잘 됐는지 테스트 SQL 문이고, 아래가 UPDATE 하는 문이다.

 

당연히 될 줄 알았지만!! 어림도 없이 WorkBench 에서 "너 정말로 UPDATE 다 칠꺼야?" 라는 에러와 함께 나를 힘들게 했다....

이 작업을 수행하기 위해서 Edit 에 있는 Preference 를 건들어야 했다.

위에 사진에 보이는 SQL Editor 부분을 클릭하고, Safe Updates (rejects UPDATEs and DELETEs with no restrictions) 체크를 해제한 후, 다시 데이터베이스를 들어와야 했다.

 

그러고 다시 SQL 문을 실행하면 잘 작동했다.

 

5. React Build 후, 프론트엔드 서버 만들기 (새로운 백엔드 바라보기)


이 부분은 프론트엔더 개발자가 따로 있는데, 그분에게 요청을 했다!!

나중에 프론트엔드 서버도 구축은 내가 하겠지만 일단 React 코드를 받아서 Build 작업이 남았기 때문에 기다리고 있다.

1 0
#DB
뼈와 살
프로젝트를 혹은 직장에서 일하면서 겪게 되는 Blocker, 문제 등 나에게 뼈와 살이 되어 성장시켜주게 한 문제점을 어떻게 해결했는지를 기록하는 게시판이다.
Yesterday: 1
Today: 242