1차 프로젝트를 마무리하고 성장했다는 것을 느끼고 있다. 프로젝트를 통해 느낀 점은 아래 글에 나와있다.
이 글에서는 이번 프로젝트를 통해 재미있게 이해했던 개념과 성장한 코드에 대해 써보려고 한다.
재미있었던 개념 : Layered Pattern
Multi-tier 아키텍처 패턴이라고도 하는 Layered Pattern은 백엔드 API코드에 가정 널리 적용된 패턴이다. Layered 아키텍처는 코드를 논리적인 부분 혹은 역할에 따라 독립된 모듈로 나누어서 구성하는 패턴이다. 각 모듈이 서로의 의존도에 따라 층층이 쌓듯이 연결되어 전체의 시스템을 구현하는 구조이다. 그래서 마치 레이어(layer)를 쌓아 놓은 형태가 된다.
Layered Pattern은 보통 Presentation Layer, Business Layer, Persistence Layer 로 나뉜다.
1. Presentation Layer
Presentation Layer는 해당 시스템을 사용하는 사용자 혹은 클라이언트 시스템과 직접적으로 연결된 부분이다. 백엔드 API에서 엔드포인트 부분에 해당된다. API의 엔드포인트들을 정의하고 전송된 HTTP 요청(request)들을 읽어 들이는 로직을 구현한다. 하지만 위에 그림처럼 더 이상의 역할을 수행하지 않고 비즈니스 로직은 다음 레이어로 넘긴다.
2. Business Layer
Business Layer는 이름 그대로 비즈니스 로직을 구현하는 부분이다. 실제 시스템이 구현해야 하는 로직들을 이 레이어에서 구현하게 된다. 예를 들어, 인스타그램 API의 회원가입 엔드포인트에서 만일 비밀번호가 10자가 넘는지 확인하여 10자 미만이면 회원가입을 거부해야 하는 로직이다. 즉, Business Layer는 우리 회사의 비즈니스를 운영하기 위한 필요한 로직들로 구성한다.
3. Persistence Layer
Persistence Layer는 데이터베이스와 관련된 로직을 구현하는 부분이다. Business Layer에서 필요한 데이터 생성, 수정, 읽기 등을 처리하여 실제로 데이터베이스에서 데이터를 저장, 수정, 읽어 들이는 역할을 한다.
Layered Pattern이 재미있었던 이유
👉단반향 의존성
Layered 아키텍처의 핵심요소는 위에 그림과 같이 단방향 의존성과 관심사 분리(Seperation Of Concern)이다. Presentation layer는 business layer에게 의존하고, business layer는 persistence layer에게만 의존하게 된다. Presentation layer에서 Business layer를 건너뛰고 Persistence layer에 접근하는 일은 절대 일어나지 않는다. 처음에는 이 부분이 너무 헷갈렸는데, 개발을 진행하고 통신을 진행하는 과정에서 에러가 나면 어디서 에러가 났는지 쉽게 파악할 수 있어서 좋았다.
성장시킨 코드
회원가입시 성별을 데이터베이스로 저장할 때 1, 2로 해야 해서 성별을 확인하는 로직을 짰다. 멘토님이 상수로 관리되는 데이터들은 enum으로 관리된다고 했고 JavaScript에서는 객체 형태로 관리한다고 알려줬다. enum(열거형)에 대해 알아봤고 다음과 같이 코드를 수정했다.
만약 상수데이터가 2가지가 아니라 100가지가 넘으면 객체로 담아 관리하면 더 편할 것 같은 생각을 했다. 분명 더 공부하다가 보면 나은 코드들이 있겠지만 지금으로는 이 코드를 짜고 많은 것을 깨달았다.
뿌듯했던 코드 : MySQL 쿼리문(서브쿼리 적용)
진짜 몇시간을 투자해서 짠 쿼리문이다. 많이 실패도 했지만 결국 마이페이지에 데이터들이 잘 들어가서 뿌듯했다.
첫 번째 프로젝트를 통해 배운 점이 많지만 앞으로 공부해야 될 개념들이 훨씬 많다. 앞으로 개발하면서 어려운 개념과 한계에 부딪히는 상황이 생겨도 처음으로 코드를 짜고 뿌듯했던 기억들을 생각하며 포기하지 않고 앞으로 전진할 것이다.
'🎥프로젝트 > 위코드 프로젝트' 카테고리의 다른 글
[위코드 2차 프로젝트] 개발은 체력으로 시작하고 공식문서로 끝난다.(feat.카카오API) (0) | 2022.12.17 |
---|---|
[회고] 개발자는 꺽이지 않는 마음과 문제해결 마인드가 필요하다 (0) | 2022.12.03 |
노드.js 초기환경세팅(express, typeorm) (0) | 2022.11.15 |
팀프로젝트 시작(프론트와 planning meeting ) (0) | 2022.11.14 |
댓글