백엔드 기초 쌓기
Node.js
- 서버 단에서 자바스크립트를 실행할 수 있는 자바스크립트 런타임 **런타임 : 코드가 실행되는 환경
각 계층이 각 하단에 있는 API를 사용하는 계층의 집합으로 설계되어 있음
싱글 스레드
-> 콜 스택이 하나만 있음
이벤트 기반 아키텍처
-> 구현방법 : 반응자 패턴 (= 이벤트 디멀티플렉서 + 이벤트 큐)
이벤트를 추가하는 주체와 해당 이벤트를 실행하는 주체를 분리하는 구조 -> 이벤트 루프 필수 (libuv)
V8 : 오픈 소스 자바스크립트 엔진; 자바 스크립트 코드를 실행하도록 해줌
**엔진 : 사용자가 작성한 코드를 실행하는 프로그램
libuv : 이벤트 루프 및 운영체제 계층 기능을 사용하도록 API 제공함
Express
- Node.js에서 가장 많이 사용되는 웹 프레임워크
서버의 종류
1. 웹 서버
파일이나 이미지 같은 정적인 파일을 서비스; 요청된 웹페이지나 정보를 제공하는 서버
2. WAS(: Web Application Server)
동적인 웹 애플리케이션을 실행하는 데 사용되는 서버; 웹 프레임워크를 실행시켜 요청받은 데이터를 처리하는 역할을 함
-> 데이터 처리
백엔드 아키텍처
아키텍처 : 계획(종합적으로 분석, 계획, 정리한 것); 총체적이고 종합적이고 상세하게 개발을 준비하는 것
아키텍처의 종류
1. 계층형 아키텍처
: 소프트웨어를 몇 가지 계층으로 나누어서 만드는 방식
각 계층은 주어진 역할을 수행하며, 의존성이 단방향
장점: 복잡도가 낮고, 계층 내에서 관련 코드의 응집도가 높음, 테스트가 쉽다
단점: 애플리케이션의 규모가 클 경우 계층이 거대해지며 유지보수가 힘들고, 개발 속도가 떨어짐, 배포도 어려움
ex) TCP/IP
2. 이벤트 기반 아키텍처
: 이벤트의 상태 변화에 대응하는 소프트웨어 설계 패턴
모든 요청을 비동기로 처리함 **비동기 : 흐름이 멈추지 않고 동시에 여러 가지 작업처리가능
[구성]
- 프로듀서 : 이벤트 발생시킴 - 브로커 : 이벤트 전달 - 컨슈머 : 이벤트 받음
3. 마이크로서비스 아키텍처
: 시스템을 여러 개의 작은 서비스로 나누어 관리하는 설계방식
독립적으로 개발, 배포, 운영되며, 서로 구조적으로 분리되어 있음; 대규모 시스템 구축에 유용
이외에도 다양한 아키텍처가 있음.............
require() : 모듈을 읽어오는 함수
const http = require("http");
▽ http 모듈을 불러와서 http 변수에 할당함
createServer() : 서버 인스턴스를 만드는 함수; 콜백함수를 인수로 받음
콜백함수 : http 서버로 요청이 들어오면 해당 요청을 처리할 함수; 요청 처리에 사용할 요청(req)와 응답(res)객체를 인수로 받음
○ req : 경로로 들어오는 모든 요청을 담고 있다; request; 클라이언트로 오는 HTTP 요청
○ res : 요청에 대한 응답을 보냄; response; 서버가 클라이언트에 보내는 HTTP 응답
http 주요 상태 코드
코드 | 메시지 | 설명 |
200 | OK | 요청 처리 성공 |
400 | Bad Request | 요청 실패. 클라이언트의 요청에 문제가 있음 |
404 | Not Found | 페이지를 찾을 수 없음 |
500 | Internal Server Error | 서버 에러 |
라우팅
: URL경로(path)에 따라서 다른 응답을 주는 것
URL 구성요소
○ 프로토콜 ○ 호스트명 ○ 경로 ○ 해시
쿼리 스트링(query string)
: HTTP 요청을 보낼 때 사용자가 원하는 값을 보내는 방식; ?key=value 형식으로 사용 + 여러 개일 경우 &로 연결
리팩터링(refactoring)
: 동작 결과를 변경하지 않으면서 코드의 구조를 재조정하는 작업; 가독성을 높이고 유지보수를 편하게 하는 목적
출처: Node.js 백엔드 개발자 되기