2023-06-14
JSON Placeholder 서버 설정.
프런트엔드 개발을 위해서 내 개인 서버가 있으면 좋겠다고 생각했다. 프런트에서 테스팅할 때 필요한 정보들을 더미데이터라도 뿌려주는 서버가 있으면 좋을 것 같다.
서버는 Express.js 로 만들어보자.
1) 서버 구상
이 서버는 각 프로젝트마다 원하는 임의의 JSON 을 송신해주는 서버가 될 것이다. 각 서버마다 주는 데이터가 다르므로, path로 구분하여 받는다.
서버의 구조는 다음과 같 다. github에서도 확인할 수 있다.
/
|
+ /api
| |
| +/what-should-i-buy
| |
| + /controllers
| | |
| | + index.js
| | + sample-data.js
| | + schema.yml
| |
| + /swagger
| | |
| | +swagger-options.js
| |
| + index.js
|
+ app.js
+ readme.md
+ package.json
각 프로젝트마다 /api
폴더 아래에 폴더명으로 만들고 같은 구조로 만든다.
app.js
에서 모든 router 를 연결한다.api/*/index.js
에서 해당 프로젝트에 필요한 모든 router 를 연결한다. 본 프로젝트에서 필요한 API도 swagger로 연결해 보여준다.api/*/controllers/index.js
에서 해당 프로젝트에서 필요한 각 요청 처리문을 구현한다.api/*/controllers/sample-data.js
에서 임의로 필요한 더미 JSON을 JS Object로 정의해서 끌어와서 사용한다.api/*/controllers/schema.yml
에서 본 서버에서 필요한 임의의 데이터 모델을 적는다. Swagger에서 볼 수 있다.
2) 서버 구축 과정
서버를 만들어본 적이 없으니, 일단은 Netlify나 Vercel 로 호스팅을 해보려고 했다. 하지만, Serverless Function 형태로 Express 를 지원해서, 다루기가 너무 까다로웠다. 여러 시도를 해봤지만, CSS 파일이 Content-Type : text/html
로 날라오는 문제를 해결하지 못해서 결국 개인 cloud PaaS를 사용하기로 했다.
GCP를 사용하기로 했다. AWS는 뭔가 겁이난다! 요금도 더 나오게 생긴 것 같고..해서 GCP가 무료로 제공하는 한도에서 사용할 수 있지 않을까 싶어 GCP를 사용하기로 했다.
GCP에서 VM 인스턴스를 하나 생성하고, git clone 으로 코드를 업로드했다. Ubuntu 20.XX 버전 이하에선 Node가 v.18 이상을 지원하지 않는 문제 때문에 고생 좀 했다. 결국 일단은 Node v.17.XX 를 사용하기로 하고, 나중에 인스턴스를 더 높은 버전으로 정의해서 Version Bump를 하기로 했다.
지금 만든 VM 인스턴스에 외부 IP를 고정으로 할당 받고, 방화벽도 원하는 포트만 열어두었다. 서버 작동도 잘 됨을 확인했다!
TODO
- root path 에서 각 프로젝트 api로 가는 hyperlink page 보여주기.
- 서버 업로드용 git branch 파기.
- 내부 mysql 가동해보기.