일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 길벗정보처리기사필기
- the password has expired
- 코뮤니티
- 애자일 모형
- 9시간 차이
- db
- round()
- 플러터 생존코딩
- 소수점 출력
- MPAndroid
- 모각코후기
- 정보처리기사필기기본서
- 스터디
- 파이썬
- 글자색 투명
- 소멸차트
- 파이썬 시간
- 모각코
- 리눅스마스터 2차
- 라우트
- 오류
- 소프트웨어 생명 주기
- 프로토타입 모형
- missing or invalid password(s)
- 온라인 코딩 스터디
- 제품책임자
- 스크럼개발프로세스
- 원형 모형
- 합격
- 비밀번호만료
- Today
- Total
기-억하기 위해 기-록을
Node와 Express 공부 정리 본문
express : 노드용 라이브러리
익스프레스는 기존 라이브러리들이 여러 기능을 한데 모아놓은 형태를 취한 것과 달리 모듈 개념을 적극 채용해 딱 필요한 요소만 가져다 사용하는 방식으로 쓰이고 있음
불필요한 기능이 없으므로 가볍고, 문제가 생겼을 때도 훨씬 쉽게 원인을 찾을 수 있다는 장점
서버 사이드 애플리케이션 : 애플리케이션의 페이지를 서버에서 HTML,CSS, 이미지, 멀티미디어 자원, 자바스크립트 등을 결합, 즉 렌더링해서 클라이언트에 전송
클라이언트 사이드 애플리케이션 : 사용자 인터페이스를 클라이언트에서 렌더링하는 것
전통적인 웹 서버와 노드의 차이점 중 노드는 싱글 스레드를 사용한다는 점이 중요함
단일 스레드는 웹 앱을 만드는 작업을 단순화하며 앱에서 멀티 스레드 성능이 필요하다면 노드 인스턴스를 늘리기만 해도 멀티 스레드의 성능을 누릴 수 있음
노드는 완전히 플랫폼 독립적임
노드는 윈도우나 맥OS, 리눅스 같은 주요 운영체제에 쉽게 설치가 가능하며 협업하기도 쉬움
노드 설치
LTS : 오랫동안 지원되는 버전
현재 버전은 최근 기능을 포함하고 있고 성능이 조금 더 개선된 버전
npm은 노드 패키지를 위한 패키지 매니저
패키지를 설치하고 의존성을 관리
npm install -g nodemon
nodemon : 소스 코드를 수정했을 때 자동으로 노드 프로그램을 재시작하는 유틸리티
-g : 패키지를 전역으로 설치하라는 의미, 시스템 전체에서 해당 패키지를 사용할 수 있음
nodemon 같은 자바스크립트 유틸리티는 일반적으로 전역으로 설치하고,
특정 웹 앱이나 프로젝트에서만 사용하는 패키지는 전역으로 설치하지 않음
node --version
컴퓨터에 설치된 노드 버전 확인
localhost
로컬 호스트는 보통 IPv4 루프백 주소 127.0.0.1이나 IPv6 루프백 주소 ::1 별칭으로 쓰임
다만 SSH 등을 사용하여 원격 컴퓨터에 접속했다면, localhost로 그 컴퓨터에 연결할 수 없음
http.createServer 메서드는 함수를 매개변수로 받음
그리고 HTTP 요청이 일어날 때마다 이 함수를 호출함
라우팅 routing
클라이언트가 요청한 콘텐츠를 전송하는 메커니즘
fs.readFile()
파일을 비동기적으로 읽는 메서드
콜백이라고 부르는 패턴 사용
함수를 호출할 때 콜백 함수를 전달하면, 함수가 실행을 마쳤을 때 콜백 함수가 호출됨
fs.readFileSync()
파일을 동기적으로 읽는 메서드
app.METHOD
METHOD는 HTTP 동사(get 또는 post)가 들어감
이 메서드는 대소문자를 구분하지 않으며 경로 끝에 슬래시가 있든 없든 똑같이 동작하고 쿼리스트링도 무시함
익스프레스에서는 라우트와 미들웨어의 순서가 중요
뷰
사용자가 보는 것을 책임지는 부분
이미지나 CSS 파일 같은 정적 자원과 다르며 정적일 필요가 없음
각 요청에 따라 즉석에서 변할 수 있음
static
static 미들웨어는 하나 이상 디렉터리를 지정해서 이 디렉터리에 정적 자원 보관하고 아무런 변화 없이 클라이언트에 바로 전송함
전송하려는 정적 파일 각각에 파일을 렌더링하고 클라이언트에 반환하는 라우트를 지정한 것과 효과가 같음
버전 관리
- 문서화
- 어떤 결정을 내렸고 어떤 순서로 구성 요소를 개발했는지 확인
- 프로젝트 역사를 파악
- 작성자
- 누가 무엇을 만들었는가
- 코드에 주석을 읽고도 이해되지 않는 경우 본인에게 물어볼 수 있음
- 실험
- 프로젝트의 안정성이 떨어질 것을 걱정하지 않고 새로운 것을 시도 가능
- 실험이 성공적 -> 반영 실패 ->철수
코어 모듈
node_modules에 설치되는 모듈이 아닌 이외의 모듈
fs, http, os, path 등 노드가 제공하는 코어 모듈이 존재함
exports
전역 변수
모듈 바깥에서 모듈에 있는 내용을 보기 위해서는 반드시 exports를 사용해야함
캡슐화 원칙을 지키면 잠재적인 오류나 취약한 코드를 피하기 쉬워짐
- 버전관리 사용하면 소프트웨어 개발이 안전하고 예측 가능하게 됨
- 모듈화는 소프트웨어의 복잡함을 관리할 수 있는 중요한 테크닉
단위 테스트
애플리케이션에 존재하는 가장 작은 기능 단위, 보통 함수를 테스트
통합 테스트
더 큰 기능 단위를 테스트
애플리케이션의 함수, 모듈, 서브시스템 등이 대상
린트
존재하는 오류가 아닌 잠재적인 오류를 찾는 작업
프로토콜
요청을 어떻게 전송할지 결정
http, https, file, ftp 등
호스트
로컬 컴퓨터나 로컬 네트워크에 있는 서버를 한 단어 또는 숫자 형태의 IP 주소로 표현
호스트 이름 앞에 서브도메인이 있을 수 있으며 서브도메인은 옵션
포트
각 서버에는 숫자 형태의 포트 존재
HTTP 에서는 80
HTTPS는 443 으로 간주
한 서버에서 포트 번호를 중복으로 사용할 수 없으므로 널리 사용되는 포트 번호를 선택했을 경우 변경해야하는 상황이 올 수 있음
경로
URL 부분
경로를 통해 유일하게 식별할 수 있어야 함
쿼리스트링
이름-값 쌍의 컬렉션이며 옵션
물음표(?) 기호로 시작하고 이름-값 쌍은 & 기호로 구분
이름과 값은 모두 URL 인코드 사용해야함
해시
서버로 전송되지 않으며 브라우저에서만 사용
단일 페이지 애플리케이션은 해시를 애플리케이션 내부의 내비게이션 용도로 사용
브라우저는 서버와 통신할 때 GET과 POST 메서드를 우선 사용
Content-Type 헤더
타입, 서브타입, 옵션인 매개변수로 구성된 인터넷 미디어 타입
요청 객체
http.IncomingMessage의 인스턴스로 시작
요청 핸들러의 첫 번째 매개변수로 전달
req.params
이름 붙은 라우트 매개변수가 담긴 배열
req.query
이름-값 쌍 형태인 쿼리스트링 매개변수(=GET 매개변수)를 담은 객체
req.body
POST 매개변수를 담은 객체
req.body를 사용하려면 바디 콘텐츠 타입을 분석할 수 있는 미들웨어가 필요
req.route
현재 일치하는 라우트에 관한 정보
req.path
요청의 경로 URL에서 프로토콜, 호스트, 포트, 쿼리스트링을 제외한 값
응답 객체
http.ServerResponse의 인스턴스
요청 핸들러의 두 번째 매개변수로 사용
res.state(code)
HTTP 상태 코드 설정
200(OK), 404(Not Found), 500(Server Error) ..
res.redirect([status],url)
브라우저를 리다이렉트함
기본 리다이렉트 코드는 302
res.send(body)
클라이언트에 응답 보냄
res.end()
응답 보내지 않고 연결 끊음
템플릿 엔진
- 성능
가능하면 빠른 템플릿 엔진 선택 -> 템플릿 엔진으로 인해 웹사이트가 느려지는 것은 막아야 함
- 클라이언트용, 서버용 혹은 겸용
템플릿 엔진은 서버와 클라이언트 양쪽에서 사용 가능하며 기능 차이가 없는 엔진을 고르는 것이 좋음
- 추상화 수준
핸들바
프론트엔드와 백엔드 양쪽에서 자바스크립트와 쉽게 통합 가능, 익숙한 문법 사용 가능
템플릿을 렌더링할 때는 템플릿 엔진에 콘텍스트 객체를 전달하며 이를 통해 템플릿에 데이터를 삽입함
주석
{{! 절대 비밀인 주석}}
<!-- 알려져도 상관 없는 주석 -->
서버 사이드 템플릿
HTML 완성 후 클라이언트에 전송
프로그램 구성 정보를 숨기는 효과 외에도 템플릿 캐싱이 가능하므로 성능을 올릴 수 있음
HTTPS를 사용하지 않으면 침입자는 GET 요청의 쿼리스트링을 보는 것과 마찬가지로 쉽게 POST 요청의 바디를 볼 수 있음
HTTP 요청에는 서버에서 그 요청을 수행할 때 필요한 정보가 모두 들어 있다는 뜻
- 사용자가 쿠키 내용을 볼 수 있음
- 사용자가 쿠키를 삭제하거나 금지할 수 있음
- 일반적인 쿠키는 변조될 수 있음
- 쿠키는 공격에 사용될 수 있음
- 쿠키를 남용하면 사용자가 눈치챔
- 가급적 쿠키보다 세션을 사용
미들웨어
애플리케이션으로 들어오는 HTTP 요청 위에서 동작하는 기능을 캡슐화하는 방법
파이프라인 안에서 실행
next()를 호출하지 않으면 요청은 해당 미들웨어에서 종료됨