api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?
62
작성한 질문수 90
api 매핑 메소드를 어느 기준으로 어떤 컨트롤러에 작성해야하는지 궁금하여 질문좀 드립니다.
먼저 글을 작성할 수 있는 웹사이트(게시판)가 있고, 홈화면에서 글쓰기 버튼을 눌러 글쓰기 페이지)로 이동 후 글을 쓰고 등록하면 글 데이터가 DB에 저장할 수 있는 사이트가 있다고 가정하겠습니다.
그리고 프론트는 리액트이고 글쓰기 페이지로 이동시 프론트에서 요청 없이 페이지 이동을 하고 글 등록 버튼을 눌렀을 때에 /write 경로로 서버에 요청이 간다고 가정하겠습니다.
질문입니다.
등록 버튼을 눌러 /write라는 url이 서버로 오면 이 url은 다음 중 어느 컨트롤러에서 매핑되어야할까요?
홈 컨트롤러 - 홈화면에서 글쓰기 페이지(/write)로 이동한 것이니 홈 컨트롤러에서 매핑한다.
유저 컨트롤러 - 글은 유저가 쓴 것이고 유저와 관련있으므로 유저 컨트롤러에서 매핑한다.
글 컨트롤러 - 글 또한 별도로 DB에 관리되어야하므로 글 컨트롤러에서 매핑한다.
이러한 비슷한 상황이 온다면 url은 어느 기준으로 컨트롤러에 매핑 시켜야하나요?
감사합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. yoon6669님.
API 매핑 메소드를 어느 컨트롤러에 작성해야 하는지 결정하는 것은 매우 중요한 설계 문제입니다. 이는 시스템의 구조와 유지보수 편의성에 큰 영향을 미치기 때문입니다. 다음은 API를 컨트롤러에 매핑할 때 고려할 수 있는 기준들입니다:
컨트롤러 설계 기준
기능에 따른 분리:
- 각 컨트롤러는 특정한 기능을 담당하는 것이 좋습니다. 예를 들어, ‘글’ 관련된 모든 처리를 담당하는
PostController, ‘유저’ 관련된 것을 처리하는UserController처럼 역할을 구분합니다.
- 각 컨트롤러는 특정한 기능을 담당하는 것이 좋습니다. 예를 들어, ‘글’ 관련된 모든 처리를 담당하는
도메인 모델 중심:
- 컨트롤러는 일반적으로 도메인 모델과 짝을 이루는 방식으로 설계됩니다. 따라서 글 쓰기, 수정, 삭제와 같은 기능들은
PostController에서 처리하는 것이 적절합니다. 이는 해당 기능들이 글 도메인과 관련이 깊기 때문입니다.
- 컨트롤러는 일반적으로 도메인 모델과 짝을 이루는 방식으로 설계됩니다. 따라서 글 쓰기, 수정, 삭제와 같은 기능들은
URL 패턴과 명료성:
- URL은 해당 기능을 가장 잘 설명해야 합니다. 글 등록 요청에 대한 URL이
/posts/write라면, 이 요청은PostController에서 처리하는 것이 자연스럽습니다.
- URL은 해당 기능을 가장 잘 설명해야 합니다. 글 등록 요청에 대한 URL이
제안
주어진 시나리오에서는 글을 생성하고 저장하는 로직이므로 글 컨트롤러 또는 PostController에 매핑하는 것이 좋습니다. 이는 글 데이터의 관리와 관련된 모든 기능을 한 곳에서 관리할 수 있다는 장점이 있습니다.
홈 컨트롤러는 주로 메인 페이지나 홈페이지에 관련된 로직을 처리하는 것이 좋고, 유저 컨트롤러는 회원 정보, 로그인/로그아웃 등 유저에 직접적으로 관련된 기능을 처리하는 것이 좋습니다.
추가 참고 자료
유사한 주제로 다른 질문들도 참고해 보시면 도움이 될 것 같습니다:
- 컨트롤러와 서비스의 역할 분리
- API 설계와 RESTful한 URLs에 대한 이해
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
servlet과 container에 대한 질문입니다
0
22
1
jsp 의존성 수정 요청
0
77
2
요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?
0
142
1
save() 메서드 문의
0
65
1
절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상
0
99
1
request-body-json
0
83
2
MVC 패턴의 적용 단위
0
94
1
RequestMapping을 이용한 핸들러, 어댑터
0
118
2
save 후 결과화면
0
86
2
jsp를 이용한 view
0
97
1
application.properties에 debug 추가해도 결과가 똑같습니다.
0
177
1
수업 코드 제공 관련 문의
0
97
2
RequestMappingHandlerAdapter의 Controller 호출 과정
0
99
3
파일 오픈 시
0
68
1
스프링 배치 관련
0
77
1
@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부
0
112
1
postman으로 /request-body-json-v1 호출시 500 error
0
94
1
프론트엔드와 백엔드의 mvc, rest api에 대한 질문
0
78
1
모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문
0
111
1
console log 출력 관련 질문입니다.
0
74
1
애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ
0
138
1
html 변경하는 부분 적용 문제
0
103
1
한글 깨짐
0
76
2
메서드 추출에 대해서 궁금한게 있습니다
0
69
1





