10/15 Node.js 학습

이경화·2023년 10월 15일
0

Node.js 학습

목록 보기
4/4

1. os와 path

OS

-운영체제의 정보를 담고 있음.
-모듈은 require로 가져옴.(내장 모듈이라 경로 대신 이름만 적어줘도 된다.)

  • os.cpus
    정확하게 코어가 몇개인지 알고 싶을 때 사용한다.
    서버를 띄울 때 cpu가 6개가 있으면 6개를 돌려야 한다. 이때, “6”이라는 숫자를 찾기 위해 사용한다.
    (참고) 그 외의 os 명령어들은 nodejs.org → API Docs 에서 확인할 수 있다.

path
-폴더와 파일의 경로를 쉽게 조작하도록 도와주는 모듈이다.
-운영체제별로 경로 구분자가 다르다. (Windows : ‘\’, POSIX: ‘/’)
-절대경로 : 가장 위에서부터 시작하는 경로
상대경로 : 현재 내 폴더부터 시작하는 경로 (. . 등을 이용하는 것이 상대경로)

  • path.join(경로, .. .) : 여러 인자를 넣으면 하나의 경로로 합쳐준다. 상대경로인 부모 디렉터리와 현 위치도 알아서 처리해준다.
  • path.resolve(경로, .. .) : path.join과 비슷한 역할이지만 join의 경우 절대경로를 무시하고, resolve는 절대경로를 우선한다.

2. url, dns, searchParams

url

-인터넷 주소를 쉽게 조작하도록 도와주는 모듈이다.
-url은 내장 객체여서 require 안 적어줘도 된다.

searchParams

dns
-DNS를 다룰 때 사용하는 모듈이다. 주로 도메인을 통해 IP나 기타 DNS정보를 얻고자 할 때 사용한다.


3. crypto와 util

단방향 암호화 (crypto)

  • 암호화는 가능하지만 복호화는 불가능하다.
    암호화 : 평문을 암호로 만듬
    복호화 : 암호를 평문으로 해독
  • 단방향 암호화의 대표 주자는 해시 기법
    -문자열을 고정된 길이의 다른 문자열로 바꾸는 방식
    -abcdefgh 문자열 → qwer
    -서버에는 qwer만 저장되어 있어서 해킹으로부터 안전하다.
    -편의상으로 비밀번호를 암호화한다고 하지만, 비밀번호는 암호화가 아니라 해시이다. 암호화와 해시의 차이는 암호화는 평문으로 해독할 수 있지만 해시는 평문으로 만들기 매우 힘들다.
  • createHASH(알고리즘) : 사용할 해시 알고리즘을 넣어준다.
  • update(문자열) : 변환할 문자열을 넣어준다.
  • digest(인코딩) : 인코딩할 알고리즘을 넣어준다.

양방형 암호화
-key가 사용됨
-암호화할 때와 복호화 할 때 같은 key를 사용한다.
-프론트는 공개되어 있기 때문에 프론트에서 key가 노출되면 안된다.

util
-각종 편의 기능을 모아둔 모듈

  • util.deprecated
    -함수가 deprecated 처리되었음을 경고 메시지를 띄워 알려준다.
    -deprecated? 중요도가 떨어져 더 이상 사용되지 않고 앞으로는 사라지게 될 컴퓨터 시스템 기능
    -잘못된 코드를 수정할 경우 그 코드를 사용하던 것들이 다 망가지기 때문에 경고창을 띄워 사용자 수를 줄이고 버전 업그레이드를 통해 삭제한다.
  • util.promisify : 콜백 패턴을 프로미스 패턴으로 바꿔준다.
    -단, 콜백이 (error, data) ⇒ {} 형식이여야 한다.
    -노드의 경우 대부분 (error, data) ⇒ {} 형식이다.

4. 스레드풀과 커스텀 이벤트

스레드풀
-노드는 기본적으로 스레드를 4개만 돌린다.

  • SET UV THREADPOOL_SIZE = 돌릴숫자
    -내 코어가 4개 이상이여서 스레드를 4개 이상으로 돌리고 싶을 때 사용한다.

커스텀이벤트
다양한 파일들 안에 있는 이벤트를 불러와 사용할 수 있다.


5. 예외 처리하기

예외 : 처리하지 못한 에러
-노드 스레드를 멈춤.
-노드는 기본적으로 싱글 스레드라 스레드가 멈춘다는 것은 프로세스가 멈추는 것이다.
-에러 처리는 필수이다.

try catch
-에러가 발생할만한 곳을 try catch로 감싼다.

  • 프로세스 에러는 따로 처리하지 않아도 된다.
    -작동이 멈추지는 않고, 경고문만 출력된다.
    -그러나, 나중에 문제가 발생했을 때를 고려해서 프로미스에 catch로 감싸주는 것이 좋다.

  • uncaughtException
    -uncaughtException 함수를 쓰면 모든 에러가 uncaughtException에서 처리된다.
    -최후의 수단으로 사용한다.
    -콜백 함수의 동작이 보장되지 않는다.
    -따라서 복구 작업용으로 쓰는 것은 부적합하기 때문에 에러 내용 기록으로만 쓰는 것이 좋다.

프로세스 종료하기
-윈도우
taskkill /pid 프로세스아이디/ f
-맥/리눅스
kill -9 프로세스아이디
+현재 프로세스 아이디는 process.pid 명령어를 통해 알아낼 수 있다.


6. 화살표 함수

화살표함수 (⇒)
-화살표 함수가 기존 function() {}을 대체하는 건 아님 (this가 달라짐)
화살표 함수는 무조건 부모의 this를 물려받지만, function을 사용하면 자신만의 this를 사용할 수 있기 때문에 완전히 대체할 수는 없다.
-객체를 리턴하는 경우에는 소괄호가 필수다.


7. Promise, async/await

프로미스
-내용이 실행은 되었지만 결과를 아직 반환하지 않은 객체
-프로미스가 결과값을 갖고 있다가 나중에 결과값을 반환받을 수 있다. 즉, 코드를 분리할 수 있다는 것이 장점이다.
-콜백헬을 막을 수 있다.

  • promise method
    -promise.resolve(성공리턴값) : 바로 resolve하는 프로미스
    -promise.reject(실패리턴값) : 바로 reject하는 프로미스
    -promise.all(배열) : 여러 개의 프로미스를 동시에 실행
    -promise.allSteeled : 실패한것만 추려낼 수 있다.
    -비동기는 항상 실패할 가능성을 염두해두어야 한다.
    -Resolve(성공리턴값) → then으로 연결
    Reject(실패리턴값) → catch로 연결

async/await
-변수 = awiat 프로미스;인 경우 프로미스가 resolve된 값이 변수에 저장
-변수 await 값;인 경우 그 값이 변수에 저
-화살표 함수도 async/await 가능
-async 함수는 항상 promise를 반환


8. HTTP 서버 만들기

  • localhost는 컴퓨터 내부 주소이다.
    -외부에서 접근 불가능
  • 포트는 서버 내에서 프로세스를 구분하는 번호
    -기본적으로 http 서버는 80번 포트 사용(생략가능, https는 443)
    -다른 포트로 데이터 베이스나 다른 서버 동시에 연결 가능

9. fs로 HTML 읽어 제공하기

-사파리 같은 일부 브라우저가 html인지, 문자열인지 구분하지 못하기 때문에 코드에 써줘야 한다.
-fs로 파일 읽어오기


10. REST API 서버 만들기

REST API

  • 서버에 요청을 보낼 때는 주소를 통해 요청의 내용을 표현
    -/index.html이면 index.html을 보내달라는 뜻이다.
    -서버가 이해하기 쉬운 구조가 좋다.
    -항상 html을 요구할 필요는 없다.

  • REST API
    -서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법
    -/user 이면 사용자 정보에 관한 정보를 요청하는 것이다.
    -/post면 게시글에 관련된 지원을 요청하는 것이다.

  • HTTP 요청 메서드
    -GET : 서버 자원을 가져오려고 할 때 사용
    -POST : 서버에 자원을 새로 등록하고자 할 때 사용
    -PUT : 전체 수정
    -PATCH : 부분 수정
    -DELETE : 서버의 자원을 삭제하고자 할 때 사용

HTTP 프로토콜

  • 클라이언트가 누구든 서버와 HTTP 프로토콜로 소통 가능

  • RESTful
    -REST API를 사용한 주소 체계를 이용하는 서버
    -GET/user 는 사용자를 조회하는 요청, POST/user는 사용자를 등록하는 요청
    -깔끔하고 의미전달만 잘되면 훌륭한 주소다.


11. POST, PUT, DELETE 요청 보내기

-HTTP 상태코드 참조하기 (200, 201, 404, 503 등)


12. package.json

npm(Node Pacakage Manager)
-노드의 패키지 매니저
-다른 사람들이 만든 소스 코드들을 모아둔 저장소
-남의 코드를 사용하여 프로그래밍 가능
-이미 있는 기능을 다시 구현할 필요가 없어 효율적
-오픈 소스 생태계를 구성

package.json

  • 현재 프로젝트에 대한 정보와 사용 중인 패키지에 대한 정보를 담은 파일
    -같은 패키지라도 버전별로 기능이 다를 수 있으므로 버전을 기록해두어야 함
    -동일한 버전을 설치하지 않으면 문제가 생길 수 있음
    -노드 프로젝트 시작 전 package.json부터 만들고 시작함(npm, init)

npm 스크립트
-npm init이 완료되면 폴더에 package.json이 생성됨.
-npm run [스크립트명]으로 스크립트 실행


13. express 서버 사용해보기

-app.set(’port’, 포트)로 서버가 실행될 포트 지정
-app.get(’주소’, 라우터)로 GET 요청이 올 때 어떤 동작을 할지 지
-app.listen(’포트’, 콜백)으로 몇 번 포트에서 서버를 실행할지 지정


14. express로 html 서빙하기


15. 미들웨어 사용하기

-app.use(req, res, nest) ⇒ { }
-중복을 제거하기 위해 사용
-next를 써줘야만 다음 미들웨어로 넘어간다.
-와일드카드는 다른 미들웨어보다 아래에 위치해야 한다.
와일드카드가 위에 있으면 next를 쓰지 않을경우 다음으로 넘어가지 않음.


16. 미들웨어 특성 이해하기

  • app use(err, req, res, next)
    에러미들웨어의 경우 반드시 4개여야 한다.

  • 서버쪽에서는 400번대 에러가 나도, 클라이언트에서는 200번대로 뜨게 할 수 있다.

  • 하나의 요청에 여러번 응답을 보내면 에러가 난다.

1개의 댓글

comment-user-thumbnail
2023년 11월 2일

잘 읽고 갑니다.~

답글 달기