[ON SOPT] Server 3rd Seminar

[ON SOPT] Server 3rd Seminar

3주차 세미나 사전준비

  1. Postman 설치
  2. AWS 회원가입

HTTP

HTTP란?

HTTP (Hyper Text Transfer Protocol)

  • 웹에서 클라와 서버가 데이터를 주고 받을 수 있는 프로토콜 (규칙)
  • 웹에서 이 규칙에 맞춰 정보를 교환한다

정보를 전달하는 방법
1. URL: param 혹은 query 를 통해 연결
2. Header: 부가적인 정보 (토큰, 쿠키) 전송
3. Body: JSON 등의 형식으로 이루어진 데이터

cf) Request에서 param, query의 차이점
param: 주소의 변수를 담는다. (ex: localhost:3000/news/13)
query: 주소 바깥의 ‘?’ 이후의 변수를 담는다. (ex: localhost:3000/news?category=society)


HTTP Method

HTTP

HTTP Status Code

HTTP 응답의 상태를 알려주는 코드로, HTTP 요청이 성공적으로 완료되었는지 알려준다
Status

Express

Express 입문

Express : 웹/앱을 위한 NodeJS 프레임워크로, npm을 통해 수많은 패키지에 접근 가능

  • 프로젝트 만들기: VSCode 실행하고,npm install -g express express-generator
    이 때, -g는 global(전역 설치) 옵션으로 컴퓨터 당 한 번만 해주면 되는듯 하다
    이후 최상단 폴더에서 express {프로젝트 이름} 해주면 된다.

  • 프로젝트 시작: 프로젝트로 이동한 후 npm start
    첫 번째 실행이라면 이전에 npm install을 해주어야 한다.
    팁: Nodemon은 파일이 수정되면 자동으로 서버를 restart해 주어 편리하다!!
    npm install -g nodemon 해서 설치하고, nodemon start로 서버 시작해준다.

  • 프로젝트 구조:

    • bin/www : app.js 파일을 가져와 http 객체와 연결한다.
      또한, 포트 번호 바꿀 수 있음.
    • node_modules : 모듈들이 설치되는 곳. 엄청 무거움. 건들 일 거의 없다.
      팁: 프로젝트를 git에 올릴때 보통 .gitignore 파일에 요놈을 추가해준다.
    • public : 이미지, CSS, JS파일 저장 (웬만하면 건들 일 없다)
    • Routes : 라우팅을 위한 폴더
      리소스 별로 라우팅을 구현한다.
    • views : Jade, ejs, nunjucks와 같은 템플릿 엔진들을 모아둔다.
    • app.js : 프로젝트의 중심이자 미들웨어 관리가 이루어진다.
      라우팅의 시작점!
    • package.json : 프로젝트 정보 정의하고, 의존하는 패키지 정보를 명시


MiddleWare, 미들웨어

미들웨어 : 서버가 요청-응답과정을 하는 동안 중간의 동작을 해주는 함수
request가 올 때마다 미들웨어를 거쳐 response를 보낸다.


Routing

라우팅 : URI 및 특정 HTTP 요청 메소드인 특정 엔드포인트에 대한 클라 요청에 앱이 응답하는 방법을 결정하는 것.
예) URL에 news.daum.net/society, news.daum.net/politics와 같이 목적에 따라 구분하는 것

기본적으로는 다음과 같은 양식을 따른다.

1
2
3
router.METHOD('path', (req, res) => {
/* logic */
});
  • METHOD: HTTP 요청 메소드 (GET, POST, DELETE, PUT)
  • path: 서버에 접근할 경로
  • req: request로 전달 받은 객체의 데이터
    req.headers, req.file, req.query, req.params, req.body 사용 가능
  • res: response로 전달할 데이터

세미나에서 다룬 Express를 이용한 routing 방법은 다음과 같다:
우선, routes 파일에 (카테고리를 나누는 느낌으로) 이와 같이 폴더와, 각 폴더 밑에 index.js를 만들어준다.

routing

routes/ranking/index.js 에는 위에서 언급한 것과 같이 메소드들을 적어준다.
router.get('/popular', (req,res) => { res.status(200).send("인기많은순 뉴스"); } );

가장 바깥의 routes/index.js에는 express의 router() 객체를 router 변수에 할당하고,
const express = require('express');
const router = express.Router();

각 세부 폴더에 다음과 같이 적어준다.
router.use('/ranking', require('./ranking'));

그러면, 내가 localhost:3000/ranking/popular 로 들어가면 “인기많은순 뉴스”를 볼 수 있다.

이처럼, /ranking 으로 시작하는 리소스들은 ./ranking/index.js에서 나누어 관리할 수 있으며, 이러한 편리한 라우팅이 가능하다는 것이 Express의 장점이다.

이렇게 라우터를 세팅하면, routes/index.js 에서 마지막에 module.exports = router;로 export해 주어 app.js에서 var indexRouter = require('./routes/index');app.use('/', indexRouter); 해주면 된다.
즉, export된 객체를 app.js에서 미들웨어로 등록하는 것이다.

라우팅과 미들웨어가 정상 작동하는지 확인할 때 Postman을 사용한다!
팁: Collection 기능 이용하기

<< 실습 팁 >>

  • key-value 쌍의 경우 값이 같으면 value 값은 생략 가능하다!
  • 비 구조화 할당을 이용하여 req.body의 값을 추출할 수 있다.
    예) const { name, part, age } = req.body;
    이는 const name = req.body.name; ..... 와 같다.

AWS EC2

EC2(Elastic Cloud Compute)

안전하고 크기 조정이 가능한 컴퓨팅을 클라우드에서 제공하는 웹 서비스


EC2 사용 순서

  1. EC2 인스턴스 생성 (Cloud Computer 대여)
  2. EIP 연결 (컴퓨터의 IP를 만들어서 연결)
  3. SSH 접속 (ssh를 이용하여 빌린 컴퓨터에 접속)
  4. 서버 환경 구축 (빌린 컴퓨터에 node 깔아서 돌리기)


Key Pair란?

EC2 서버에 접근하려면 개인키와 공개키로 구성된 키페어가 필요한데, 공개키는 AWS에 업로드되어 가상 서버에서 보관하고 개인키는 자신이 소유한다.
EC2에 접속할 때마다 키페어를 이용하여 접근한다!
보안이 취약한 곳에 올리면 절대 안된다!!


EIP(Elastic IP)란?

EC2가 재시작될 때마다 Public IP가 변경되기 때문에, 이를 고정된 IP로 연결해주는 것
EIP가 혼자 돌아가면 과금되기 때문에, 항상 연결해 주어야 한다!!
즉, EC2 중단하기 전에 반드시 EIP를 release 해주어야 함. (실제로 안했더니 1주일에 0.02$ 정도 나갔다)


EC2 접속 방법

  1. Terminal에서 key pair가 있는 위치로 이동
  2. chmod 400 {pemKeyName}.pem
  3. sudo ssh -i '{pemKeyName}.pem' ubuntu@{EIP}


PM2 (NodeJS Process Manager)

프로세스를 모니터링하는 프로그램
( 노드는 시간 지나면 지 혼자 죽을 수도 있어서, 모니터링이 필요 )
설치: sudo npm install -g pm2
실행: 프로젝트 최상위 폴더에서 pm2 start ./bin/www
다양한 명령어들:

  • pm2 start ./bin/www --name {server_name} : 서버 이름 붙여주기
  • pm2 list : 프로세스 리스트 확인
  • pm2 restart {name 또는 id} : 프로세스 재시작
  • pm2 monit : 프로세스 모니터링
  • pm2 stop {name 또는 id} : 프로세스 중지
  • pm2 logs : 로그 보기
Author

Yeonsang Shin

Posted on

2020-10-31

Updated on

2022-12-19

Licensed under

Comments