Route, Controller, Service ๊ตฌ์กฐRoutesํด๋ผ์ด์ธํธ(FE)์ ์์ฒญ์ ๋ฐ์์ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ Controller ์๊ฒ ์ ๋ฌํ๋ฉฐ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ง์
์ (entry point)๋ก ๋์ํจ
ํน์ HTTP ๋ฉ์๋(GET, POST, PUT, DELETE ๋ฑ)์ API์ URL ๊ฒฝ๋ก๋ฅผ ๋งคํํ๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ํ Controller ๋ฉ์๋๋ฅผ ํธ์ถํจ
app.get('/users', <์ปจํธ๋กค๋ฌ ๋ฉ์๋ ๋ถ๋ฌ์ค๊ธฐ>) ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์๋จ

controller๋ฅผ ๋ถ๋ฌ์ค๋ ๋์ ๊ฐ๋จํ ์๋์ ๊ฐ์ด ์ฒ๋ฆฌํ์ง๋ง, ์ค์ ์ฝ๋์์๋ ์ฃผ๋ก controller๋ฅผ ๋ถ๋ฌ์์ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํด ์ฌ์ฉํจ(req, res) => {
res.send('GET ์์ฒญ ์ฒ๋ฆฌ: ๋ชจ๋ ์ฌ์ฉ์ ์กฐํ');
}
import express from 'express';
const app = express();
// GET ์์ฒญ ์ฒ๋ฆฌ
app.get('/users', (req, res) => {
res.send('GET ์์ฒญ ์ฒ๋ฆฌ: ๋ชจ๋ ์ฌ์ฉ์ ์กฐํ');
});
// POST ์์ฒญ ์ฒ๋ฆฌ
app.post('/users', (req, res) => {
res.send('POST ์์ฒญ ์ฒ๋ฆฌ: ์๋ก์ด ์ฌ์ฉ์ ์์ฑ');
});
// ์๋ฒ ์คํ
app.listen(3000, () => {
console.log('Server is listening on port 3000');
});
ControllersRoutes ์์ ์ ๋ฌ๋ฐ์ ํด๋ผ์ด์ธํธ์ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํ๊ณ , ์ ์ ํ ์๋ต์ ๋ฐํํจ
์ด ๋, ์ฒ๋ฆฌ ๊ณผ์ ์์ Service ๊ณ์ธต(์ปจํธ๋กค๋ฌ โ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐ)์ ํธ์ถํด ๋น์ฆ๋์ค ๋ก์ง์ ์คํ ํ ์๋น์ค์์ ๋ฐํ๋ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์ดํดํ ์ ์๋ ํ์(JSON ๋ฑ)์ผ๋ก ๋ณํ ํ ๋ฐํํจ

Controllers๋ ์๋น์ ์จ์ดํฐ์ ๊ฐ์. ์จ์ดํฐ๋ ๊ณ ๊ฐ(ํด๋ผ์ด์ธํธ)์ ์ฃผ๋ฌธ(์์ฒญ)์ ๋ฐ์ ์ฃผ๋ฐฉ(์๋น์ค)์ ์ ๋ฌํ๊ณ , ์ค๋น๋ ์์์ ๋ค์ ๊ณ ๊ฐ์๊ฒ ๊ฐ์ ธ์ด.import { UserService } from './services/UserService';
import express from 'express';
export class UserController {
constructor(private userService: UserService) {
this.userService = userService;
}
// ๋ชจ๋ ์ฌ์ฉ์ ์กฐํ
getAllUsers = async (req: express.Request, res: express.Response) => {
try {
const users = await this.userService.getAllUsers();
res.json(users); // ์๋น์ค์์ ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ต์ผ๋ก ์ ์ก
} catch (err) {
res.status(500).json({ message: err.message });
}
};
// ์ฌ์ฉ์ ์์ฑ
createUser = async (req: express.Request, res: express.Response) => {
try {
const newUser = req.body; // ์์ฒญ ๋ฐ์ดํฐ์์ ์ ์ฌ์ฉ์ ์ ๋ณด ๊ฐ์ ธ์ด
const user = await this.userService.createUser(newUser);
res.status(201).json(user);
} catch (err) {
res.status(500).json({ message: err.message });
}
};
// ์ฌ์ฉ์ ์
๋ฐ์ดํธ
updateUser = async (req: express.Request, res: express.Response) => {
try {
const updatedUser = req.body;
const user = await this.userService.updateUser(updatedUser);
res.json(user);
} catch (err) {
res.status(500).json({ message: err.message });
}
};
}
๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์์ ํ๋ ์์ ์ ์ ์ํ๋ฉฐ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํจ
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ์ํํจ
์๋น์ค๋ ์ปจํธ๋กค๋ฌ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(๋ฆฌํฌ์งํ ๋ฆฌ) ๊ฐ์ ์ค๊ฐ ๊ณ์ธต์ผ๋ก ์๋.
๋น์ฆ๋์ค ๋ก์ง์ ์๋น์ค์ ์ง์ค์์ผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ , ์ฝ๋ ํ
์คํธ๋ฅผ ์ฉ์ดํ๊ฒ ๋ง๋ฆ.
import { UserRepository } from '../repositories/UserRepository';
import { User } from '../models/User';
export class UserService {
constructor(private userRepository: UserRepository) {
this.userRepository = userRepository;
}
// ๋ชจ๋ ์ฌ์ฉ์ ์กฐํ
async getAllUsers(): Promise<User[]> {
return await this.userRepository.getAllUsers();
}
// ์ ์ฌ์ฉ์ ์์ฑ
async createUser(user: User): Promise<User> {
return await this.userRepository.createUser(user);
}
// ์ฌ์ฉ์ ์
๋ฐ์ดํธ
async updateUser(user: User): Promise<User> {
return await this.userRepository.updateUser(user);
}
}
Repositories (์ ์ฅ์)