1st Project_day12_멘토와 함께 회고_11.25

송철진·2022년 11월 25일
0

1st Project

목록 보기
11/13

1. server/client

관계: 요청/응답

clientserverDB
예)브라우저컴퓨터

식당 메뉴판=api다큐먼트
고객=client
식당직원=server

API 란?
server 란?

2. http

  • stateless(상태 없음) 요청 간 독립적인 -> 토큰
requestresponse
start linestatus line
headersheaders
bodybody
  • restful API : 엄격한 게 아니라 그냥 약속.
    http의 method라는 행위로 URI라는 대상에 나타내는 것
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은 다르다. 기능별로 구분된다.

3. app.js

모든 프로그램의 시작점.
app.js - http 통신을 리슨하는 곳: 클라이언트의 요청을 받을 곳
패키지 json에 npm start
(장고-main.py)

4. middleware

app.js에 있는 미들웨어 순서 중요..
요청 시작 -> [ ] - [ ] - [ ] - [ ] ->요청 끝
요청의 시작과 끝 사이에 거치는 모든 함수:

app.use(express.json());
app.use(cors());
app.use(morgan("combined"));
app.use(routes);
app.use(globalErrorHandler);

middleware 란?

5. layered pattern

컨트롤러 - 서비스(로직) - 다오(데이터)
왜 나눌까? 유지보수 용이, 단방향성,
토큰 밸리드 하고 나서
req.user = user 가능.
동일한 req, res 객체가 미들웨어를 거쳐서 돌아나오기 때문에 토큰 사용 가능
왜 app.use()에 validToken을 넣지 않는 이유는?
인증인가가 필요한 부분에만 부여해야 해서!

레이어드 패턴이 다른 곳에서도 일반적으로 쓰이는가?
장고: (템플릿) - 뷰(컨+서) - 모델(DB)

nestJS

6. error handling

동기, 비동기
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()가 없다.

7. how to coding

유저 프로필 API를 구현하려고 한다 무엇부터 시작하겠나?
DB 기획 다 되어 있는 상태일 때

  1. 목적(목표): 명확히 - ex) 유저의 프로필 이미지 수정
  2. 어떤 데이터가 필요하고 어떤 조건이 필요하고 - ex) 특정 집단은 이미지 수정을 할 수 없다 라는 조건.
  3. 프론트에서 온 값들 점검
  4. 가공이 필요한 로직
  5. 내가 응답할 데이터

코딩은 도구일 뿐이고 우리는 코더가 아니다

1.구글링
2.기획 - 무엇, 어떤 거? <- ⭐️
3.복붙
4.유튜브 확인
5.dao함수 구현
6.endpoint 협의

뭘해야할까 뭐가 필요할까?

json 이란? 자바스크립트 객체처럼 보이는 스트링; 용량 적다;

8. query builder

스스로 고민하는 시간을 가져야 한다
고민없이 가져다 쓰면 나에게 남는 게 없다
과정은 내 것.
회사에서 필터링 만들라고 시켰을 때 만들 수 있는가?

참고)

// 파라미터 value = ["red", "blue"] 
function a(value){
  	...
    // 내가 구현한 방법
    return `WHERE colors IN ('${value.join(\', \')}')`;
	// 결과: WHERE colors IN ('red', 'blue')

	// 경훈 멘토님이 보여준 방법: 맞나??
	return `WHERE colors.name IN (${String(value)})` 
    
    
}

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글