express 설정

디렉토리 적당한 곳에 node-rest-tutorial 이라는 이름의 폴더를 만든다.

폴더를 만든후 IDEA 에서 File > Oen 메뉴에서 해당 폴더를 연다. IDEA 하단의 Terminal 메뉴를 열고 아래 명령어로 npm 저장소를 만든다.

package.json 화일이 생성되었음을 확인하자. 해당 화일을 열어서 확인하자.

이제 node 로 REST 서버를 구성하기 위해 필수 라이브러리인 express 모듈을 설치한다. 타입스크립트 버전인 @types/express 도 같이 설치한다.

package.json에 의존성 모듈이 설치되었고 node_module에 해당 모듈이 설치됨을 확인하자.

src/index.js 화일을 만들고 아래와 같이 입력한다.

terminal 창에서 실행해보자

콘솔에 서버가 실행중임을 확인한후에 브라우저를 열어서 접속 테스트를 해본다. http://localhost:8080/api/hello 로 접속하면 브라우저에 hello world가 찍힐것이다.

typescript 적용

첫번째로, typescript 를 개발의존성으로 설치한다.

설치하면 tsc 명령어를 사용할 수가 있고 확장자가 .ts 인 화일을 컴파일해서 .js 화일을 생성할 수 있다. 설치후 버전을 확인해보자. tsc -v

그러나 이렇게 하면 에러가 날 것이다. 왜냐하면 개발의존성으로 설치했기 때문에 tsc는 node_modules/typescript/bin 폴더에 위치해 있기 때문이다. 그래서 폴더경로까지 모두 명시하기에는 번거로우므로 typescript를 아래와 같이 글로벌로도 설치한다. 그러면 언제 어디서나 tsc 명령어를 사용할 수 있다.

이제 tsc -v를 하면 버전을 보여줄 것이다.

두번째로 typescript 환경화일을 설정한다.

이 명령어를 실행하면 tsconfig.json 이 생성될 것이다. 옵션 설정을 아래와 같이 수정한다. typescript 는 es5와 es6를 모두 포함하고 typescript 언어의 특성까지 갖고 있는 super set 언어이다. typescript 언어는 변수를 선언하면 변수의 타입을 선언을 해야 하는 언어이다. 아래 설정을 하기 전에 index.js를 보면 req, res에 타입을 선언하지 않아서 에러가 나는것을 볼것이다. 하지만 아래 설정을 적용하면 그 에러가 보이지 않을 것이다. 아래 설정은 es6 언어를 타겟으로 설정하겠다는 것이다.

이제 typescript 적용은 끝마쳤다.

좀전에 만든 index.js 를 이제 index.ts로 수정한다. 타입스크립트 화일은 확장자가 ts이다. 수정하고 보면 require(‘express’) 부분에서 에러가 날것이다. require는 commonjs 모듈스펙인데 설정에서 esmodule 스펙을 사용하도록 설정했기 때문이다. 따라서 es module 방식인 import 구문으로 바꾼다.

이제 아래 명령어로 실행해본다. tsc는 src/index.ts 를 js 파일로 컴파일 하라는 명령이다. 위에 설정에서 컴파일된 결과를 dist 에 저장하도록 하였다. 그래서 node로 dist 폴더에 index.js를 실행하도록 한다.

개발환경 설정

앞에서 우리가 설정한 서버는 localhost 서버로 본인이 사용하는 컴퓨터가 서버가 되었다. 그러나 개발이 끝나면 서버는 아마존 클라우드 서버같은 public 한 망에 배포가 되어야 한다.

배포환경을 설정하는것은 맨 뒤에 할 것이고 여기서는 개발환경을 먼저 구성해보자. 개발환경에서 가장 중요한것은 HMR의 구성이다. 소스를 수정하면 수정된 내용을 바로 확인할 수 있어야 한다.

HMR은 Hot Module Replace의 약자로서 변경 사항을 수정하면 바로 컴파일되고 만약 프런트개발을 하고 있다면 브라우저까지 리프레쉬를 해줘서 수정사항을 바로바로 확인할 수 있는 설정이다.

앞에서와 같이 실행하게 되면 소스를 수정할때 마다 control – c 를 눌러서 프로그램을 종료시키고 다시 실행해야 한다.

먼저 nodemon, ts-node 두개를 개발의존성으로 설치한다. nodemon은 소스가 수정되었는지를 watch하고 있고, 수정이 되었으면 ts-node 를 사용하여 ts를 컴파일 하고 실행까지 해준다.

이제 package.json에 start 스크립트를 추가한다. nodemon은 개발의존성으로 설치했으므로 mode_modules/nodemon/bin 에 nodemon 이 존재한다. 하지만 package.json에 스크립트로 작성하게 되면 해당 폴더를 찾아서 실행해준다.

이제 스크립트로 실행해보자.

kebab case로 네이밍 변경

데이터베이스에 따라서 대문자와 소문자를 구분하는 경우가 있고 안하는 경우가 있다. typeORM은 기본적으로 컬럼명을 그대로 테이블로 만들기 때문에 camel case가 적용된다. 즉, 컬럼명을 createdAt 이라고 했다면 테이블명도 동일하게 만들어진다. 이것을 created_at 이라고 kebab case로 바꿀려면 다음과 같이 한다.

그리고 ormconfig.json 화일을 ormconfig.js 화일로 리네임하고 다음과 같이 작성한다.