본문 바로가기

더이상 하지 않는 Backend - NodeJS35

[O'REILLY] Node & Express - 15장 : REST API와 JSON - 지금까지 여러 REST API의 예제를 보아왔지만, 지금껏 '서버에서 데이터를 처리하고 클라이언트에게 html을 전송한다는 예제' 가 주를 이뤘다. - 하지만 2023 현재 대세는 상당수가 HTML, CSS, JS 등의 렌더링 파일 자체는 정적으로 받아오고, 실제 데이터는 JSON으로 AJAX를 통해 받아서 HTML를 구성하는 SPA의 형태를 띄는 경우도 많다. 물론 SEO가 구려서 SSR이 다시 대두되고 있어서 프로젝트의 형태와 목적에 따라서 적절히 구성하는 것이 현명하다. - 어쨌든 SSR 방식이더라도, 서버의 API는 매우 중요하며, API엔드포인트를 제공하는 방법을 알아야한다. - 웹 서비스는 HTTP로 접근할 수 있는 어플리케이션 프로그래밍 인터페이스 (Application Programmi.. 2023. 4. 11.
[O'REILLY] Node & Express - 14장 : 라우팅(Route) - 라우팅은 웹서비스에서 중요한 요소 중 하나이다. - 라우팅은 보통 파일 기반으로 운영된다. - 단순하지만 유연하지 않다. - 익스프레스 라우팅의 기술적인 측면에서는 정보구조(Information Architecture, IA) 의 개념을 알아야 한다. - IA는 콘텐츠를 개념적으로 구조화 하는것. - IA는 즉, 콘텐츠를 주의깊게 분류하고, 논리적으로 분류하고, 스스로 코너에 몰리지 않도록 하는 개념적 방법론이다. 1. 오랫동안 유지할 수 있는 IA의 수립 조건 - URL에 기술적 세부사항을 노출하지 않는다 - URL에 의미없는 정보를 노출하지 않는다. : 의미 없는 단어가 있다면 제거한다. - 의미 없이 긴 URL은 피한다. : 다른 조건이 모두 같다면, 짧을수록 좋다. 하지만 SEO도 명심해야 한.. 2023. 4. 10.
[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.