기존 자바스크립트 기반의 프로젝트를 타입스크립트로 전면 마이그레이션
tsconfig.json 설정 및 개발 환경(ts-node, nodemon) 구성
비즈니스 로직을 Controller / Service / Repository 계층으로 분리
DTO (Data Transfer Object) 도입으로 유효성 검사 및 계층 간 데이터 흐름 명확화
tsconfig.json 설정 (outDir, rootDir, strict 등)
@types/express, @types/node, ts-node, nodemon 설치
개발 서버 실행 스크립트 작성
→ npm run dev (ts-node + nodemon 사용)
├── prisma
│ └── schema.prisma, seed.js
├── src/controllers
│ └── article.controller.js, comment.controller.js, product.controller.js
├── src/middlewares
│ └── auth.js, ownership.js, validation.js
├── src/routes
│ └── article.routes.js, comment.routes.js, product.routes.js, upload.routes.js, auth.routes.js, user.routes.js
├── src/utils
│ └── errorHandler.js, token.js, app.js, server.js
├── src/repositories
│ └── article.repository.ts, comment.repository.ts, product.epository.ts
├── src/dtos
│ └── article.dto.ts, comment.dto.ts, product.dto.ts
├── src/services
│ └── article.service.ts, comment.service.ts, product.service.ts
├── types/express
│ └── index.d.ts
├── uploads
│ └── 무침족발-1748236229012.jpg, 아이폰11프로-1748236221455.png, 컴퓨터책상-1748237562476.png, 혜원style1-1751108365297.png, 홈트하는여자-1748236237385.png
├── .env
├── .gitignore
├── package-lock.json
├── package.json
├── test.http
└── tsconfig.json
zod 라이브러리로 CreateProductDto, UpdateCommentDto 등 정의
각 Controller에서 safeParse()를 통해 유효성 검사 수행
req.body에 직접 접근하는 대신 파싱된 데이터 사용
예:
const parsed = CreateProductDto.safeParse(req.body);
if (!parsed.success) return res.status(400).json({ error: parsed.error.issues[0].message });
export const createProduct = async (req, res) => {
const parsed = CreateProductDto.safeParse(req.body);
const product = await ProductService.createProduct(parsed.data);
};
export class ProductService {
static async createProduct(data) {
return await ProductRepository.create(data);
}
}
export const ProductRepository = {
create: async (data) => prisma.product.create({ data })
};
Controller → Service → Repository 흐름에 console.log 삽입하여 추적
DTO 유효성 검사 테스트 (빈 문자열, 타입 오류 등)
인증/인가 테스트 (req.user 인증, 소유자만 수정 가능 등)
실제 DB 반영 여부 확인 (Prisma Studio 활용)
test.http로 API 자동 테스트 작성 및 반복 확인
타입스크립트 도입 후 컴파일 타임 오류 발견이 쉬워졌고, 생산성이 향상되었다.
레이어드 아키텍처 덕분에 책임이 명확히 나뉘어 유지보수가 쉬워졌다.
DTO 사용으로 데이터 유효성 검사를 명확하게 수행할 수 있었고, 클린 코드 작성에 도움이 되었다.
작은 프로젝트라도 구조적으로 짜는 습관이 중요하다는 것을 느꼈다.