나의 발자취

[BE] 당근마켓 아니고 양파마켓 만들기 (Azure, Postman, JS, PostgreSQL, DBeaver) 본문

Backend

[BE] 당근마켓 아니고 양파마켓 만들기 (Azure, Postman, JS, PostgreSQL, DBeaver)

달모드 2024. 11. 6. 14:03

많은 내용을 담고있기 때문에.. 아무것도 없이 만드는건 아니고 기본적인 데이터와 계정을 갖고 있다는 전제 하에 작성하는 포스팅이다.

 

 

우선 애져에 데이터베이스 연결을 해줄것이다.

리소스 그룹 만들기

1. 먼저, Azure Portal에서 새 리소스 그룹을 만든다. 

 

 

PostgreSQL 서버 생성

2. postgre 검색을 해서, '유연한 서버' 선택

 

3. Azure Database for PostgreSQL - 유연한 서버 만들기 클릭

기본 설정

4. 아래와 같이 리소스 그룹명 선택, (고유한) 서버 이름, 지역 선택

 

가용성

5. 가용성 영역: 기본 설정 없음 선택

 

* 가용성 영역: 똑같은 기능을 하는 DB를 여러개 만든다는 뜻이다.

 

6. 고가용성: "사용 안함" 선택

 

7. 인증 방법 "PostgreSQL 인증만" 선택 후에 관리자 사용자 이름과 암호를 설정해준다.

다음: 네트워킹 > 선택

 

네트워킹

8. 네트워킹에서, 아래의 항목 선택

 

 

9. 그러면 최종으로 아래와 같이 보일 것이다.

 

배포 클릭.. 후에 시간이 좀 걸리니 기다린다.

 


install npm packages

배포를 기다리는 동안 필요한 패키지를 모두 설치해주기 위해 npm install 입력해준다.

 


스토리지 계정 만들기

스토리지 계정을 만들것이다. 검색창에 스토리지 검색

 

 

스토리지 계정 만들기를 선택한다.

 

아래와 같이 입력을 해준다.

중복 카테고리에는 LRS로 설정한다. (GRS로 하면 돈이 많이 나감..)

 

배포 진행~

 

배포 완료


Blob 익명 엑세스 사용

 

이제 생성된 리소스로 이동해서 개요 > Blob 익명 엑세스를 현재 "사용 안 함"으로 되어있는데, 

 

안에 들어가서 "사용"으로 바꾸어주고 저장을 누른다.

 


컨테이너 만들기

다음 데이터 스토리지 > 컨테이너에 가서, 새 컨테이너를 만들어준다.

이름은 yangpa로 해줌.

 

만든 모습

 


액세스 키 등록

보안 + 네트워킹 > 액세스 키로 간다.

 

 

 

가면 각각 연결 문자열이 있는데, 이를 복사해서 각각 내 로컬의 .env 에 있는 SA_KEY, SA_CONNECTION_STRING 에 붙여놓기한다.


다시 아까 생성한 postgre DB로 들어와서, 아래 "연결"을 선택한다.

 

 

DBeaver 연동

아래쪽 DBeaver 드롭다운 메뉴를 선택해서 열어본다.

 

 

굵은 글씨로 놓인 호스트와, 사용자 이름 값을 잘 복사해서 DBeaver로 간다.

 

 


DBeaver 열기

1. 새 DB 연결 아이콘을 눌러서 PostgreSQL을 선택한다.

 

 

2. Host에 아까 복사해둔 값 중 '호스트'의 값을 붙여넣어준다. 이제 귀찮아서 안가릴것임

 

Auth에는 처음에 Azure DB for PostgreSQL에서 설정했던 username과 비밀번호를 입력해준다.

그리고 피니쉬 눌러서 데이터베이스 연결

 

 

3. 정상적으로 연결된 데이터베이스에, 우클릭을 해서 Create new database 을 클릭한다.

]

 

새 데이터베이스를 생성해준다. 아래와 같이 설정

 

그러면 생성된 것이 확인될 것이다.

 

 

우클릭을 해서 Edit connection을 선택한다.

 

 

Database를 방금 생성한 yangpadb로 바꾼다.

 

그럼 이제 yangpadb만 보일것이다!

 

 

마지막으로 .env에 가서 DB 커넥션 관련한 모든 변수들을 잊지 않도록 다 저장해준다.

NODE_ENV = "development"
PORT = 3000

JWT_SECRET =  
DB_USERNAME = 
DB_PASSWORD = 
DB_DATABASE = 
DB_HOST = 
DB_DIALECT = postgres
SA_CONNECTION_STRING = 
SA_KEY =

 


app.js

가서  Line 1 주석 해제를 하고 코드를 실행해서 - 데이터베이스 모델을 생성해줄것이다

 

npx nodemon app 입력

npx를 쓰는 이유: 글로벌로 하면 버전이 문제가 생김. 설치하지 않고, 다운받아서 실행하면 끝.

지금 서버가 로컬에서 돌아가고 있는 것!

 

 

DBeaver에 가면, DB가 잘 생성된 것이 확인된다! sale, user DB 확인

 

 

다시 app.js가서 line1을 주석처리 해준다.

 


Postman

Postman으로 와서, 새 Collection을 생성해준다.

 

지금 서버가 로컬에서 돌아가고 있는데, 애져에 DB를 올렸으므로 connection을 바꿔줄 때의 환경을 설정해줄거다

Azure, Local 환경을 두개 만들어준다.

 

아래에 설정하고 저장.(<꼭! 클릭)

 

컬렉션에 가서 환경을 로컬로 설정.

 

그래야지만 변수가 뜬다.

 

 

Body로 보낼 수 있는 데이터 형식으로는

form-data가 있고, x-www-form-urlencoded(key-value만 넣을 때) 가 있다.

이 두 줄이, 우리가 보내는 body를 key-value로 바꿔주는 역할을 하는 줄이다.

 

(POST) Sign-up : 양파마켓 회원가입

새 request를 만들고 아래와 같이 설정 - 회원가입 테스트를 해본다.

 

(POST) Login : 양파마켓 로그인

로그인 테스트도 해본다.

앱에서는 이제 이 토큰을 User default 에다가 저장해놓고, 유저가 요청할때(로그인)마다 같이 보내는 이런 식으로 동작한다.

 

토큰 유효 기간을 설정을 하긴 하는데, 일단 지금은 테스트이므로

실질적인 기능을 하는 Sales 라는 폴더를 만들어서 Bearer Token 으로 저장해놓고 계속 로그인 세션이 유효한것처럼 사용해줄것이다.


sale DB 테이블의 구성 항목을 보고 수동으로 보내주어야하는 (유저가 등록해야하는) 데이터를 Body 객체로 보내줄것이다.

 

(POST) Add Sale : 양파마켓 상품 업로드 

수동으로 넣어주어야하는 필드를 form-data 형태로 넣어준다.

 

그러면 DBeaver에 방금 등록한 데이터가 잘 반영되었는지 확인해본다.

 

잘 반영된것이 확인된다!

 

 

애져에도 잘 반영되었는지 확인해보기 위해, 리소스 그룹> 스토리지 계정 > 좌측 메뉴 데이터 스토리지 > 컨테이너에 들어가 내가 방금 생성한 yangpa 컨테이너로 들어간다.

 

 

그러면 내가 업로드한 데이터가 확인될것이다.

해당 이미지의 웹페이지 저장 경로를 보면 <스토리지 계정>/<컨테이너>/<블록> 이렇게 구성되어있는 것이 확인된다.

 


(GET) Get Product Lists: 양파마켓 물건 목록 조회 

목록을 조회하는 요청은 그냥 GET

 

 

 

 

서버에 데이터를 보내고, 데이터를 가져오는건 다 완료했다.

 

이제 이것을 애져에 배포하는 방법을 알아볼 것이다.


앱 서비스 생성

Azure Portal로 가서, 앱 서비스를 생성한다.

백엔드가 node js라서 동적으로 바뀌므로 "웹 앱"을 생성한다.

 

아래와 같이 설정을 해주는데,

 

게시는 코드/컨테이너 두 가지 버전이 있다, 이번에는 일단 코드로 하고 다음에는 도커(컨테이너)로 할 수 있다.

(지난 포스팅 참고) 2024.11.01 - [Backend] - 도커 컴포즈, Azure에 도커 yml 업로드해서 앱 배포하기

 

 

아래로 내려가서,

런타임 스택은 Node로 해주고, LTS 위주로 써야한다. (long term support)

 

 

이렇게 설정을 해준다.

 

 

아래쪽에 새 앱서비스 플랜을 만들어주는데 이름은 그냥 App Service Plan의 줄임말인 asp로 설정했다. 다른것들과 구분하기 위해

 

만들면 계속 돈이 나가기 때문에... 가격 책정은 알아서 잘 선택해준다.

 

 

마지막으로 모니터링+보안 항목에서 Application Insights 사용 옵션을 "아니요"로 선택한 후 "만들기" 버튼을 누른다.

 

배포가 완료되면 아래와 같이 리소스들이 생길 것이다. 리소스로 이동을 선택한다.

 

 

 

 


 

VS Code Extension에 Azure가 있어야한다. 계정에 로그인이 되어있다면, 방금 배포한 앱서비스가 목록에 나타날 것이다. 

우클릭 후 Deploy to web app 를 선택한다. -> Deploy 겁먹지말고 ㄱ

 

배포가 완료되면 배포 성공이 되었다고 뜬다.

 

 


Azure Web App에 환경 변수 추가

웹앱 > 설정 > 환경 변수로 와서, 로컬 프로젝트의 .env에 있는 모든 변수들을 추가해줄것이다.

 

 

포트는 등록하지 않는다(80포트이기 때문)

아래와 같이 총 8개를 등록한다.

 

"적용"을 누르고 "확인"을 누른다.

 


Postman에서 Azure 환경으로 설정 적용 후 테스트

이제 Postman으로 왔으니, Azure Env. 환경을 설정해준다.

 

아까 웹엡에서의 기본 도메인을 복사해온다.

 

복사 후에 https:// 를 붙여준다. 그리고 저장!

 

 

 

그리고 이제 환경변수를 Azure로 바꿔서 요청을 테스트 해본다.

 

 


 

(POST) Add Sale : 양파마켓 상품 업로드 

정상적으로 등록이 잘 되는것이 확인된다.

 

디비버에서도

 

애져에서도

(GET) Get Product Lists: 양파마켓 물건 목록 조회 

정상 작동

 

(GET) Get Product by ID: 양파마켓 물건을 ID값으로 조회 

정상 작동

Comments