[TIL] 24.02.20

sssujijjl·2024년 2월 20일

[TIL]

목록 보기
38/51

[3-Layered Architecture]

: 소프트웨어 시스템을 세 가지 주요 계층으로 나누어 설계하는 아키텍처 패턴
각 계층은 특정 기능을 수행하고 서로 간섭하지 않도록 분리

장점 : 시스템을 유지보수하기 쉽게 만들고, 확장성을 높이며, 코드의 재사용성을 증가

세가지 주요 계층

컨트롤러(Controller) : 사용자와의 상호작용을 담당 (요청과 응답을 처리)
서비스(Service) : API의 핵심적인 동작이 많이 일어나는 부분
저장소(Repository) : 데이터베이스와 통신하는 부분

[로직이 수행되는 순서]

  1. 사용자가 요청을 보냄
{ 
	"title" : "제목" ,
    "content" : "내용"
}
  1. 요청을 URL에 알맞은 컨트롤러가 수신을 받음
resumes.router.js

// 이력서 생성
router.post('/', verificationToken, resumeController.createResume);
  1. 컨트롤러 : 요청을 처리하기 위한 서비스를 호출
resumes.controller.js

	createResume = async (req, res, next) => {
        try {
            const { userId, name } = req.user;
            const { title, content } = req.body;

            const resume = await this.resumeService.createResume(
                userId,
                name,
                title,
                content
            );

            return res.status(201).json({ data: resume });

        } catch (err) {
            next(err);
        }
    }
  1. 서비스 : 필요한 데이터를 가져오기 위한 저장소에게 데이터를 요청
resumes.services.js

    createResume = async (res, userId, name, title, content) => {

        if (title.length === 0) {
            throw new Error('제목을 입력하세요.');
          } else if (content.length === 0) {
            throw new Error('자기소개를 입력하세요.');
          }

        const createResume = await this.resumeRepository.createResume(
            userId,
            name,
            title,
            content
        );

        return createResume;
    }
  1. 저장소 : 데이터베이스에서 필요한 데이터를 가져와서 서비스에 전달
resumes.repositories.js

    createResume = async (userId, name, title, content) => {

        const resume = await prisma.resumes.create({
            data: {
                userId: +userId,
                title,
                content,
                author: name
            },
        });

        return resume;
    }
  1. 서비스 : 저장소에서 가져온 데이터를 가공하여 컨트롤러에게 데이터를 전달
{
	"resumeId": 3,
	"userId": 1,
	"title": "제목",
	"content": "내용",
	"author": "사용자",
	"status": "APPLY",
	"countlike": 0,
	"createdAt": "2024-02-20T11:16:16.273Z",
	"updatedAt": "2024-02-20T11:16:16.273Z"
	}
  1. 컨트롤러 : 서비스에서 가져온 데이터를 사용자에게 절달
{
	"data": {
		"resumeId": 3,
		"userId": 1,
		"title": "제목",
		"content": "내용",
		"author": "사용자",
		"status": "APPLY",
		"countlike": 0,
		"createdAt": "2024-02-20T11:16:16.273Z",
		"updatedAt": "2024-02-20T11:16:16.273Z"
	}
}

0개의 댓글