데브코스 웹풀스택 과정/TIL

0925 라우터를 이용해 회원과 채널 서버 합치기, 유효성 검사

thinktank911 2025. 9. 25. 15:49

  라우터를 통해 user와 channel 서버를 각각 돌리던 걸 app.js 하나로 합치는 것을 해봤다. user와 channel의 관계, 즉 회원id가 있어야 채널을 만들 수 있는 유효성 검사를 하기 위해 테이블을 직접 그려봤다. 이때, userId 값은 회원 로그인 정보이므로 보통 header에 담아서 보내주는데 연습용으로 body에 담아 보내는 것으로 구현했다. 예외 처리 간단히 만들기 위해서 if문을 하나로 합치거나 예외처리문을 함수로 빼는 등의 고도화를 시도했다.


Server와 Router의 역할

  • Server : Request를 받는다.
  • Router : Request의 URL에 따라 루트(route)를 정해준다. = 어디로 갈지 길만 정해줌

 

Node.js에서의 라우팅이란?
Request(요청)이 날아왔을 때, 원하는 경로에 따라 적절한 방향으로 경로 안내해주는 것

  • URL, method => 호출 콜백함수가 다르다.
  • user와 channel 하나로 합치는 게 목표
  • 내가 만든 파일 모듈화 가능 - exports

user-demo

  • 서버를 app.js로 이동
  • user-demo에 있던 const app = express() 대신 const router = express.Router() 사용한다.
  • app을 router로 바꾼다.
  • module exports 하기
  • app.js에서 user-demo require로 받기
  • app.use로 외부모듈 사용

 

※ 파일 이름 변경 : user-demo.js => users.js : 모듈 호출한 곳도 자동으로 리네이밍 해줌

 

channel-demo

  • 중복된 url 경로를 app.js로 빼줄 수 있다. => /channels
app.use("/", userRouter)
app.use("/channels", channelRouter)

 

app.js

// express 모듈 셋팅
const express = require('express')
const app = express()
const port = 7777
app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})


const userRouter = require('./routes/users')    // user-demo -> users
const channelRouter = require('./routes/channels')// channel-demo -> channels

app.use("/", userRouter)
app.use("/channels", channelRouter)

 

회원과 채널 ERD 테이블 그려보기

채널 API 설계 수정,  채널 생성 테스트

채널 API 설계 수정

  • 수정방향 : 채널생성 및 채널 전체 조회에서 회원id 고려
  • 원래는 회원id를 헤더로 받아야함.
    cf. userId는 body x header 숨겨서...Token
  • 지금은 body에 받기

1) 채널 생성 : POST /channels 수정 방안

  • req : body(channelTitle/userId) => req값에 userId만 추가해서 보내주면 된다.

 

 

4) 회원의 채널 전체 조회 : GET /channels 수정 방안

  • req : x => body(userId) : req.body로 userId 넘겨준다.
  • res 200 : 채널 전체 데이터 list, json array
  • 두 가지 예외 처리가 필요하다
    • 1) userId가 body에 없을 때
    • 2) 해당 userId가 가진 채널이 없을 때

if문 고도화 방법

if문이 중첩되고 반복되는 예외처리 구문이 있어 코드가 복잡해보인다. if문을 정리해주는 몇 가지 방법을 시도해보려 한다.

  • if문 합치기 : db.size 체크와 req.body의 userId를 체크하는 if문 조건문을 하나로 합쳤다.
  • 예외처리문 함수로 빼기 : 중복되는 예외 처리문을 notFoundChannel() 함수로 뺐다.
  • 그 밖에 try catch

 

백엔드 기초 마무리

  • 회원에 id를 없애고, userId를 키값으로 쓰기로 결정했으므로 url에서 id 받아오는 방식을 변경해준다.
  • userId는 개인정보이므로 body로 보내주기로 한다.
  • url을 id로 받아오는 api 메소드인 회원정보 개별 조회랑 개별 탈퇴를 수정해준다.

3)회원정보조회 : GET /users

  • req : body (userId)
  • res : id, name

4)회원 개별 탈퇴 : DELETE /users

  • req : body (userId)
  • res : ${name}님 다음에 또 뵙겠습니다. or 메인페이지

 

<이슈>

회원개별삭제 후 로그인 됨.
  • id를 userId로 바꾸는 과정에서 db.delete(id) => db.delete(userId)로 바꾸지 않아 문제 발생
  • 변경 후 예외처리 잘 됨.

회원과 채널의 관계성을 넣으면서 유효성 검사 등 확인해야 할 조건들이 늘어났다. 고도화 및 리팩토링할 것들이 눈에 보인다. 예외처리 문을 함수로 빼는 것이나 if문을 하나로 합치는 것 등은 코드를 깔끔하게 해준다. try ~ catch문을 사용해 코드를 깔끔하게 하는 방법도 살펴봐야겠다. 라우터를 사용해 서버를 하나로 합치는 것도 express-generator 폴더 구조 공부하면서 살펴봤었는데 수업에 나와서 한 번 더 짚고 넘어갔다.