관계: 요청/응답
client | server | DB | |
---|---|---|---|
예) | 브라우저 | 컴퓨터 | |
식당 메뉴판=api다큐먼트
고객=client
식당직원=server
API 란?
server 란?
request | response | |
---|---|---|
start line | status line | |
headers | headers | |
body | body |
1. GET :3000/products # 상품들을 조회하는 API겠구나!
2. GET :3000/products/1 # 여러 개의 상품들 중 productId=1을 조회하는 API겠구나!
3. GET :3000/products/1/reviews # 여러 개의 상품들 중 productId=1의 리뷰들을 조회하는 API겠구나!
4. GET :3000/reviews # 모든 제품의 리뷰를 조회하는 API
제품 중점이면? 3.
리뷰 중점이면? 4.
프론트의 URL은 페이지 단위로 구분된다.
but 백의 URL은 다르다. 기능별로 구분된다.
모든 프로그램의 시작점.
app.js - http 통신을 리슨하는 곳: 클라이언트의 요청을 받을 곳
패키지 json에 npm start
(장고-main.py)
app.js에 있는 미들웨어 순서 중요..
요청 시작 -> [ ] - [ ] - [ ] - [ ] ->요청 끝
요청의 시작과 끝 사이에 거치는 모든 함수:
app.use(express.json());
app.use(cors());
app.use(morgan("combined"));
app.use(routes);
app.use(globalErrorHandler);
middleware 란?
컨트롤러 - 서비스(로직) - 다오(데이터)
왜 나눌까? 유지보수 용이, 단방향성,
토큰 밸리드 하고 나서
req.user = user 가능.
동일한 req, res 객체가 미들웨어를 거쳐서 돌아나오기 때문에 토큰 사용 가능
왜 app.use()에 validToken을 넣지 않는 이유는?
인증인가가 필요한 부분에만 부여해야 해서!
레이어드 패턴이 다른 곳에서도 일반적으로 쓰이는가?
장고: (템플릿) - 뷰(컨+서) - 모델(DB)
nestJS
동기, 비동기
catchAsync 와 globalErrorHandler의 차이?(미들웨어의 관점)
c - 비동기 함수를 에러처리 하기위한 wrapper 함수
try catch
const catchAsync =(func) => {
return (req, res, next) => {
func(req, res, next).catch((error) => next(error))
}
}
// next()는 글로벌 에러 핸들러
// js 클로저를 공부하세요! 스코프, 데코레이터
g - express 사이클 안에서 에러 발생 시 에러 처리하기위한 미들웨어.
에러 처리 시 무조건 err 인자를 맨 앞에 받아야 함.
마지막 미들웨어라서 next()가 없다.
유저 프로필 API를 구현하려고 한다 무엇부터 시작하겠나?
DB 기획 다 되어 있는 상태일 때
코딩은 도구일 뿐이고 우리는 코더가 아니다
1.구글링
2.기획 - 무엇, 어떤 거? <- ⭐️
3.복붙
4.유튜브 확인
5.dao함수 구현
6.endpoint 협의
뭘해야할까 뭐가 필요할까?
json 이란? 자바스크립트 객체처럼 보이는 스트링; 용량 적다;
스스로 고민하는 시간을 가져야 한다
고민없이 가져다 쓰면 나에게 남는 게 없다
과정은 내 것.
회사에서 필터링 만들라고 시켰을 때 만들 수 있는가?
참고)
// 파라미터 value = ["red", "blue"]
function a(value){
...
// 내가 구현한 방법
return `WHERE colors IN ('${value.join(\', \')}')`;
// 결과: WHERE colors IN ('red', 'blue')
// 경훈 멘토님이 보여준 방법: 맞나??
return `WHERE colors.name IN (${String(value)})`
}