대외활동/코드잇부스트_백엔드 1기

2024.10.02-데모데이 트러블슈팅 정리

피스타0204 2025. 2. 3. 18:10

1) application server-side error

서버에서 발생하는 문제입니다.

더보기

1) 코드 오류 (Unhandled Error)

  • 예외 처리가 되지 않은 코드에서 발생하는 오류입니다.

 해결 방법

js
복사편집
app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ message: "서버 오류가 발생했습니다." }); });

2) 데이터베이스 연결 문제

  • MongoDB, MySQL 등의 DB 연결이 실패하면 서버 오류가 발생할 수 있습니다.

 확인 방법

js
복사편집
mongoose.connect(process.env.MONGO_URI) .then(() => console.log("MongoDB 연결 성공")) .catch(err => console.error("MongoDB 연결 실패", err));

.env 파일에서 데이터베이스 URL을 올바르게 설정했는지 확인하세요.


3) 환경 변수 (.env) 누락

  • 환경 변수가 설정되지 않았거나 process.env에서 값을 가져오지 못할 때 발생할 수 있습니다.

 확인 방법

js
복사편집
require("dotenv").config(); console.log(process.env.SECRET_KEY);

4) 잘못된 API 요청 (Invalid Request)

  • 프론트엔드에서 예상과 다른 데이터를 보내면 서버에서 에러가 발생할 수 있습니다.

 해결 방법

js
복사편집
app.post("/api/data", (req, res) => { if (!req.body.name) { return res.status(400).json({ message: "이름이 필요합니다." }); } });

5) 서버 메모리 부족

  • 너무 많은 요청이 들어오거나 메모리 누수로 인해 서버가 다운될 수 있습니다.

 확인 방법

sh
복사편집
pm2 list # 프로세스 상태 확인 free -m # 메모리 사용량 확인
  • 불필요한 서버 프로세스를 종료하고, pm2 restart all로 재시작하세요.

6) CORS 정책 문제

  • 클라이언트와 서버의 도메인이 다르면 CORS 오류가 발생할 수 있습니다.

 해결 방법

js
복사편집
const cors = require("cors"); app.use(cors({ origin: "http://yourfrontend.com", credentials: true }));

7) 서버 배포 문제

  • Render, Vercel, AWS, Firebase 등 클라우드 서버에서 배포 시 환경 변수, 포트 설정, 빌드 오류 등을 확인해야 합니다.

2. BSONTypeError: Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer
나 CastError: Cast to ObjectId failed for value "someString" at path "_id"

MongoDB Atlas(클라우드 기반 MongoDB)에서는 _id 필드를 자동으로 생성합니다. 이미 만들어진 _id 필드를 만들거나 접속하려고 하기 때문에 오류가 발생했습니다.

 

브라우저에서 배포된 프론트와 연결하려고 했을때 server-side error가 발생하였는데 사실 프론트엔드는 int값으로 _id를 사용하는데 백엔드는 objectId(string)값으로 사용하려고 했기 때문입니다.

MongoDB Atlas 의 objectid는 절대 바꿀 수 없기 때문에 저희는 프론트 코드를 해서 string으로 일일이 바꾸었습니다.

 


후기) 코드잇 데모데이에 제공된 백엔드 api목록이 api/ 이렇게 쓰여 있었는데 해당값을 기반으로 경로를 설정하면 연결이 안되는 오류가 있었습니다.

이번에 spring boot를 공부하면서 보니 springboot에서는 api를 설정할 때 api로 경로가 설정되더라구요.

프론트는 next js, 백엔드는 springboot를 사용했다는 쓸데없는 추가정보...