Express
Node.js
생태계에서 가장 널리 쓰이는 웹 프레임워크- 내장하고 있는 기능은 매우 적으나,
미들웨어를 주입하는 방식으로 기능을 확장하는 생태계를 가지고 있음
Express 앱의 기본 구조
1 | // Express 인스턴스 생성 |
Routing
1 | // HTTP 요청 메소드(GET, POST, ...)와 같은 이름의 메소드를 사용 |
[Request 객체]
req.body
: 요청 바디를 적절한 형태의 자바스크립트 객체로 변환하여 이곳에 저장
(body-parser 미들웨어에 의해 처리됨)req.ip
: 요청한 쪽의 IPreq.params
: route parameterreq.query
: query string이 객체로 저장됨
요청
의 구성 요소- 메소드(ex) GET, POST)
- 주소
- 헤더(ex) 요청에 대한 부가정보)
- 바디(ex) 새로 등록하고자 하는 정보 등)
응답
의 구성 요소- 상태 코드
- 헤더
- 바디: 본문이 포함되는 영역
res.status(...)
: 응답의 상태 코드를 지정하는 메소드res.append(...)
: 응답의 헤더를 지정하는 메소드res.send(...)
: 응답의 바디를 지정하는 메소드인자가 텍스트면
text/html
, 객체면application/json
타입으로 응답
Template Language
Template Engine
- 데이터를 결합해 문서를 생성하는 프로그램, 혹은 라이브러리
- 템플릿을 작성할 때 사용하는 언어를 템플릿 언어라고 함
- ex) jsp(html에 java코드를 넣는 언어), php(html 안에 c#코드를 넣는 언어)
EJS(Embedded JavaScript Template)
- Node.js 생태계에서 가장 많이 사용되는 템플릿 엔진
- JavaScript 코드를 템플릿 안에서 그대로 쓸 수 있음
- EJS VSCode Extension
- EJS에서 Emmet 사용하기
- EJS 예제
- Example
1 | <%# index.ejs %> |
Express에서 EJS 사용하기
파일을 그대로 제공하기
- 내가 가지고 있는 파일을 그대로 응답할 수 있다.
- ex) 이미지, 폰트 파일 등을 그대로 응답한다.
- EJS 실습 예제
- 코딩 퀴즈 2번 풀이
- 코드를 짤 때 순서: 상태로부터 화면을 그리는 코드를 먼저 짜고,
그 후에 이벤트 리스너 코드를 짜는 게 쉽다.
클래스
ES2015 class
- 그 전에 배웠던 프로토타입 부분 보기
1 | // 생성자 |
- ES2015에서 도입된 클래스는 생성자의 기능을 대체한다.
- class 표현식을 사용하면,
생성자와 같은 기능을 하는 함수를 훨씬 더 깔끔한 문법으로 정의할 수 있다.
1 | // 클래스 |
1 | // 클래스 내에서는 일반 함수에서 쓰는 문법을 사용할 수 X. |
1 | // 클래스는 객체가 아닙니다! |
1 | class Person {} |
- 클래스는 함수로 호출될 수 없다.
- 클래스 선언은 let과 const처럼 블록 스코프에 선언되며,
호이스팅(hoisting)
이 일어나지 않는다.- function으로 정의한 함수는 var변수와 비슷.
호이스팅
이 일어난다.
- function으로 정의한 함수는 var변수와 비슷.
- 클래스의 메소드 안에서 super 키워드를 사용할 수 있다.
메소드 정의하기
- getter, setter는 속성에 접근하기만 해도 함수가 실행된다.
- 클래스에서 Getter 혹은 setter를 정의하고 싶을 때는 메소드 이름 앞에
get
또는set
을 붙여주면 된다.
1 | class Account { |
- static 키워드를 메소드 이름 앞에 붙여주면 해당 메소드는 정적 메소드가 된다.
정적 메소드는 인스턴스에 . 찍고 사용하는 메서드 (X).
생성자에
.
찍고 사용하는 메소드를 말한다.메소드 중에 정적 메소드를 제외하면, 다 프로토타입 안에 들어간다.
클래스 필드 (Class Field)
- 클래스 필드는 내년쯤 정식 표준으로 채택될 것으로 예상됨.
- 현업에서는 다들 사용하고 있음.
클래스 필드는 최신 문법이라서 일반 repl.it에서는 실행되지 X.
1 | // constructor vs class |
클래스 필드와 this
- 메소드를 다른 함수의 인수로 넘겨줘야 하는 경우,
화살표 함수
를 사용하는 것이 좋다. - React를 사용할 때 this 때문에 버그가 많이 일어난다.
- 클래스를 확실히 이해하려면, 교재의 ‘객체, 함수 더 알아보기’ 읽어보기
class field repl 코드
1 | class MyClass { |
Web Form
HTML FORM
HTML form의 기본 동작
- From Data가 요청 body에 담겨져 전달된다.
- HTML form을 전송하면,
입력된 정보가 기본적으로 percent encoding 되어 요청됨 - GET method
1 | GET /search?query=%EA%B0%9C&sort=latest HTTP/1.1 |
1 | POST method |
-
- 브라우저의 새로고침은 이전에 보냈던 요청을 그대로 보내는 것이다.
- 이런 일이 발생하지 않기 위해서 redirect를 하는 것이다.
- redirect 하지 x면, 새로고침을 여러 번 누르면 -> POST로 요청이 계속 감
- redirect 하면, 새로고침을 여러 번 누르면-> GET으로 요청이 계속 감
- DOM API만 사용하면 -> 브라우저 내장 UI인 뒤로 가기, 앞으로 가기 버튼 등이 잘 작동하지 않는다.