강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

6udguin님의 프로필 이미지
6udguin

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화

실제 실무에서 RestController 하나로만 개발이 가능한가요?

작성

·

64

·

수정됨

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]

RestController 는 JSON 으로 응답을 돌려주는 역할을 하며 redirect 와 같은 것을 사용하지 않는 이상 view페이지로 리턴해주는 건 따로 없고, 권장하지 않는다고 배웠습니다.

 

view 페이지 이동 및 view 에서 표출할 단순한 데이터는 @Controller , "기능"에 관련된 것은 @RestController 을 사용해야할 거 같습니다.

 

예를 들어,
1. 회원목록 페이지 이동은 Controller 및 회원목록조회(DB조회) -> member_list.html 리턴
2. 회원상세보기 페이지 이동은 Controller 및 회원상세조회(DB조회) -> member_detail.html 리턴

3.회원 상세보기페이지에서의 수정 기능은 RestController 및 JSON 응답 리턴

 

이렇게 구현이 되어야할 거 같더라구요 !

RestAPI 및 @RestController 형식을 사용한다하더라도 전체를 RestController 를 사용하는 건 구현에 무리도 있고 권장되지 않는 거 같기도 하더라구요.

패키지 구조로 치면

domain(package)

-member(package)

-controller(package) > MemberApiController.java, MemberController

이렇게요!

 

 

RestController 하나만 사용하게 된다면

  1. 메인페이지에서 [회원목록] 을 클릭한다.

  2. 클릭과 동시에 axios/fetch 등의 비동기 통신이 이루어진다.

  3. 비동기통신의 url 은 회원목록데이터를 return 하는 @RestController 메서드에 도착한다.

  4. 응답이 성공하면 axios/fetch 비동기 메서드에 200코드와 회원목록데이터를 전달한다.

  5. 응답이 성공하면 그 데이터를 회원목록페이지를 보여주는 @RestController 에 다시 전달한다.

  6. 해당 RestController 메서드가 전달받은 데이터를 view페이지에 표출한다.

순서가 이렇게 될 거 같은데

5번의 회원목록 페이지를 보여주는 RestController 또한 view 페이지를 열수없으니, redirect 와 같은 걸 사용해야할 거 같더라구요.

 

상당히 복잡하고 비효율적인거 같아 RestController(기능) 와 Controller(view 페이지 이동) 을 분리해서 사용하기로 결정했는데

 

실제 현업/실무에서도 @RestController(ResponseEntity) 와 @Controller(ModelAndView) 를 위처럼 기능 / view 페이지 이동 이렇게 구분해서 사용하나요?

아니면 RestController(ResponseEntity) 하나만 사용하나요?

만약 구분해서 사용해야한다면
MemberApiController 는 ResponseEntity 메서드
MemberController 는 ModelAndView 메서드
를 작성하는 것을 염두에 두고 있습니다 !

 

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

6udguin님께서 질문하신 내용인 @RestController@Controller의 사용 구분에 대한 고민은 많은 개발자들이 프로젝트 구성 시 맞닥뜨리는 일반적인 상황입니다. 이를 해결하기 위한 몇 가지 조언과 함께 유사한 질문에 대한 답변을 제공해 드리겠습니다.

@RestController@Controller의 구분 사용

  1. @RestController는 주로 API를 통해 JSON 형식으로 데이터를 반환할 때 사용됩니다. 즉, 기능적인 측면에서 데이터 조작이나 비동기 통신을 처리할 때 적합합니다.

  2. @Controller는 HTML, JSP 등의 View를 반환할 때 주로 사용됩니다. 이는 사용자가 직접 페이지를 보기 위한 데이터를 전달하고 렌더링하는데 적합합니다.

  3. 실제 실무에서도 두 가지를 구분하여 사용하는 경우가 많습니다. 화면 전환이나 페이지 이동이 필요한 부분에서는 @Controller를 사용하고, 데이터만 주고받는 API 호출이 필요한 부분에서는 @RestController를 사용하는 것입니다.

  4. 이를 통해 애플리케이션의 구조를 명확히 하고, 각 기능을 담당하는 컨트롤러를 분리하여 코드를 관리하기 쉽게 할 수 있습니다.

유사한 질문 및 답변

  • Controller와 RestController를 혼용해서 사용 - 이 질문에서는 @Controller@RestController를 함께 사용하는 것에 대한 고민을 제시합니다. 공식 서포터즈의 답변에 따르면, 두 역할을 명확히 구분하여 사용하는 것이 더 권장된다고 설명하고 있습니다.

  • API 호출 방법 - 이 질문에서는 클라이언트 사이드에서 API 호출 및 화면 렌더링 방법에 대해 설명하고 있습니다. 프레임워크를 사용하지 않는 경우에는 두 방법을 함께 사용하여 화면 전환 없이 데이터를 갱신할 수 있는 방법에 대해 논의합니다.

이상과 같은 정보들이 6udguin님께 도움이 되기를 바랍니다. 두 가지 방식(@RestController, @Controller)을 적절하게 활용하여 프로젝트의 구조를 명확히 잡아 나가는 것이 바람직합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

6udguin님의 프로필 이미지
6udguin

작성한 질문수

질문하기