12945. 피보나치 수
12914. 멀리 뛰기
12953. N개의 최소공배수
12985. 예상 대진표
오늘은 레이어드 아키텍처에 대하여 찍먹해보았다.
기존 강의에서 배웠던 모놀리식 아키텍처는 소규모 프로젝트까지는 유용하게 사용될지 몰라도 중,대규모 프로젝트로 가면 확장성이나 유지보수성이 떨어진다고 한다.
애플리케이션을 여러 개의 레이어로 분리하여 각 레이어가 특정한 역할을 수행할 수 있도록 구조화 하는 것을 말하며, 코드의 유지보수성을 높이고 재사용성을 향상시키며 테스트를 용이하게 만든다고 한다.
프레젠테이션 레이어
사용자와 상호작용하는 부분이며 웹페이지 또는 API응답을 처리
비즈니스 로직 레이어
핵심 비즈니스 규칙과 로직을 포함하며 데이터 처리 및 계산을 수행
데이터 엑세스 레이어
데이터베이스와 상호작용을 담당, 데이터의 CRUD 작업을 수행
영속성 레이어
데이터베이스, 파일시스템, 외부API 등 접근 관리
에러 처리 레이어
애플리케이션에서 발생하는 에러를 중앙 집중식으로 처리
미들웨어
요청과 응답 사이에 위치하여 중간에서 가로채 처리하는 역할
예시
my-app/
│
├── src/
│ ├── controllers/
│ │ └── userController.js
│ ├── services/
│ │ └── userService.js
│ ├── models/
│ │ └── userModel.js
│ ├── routes/
│ │ └── userRoutes.js
│ ├── middlewares/
│ │ └── authMiddleware.js
│ ├── utils/
│ │ └── errorHandler.js
│ └── app.js
│
├── package.json
└── .env
순서
app.use('/api/users',authMiddleWare, userRoutes);
import express from 'express';
import { UserController } from '../controllers/userController.js';
const router = express.Router();
router.post('/register', UserController.register);
export default router;
import { UserService } from '../services/userService.js';
export const UserController = {
register: async (req, res) => {
try {
const { email, password } = req.body;
const user = await UserService.register(email, password);
return res.status(201).json({ message: 'User registered', user });
} catch (error) {
return res.status(400).json({ errorMessage: error.message });
}
}
};
import bcrypt from 'bcrypt';
import { UserModel } from '../models/userModel.js';
export const UserService = {
register: async (email, password) => {
const hashedPassword = await bcrypt.hash(password, 10);
return await UserModel.createUser({ email, password: hashedPassword });
}
};
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
export const UserModel = {
createUser: async (data) => {
return await prisma.user.create({ data });
}
};
모델 레이어에서 쿼리 결과 서비스 레이어로 반환
서비스 레이어에서 처리한 결과를 컨트롤러로 반환
컨트롤러는 최종적 가공 후 클라이언트 전달
모듈화 되어있다보니 코딩 순서를 어떻게 나눠야 하나 했다.
읽혀지는 순서의 반대로 진행하면 편할 것 같은데... 엘리트 팀원님과 상담 좀 해야겠다.