본문 바로가기

더이상 하지 않는 Backend - NodeJS/Node-Express 개론(완)33

[O'REILLY] Node & Express - 13장 : 지속성(Persistence) - 웹과 앱에는 어떤 형태든 지속성이 필요하다. - 데이터를 메모리가 아닌 다른 형태로 저장해서 서버 다운, 정전, 업그레이드, 이전 등의 상황에서도 데이터를 유지할 수 있어야 한다. 1. 파일시스템 지속성 - 지속성을 획득하는 방법 중 하나는 데이터를 플랫 파일에 저장하는 것 - 플랫이란 ? : 파일에 특별한 구조가 없이 그저 바이트의 연속 - 노드는 fs(파일시스템) 모듈을 통해 파일시스템의 지속성을 제공한다. - 파일시스템 지속성의 단점 : 확장이 어렵다. 플랫 파일에는 구조가 없으므로, 찾기, 정렬, 필터링 기능을 모두 앱에서 구현해야 한다. - 그러므로 데이터는 DB를 이용하는 것이 좋다. 다만, 이미지/오디오/비디오같은 이진 파일은 파일시스템이 더 효율적이다. - 이진 파일에 관한 정보는 보통.. 2023. 4. 10.
[O'REILLY] Node & Express - 12장 : 실무 환경 - 2 1. 예외처리 - 노드는 비동기적이므로, 항상 예외처리에 신경을 써줘야 한다. - express는 라우트 핸들러를 실행할 때 try/catch 블록으로 감싸므로 실제로는 잡히지 않는 예외란 없다. - 모든 라우트에 오류 핸들러를 추가해서 '보기 좋은' 오류 페이지를 만들어줄 뿐이다. - 항상 에러페이지를 만들어두어야 대응을 잘 할 수 있다. - 더 심각한 상황을 가정해보자. - 이렇게 하면 서버 전체가 다운된다. 사용자에게 에러메시지를 보내고 자시고 없고 서버가 다운되면서 어떠한 처리도 불가능하게 된다. - 이 문제는 setTimeout이 비동기적으로 실행되기 때문이다. 함수 실행은 노드가 유휴상태가 될 때 까지 지연된다. - 노드에서 앱의 안정성을 파악하지 못한다면, 예상하지 못한 예외처리가 불가능하여.. 2023. 4. 8.
[O'REILLY] Node & Express - 12장 : 실무 환경 1. 실행 환경 - 실행환경이란 ? : 애플리케이션을 실무, 개발, 테스트 모드로 실행하는 방법. - 개발, 실무, 테스트 세가지가 '표준' 환경이며, 스테이징, 연습환경도 만들 수는 있다. - 익스프레스는 실행환경을 지원한다. - app.set('env', 'production') 을 호출해서 실행 환경을 지정할 수 있지만 권장하지 않는다. - 실행환경을 지정할 경우에는 NODE_ENV를 사용하는 것이 더 좋다. - app.get('env')를 호출해서 현재 실행 중인 모드를 보고하게 만든다. - 실무 모드로 바꾸는 방법: 터미널에 이렇게 친다. $ export NODE_ENV=production $ node 파일명 - node 파일명으로 서버를 실행시키면 'Express started in produ.. 2023. 4. 5.
[O'REILLY] Node & Express - 11장 : 이메일 전송 이메일은 중요한 기능이다. 사용자 등록, 비밀번호 초기화, 이벤트 안내(광고), 사용자 인증 등 여러가지 방면에서 자주 사용된다. 노드/익스프레스에는 이메일 전송 기능이 들어있지 않아, 서드파티 모듈을 사용한다. 여기에서는 노드메일러를 사용한다. 1. SMTP, MSA, MTA - SMTP(Simple Mail Transfer Protocol) : 이메일 전송의 기본은 SMTP이다. 좋은 방법이 아니다. '신뢰할 수 있는' 송신자가 아니라면 이메일이 스팸함으로 가버릴거다. - MSA(Mail Submission Agent) : MSA는 신뢰할 수 있는 채널을 통해 이메일을 전송하는 메일 발송 에이전트이다. 이메일 도착확인 뿐 아니라 일시적인 중단이나 반송같은 문제도 처리할 수 있다. - MTA(Mail .. 2023. 4. 4.
[O'REILLY] Node & Express - 10장 : 미들웨어 ExpressJS는 앱 그 자체이고, 앱이면서 서버이다. 그리고 모든 것이 미들웨어이다. Express의 핵심이고 앱의 핵심이고 가장 중요한 것이 미들웨어다. 전체 코드 미들웨어의 동작 방식을 이해해야 구조와 설계가 보인다. 1. 미들웨어란 ? - 기능, 구체적으로 애플리케이션으로 들어오는 HTTP 요청 위에서 동작하는 기능을 캡슐화하는 방법이다. - 현실적으로는 요청객체, 응답객체, next() 함수의 세가지 매개변수를 받는 고차함수이다. (에러받는거는 나중에 설명) - 미들웨어는 파이프라인 안에서 실행된다. 순서가 중요하다. - app.use()를 사용해 파이프라인에 미들웨어를 삽입한다. - 파이프라인의 마지막 미들웨어는 이전 라우트와 일치하지 않는 요청을 모두 받는 폴백 핸들러로 만드는 것이 일반.. 2023. 4. 3.
[O'REILLY] Node & Express - 9장 : 쿠키와 세션 1. 들어가면서 - HTTP는 상태가 없는 프로토콜이다. 상태가 없다는 것은 브라우저에서 어떤 페이지를 불러온 다음, 같은 웹사이트의 다른 페이질 이동할 때 같은 브라우저가 같은 사이트에 방문한다는 사실을 알아낼 방법이 없다는 것이다. - 모든 HTTP 요청에는 서버에서 요청을 수행할 때 필요한 정보가 모두 들어있다는 뜻이다. - 이를 해결하기 위해 '상태'를 보존할 방법이 필요했고, 쿠키와 세션이 등장했다. 2. 쿠키에 대해서 - 사용자가 쿠키 내용을 볼 수 있다. - 사용자가 쿠키를 삭제하거나 금지할 수 있다. : 사용자는 쿠키 전체에 대한 권한이 있다. 사용자가 쿠키를 금지할 경우, 웹앱에서 많은 기능이 제약될 수 있다. - 일반적인 쿠키는 변조될 수 있다. : 서명된 쿠키를 사용해야 한다. - 쿠.. 2023. 4. 3.
Node-Express 서버에서 CSRF 공격을 방어하는 방법 안녕하세요! 오늘은 Node.js와 Express를 사용하여 구축한 서버에서 CSRF(Cross-Site Request Forgery) 공격을 방어하는 방법에 대해 설명하겠습니다. CSRF 공격은 웹 사이트의 사용자가 자신의 의도와는 무관하게 공격자가 원하는 작업을 수행하도록 만드는 보안 취약점입니다. 이 포스트에서는 CSRF 공격을 방어하는 방법 중 하나인 CSRF 토큰을 사용하는 방법을 소개하겠습니다. 먼저, 필요한 패키지를 설치해야 합니다. csurf 패키지를 사용하여 CSRF 공격을 방어할 수 있습니다. 패키지를 설치하려면 다음 명령어를 실행하세요. npm install csurf 이제 csurf 미들웨어를 사용하여 CSRF 토큰을 생성하고 검증하는 코드 예제를 살펴봅시다. - 위 코드에서는 cs.. 2023. 3. 31.
[O'REILLY] Node & Express - 8장 : 폼 처리 - 3 (파일 업로드) 1. 파일 업로드 - 멀티파트 폼 처리에 주로 쓰이는 패키지는 버스보이, 멀티파티, 포미더블, 멀터 등이 있다. (채신기술 모름) - 멀티파티와 멀터가 좋다고 하는데 뭐 사용자 나름이다. - 파일 업로드를 활성화하기 위해서는 반드시 enctype="multipart/form-data" 를 사용해야 한다. 예시 - accept 옵션을 통해 파일의 타입을 제한할 수 있다. (실제로 강제하는 것은 아니다) - 이제 서버에서 post요청을 처리해보자. - 멀티파티의 parse 메서드를 사용하여 요청 데이터를 데이터 필드와 파일로 분석한다. - 이 메서드는 파일을 서버의 임시 디렉터리에 저장하며, 그 정보를 files 배열로 반환한다. - 라우트 핸들러에 넘길 정보를 알게 되었으니, 라우트 핸들러를 작성한다. -.. 2023. 3. 31.