모각코 3회차(3.29)

기먼지·2023년 4월 1일
0

인생작

목록 보기
3/9

Node.js

👉 JavaScript를 browser가 아닌 다른 환경에서 사용할 수 있도록 해줌

즉, JavaScript로 만드는 백엔드/서버는 Node.js라는 런타임 환경에서 할 수 있는 일의 일부

Express


Express는 Miidleware, Routing을 사용해서 서버를 쉽게 구성

Middleware


Middleware 함수는 요청 오브젝트(req), 응답 오브젝트(res), 애플리케이션의 요청-응답 주기 중 그 다음의 middleware 함수에 대한 액세스 권한을 갖는 함수

Routing


URI 및 특정한 HTTP 요청 메소드인 특정 엔드포인트에 대한 client 요청에 어플리케이션이 응답하는 방법을 결정하는 것

// app.js
import express from 'express';

const app = express();  // express app을 생성

app.use('/api', apiRouter);  // use 메소드를 통해 app 인스턴스에 authRouter 미들웨어를 바인딩
// auth.js
import { Router } from 'exrpess';

const authRouter = Router();

// post 메소드 요청 중 지정된 path에 해당하는 응답을 두 번째 인자에 등록한 미들웨어로 처리
authRouter.post('/signup', authController.signup);
authRouter.post('/signup', authController.signin);

디렉토리 구조


config : 환경 설정을 위한 폴더

database : 데이터베이스 상위 폴더

models : 데이터베이스의 각 테이블에 해당하는 파일 모음

routes : 라우터 모음, path와 유사한 폴더 구조

controllers : request, response 담당

services : 비즈니스 로직을 담당

migrations : data access layer, 데이터베이스와 통신하는 영역

utils : 어디에서든 쓸 수 있는 범용성있고 재사용 가능한 유틸 모음

errors : 구체적인 에러 객체를 생성하기 위한 파일 모음

middlewares : 미들웨어를 모아두는 폴더

동기&비동기


  1. 동기(Synchronous)
    • 요청한 결과가 동시에 일어남
    • 시간과 상관없이 작업의 결과가 요청과 동시에 나옴
1번 : 빨래를 돌린다.  // 1시간
2번 : 설거지를 한다.  // 10분
3번 : 청소를 한다.  // 30분

총 걸린 시간 : 1시간 40분
  1. 비동기(Asynchronous)
    • 요청과 결과가 동시에 일어나지 않음
    • 시간이 오래걸리는 일은 요청시 백그라운드에서 작업
1번 : 빨래를 돌린다.  // 1시간
2번 : 설거지를 한다.  // 10분
3번 : 청소를 한다.  // 30분

총 걸린 시간 : 1시간 + α

비동기처리 방식

👉 1. 콜백함수 2. promise (resolve, reject) 3. then & catch 4. async & await

콜백함수


나중에 실행되는 함수로 비동기 작업이 끝나고 난 뒤 실행되는 함수

setTimeout((arg) => {
	console.log(arg)

	setTimeout((arg) => {
		console.log(arg)

		setTimeout((arg) => {
			console.log(arg)

			setTimeout((arg) => {
				console.log(arg)

			}, 1000, "네번째 콜백")
		}, 1000, "세번째 콜백")
	}, 1000, "두번째 콜백")
}, 1000, "첫번째 콜백")

이러한 반복된 콜백 문제로 가독성이 떨어져 ES6에 promise 객체가 나옴

promise(resolve, reject) + then & catch


const test = new Promise((resolve, reject) => {
	if(resolve) {
		resolve("성공")
	}
	if(reject) {
		reject("실패')
	}
});

console.log(test)  // Promise { <pending> }

하지만 promise를 써서 비동기처리를 하게 되면 반환값이 promise 객체로 반환됨 → then & catch 사용

promise를 사용해서 성공시에는 then에 인자가 담겨서 사용 가능, 실패시 catch에 담겨서 예외처리

const test = new Promise((resolve, reject) => {
	if(resolve) {
		resolve("성공")
	}
	if(reject){
		reject("실패")
	}
});

test.then(result => {
	return console.log(result)
	})
	.catch(err => {
	return console.log(reulst)
	})
	// 성공

👉 promise 객체의 상태 3가지
  1. Pending(대기) : 미완료 상태
  2. Fulfilled(이행) : 완료 상태
  3. Rejected(실패) : 실패 상태

async & await


promise 객체를 좀 더 사용하기 쉽게 만듦

함수 앞에 async를 달아주고 await로 비동기 코드를 호출하여 바로 사용할 수 있게 해줌

const test = async () => {
	const test = await 비동기함수
}
profile
열심히 굴러가기 !

0개의 댓글