작성
·
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 하나만 사용하게 된다면
메인페이지에서 [회원목록] 을 클릭한다.
클릭과 동시에 axios/fetch 등의 비동기 통신이 이루어진다.
비동기통신의 url 은 회원목록데이터를 return 하는 @RestController 메서드에 도착한다.
응답이 성공하면 axios/fetch 비동기 메서드에 200코드와 회원목록데이터를 전달한다.
응답이 성공하면 그 데이터를 회원목록페이지를 보여주는 @RestController 에 다시 전달한다.
해당 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
의 구분 사용@RestController
는 주로 API를 통해 JSON 형식으로 데이터를 반환할 때 사용됩니다. 즉, 기능적인 측면에서 데이터 조작이나 비동기 통신을 처리할 때 적합합니다.
@Controller
는 HTML, JSP 등의 View를 반환할 때 주로 사용됩니다. 이는 사용자가 직접 페이지를 보기 위한 데이터를 전달하고 렌더링하는데 적합합니다.
실제 실무에서도 두 가지를 구분하여 사용하는 경우가 많습니다. 화면 전환이나 페이지 이동이 필요한 부분에서는 @Controller
를 사용하고, 데이터만 주고받는 API 호출이 필요한 부분에서는 @RestController
를 사용하는 것입니다.
이를 통해 애플리케이션의 구조를 명확히 하고, 각 기능을 담당하는 컨트롤러를 분리하여 코드를 관리하기 쉽게 할 수 있습니다.
Controller와 RestController를 혼용해서 사용 - 이 질문에서는 @Controller
와 @RestController
를 함께 사용하는 것에 대한 고민을 제시합니다. 공식 서포터즈의 답변에 따르면, 두 역할을 명확히 구분하여 사용하는 것이 더 권장된다고 설명하고 있습니다.
API 호출 방법 - 이 질문에서는 클라이언트 사이드에서 API 호출 및 화면 렌더링 방법에 대해 설명하고 있습니다. 프레임워크를 사용하지 않는 경우에는 두 방법을 함께 사용하여 화면 전환 없이 데이터를 갱신할 수 있는 방법에 대해 논의합니다.
이상과 같은 정보들이 6udguin님께 도움이 되기를 바랍니다. 두 가지 방식(@RestController
, @Controller
)을 적절하게 활용하여 프로젝트의 구조를 명확히 잡아 나가는 것이 바람직합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.