상세 컨텐츠

본문 제목

[개발일지] nodejs로 API 서버 만들기 PART. 1

개발 일지

by 유연한 개발자 2022. 10. 14. 17:26

본문

 스마트팜 프로젝트가 있었습니다. 스마트팜 플랫폼이라고 하여 구현된 웹 애플리케이션입니다.  이 스마트팜 플랫폼과 관련하여 업무 하나가 저에게 떨어졌습니다. 

 

왜 API 서버를 만들어야 하는가

기존에는 IoT 관련 데이터를 실제로 수집하지 못하는 상황이라, DB에 더미 데이터를 생성하고 있었습니다. 회의를 진행하는 와중, 기존의 더미 생성 방법을 버리고 API 서버를 간단하게 구축하여 인터페이스를 하자는 의견이 나왔습니다. 향후 실제 IoT 데이터가 들어오면 조금 더 수월하게 인터페이스를 하는 것이 목적입니다. 

 

기존 웹 어플리케이션 안에서 구동하던 더미 데이터를 api 서버로 분리할 예정입니다.

왜 API 서버를 NodeJS로 개발하는가라고 의문이 있으실 수 있는데, 제가 오랫동안 써왔고 간단하게 API 서버를 구성할 수 있기 때문입니다(주관적인 관점입니다). 

 

 

환경 설정하기

간단한 API 서버를 구현하는데 복잡한 환경을 구성하지 않기로 했습니다. 간단하고 빠르게가 목표입니다.

API 서버를 구현하기 위한 환경을 아래와 같이 정리해볼 수 있습니다.

 

API Server의 환경

  • NodeJS (Javascripts)
  • Database: PostgreSQL 
  • IDE: IntelliJ

 

간단한 nodejs 서버를 만들기 위해 먼저 nodejs부터 설치합니다. 

https://nodejs.org/ko/

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

설치파일을 다운로드하여 설치를 진행합니다. 저는 안정적인 nodejs 16 버전을 선택했습니다. 

 

으아아~ 무언가를 많이 설치하고 있습니다.

NodeJS를 설치하면서 추가 플러그인을 자동 설치하는 옵션을 체크했더니 무언가를 마구 설치하고 있습니다. 

 

 

DB 설치하기

저의 Local 노트북에는 아직 DB가 설치되어 있지 않습니다. 요즘 Docker를 공부하고 있는데, 이왕 하는 김에 DB는 PostgreSQL Docker로 활용해보겠습니다.

윈도우용 도커를 미리 설치했었습니다.

간단한 yml파일을 작성합니다.

volumes:
  data:

services:
  postgres:
    image: postgres:latest
    container_name: maas-postgresql
    restart: always
    build:
      shm_size: '256MB'
    environment:
      - POSTGRES_USER=pg_user
      - POSTGRES_PASSWORD=admin1234
    ports:
      - 14954:5432
    volumes:
      - data:/var/lib/postgresql

 

간단히 몇 개의 값만 살펴보면 다음과 같습니다.

  • image:docker 레포지토리에서 다운로드할 이미지 이름입니다.
  • container_name: 컨테이너 이름입니다.
  • restart:: 재시작 옵션입니다. 
  • build.shm_size: postgreSQL에서 사용할 메모리 설정인데, 초기 설정은 너무 낮게 설정되어 있기 때문에 256MB로 설정해주었습니다. 

이렇게 docker-compose.yml 파일을 작성한 후 해당 폴더에서 터미널로 아래 명령어를 입력해줍니다.

docker-compose -f docker-compose.yml up -d

해당 명령어를 실행하면 Docker Container 페이지에 추가됩니다. 

 

다중 컨테이너를 구동할 것을 고려해 docker compose 를 사용했습니다.

 


 

프로젝트 생성하기

 

저는 express-generator를 활용하여 프로젝트를 구성할 예정입니다. Intellij IDE를 사용하면, 프로젝트 생성과정을 쉽게 진행할 수 있습니다.

 

IntelliJ 2022.2.3 버전에서는 위 그림과 같이 'Express'를 선택하면 됩니다.

 

  • 이름: 프로젝트 이름입니다. 
  • 위치: 프로젝트가 저장될 폴더 경로입니다.
  • 노드 인터프리터: NodeJS가 설치된 경로입니다. IntelliJ의 경우에는 NodeJS가 설치되지 않았을 경우 자동으로 다운로드를 합니다(14 버전). 저는 16 버전을 설치했기 때문에 16 버전이 설치된 경로를 지정해주었습니다.
  • express-generator: NodeJS의 웹 프레임워크입니다. npm install express-generator 명령어를 사용하여 설치한 후, 설치된 경로를 지정해주면 Intellij가 express.js  구조로 프로젝트를 자동생성해줍니다.

 

express-generator에 대해서 궁금하신 분들은 아래 사이트를 참고해 주세요. 

 

https://expressjs.com/

 

Express - Node.js web application framework

Fast, unopinionated, minimalist web framework for Node.js $ npm install express --save

expressjs.com

 


참고: IntelliJ를 사용하지 않고 express 프로젝트 생성하기

 

굳이 IntelliJ를 활용하여 프로젝트를 생성하지 않아도 nodejs를 설치하면 npm이 자동으로 같이 설치가 됩니다. 이 npm 명령어를 통해 express를 설치한 후 명령어를 입력하여 애플리케이션을 구성해도 됩니다. 

 

Intellij를 사용하지 않고 프로젝트를 구성할 경우, 터미널에서 아래와 같은 명령어를 입력하면 됩니다.

이미 Nodejs를 설치했다고 가정하고 그 이후 과정을 소개하도록 하겠습니다.

만약 본인의 PC가 Windows Power Shell을 사용한다면 'express' 명령어를 사용할 때 권한 문제로 보안 오류가 발생합니다. 그래서 PowerShell로 진행할 경우 아래 명령어를 입력하여 권한 옵션을 해제해 주어야 합니다.

# 관리자 권한으로 PowerShell을 실행합니다. 
$ ExecutionPolicy # 실행 정책을 확인하는 명령어
Restricted  # 'Restricted'로 출력이 된다면 실행 정책을 변경해줘야 합니다. 
$ Set-ExecutionPolicy Unrestricted
$ ExecutionPolicy
Unrestricted # 'Unrestricted'로 출력된다면 이제 'express' 명령어를 사용할 수 있습니다.

 

권한 문제가 해결되었다면 아래 명령어를 입력하여 express-generator를 설치하고 프로젝트를 생성할 수 있습니다. 

# express-generator를 아직 설치하지 않았을 경우, express 명령어를 사용하기 위해 npm 글로벌 레포지토리에 express-generator를 설치합니다.
$ npm i -g express-generator 
# 프로젝트를 구성하고자 하는 폴더로 이동합니다. 
# 프로젝트를 생성합니다.
$ express 프로젝트명 --view=pug #view template를 pug로 사용하겠다는 옵션입니다.
# 위 명령어를 입력하면 프로젝트명으로 폴더와 파일들이 생성됩니다. 
$ cd 프로젝트명 # 생성된 프로젝트폴더로 이동합니다. 
$ npm i # 생성된 프로젝트 폴더로 이동하면 package.json 파일이 생성되어 있을 것입니다. 
# npm i는 npm install 명령어의 약자로, package.json에 명시된 패키지들을 해당 폴더에 설치합니다.

 

저는 테스트를 위해 test-api라는 프로젝트명으로 생성하였습니다.

 

 

이렇게 해서 세팅은 완료되었습니다. 다음에는 개발로 넘어가도록 하겠습니다.

관련글 더보기

댓글 영역