[PostgreSQL] AWS lightsail 에서 네이버 클라우드 플랫폼(NCP)로 이전하기 (feat. FastAPI)

hodu·2023년 1월 8일
0

what-cat-eat

목록 보기
2/2
post-thumbnail
post-custom-banner

내 주말을 날려버린 AWS -> NCP 서버 이전기를 작성해보려고 한다..

최근에 NCP 크래딧을 40만원정도 받게 되어 서버 이전을 도전했는데..!
이사는 생각보다 너무 힘들었다.🥲

👩‍💻 사용 준비

https://guide.ncloud-docs.com/docs/clouddbforpostgresql-start

DB 서버를 만들기 위해서는 이 링크를 참고하면 되는데
간단히 정리해보자면 다음과 같다.

1. 애플리케이션 서버를 만든다.

2. 접속환경을 설정한다

공인 IP 설정, 외부 접근용 SSL VPN 설정

3. 애플리케이션 서버 접속 테스트

- putty를 이용하거나, ssh를 이용.
- ssh 설정 방법은 조만간 포스팅하겠다.

4. PostgreSQL 서버 생성하기

5. ACG 설정

여기가 정말.. 나를 이틀동안 헤매게한 주 원인..
공식문서를 잘 꼼꼼히 읽어 봐야한다.

4번을 보면 '애플리케이션 서버의 ACG 이름' 을 입력하라고 되어있음.
여기 잘 안읽으면 이미 전에 등록했는데 뭘 또 하라는거지..? 하고 헤매게 되니 꼭...꼼꼼히...

6. PostgreSQL 서버 접속 테스트

  • pgadmin4를 이용하여 접근 테스트를 한다.

🗄 DB 만들기

이것까지 다 문제없이 마쳤다면 이제 DB를 진짜로 만들어볼 차례이다.

https://wikidocs.net/177321
나는 점프 투 fastapi 문서를 참고했는데, 이건 AWS용이라 안되는 부분이 많을 것이다.
해당 주소에 들어가서 그대로 따라하게 되면
createdb fastapi_pybo --username=dbmasteruser -h <데이터베이스 주소> 여기서 막히게 될 텐데 크게 두가지 에러가 나온다.

  • username, password를 잘 입력해도 접근이 불가함 password authentication failed for user "postgres"
  • 접근이 아예 막혔다는 에러가 나옴 createdb: error: connection to server at "어쩌고" FATAL: no pg_hba.conf entry for host "어쩌고" user "postgres", database "template1", SSL off

그래서 NCP 콘솔을 이용해서 DB를 먼저 만드는 꼼수(?)를 이용할 것이다.

1. NCP 콘솔을 이용해서 DB 생성하기

DB 서버 콘솔에서 'DB Service 상세보기'를 클릭하자.

여기서 DB를 만들어준다.

  • Database Name : 설정할 이름
  • Owner : DB의 관리자를 설정해줌

만약 Owner가 없으면 현재 보이는 화면에서 DB User탭으로 넘어가자.

여기서 DB User 를 추가하여 만들면 된다.

  • USER_ID : 사용할 유저 아이디
  • 접근 제어 : DB에 접근을 허용할 CIDR(IP 주소)
  • Replication Role : 복제 가능하게 할 것인지에 대한 여부
  • 암호 : 유저에 대한 비밀번호

다시 돌아와서 Database 관리 탭에서 DB를 만들어주었으면 NCP 콘솔은 끝이다.

다시 우리 서비스의 코드로 돌아가자구요

2. database.py 수정

database.py로 들어가서 config를 아래와 같이 변경함.

# database.py
from starlette.config import Config

config = Config('.env')
SQLALCHEMY_DATABASE_URL = config('SQLALCHEMY_DATABASE_URL')

engine = create_engine(SQLALCHEMY_DATABASE_URL)

3. .env 파일 생성하기

SQLALCHEMY_DATABASE_URL="postgresql://아이디:비밀번호@엔드포인트/DB이름"

아까 NCP에서 만들어주었던 정보들을 입력한다.

  • 아이디 : USER_ID
  • 비밀번호 : 암호
  • 엔드포인트 : public 도메인
  • DB이름 : DB Service 상세보기-Database관리에서 만든 DB 이름

4. alembic 파일 다시 만들기

그리고 기존 db와 alembic으로 만들었던 파일들을 지우고 새로 만들어줌.

$ alembic init alembic

5. env.py 파일 수정하기

# alembic/env.py
from starlette.config import Config
from alembic import context

config = Config('.env')
SQLALCHEMY_DATABASE_URL = config('SQLALCHEMY_DATABASE_URL')

6. alembic.ini 파일 수정

# alembic.ini

# migrations에서 alembic으로 변경되었으니 여기도 수정
script_location = alembic

# sqlalchemy부분은 아예 주석처리
# sqlalchemy.url = driver://user:pass@localhost/dbname

7. 터미널에서 명령어 입력

$ alembic revision --autogenerate
$ alembic upgrade head

추가 팁

  • DBeaver와 같은 데이터베이스 관리 프로그램을 이용하면 alembic이 제대로 적용되었는지 확인할 수 있다.

🎉 끝! 🎉


회고

딱 한달전에 lightsail이랑 postgre연결시켰다고 기뻐했는데 기록을 제대로 안남겨서 고생했다. (내 프로젝트의 터미널인지 서버 ssh인지 몰라서 고생함, 똑같은 에러 났는데 해결 못함 ㅠ)
기록을 습관화하자... 사소한 것도....


NCP 사용후기

음.. 너무 비싸다. 내가 잘못 설정한걸수도 있는데 lightsail은 한달에 3만원정도 나오는데 이건 세팅하고 일주일 지났는데 벌써 9만원정도 씀..
학생이라면 부담이 될 것 같다.
그리고 공식문서가 친절하지 않고 사소한 오류가 많아서 아쉬웠다ㅠㅠ


참고 링크

(port에러 관련)

오류가 있으면 언제든지 댓글을 달아주세요 😊

profile
안녕 세계!
post-custom-banner

0개의 댓글