2024년 6월 18일 화요일

Laravel : MVC아키텍쳐에 대해

Laravel : MVC아키텍쳐에 대해

Laravel : 라라벨의 MVC 아키텍쳐

라라벨의 기본 아키텍쳐는 MVC이다.
Controller : 사용자로부터의 요청을 받아 , View와 Model을 연결
Model : 데이터 처리- 실제로는 Eloquent 에서 담당한다.
View : 화면처리

우리가 알고 있는 MVC 는 범용적인 경우에 적용하는것이고, 라라빌에서의 MVC 는 조금 다르다.

특히 비지니스 로직을 담당하는 Model 을 artisan 으로 생성해 보면 데이터베이스에서 데이터를 꺼내거나 처리하는 Eloquent 가 use 에 추가된다.

use Illuminate\Database\Eloquent\Factories\HasFactory;  
use Illuminate\Database\Eloquent\Model;

app/Http 폴더는 라라벨 프레임워크를 이용하는 것을 전제로 작업을 View , Controller 이나 Middleware 를 만들때 주로 사용된다.

Model 은 직접적으로 View와 연결하지 않고 Controller에서 참조한다.
이렇게 되면 Controller가 요청받은 리퀘스트처리, View의 처리와 Model 에서 전달받은 데이터를 가지고 비지니스 로직까지 품어야 되는데 Controller 가 비대해지는 경향이 있다.

규모가 작은 홈페이라면 라라벨의 기본 구조만으로도 충분하지만, 좀 규모가 있는 개발이라면 기능에 따라 모듈 또는 디렉토리 별로 관리하는것이 좋다.

문제는 서비스가 늘어날수록 View나 Controller가 늘어나는것은 어쩔수없다.

해결 방법은 여러가지가 있겠지만
기능(feature)별로 폴더를 만들어서 그 안에 Domain layer, Data layer 그리고 Presenter까지 세트로 묶는 방식이 기능확장 또는 추가/삭제 시에 좋을거라 생각한다.

즉,
app폴더와 같은 레벨의 폴더인 package 등과 같은 상위 폴더를 만들고 하위로 아래와 구조로 만든다.

Features
  |-StoreDetail
      |-Domains
      |-Models
      |-resources
      |-Presenters
  |-StoreList
      |-Domains
      |-Models
      |-resources
      |-Presenters
Infrastructures
  |-Databases
  |-Apis
  |-FileSystems
  |-Messages
  |-Logs
Shared 를 만들어 
  |-Utils
  |-Constants
  |-Settings

파일과 폴더가 많아 지지만 이렇게 함으로서 각 기능별로 추가/수정/삭제가 용이하고 Presenter를 통해 Controller 가 데이터를 삽입/취득 하게하여 controller의 부담을 경감시킬 수있다.

0 comments:

댓글 쓰기