김데이의 개발공부

[ TIL ] Day 29 - 팀 초급 프로젝트(실습) : 협업 셋팅(Git clone, 코드 작성 규칙 숙지) & 개별 API 작업 본문

코드잇 Node.js(BE) 부트 캠프/TIL (Today I Learn) 📑

[ TIL ] Day 29 - 팀 초급 프로젝트(실습) : 협업 셋팅(Git clone, 코드 작성 규칙 숙지) & 개별 API 작업

theday365 2025. 11. 6. 10:20
반응형

🗓️ 수업 일자 : 2025.11.5

✨ 오늘의 수업 평가 :  [ PROJECT ]  아직은 미완성, 내일이 기대돼! ⏭️🚀

 

팀 작업을 하면서 틈틈히 개인 프로젝트 멘토링 받은거 수정하느라 

한번에 2개 프로젝트를 하다보니 체력이 부족ㅠㅠ 

포스팅 써 놓고 최종 검토를 못해서 결국 업로드 날짜가 11월 6일이라는건 안비밀입니다 ㅋㅋㅋㅋ 

개발도 결국 체력 싸움이구나 싶다~💪🏻

 

👩‍💻 [프로젝트] 오늘 작업 내용 💻
- 팀 프로젝트 기초 작업 : 협업 셋팅 (Git clone, branch setting, 코드 작성 규칙 숙지)

- 팀 프로젝트 작업 : 개별 API 작업  

 

📝  오늘 배운 내용  

- uuid() vs autoincrement()

- 유효성 검증 미들웨어 구성
- .gitatturibute란?


1. uuid() vs autoincrement() 

uuid() 

  • 전세계 유일한 식별자
  • DB에 의존하지 않고 APP(Prisma, nodeJS)에서 생성 가능
  • 분산 시스템, 샤딩 구조(서버를 여러 개 사용), 외부 데이터 연동 작업에서 ID 충돌이 거의 제로에 가까움 
  • 현업에서는 특별한 경우( IP / 휴대폰 번호 로그인 처럼 일상 세계에서도 겹치지 않는 정도) 혹은 규모가 엄청 큰 경우에 사용

autoincrement()

  • 새 row가 추가 될 때마다 자동으로 1씩 증가하는 정수 ID
  • SQL 엔진이 직접 관리하여 단일 DB에서 간편하고 빠름
  • 현업에서는 대부분의 id 셋팅에서 해당 방식을 주로 사용
  • 축약으로 ai() 라고 쓰기도 함

장 단점 비교

  uuid()  autoincrement()
장점 서버 부하 줄임(클라이언트에서 미리 생성 가능)
보안성이 높음
DB 마이그레이선, DB 이전 시 충돌 적음
검색, 인덱싱 효율이 좋다
숫자 기반이라 읽고 관리하기 쉽다
단점 길이가 길다(36문자, 16바이트)
랜덤 정렬이라 인덱스 효율이 떨어짐
서버가 분산 될 경우 사용 불가함(숫자 중복 가능)
예측 가능한 ID여서 보안에 취약함

 

 

 

2. 유효성 검증 미들웨어 구성

- 기존 : superstruct 사용하여 비니지스 로직 안에서 유효성 검사 진행

- 변경 : 미들웨어를 만들고 그 안에서 검증을 진행. 값에 문제가 있다면 catch문을 통해 에러를 response로 전달

 

1. 기존 비지니스 로직(xx_controllers.js)에서 superstruct 관련 구문을 찾음 

비지니스 로직 안에서 실행되는 유효성 검사 구문, import문 2줄과 실행 구문
비지니스 로직 안에서 실행되는 유효성 검사 구문, import문 2줄과 실행 구문

 

2. 신규 미들웨어 파일에 우선 import문을 동일하게 가져옴

기존 xx_controllers.js에서 사용하던 import문 2줄을 복사해옴
기존 xx_controllers.js에서 사용하던 import문 2줄을 복사해옴

 

3. 아래의 내용을 참고하여 신규 미들웨어를 작성 함

// 신규 등록 시 사용할 미들웨어
export function productCreateValidation(req, res, next) {
  try {
    // 비지니스로직에서 사용하던 유효성 검사 구문 그대로 사용
    assert(req.body, CreateProduct); 
    
    // 검사 후 요청문이 실행 될 수 있도록 next(); 처리
    next();
    
  } catch (err) {
  
    // 값이 없는 경우 결과로 보낼 에러코드와 관련 메세지
    res.status(400).json({
      message: 'Invalid Request body',
      details: err.message,
    });
  }
}

// 내용 수정 시 사용할 미들웨어
export function productUpdateValidation(req, res, next) {
  try {
    assert(req.body, PatchProduct);
    next();
  } catch (err) {
    res.status(400).json({
      message: 'Invalid Request body',
      details: err.message,
    });
  }
}

 

4. 작성을 완료 한 뒤, xx_route.js 파일에 해당 미들웨어들을 삽입.

xx_route.js 파일에 미들웨어 적용 결과
xx_route.js 파일에 미들웨어 적용 결과

 

5. 작업 후 요청 테스트 진행 ✨

[왼쪽] 등록 작업 정상 작동 / [오른쪽] 등록 작업시 요청내용이 잘못 된 경우 에러 출력

 

 

3. .gitatturibute란? 

기본 개념

  • Git이 파일을 다루는 방식을 제어하는 설정 파일
  • 줄바꿈 방식, 병합 전략, diff 표시 방식, 언어 감지 등을 제어 가능
  • 협업 프로젝트에서 윈도우/맥 환경 차이로 생기는 줄바꿈 충돌 방지

사용 예제

# 기본 설정
* text=auto

# OS 줄바꿈 통일
*.js text eol=lf
*.jsx text eol=lf
*.json text eol=lf

# 바이너리
*.png binary
*.jpg binary
*.gif binary

# 병합 시 내 쪽 우선
package-lock.json merge=ours

 

 


 

📃 내일은 뭘 배울까 🤔

- 팀 프로젝트 작업 진행!

 

반응형