1. NVM 설치

1.1. 다운로드하여 설치

1.2. 시스템-환경변수(사용자변수-Path)에 추가

ex) C:\Users\rainofpainki\AppData\Roaming\nvm

2. Node.js 설치

2.1. Windows Powershell 실행 (관리자 권한으로 실행)

2.2. Node.js 설치 (20.06.17 당시 최신LTS 12.18.0)

$ nvm install v12.18.0

2.3. Node.js 버전 확인

$ nvm ls

2.4. 사용할 Node.js 버전 선택

$ nvm use 12.18.0

2.5. 설치 확인

$ node -v
$ npm -v

3. Chocolatey 설치

3.1. Windows Powershell 실행 (관리자 권한으로 실행)

3.2. 아래 커맨드 실행

$ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

3.3. 설치 확인

$ choco
$ choco -?

4. Yarn 설치

4.1. Windows Powershell 실행 (관리자 권한으로 실행)

4.2. choco 이용하여 yarn 설치

$ choco install yarn

4.3. 설치 확인

$ refreshenv # 환경변수 초기화
$ yarn -v

5. Koa.js 프로젝트 생성

5.1. 원하는 경로에 Workspace 생성

$ cd ~
$ cd workspace

5.2. 형상관리 원격 저장소에 project 생성하고 git clone

$ git config --global user.name "rainofpainki"
$ git config --global user.email "rainofpainki@naver.com"
$ git clone {git clone url}

5.3. $ cd firstmall-api

$ yarn init
# 아래와 같이 적절하게 설정
question name (koa-js-test):
question version (1.0.0): 
question description: koa.js test
question entry point (index.js): 
question repository url: 
question author: rainofpainki
question license (MIT): 
question private: 

5.4. koa 모듈 설치

$ yarn add koa

5.5. ESLint 설정

5.5.1. npm bin 폴더 전역변수 설정

$ npm bin -g

출력되는 폴더를 시스템-환경변수에 추가

$ npm bin

출력되는 폴더를 시스템-환경변수에 추가

$ refreshenv
$ Get-ExecutionPolicy

권한이 RemoteSigned가 아니라면 아래와 같은 명령어 실행

$ Set-ExecutionPolicy RemoteSigned

5.5.2. 전역에 ESLint 설치

$ npm install -g eslint

5.5.3. eslint 설정

$ eslint --init
? How would you like to use ESLint? To check syntax, find problems, and enforce code style
? What type of modules does your project use? JavaScript modules (import/export)
? Which framework does your project use? None of these? Does your project use TypeScript? Yes
? Where does your code run? Node? How would you like to define a style for your project? Use a popular style guide
? Which style guide do you want to follow? [Standard:](https://github.com/standard/standard) 
? What format do you want your config file to be in? JSON

.eslintrc.json 생성 확인

5.5.4. (vscode 이용시에만) VSCode 실행하여 MarketPlace에서 ESLint, npm 설치

6. Koa.js 기본 사용법

6.1. src/index.js 디렉토리 및 파일 생성

6.2. 파일 내용에 아래와 같이 추가

const Koa = require('koa');
const app = new Koa();

app.use(ctx => {
    ctx.body = 'Hello Koa';
});

app.listen(4000, () => {
    console.log('node server is listening to port 4000');
});

6.3. 서버 실행

$ node src

localhost 접속하여 확인

7. TypeScript 적용 방법

7.1. typescript 관련 npm 모듈 설치

$ npm i --save-dev typescript ts-node nodemon @types/koa @types/node
$ npm i --save-dev eslint eslint-config-prettier @typescript-eslint/parser

7.2. 해당 workspace에서 실행

$ tsc --init

7.3. package.json 에 main 속성을 index.js 를 index.ts로 변경

7.4. tsconfig.js (있으면) 삭제

7.5. tsconfig.json 에 아래와 같이 저장

{
  "compilerOptions": {
    "outDir": "dist",
    "target": "es2017",
    "module": "commonjs",
    "sourceMap": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "resolveJsonModule": true,
    "typeRoots": [
      "node_modules/@types"
    ]
  },
  "include": [
    "src/**/**.ts",
    "test/**/**.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}

7.6. src/index.ts 아래 내용으로 저장

import * as Koa from 'koa'
import { Context } from 'koa'

const app = new Koa()

app.use((ctx: Context) => {
  ctx.body = 'Hello Koa'
})

app.listen(4000, () => {
  console.log('node server is listening to port 4000')
})

7.7. 실행 확인

$ tsc && node dist/index.js

또는

$ ts-node src

로 실행 후, localhost 접속하여 확인

8. choco 이용하여 MySQL 설치 (부록)

8.1. Windows Powershell 실행 (관리자 권한으로 실행)

8.2. choco 이용하여 설치

$ choco install mysql --params "/port:3306 /serviceName:MySQL"

8.3. Powershell 재실행

$ mysql // access denied 뜨면 아래 실행
$ mysql_secure_installation

8.4. 접속

$ mysql -uroot -p

8.5. 사용자/데이터베이스 생성

CREATE USER 'rainofpainki'@'localhost' IDENTIFIED BY 'rainofpainki';
GRANT USAGE ON *.* TO 'rainofpainki'@'localhost';
FLUSH PRIVILEGES;
CREATE DATABASE `koa-js-db`;
GRANT EXECUTE, SELECT, SHOW VIEW, ALTER, ALTER ROUTINE, CREATE, CREATE  ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT,  INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, LOCK TABLES  ON  `koa-js-db`.* TO 'rainofpainki'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

9. Ref

https://code-masterjung.tistory.com/46

https://backend-intro.vlpt.us/1/01.html

https://novemberde.github.io/node/2017/10/22/Express-Typescript.html