즉, JavaScript로 만드는 백엔드/서버는 Node.js라는 런타임 환경에서 할 수 있는 일의 일부
Express는 Miidleware, Routing을 사용해서 서버를 쉽게 구성
Middleware 함수는 요청 오브젝트(req), 응답 오브젝트(res), 애플리케이션의 요청-응답 주기 중 그 다음의 middleware 함수에 대한 액세스 권한을 갖는 함수
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번 : 빨래를 돌린다. // 1시간
2번 : 설거지를 한다. // 10분
3번 : 청소를 한다. // 30분
총 걸린 시간 : 1시간 40분
1번 : 빨래를 돌린다. // 1시간
2번 : 설거지를 한다. // 10분
3번 : 청소를 한다. // 30분
총 걸린 시간 : 1시간 + α
나중에 실행되는 함수로 비동기 작업이 끝나고 난 뒤 실행되는 함수
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 객체가 나옴
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 객체를 좀 더 사용하기 쉽게 만듦
함수 앞에 async를 달아주고 await로 비동기 코드를 호출하여 바로 사용할 수 있게 해줌
const test = async () => {
const test = await 비동기함수
}