내 코드가 동료의 신뢰를 얻기 위한 첫걸음
배포 전 '불쇼'를 막아줄 강력한 마무리 투수: JEST & Supertest
최근 알게된 '마무리 투수'를 소개합니다!
어느 덧 개발(node.js) 공부를 시작한 지 3개월이 지났습니다. 매일매일 새로운 내용을 배우는 데, 머리에서는 휘발되는 속도가 더 빠른 것 같다는 생각을 하루에도 몇 번씩 하게되는 지 모르겠습니다. 수업을 듣거나 자습 시간에 이전에 작성한 코드를 되돌아 볼 때면 “이거 내가 짠게 맞아? 이렇게 배운게 기억이 안날 수 있을까?”하는 자조 섞인 의문이 들기도 합니다.
오늘은 'JEST'와 'Supertest'라는 것에 대해 배웠습니다. 지금까지도 기능을 완성하면 'Postman'이나 'REST Client'로 정상적으로 동작하는지 확인했는데, 보다 정밀하고 종합적으로 테스트 할 수 있는 프레임워크가 있었네요.
내가 짠 코드에 확신이 없을 때, 자신감을 불어 넣어 줄 수 있는 도구를 알게 되어 반가웠고, 함께 공부하는 학우와 동료를 향한 ‘최소한의 예의’일 수도 있게다는 생각이 들기도 했습니다.
도구 소개: 내 코드를 지키는 든든한 조력자
본격적인 이야기에 앞서, 제가 사용한 두 가지 도구를 한 줄로 정리해 봅니다.
» Supertest - 실제 서버 가동 없이 HTTP 요청과 응답을 시뮬레이션하여 ‘API 엔드포인트의 무결성을 검증’하는 라이브러리입니다.
왜 테스트 코드가 '마무리 투수'일까?
단순히 기능이 돌아가는 것과, 어떤 상황에서도 안전하게 돌아가는 것은 전혀 다른 내용입니다. 테스트 코드를 작성하면서 제가 느낀 가장 큰 변화는 ‘명확하지 못했던 개발 내용을 코드로 다시 한번 확인하게 된다는 점’이었습니다.
"사용자가 필수 값을 빼먹고 보내면 우리 서버는 어떻게 반응해야 하지?"
"잘못된 토큰으로 접근하면 정확한 에러 메시지를 던져주고 있나?"
이런 질문들에 답을 하는 과정이 결국 내가 짠 로직의 빈틈을 메우는 과정이었습니다. 위기의 순간에 등판해 경기를 안전하게 마무리 짓는 투수처럼, JEST와 Supertest는 배포 직전 발생할 수 있는 '불쇼(예상치 못한 에러)'를 사전에 차단해 줍니다.
동료를 위한 품질 보증서
간단한 테스트 코드 예시입니다.
import request from 'supertest';
import app from '../src/app';
describe('게시글 API 테스트 (JEST & Supertest)', () => {
// 1. POST 실패 케이스: 기획서에 명시된 필수 값이 없을 때
it('POST /posts - content(필수)가 누락되면 400 에러를 반환한다', async () => {
const response = await request(app)
.post('/posts')
.send({
title: '테스트 제목'
// content 필드를 의도적으로 누락하여 기획상의 예외 처리를 확인합니다.
});
expect(response.statusCode).toBe(400);
expect(response.body.message).toBe('내용을 입력해주세요.');
});
// 2. GET 성공 케이스: 생성된 데이터를 정확히 가져오는지 확인
it('GET /posts/:id - 정상 ID 조회시 200과 게시글 내용을 반환한다', async () => {
const validId = 1; // 존재하는 게시글 ID 가정
const response = await request(app)
.get(`/posts/${validId}`);
expect(response.statusCode).toBe(200);
// 응답 바디에 기획했던 필드(id, title, content)가 모두 포함되었는지 확인합니다.
expect(response.body).toHaveProperty('id', validId);
expect(response.body).toHaveProperty('title');
expect(response.body).toHaveProperty('content');
});
});맺으며: 협업의 예의, 테스트 코드
3개월 차 개발자인 저에게 테스트 코드는 단순한 검증 도구라고만 생각할 수 없었습니다. 함께 배우고 학우와 동료에게 보내는 ‘신뢰의 약속’일 수도 있겠다는 생각을 하게 됩니다.
아직 배울 것이 많지만, 적어도 내가 만든 코드가 누군가에게 '민폐'가 되지 않도록 JEST라는 확실한 마무리 투수를 배우게 되어 조금은 마음이 가벼워진 느낌이네요. 여러분의 서버는 안전하게 승리를 지키고 있나요?