반응형

MVC (Model-View-Controller)

  1. 소프트웨어 디자인 패턴
  2. 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 비즈니스 로직을 서로 영향 없이 고칠 수 있는 애플리케이션을 만들 수 있다.
  3. 애플리케이션의 정보(데이터)를 나타내며 뷰는 사용자 인터페이스 요소, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.

 

구성요소

Controller : 모델에 명령을 보냄으로써 모델의 상태를 변경할 수 있다.

Model : 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다. < 뷰는 최신의 결과를 보여주고 컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가, 제거, 수정할 수 있다. 

View : 사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 가지고 온다.

 


 

Spring Framework MVC

Spring Framework MVC

Model은 Service, DAO, DTO(=VO)로 나눌 수 있다.(Controller, Service, DAO, DTO(=VO))

  • URL 호출 -> Controller -> Service -> Servicelmpl -> DAO -> Daolmpl -> Service -> View

Controller

  • 클라이언트에서 요청이 들어올 때, 해당 요청을 수행할 비즈니스 로직(데이터를 처리하는 코드)을 제어하는 객체.
    스프링에서는 컨트롤러에서 세부적으로 서비스 레이어(Service Layer)를 만들어 요청사항을 객체 지향적인 방식으로 좀 더 세분화하여 관리한다.

 

Service

  • 서비스 레이어단에서 세분화된 비즈니스 로직을 처리하는 객체. 비즈니스 로직이 들어가는 부분으로 Controller가 Request를 받으면 적절한 Service에 전달하고 전달 받은 Service는 비즈니스 로직을 처리한다.
  • DAO로 데이터베이스를 접근하고, DTO로 데이터를 전달 받은 다음, 적절한 처리를 해 반환한다.

DAO : Data Access Object

  • DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하다록 만든 객체.
  • DB에 접근하는 객체를 말한다.
  • DB를 사용해 데이터를 조회하거나 조작하는 기능을 담당하는 것을 DAO라고 부른다.
  • DAO를 사용하는 이유는 효율적인 커넥션 관리와 보안성 때문이다.
  • Domain Logic(비즈니스 로직이나 DB와 관련없는 코드들)을 persistence mechanism(지속성 메커니즘)과 분리하기 위해 사용.

persistence layer : Database에 data를 CRUD하는 계층

 

HTTP Request를 Web Application이 받게 되면, Thread를 생성하게 된다. 비즈니스 로직이 DB로부터 데이터를 얻어오기 위해 매번 로드하고 연결하며 객체를 생성하게 되면 엄청 많은 커넥션이 일어나므로 DAO를 하나 만들어서 DB전용 객체로만 사용하는 것이다. 이렇게 하면 부담이 줄어들게 되므로 속도가 빨라진다.

  • DBCP(Database Connection Pool)에서 나온 개념이다.
  • WAS(Web Application Server)가 실행 되면 일정량의 DB Connetion 객체를 Pool에다 저장해두고, HTTP Request에 따라 필요할 떄마다 Pool에서 Connetion 객체를 가져다 쓰고 반환하는 것이다.

Application Connetion 객체

  • 보통 Connetion Pool은 요청으로 생기는 thread(thread도 pool을 만들 수 있다.)보다 적게 만든다. 모든 Request가 DB에 관련된 것은 아니기 때문이다.

Thread(스레드) : 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다. 또한 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(Multi-Threaded Process)라고 한다.

 

  • Spring에서 싱글톤 패턴(Singleton Pattern)을 권장한다. < Bean
  • Spring에서 DAO는 @Repository annotation 으로 정의한다. class 선언 시 @Repository annotation을 사용해도 되지만 메서드 헤더만 정의한 interface를 정의하고 이것을 구현한 클래스에 annotation을 붙여 사용한다. < interface로 구성하면 확장성과 유연성이 높아진다.

 예시) TestListDAO.java

public interface TestListDAO {
	public List<TestLostResponseDTO> getTestListdao();
}

 

예시) TestListDAOlmpl.java

@Repository("testListDAO")
public class TestListDAOlmpl implements TestListDAO {
	@Override
    public List<TestListResponseDTO> getTestListdao() {
    	// 리스트 생성
        List<TestListResponseDTO> testList = new ArrayList<TestListResponseDTO>();
        testList.add(...);
        return testList;
    }
}

 

DTO : Data Transfer Object (VO : Value Object)

  • 각 계층간 데이터 교환을 위한 java 객체를 의미한다.
  • 이 객체는 데이터를 각 레이어간에 전달하는 목적을 가지고 있으며, 객체의 속성과 getter, setter만 가지고 있다.
  • 계층간 데이터 교환을 위한 java Beens이다.
  • 데이터베이스 레코드를 매핑하기 위한 데이터 객체를 말한다.
  • DTO는 보통 로직을 가지고 있지 않고 data 와 그 data 접근을 위한 getter, setter만 가지고 있다.
  • DTO는 Database에서 Data를 얻어 Service나 Controller 등으로 보낼 떄 사용하는 객체이다.

예시) TestListResponseDTO

public class TestListResponseDTO {
	private String testStr;
    private int testInt;
    
    public String getTestStr() {
    	return testStr;
    }
    
    public void setTestStr(String testStr) {
    	this.testStr = testStr;
    }
    
    public void getTestInt() {
    	return testInt;
    }
    
    public void setTestInt(Int testInt) {
    	this.testInt = testInt;
    }
}
반응형

'Study' 카테고리의 다른 글

마샬링(Marshalling)? 직렬화(Serialization)?  (0) 2023.11.14
gRPC를 좀 더 쉽게 정리 해 보자.  (1) 2023.11.14
gRPC  (0) 2023.11.10
[디자인패턴] MVC 패턴  (0) 2022.06.14
[node js] node js 설치 및 테스트  (0) 2021.09.07
복사했습니다!