본문 바로가기
Framework/Spring

[Spring/개념] 기본 구조

by woongii 2024. 10. 14.

Spring Legacy는 Spring 프레임워크의 이전 버전으로, 현대적인 Spring Boot와 비교하여 조금 더 복잡한 설정과 구성을 요구합니다. 그러나 여전히 많은 기업과 프로젝트에서 사용되고 있으며, 이를 사용해 구조를 잡을 때는 일반적으로 API, Domain, DTO, Framework, View의 개념을 분리하여 구조화하는 것이 좋습니다. 각각의 요소가 무엇이며 어떻게 구성되는지 설명드리겠습니다.

1. API

API는 애플리케이션과 클라이언트 간의 상호작용을 위한 인터페이스입니다. Spring Legacy에서는 주로 @Controller와 같은 어노테이션을 사용하여 HTTP 요청을 처리하고 응답을 반환하는 방식으로 API를 구현합니다. Spring Legacy는 RESTful API를 지원하며, 이를 통해 데이터와 로직을 외부 클라이언트와 상호작용할 수 있게 합니다.

  • 주요 구성 요소:
    • @RequestMapping: URL을 처리하는 메서드를 정의할 때 사용합니다.
    • @ResponseBody: 메서드에서 반환되는 값을 JSON 형식으로 응답할 때 사용됩니다.
    • HttpServletRequest 및 HttpServletResponse: 서블릿 기반 요청 및 응답을 처리하는데 사용됩니다.

2. Domain

Domain은 비즈니스 로직이 포함된 핵심 영역입니다. 실제 프로그램의 비즈니스 요구 사항을 반영한 데이터 구조와 메서드들이 존재합니다. 객체 지향 설계에서는 도메인 모델을 통해 애플리케이션이 관리하는 데이터를 구조화하고, 이 모델들이 애플리케이션의 상태와 동작을 정의합니다.

  • 주요 구성 요소:
    • 비즈니스 엔티티: 애플리케이션에서 관리하는 핵심 데이터 모델
    • Repository: 데이터 저장소와의 상호작용을 관리하는 계층
    • Service: 도메인 로직을 처리하는 서비스 계층

3. DTO (Data Transfer Object)

DTO는 계층 간 데이터 전달을 위해 사용되는 객체입니다. API와 도메인 간의 데이터 전달이나, View와의 데이터 전달을 위한 용도로 사용되며, 이를 통해 데이터의 변경을 방지하고 안정적인 데이터 흐름을 유지합니다. DTO는 도메인 모델과 달리 순수한 데이터만 담고 있으며, 로직이 없는 것이 특징입니다.

  • 주요 구성 요소:
    • Getter/Setter: 데이터를 주고받기 위한 메서드
    • 필드: 전송할 데이터의 속성을 나타냄

4. Framework (Spring)

Spring Legacy Framework는 기본적으로 여러 가지 모듈로 구성되며, 이를 통해 다양한 기능을 제공합니다. Spring의 핵심 기능은 Dependency Injection (DI)와 Aspect-Oriented Programming (AOP), 그리고 Transaction Management 등이 포함됩니다. XML 설정을 통해 많은 기능을 설정할 수 있으며, 필요에 따라 @Autowired와 같은 어노테이션을 사용하여 의존성을 주입할 수 있습니다.

  • 주요 모듈:
    • Spring Core: DI 및 AOP 같은 핵심 기능을 제공
    • Spring MVC: 웹 애플리케이션 개발을 위한 구조 제공
    • Spring Data: 데이터 접근 계층의 추상화를 제공

5. View

View는 사용자에게 데이터를 시각적으로 표현하는 계층입니다. Spring Legacy에서는 JSP(Java Server Pages), Thymeleaf와 같은 템플릿 엔진을 사용하여 View를 렌더링합니다. Controller에서 처리된 결과 데이터를 View로 전달하여 사용자에게 보여줍니다.

  • 주요 구성 요소:
    • JSP: 서버 사이드에서 동적으로 HTML을 생성하는 데 사용되는 템플릿 엔진
    • JSTL: JSP에서 사용 가능한 태그 라이브러리
    • ModelAndView: Controller에서 View로 데이터를 전달할 때 사용하는 객체

 

Spring Framework에서 API의 ControllerView의 Controller는 각각 목적과 처리 방식에서 차이가 있습니다. 두 컨트롤러는 같은 @Controller 어노테이션을 사용하지만, 결과적으로 어떤 형태의 응답을 반환하는지에 따라 구분됩니다.

1. API Controller (주로 RESTful API 구현)

API Controller는 주로 데이터를 JSON 또는 XML 형식으로 클라이언트에게 반환하는 데 사용됩니다. 이 컨트롤러는 브라우저와 같은 사용자 인터페이스에서 사용하는 HTML 페이지가 아닌, 데이터만을 반환하여 클라이언트(예: 모바일 앱, 다른 서버 애플리케이션 등)와 상호작용할 때 주로 사용됩니다.

  • 특징:
    • 클라이언트와 서버 간 데이터 교환이 목적입니다.
    • 일반적으로 JSON 형식으로 데이터를 반환합니다.
    • @RestController 또는 @Controller와 @ResponseBody 어노테이션을 함께 사용하여 JSON 형식의 데이터를 응답합니다.
    • API 요청에 대한 응답은 클라이언트가 데이터를 직접 처리하도록 하고, 시각적인 인터페이스는 클라이언트 쪽에서 처리됩니다.
  • 사용 예시: 
@RestController
@RequestMapping("/api")
public class ApiController {

    @GetMapping("/users/{id}")
    public ResponseEntity<UserDto> getUser(@PathVariable Long id) {
        UserDto user = userService.getUserById(id);
        return ResponseEntity.ok(user);
    }
}

//이 경우, /api/users/{id}로 요청을 보내면 해당 사용자 정보를 JSON 형식으로 응답합니다.

 

2. View Controller (주로 웹 페이지 렌더링)

View Controller는 클라이언트에게 **웹 페이지(HTML)**를 반환하는 역할을 합니다. 즉, 브라우저에 표시될 동적인 웹 페이지를 생성하는 것이 주 목적입니다. 이 경우, 서버에서 데이터를 처리한 후, 그 결과를 템플릿 엔진(예: JSP, Thymeleaf)과 결합하여 HTML 페이지로 렌더링하여 반환합니다.

  • 특징:
    • 주로 HTML 페이지를 반환하여 브라우저에서 표시됩니다.
    • ModelAndView 또는 Model 객체를 사용하여 View로 데이터를 전달하고, 서버 측에서 웹 페이지를 동적으로 생성하여 반환합니다.
    • 웹 브라우저를 대상으로 하며, 템플릿 엔진과 함께 사용하여 동적인 HTML을 생성합니다.
  • 사용 예시:
@Controller
@RequestMapping("/view")
public class ViewController {

    @GetMapping("/users/{id}")
    public String getUserView(@PathVariable Long id, Model model) {
        UserDto user = userService.getUserById(id);
        model.addAttribute("user", user);
        return "userDetail"; // userDetail.jsp 혹은 Thymeleaf 템플릿
    }
}
//이 경우, /view/users/{id}로 요청을 보내면 userDetail.jsp(또는 userDetail.html 등)를 렌더링하고,
// 그 결과 HTML 페이지를 브라우저에 반환합니다

 

차이점 요약

구분API ControllerView Controller

주 목적 데이터(JSON/XML 등) 반환 HTML 페이지 반환
어노테이션 @RestController 또는 @Controller + @ResponseBody @Controller
응답 형식 주로 JSON, XML 등의 데이터 형식 HTML 파일 (JSP, Thymeleaf 등)
주 사용 대상 클라이언트 애플리케이션(웹, 모바일 앱 등) 웹 브라우저
View 처리 방식 없음 (데이터만 반환) 서버 측 템플릿 엔진 사용 (JSP, Thymeleaf 등)

결론

  • API Controller는 데이터만 반환하고, 주로 RESTful API를 구현하여 클라이언트가 데이터를 직접 처리할 때 사용됩니다.
  • View Controller는 서버에서 HTML 페이지를 생성하여 브라우저에서 동적인 콘텐츠를 렌더링할 때 사용됩니다.

이 두 종류의 컨트롤러는 모두 Spring의 @Controller 또는 @RestController를 사용하지만, 반환하는 결과가 다르기 때문에 목적에 맞게 선택하여 사용해야 합니다.