오늘은 최근 배운 계층형 아키텍처 패턴(Layered Architecture pattern)에 대해 기록하고자 합니다.
소프트웨어 개발 안에서는 여러 아키텍처 패턴이 있는데 그 중 계층형 아키텍처 패턴은 시스템을 여러 계층으로 분리하여 관리하는 아키텍처 패턴입니다.

이 계층형 아키텍처 패턴의 장점은 관심사별 층별로 분리하기 때문에 각 층별로 뚜렷한 역할이 있어서 코드를 인지하고 구조를 가늠하기에 좋습니다.
그리고 계층별로 독립적이고 의존성이 낮아 코드 수정이 용이합니다.
이전에 실습 시간에서 만든 파일을 다시 꺼내보면 하나의 기능을 수정하기 위해서 엮여있는 주변 코드들도 수정해야 하니 Ctrl+F 로 찾으며 일일이 수정했던 것 같습니다.

이번 강의에서는 계층을 3개로 나누었는데, 컨트롤러, 서비스, 레포지토리입니다.
각 역할은 (1) 컨트롤러는 클라이언트에게 받은 요청을 서비스로 보내고 돌아온 응답을 다시 클라이언트에게 반환합니다. (2) 서비스는 사용자의 요구 사항을 처리하는 비즈니스 로직을 담당하고 있는데 데이터 정보가 필요할 때는 레포지토리에 요청합니다. (3) 레포지토리는 저장소로써 데이터베이스 관리를 하는 역할입니다. 그리고 데이터베이스의 CRUD 작업을 처리하기도 합니다.
저는 이 3개의 계층을 공부하며 마치 우물 같다고 생각했습니다. 컨트롤러는 바가지, 서비스는 도르래, 레포지토리는 물이라고 할까요. (맞는 표현인지는 모르겠습니다. 그냥 그렇게 생각했습니다)

사실 제가 지금 만들고 있는 기능들은 크지 않아서 이전에 진행했던 routes안에 모두 넣어서 만들어도 크게 문제가 되지는 않습니다. 어쩌면 그게 익숙하고 편해서 몸이 편한걸 찾으며 한 곳에 몰아넣으려고 할지도 모르겠습니다.
하지만 효율적인 관리를 위해 계층으로 나누어 다음 과제에서는 진행해보고자 합니다.