개발자

rest api에서 같은 DB Table에 대해 서로 다른 필드를 받을때, 각각 하나의 엔드포인트로 작성하는게 맞을까요?

2023년 05월 28일조회 196

게시글 페이지로 예를들어, 리스트 페이지에서는 author, title, views 게시글 상세페이지에서는 모든 필드를 반환해주는 엔드포인트가 있습니다. 지금은 두개의 엔드포인트라서 괜찮지만, 필요한 요구사항이 생길때 마다 각각 하나의 엔드포인트를 만들어주는 것이 맞을까요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

달레님의 프로필 사진

REST API 설계에 대해서 고민하고 계신 것으로 보이며 이 것은 백엔드 개발에 있어서 상당히 중요한 문제입니다. 말씀하신 방식으로 새로운의 필드의 조합이 나타날 때 마다 새로운 엔드포인트를 추가하다보면 엔드포인트의 수가 지나치게 많아질 수 있고 API 유지보수가 점점 힘들어 질 수 있습니다. 뿐만 아니라 엔드포인트를 추가할 때 마다 좋은 URL을 생각해내는 것도 은근히 골치가 아플 수 있죠. 따라서 일반적으로 조회할 DB 테이블이 동일하고 응답에 포함해야 할 필드만 달라질 수 있는 경우에는 하나의 엔드포인트로 처리하는 경우가 많습니다. 이를 위해서는 보통 해당 엔드포인트가 쿼리 파라미터를 통해서 필요한 필드를 명시할 수 있도록 설계를 합니다. 예를 들어, 아래과 같이 쿼리 스트링을 명시하지 않으면 요청을 하면 모든 필드를 포함한 게시글을 반환하고요. ``` GET /posts/{id} ``` 반면에 다음과 같은 쿼리 스트링과 함께 요청을 하면 author, title, views 필드만 포함한 게시글을 반환합니다. ``` GET /posts/{id}?fields=author,title,views ``` 이런 식으로 유연하게 REST API 설계를 하면 각 엔드포인트의 재사용성이 높아져서 유지보수가 용이해집니다. 백엔드 코드도 크게 복잡해지지 않습니다. 쿼리 파라미터를 읽어서 DB 테이블을 조회할 때 적절히 넘겨주기만 하면 되니까요. 마지막으로 추가 조언을 드리자면... 너무 특정 클라이언트 입장에서 REST API를 설계하시기 보다는 해당 REST API가 관리하고 있는 데이터를 중심으로 접근해보시라고 말씀드리고 싶습니다. REST API의 사용성이나 확장성, 유지보수성을 고려하시는데 도움이 될 것입니다.

신동민님의 프로필 사진

신동민

작성자

개발자 꿈나무2023년 05월 28일

마지막 조언 말씀 감사합니다. 프론트,백엔드 같이 동시에 진행을 하다보니 제가 스스로 정리가 안되었던 것 같습니다. 제가 생각한 문맥이랑 동일한 답변이라 말씀해주신대로 구현 해 보아야겠습니다. 혹시 fields를 url param으로 넘겨주는 경우 데이터베이스 구조의 노출로 이어질 수 있지 않을까 라는 고민이 좀 있는데, 추가로 답변 해주실 수 있을까요? 아니면 너무 앞서나간 걱정일까요?

달레님의 프로필 사진

달레

블로그 쓰는 개발자 ✍️2023년 05월 28일

좋은 추가 질문입니다! 실제 프로젝트에서는 API 스키마와 DB 스키마를 분리하여 설계하는 경우가 많습니다. 왜냐하면 REST API는 일단 클라이언트가 사용하기 시작하면 백엔드에서 함부로 바꿀 수가 없거든요. DB 스키마가 API 스키마로 부터 분리되어 있으면 클라이언트에게 주는 영향을 최소화하면서 백엔드에서 DB 구조를 변경할 수 있는 큰 이점이 있습니다. 물론 내부 DB 구조도 효과적으로 숨길 수 있고요. 따라서 외부 API 구조의 노출이 반드시 내부 DB 구조의 노출로 이어진다고 보기는 어려울 것 같습니다. 그리고 DB 구조의 노출에 대해서 막연한 걱정을 하시고 계시다고 느껴지신다면, DB 구조의 노출이 실질적으로 어떤 보안 위협이 될 수 있을지 생각해보시면 도움이 되실 것 같습니다. 예를 들어, 동민님께서 어떤 REST API의 DB 구조를 알아내시면 외부에서 어떤 공격을 하실 수 있으실까요? 단순히 어떤 회사의 DB 구조를 아는 것이 큰 보안 위협이 된다면, DB 구조를 알고 퇴사한 직원들이 잠재적인 공격자가 될까요? 이 것이 보안상에 문제가 될 수 있다면 왜 IT 기업들이 기술 블로그를 통해서 DB 구조를 공유하는 걸까요? 저도 보안 전문가는 아니라서 확답을 드리기보다는 이런 식으로 스스로에게 질문 하실 부분을 알려드리는 것이 좋을 것 같습니다.

신동민님의 프로필 사진

신동민

작성자

개발자 꿈나무2023년 05월 29일

전반적인 개념이 잘 잡혔습니다. 친절한 답변 너무 감사드립니다

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!