PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2017/10/14 12:20:48
Name 1llionaire
Subject [질문] [웹개발] REST API 에 대해 질문드립니다...
저는 HTTP 메소드 중 GET , POST 만 써봤고...
두가지 방식이 그냥 파라미터 전달하는 방식에 차이가 있다고만 생각하고 있었습니다.

그런데 REST 관련을 보니...
데이터를 조회할 때는 GET 을 쓰고, 생성할 때는 POST 를 쓰고...
(추가로 PUT , DELETE , PATCH 도 수정,삭제 할 때 쓰더군요)

여기서 이해가 안되는 것이...
단순히 조회냐 추가냐 혹은 삭제냐 이런 행위에 대한 차이 때문에 파라미터 전달 방식 자체가 바뀌어야 할 이유가 있나요?


제가 알고 있던 구분 개념과 전혀 다른 방식으로 방식을 나누니 멘붕이 왔어요.
(기술적인 방식의 차이로 구분하는 걸로 알고 있었는데, REST 에서는 행위의 목적에 따라 구분을 해서요.)

저것이 REST 를 설계하면서 나온 HTTP 메소드가 아니라, 기존에 존재하던 HTTP 메소드를 이용해서
설계하는 RESTful  이 나오면서 임의로 대응시켜서 그런건가요?

쓸 수는 있어도,  파라미터 전달 방식이 목적에 따라서 바뀌어야 하는 이유가 이해가 안가서 답답하네요,

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
pppppppppp
17/10/14 12:38
수정 아이콘
Http는 파일을 전송하는 방식의 한가지 프로토콜이고 Rest는 스케일할 수 있게 APi를 설계하는 방법 중 하나라고 표현하면 되려나요.?

밑에 분이 자세하게 더 설명해 주시겠지만 www같은 인터넷은 REST API기반으로 만들어져있고 파일 전송 프로토콜로 http를 채택한 경우라고 보시면 됩니다. Http가 아닌 ftp같은 방법을 선책할 수도 있었지만 안한 것 처럼요.

Http 메소드는 겟 포스트로 전송 관련 verb를 사용하지만 RESTful하게 만들기 위해서, 즉 스케일하기 위해서 또는 더 편하게 만들기 위해서 put, delete등과 같은 REST 프로토콜의 verb를 사용하는걸로 알고 있습니다.

즉 Http와 rest는 다른 것이지만 인터넷은 두가지를 합한 것이라고 보시면 됩니다
1llionaire
17/10/15 21:01
수정 아이콘
답변 감사드립니다! 공부가 많이 필요하겠어요..
17/10/14 12:58
수정 아이콘
(수정됨) GET/POST가 기술적으로 분화된 것이 아니고, HTTP 1.1을 정의할 때 이미 그런 의미적인 부분들이 들어있었습니다 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)
REST를 설계할 때 (기존에 잘 쓰이지 않던) HTTP의 개념을 가지고 일종의 표준화를 시도한 것입니다.

물론 강제되는 사항은 아니지만, 일종의 약속으로 생각하시면 됩니다. 이런 약속을 했을때 장점 중 하나로, 프로그래머가 새로운 API를 쓰려고 할 때, 동작을 대략이라도 예측할 수 있게 됩니다. 브라우저의 동작도 달라지구요. (가령 캐시라던가, 새로고침을 해도 되는가 안되는가 같은 것들).

예를 몇 가지 들어보면, GET은 리소스를 읽는 동작으로 약속되어 있고, POST는 리소스를 만드는 동작으로 약속되어 있습니다. 따라서 사용자가 새로고침 버튼을 누를 떄, GET인 경우에는 걱정 없이 바로 보여주는 반면, POST인 경우에는 폼이 재전송될 수 있다는 경고를 띄워주죠. 리소스가 두 번 생성될 수 있으니까요.
또한 POST는 새 리소스를 만드는 동작, PUT이나 PATCH는 기존 리소스를 업데이트하는 동작으로 약속되어 있습니다. 이런 약속이 없다면 새 API를 쓸 때마다 이게 업데이트인지 생성인지 일일이 찾아보면서 만들어야 하고 심지어 API마다 다 다를 수도 있고요.
또 검색엔진들이 페이지를 크롤링할떄, GET 메서드는 리소스를 바꾸지 않아야 하기 때문에, 안전하게 글을 긁을 수 있습니다. 만약 게시판에 글을 쓰거나 삭제하는 메소드가 GET으로 구현되어 있다면? 시도 때도 없이 새 글이 생기거나 사라지겠죠.
1llionaire
17/10/15 21:01
수정 아이콘
마지막은 구글 액셀레이터 사건 같은 거로군요. 답변 감사드립니다~
Sam Presti
17/10/14 13:34
수정 아이콘
Rest는 주소를 통해서 접근하는 대상이 웹 페이지라기 보다는 하나의 리소스입니다. (리소스에 웹페이지가 포함될 수는 있습니다.) 흔히 Rest를 단순하게 이해하려는 사람들이 Rest는 HTTP + JSON이다 라고 단정짓는 경우가 있는데, 실제로 Rest가 저 리소스를 JSON으로 전달하는 경우가 많아서 그렇습니다. HTML로 웹 페이지를 전달해도 Rest 방식일 수 있습니다.
단순화 시켜서 pgr21.com/member 는 pgr21의 회원정보(리소스)를 표현하는 주소로 볼 수 있습니다. 저 주소를 GET으로 요청하면 회원정보를 보내달라는 요청이 될 수 있습니다. pgr21.com/member/abc123 의 경우 pgr21의 회원정보 중 abc123이라는 ID를 가진 사람을 나타내는 주소가 될 수 있습니다. 이 주소를 GET으로 요청할 경우 abc123의 정보를 보내달라, 같은 주소를 POST로 요청할 경우 내가 보낸 내용으로 저 사람을 추가해달라는 요청이 될 수 있습니다.
보통 예전에 웹 서비스는 서비스 제공, 그러니까 무엇을 할 것인가에 집중했기 때문에 pgr21.com/newMember.do?id=abc123 이런 식으로 주소 자체가 어떤 구체적인 요청을 가지고 있었다면, REST 방식은 무엇을 대상으로 하느냐가 주소로 기록되기 때문에 그 대상에게 무엇을 할 것이냐는 보통 HTTP Mehod (GET, POST, UPDATE, DELETE)로 표현하는 약속이 정해진 것입니다. 물론 실제로 리소스에 대한 모든 동작이 저 method 들로만 표현될 수는 없기 때문에 Restful한 웹 서비스라는 것이 이렇게 단순하게 표현되지는 않지만 어쨌든 배경은 그렇습니다.
1llionaire
17/10/15 21:01
수정 아이콘
자세한 설명... 답변 감사드립니다!
Lord of Cinder
17/10/14 15:41
수정 아이콘
HTTP/1.1 "규약"에서 그 Method로 HEAD, GET, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE (나중에 PATCH 추가) 등을 이러이러하게 쓰기로 사전에 "약속"을 한 것입니다.

그리고 REST는 그 HTTP 규약에 의해 약속된 바를 잘 지켜서 쓰자는 "방법론" 혹은 "관행"이죠. 이미 HTTP 규약에 따라 적절한 메소드가 다 있는데, 뭐하러 GET /delete_member.jsp?id=1234 같은 식으로 쓰냐는 거죠. 우리 친구들이 다들 GET, POST만 쓰고 있는데, 우린 이미 DELETE도 갖고 있고 모르겠으면 OPTIONS로 Allow: 받아오면 되고, 여튼 DELETE /member.jsp?=1234 같은 더욱 간명하고 딱 보이는 길이 있는데, 왜 다들 GET, POST만 쓰냐는 거죠.
칸나바롱
17/10/14 17:09
수정 아이콘
구현하실땐 근데 get과 post로만 구현하셔야해요.
포도사과
17/10/15 14:20
수정 아이콘
PUT DELETE도 많이쓰지않나요? 저희는 그렇게 쓰고있는데
칸나바롱
17/10/15 15:20
수정 아이콘
아 저는 html내에서 말하는거예용..
포도사과
17/10/15 16:12
수정 아이콘
프론트엔드쪽이여도 ajax로 처리할 수 있으면 그렇게 하는게 좋지않나요?
1llionaire
17/10/15 21:02
수정 아이콘
저도 싱글페이지어플리케이션에서 ajax 만 쓸 건데... 다 쓰는 게 좋겠죠?
포도사과
17/10/15 21:21
수정 아이콘
저는 SPA라면 백엔드를 받쳐쥬는 뷰가 없기때문에 더더욱 restful을 선호합니다.
발음기호
17/10/14 22:24
수정 아이콘
피지알에 고수분들 많으시네요
질문자는 아니지만 지나가다 잘 배우고 갑니다
포도사과
17/10/15 14:27
수정 아이콘
(수정됨) restful하지 않았던 시대의 개발을 생각해보면 restful을 왜 쓰는지, 써야하는지를 이해하실 텐데요,

유저가 하나의 캐릭터를 가지고 있을때 이것을 업데이트한다고 하면
아래와 같은 URL을 만들 수 있습니다.

/user_character/update
/get_user_character/update_character(POST로 user, character 정보를 get할 수 있는 정보가 들어가고 업데이트할 정보도 포함)

단순히 말씀드리면 이전까지 URL을 설정하는 것은 회사마다, 사람마다, 기관마다 다른 방식이고 이것에 대한 문서화가 없으면 새롭게 작업을 진행하거나 url을 예측하기가 무척 어렵습니다.
규율이 빡빡하지 않으면 같은 회사여도 개발 팀단위로, 혹은 작업자 단위로 url routing 을 조금씩 다르게 하고 있을 겁니다.

restful은 이러한 것에 일종의 공통룰을 도입했다고 보시면 될 듯합니다(http 기본을 충실히 따르는).
유저가 하나의 캐릭터를 가지고 있을때 이것을 업데이트한다. 거의 대부분 아래와 같은 형태의 URL 과 파라미터가 만들어 질 것입니다.
/user/character (PUT)

과거에는 하나의 서비스만으로도 모든 것을 처리할 수 있었다면 현재는 그렇지 않습니다.
대부분의 경우 하나의 웹 서비스는 다른 하나 이상의 웹 서비스와 상호 연결성을 지닙니다.
그러니 이 부분에서도 문서 없이 url을 대강이라도 눈치 챌 수 있거나 혹은 직관적인 것이 개발에 큰 도움이 됩니다.

특정 기술이 왜 유행하는지에 대한 가장 근본적인 이유는, 그 기술을 쓰지 않았을 때는 어떠했는가를 이해하시면 될듯합니다.
1llionaire
17/10/15 21:04
수정 아이콘
답변 감사드립니다. 글 달린 거 쭉 읽어보니 어느 정도 이해가 되고 있어요... ( ?! .. ... )
포도사과
17/10/15 21:23
수정 아이콘
감사합니다. 저도 부족한 지라 더 좋은 내용을 능력자분들이 달아주실거라 생각합니다
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
110443 [질문] 내일 고등학교 1,2학년은 학교 안가나요? [6] 일면식3040 17/10/16 3040
110442 [질문] 지동차 문이 안열립니다. [8] 휴울2531 17/10/16 2531
110441 [질문] 관세 신고 납부에 대해서 궁금합니다. [4] 귀여운호랑이2090 17/10/16 2090
110440 [질문] [스타2] SSL 패스트레인 안하나요? [2] WeakandPowerless1776 17/10/16 1776
110439 [질문] 스플랜더 잘하는 방법을 알려주세요. [5] 로맨스가필요해5368 17/10/16 5368
110438 [질문] (소전) 2제대? 3제대? 뭘키워야될지모르겠습니다. [18] 천우희2138 17/10/16 2138
110437 [질문] 아파트 세탁기.청소기 매너 시간대? [10] 나른한오후6274 17/10/16 6274
110436 [질문] [하스스톤] 하이랜더 사제를 이기는 법 좀 알려주세요 ㅠ ㅠ ㅠ [12] 라카제트2753 17/10/16 2753
110435 [질문] 피지 제거기 제품 써보신 분 계신가요? [2] 1perlson2405 17/10/16 2405
110434 [질문] 선택약정 중에 번호이동 문의 [3] 1q2w3e4r!2085 17/10/16 2085
110433 [질문] 퇴직금을 못 받고 있어서 신고하려고 합니다. [11] 소와소나무2258 17/10/16 2258
110432 [질문] 다른 법인 차량 운전시 보험 가능한 방법이 있을까요? [5] euimseed1570 17/10/16 1570
110431 [질문] 방콕 (숙소) 추천부탁드립니다~ [8] Grundia2322 17/10/16 2322
110430 [질문] [소녀전선] 돌릴 제조식 추천 부탁드립니다 [5] cluefake1517 17/10/16 1517
110429 [질문] 안구 근육과 집중력 사이에 무슨 관계가 있나요? [6] 0012537 17/10/16 2537
110428 [질문] 오사카 숙소 추천 부탁드립니다. [2] RaymondCattell1845 17/10/16 1845
110427 [질문] 게시판 글 검색 문의 입니다. 쵸컬릿모카1456 17/10/16 1456
110426 [질문] 그래픽 카드 문의입니다. [9] 세체미2687 17/10/16 2687
110425 [질문] 컴퓨터 업그레이드 및 모니터 구매 질문입니다. [4] 에너지2133 17/10/16 2133
110424 [질문] 사회인 야구 초보자용 배트 추천 부탁드립니다. [6] 호로리7098 17/10/16 7098
110423 [질문] 콘솔 게임의 덤핑은 어떻게 결정되나요? [11] Aquaris1850 17/10/16 1850
110422 [질문] [여행] 어르신들끼리 가평쪽으로 가신다고 .. [2] 한달살이1675 17/10/16 1675
110421 [질문] 인테리어를 쉽게 표현한 소프트웨어가 있을까요? [6] 나이스데이1571 17/10/16 1571
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로