Controller와 Service, Mapper, repository 의 역할

kiki·2022년 11월 10일
1

JAVA

목록 보기
1/1
  • Spring MVC를 기준으로 설명합니다.
  • 사내에서 사용하는 Service는 Model의 역할과 동일합니다.

Controller

컨트롤러와 서비스는 MVC 패턴에서 컴포넌트라고 부릅니다. 컨트롤러의 역할은 첫번째, 클라이언트의 요청을 받고(entry point) 두번째, 어떻게 처리할지 결정하는 일종의 조정자의 역할을 합니다.
독립 된 컴포넌트들은 자신의 역할만 수행하기 때문에 대규모 서비스에서 무한한 확장성, 유연성을 가져옵니다.

컴포넌트는 각각의 독립된 모듈을 뜻하고 컴포넌트 기반 개발은 각 컴포넌트를 결합시켜 구성된 것을 말한다고 볼 수 있다.

@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
	return "hello";
}

Service(=Model)

서비스는 내부 비즈니스 로직을 처리하기 위한 역할을 합니다. MVC에서 데이터를 가져오는 역할을 하며, DAO또는 Mapper를 통해 데이터베이스에 접근하여 결과값을 받아 옵니다.
서비스가 알맞은 정보를 가공하는 과정을 "비즈니스 로직을 수행한다" 라고 합니다.

Repository

메이븐은 빌드 도구이면서, 라이브러리(.jar)를 자동으로 관리해주는 도구입니다.
스프링 프로젝트에서 필요한 라이브러리를 pom.xml에 등록하면 메이븐 저장소(Maven Repository)에서 다운로드하여 프로젝트에 자동으로 추가시켜줍니다.

Mapper (Mybatis)

Mapper 인터페이스라고 부릅니다. SQL을 호출하기 위해 사용하며 @Mapper 어노테이션을 사용하여 mapper.xml에 namespace와 매핑합니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sample.dao.MapperDAO">
	<select id="selectAll"
		resultType="com.sample.dto.UserDto">
		SELECT *
		FROM user_test
	</select>
	<insert id="insert" parameterType="com.sample.dto.UserDto">
		INSERT INTO user_test (seq, name, country) values ( #{seq}, #{name},
		#{country})
	</insert>
</mapper>
@Repository
@Mapper
public interface MapperDAO {
    List<UserDto> selectAll() throws Exception;
    void insert(UserDto user);
}

Static Resources(정적 리소스)

정적 리소스란 웹 브라우저 혹은 클라이언트에서 요청이 들어왔을 때 이미 만들어진 리소스가 있을 때 해당 리소스를 그대로 보내주는 것을 말합니다. 클라이언트와 서버간 상호 작용이 아닌 단순히 존재하는 파일이기 때문에 정적 리소스라고 부릅니다. 예로 html, css, js가 있습니다. 정적 리소스를 전달해주는 서버를 웹서버라고 합니다.

classpath:/static
classpath:/public
classpath:/resources/
classpath:/META-INF/resources
/src/main/webapp/WEB-INF (외부 직접 접근 불가능)

application.properties에서 설정을 변경할 수 있습니다.

# static resource
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/
spring.resources.add-mappings=true 

스프링 실행 순서



🔗이미지 출처

  1. 클라이언트가 URL을 통해 요청을 보낸다.
  2. 클라이언트 요청을 DispatcherServlet이 web.xml에 등록된 내용을 참고해서 가로챈다.
  3. 가로챈 요청을 HandlerMapping에게 보내 요청을 처리할 Controller를 찾는다.
    @Controller 어노테이션을 붙이면 servlet-context.xml에서 이를 인식하고 컨트롤러로 등록한다. @RequestMapping 어노테이션을 붙이면 해당 메서드를 인식하고 찾아간다.
@Controller
public class BoardController {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello() {
        return "hello";
    }

}
  1. Controller -> Service -> Mapper -> Service -> Controller 순서로 진행된다.
  2. ViewResolver를 통해 view 화면을 찾는다. servlet-context.xml에 설정된 prefix와 suffix 정보를 참조하여 /WEB-INF/view/home.jsp 파일을 찾는 정보를 제공한다.
  3. view 화면을 보내면 결과를 다시 DispatcherServlet에 보내고 DispatcherServlet은 클라이언트에게 결과를 전송한다.

🐈‍⬛ 용어정리


  • 도메인 : 개발하고자 하는 소프트웨어의 요구사항, 문제 영역.
  • MVC : model-view-controller 세 가지 역할로 구분한 개발 방법론. Controller는 Model을 통해 데이터를 가져오고, View에서 해당 데이터를 출력한다.
  • 비즈니스 로직 : 프로그램의 핵심 로직
  • 모듈 : 프로그램을 구성하는 구성요소
  • entry point : 프로그램을 시작하는 시점. 진입점이라는 의미로



🔗 References

profile
👋 Hello,

0개의 댓글