개발자
저가 front 부분만 공부하다가 지금 처음으로 서버 쪽 endpoint를 작성해보고 있습니다. 이 고민을 하게 된 이유는 처음에는 cookie로 정보를 보낼까 했다가 아는 backend 지인이 cookie로 보통 보내지 않고 필요한 정보는 dynamic routing을 이용해서 params로 전달하는 것이 좋다고 해서 변경하다가 endpoint가 복잡해져서 잠깐 멈추고 여기에 질문을 올립니다. endpoint를 정하는 기준이 있을까요?
답변 1
인기 답변
무슨 내용이냐에 따라서 다르게 설계할 것 같은데.. 보안이 중요하냐, 양이 어느정도냐, 무슨 방식이냐 (GET, POST...) 링크로 전달되어야 하냐 등 여러 요인을 고려하시면 될 것 같습니다. endpoint면.. URL적인 측면일 것 같은데 여러 요소를 고려하시면 될 것 같내요 1. Body에 담기 장점: 대량의 데이터 전송 가능: body는 많은 양의 데이터를 담을 수 있어 복잡한 정보나 큰 파일을 전송할 때 유용합니다. 데이터 보안: URL에 노출되지 않아 민감한 정보를 보다 안전하게 전송할 수 있습니다. 단점: 전송 속도: 큰 데이터를 전송할 때는 속도가 느려질 수 있습니다. GET 요청에서는 사용 불가: 일반적으로 GET 요청에서는 body를 사용하지 않습니다. 적용 예: 사용자가 회원가입 폼에 정보를 입력하고 제출할 때, 개인 정보와 같은 민감한 데이터를 서버로 전송합니다. 2. Cookie에 담기 장점: 사용자의 상태 유지: 사용자의 세션 정보나 환경 설정 등을 저장하여 사용자 경험을 개선할 수 있습니다. 자동 전송: 한 번 설정되면, 해당 도메인의 모든 요청에 자동으로 포함되어 전송됩니다. 단점: 크기 제한: 쿠키는 크기에 제한이 있어 많은 양의 데이터를 저장하기 어렵습니다. 보안 취약성: 쿠키 데이터는 클라이언트 측에서 쉽게 접근하고 수정될 수 있어 보안에 취약합니다. 적용 예: 사용자가 웹사이트에 로그인하면, 세션 ID를 쿠키에 저장하여 사용자가 로그인 상태를 유지하도록 합니다. 3. Query String으로 담기 장점: 간단한 데이터 전송: URL에 직접 데이터를 포함시켜 간단한 데이터 전송에 적합합니다. 북마크와 공유 용이: 전체 URL을 공유하거나 북마크할 때 쿼리 스트링이 포함되어 동일한 상태를 재현할 수 있습니다. 단점: 크기와 보안의 제한: 쿼리 스트링은 URL 길이 제한이 있으며, 데이터가 URL에 노출되어 보안상 취약합니다. 복잡한 데이터 구조에 부적합: 복잡한 데이터 구조를 표현하기 어렵습니다. 적용 예: 사용자가 상품 목록 페이지에서 특정 카테고리를 선택하면, 해당 카테고리의 정보를 쿼리 스트링으로 전달하여 필터링된 결과를 보여줍니다. 4. Params로 담기 장점: URL의 일부로서 의미 있는 구조: URL 경로의 일부로 데이터를 전달하여 의미 있는 URL 구조를 만들 수 있습니다. RESTful URL 디자인: API에서 리소스를 식별하는 데 적합하며, RESTful 디자인 원칙에 부합합니다. 단점: 제한된 데이터 전송: URL 경로의 일부로서 제한된 양의 데이터만 전송할 수 있습니다. 복잡한 데이터 구조 전송에 부적합: 단순한 식별자나 키워드 정도만 전송하는 것이 적합합니다. 적용 예: 사용자가 특정 게시물을 조회할 때, 게시물의 고유 ID를 URL의 일부로 포함시켜 /posts/123와 같은 형태로 요청합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 01월 18일
Endpoint를 정하는 기준은 일반적으로 사용되는 API 디자인 원칙을 따르게 됩니다. 적절한 엔드포인트 설계는 API의 가독성과 유지 보수성에 큰 영향을 미치므로 중요합니다. 1. **리소스 중심적**: 엔드포인트는 가능하면 리소스를 나타내야 합니다. 예를 들어, `/users`, `/products` 등이 좋은 예입니다. 2. **명사 사용**: 엔드포인트는 동작보다 리소스(명사)에 초점을 맞추어야 합니다. 예를 들어, `/addUser`보다는 `/users`가 좋습니다. 동작의 경우 HTTP 메서드(`GET`, `POST`, `PUT`, `DELETE` 등)로 표현됩니다. 3. **동적 데이터**: 동적 데이터 (예: 특정 user의 정보)는 경로 변수나 쿼리 파라미터를 이용해 표시할 수 있습니다. 예를 들어, 특정 user의 정보를 가져오는 경우 `/users/:userId`와 같은 형태가 될 수 있습니다. 4. **버전 정보 포함**: API 버전 정보도 URL에 포함시켜 관리하는 것이 유용할 때가 많습니다 . 예: `/v1/users` 5. **복잡도 최소화**: 마지막으로, 복잡한 계층 구조는 피하고, 필요한 경우 쿼리 파라미터를 이용하는 것이 좋습니다. 이러한 원칙들은 대부분의 상황에서 도움이 되지만, 항상 그런 것은 아닙니다. 프로젝트의 요구 사항과 팀의 기본 규칙에 따라 이러한 원칙을 적용할지 여부를 결정해야 합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!