기본 콘텐츠로 건너뛰기

[참고] http 명령


http 명령

이론적으로는 PUT, DELETE 명령은 각각 요청 URI에 대한 자원의 생성, 삭제를 의미합니다. 그냥 의미론만 따지고 본다면 해당 URI의 자원을 접근할 수 없게 만든다는 의미를 가지고 있기 때문에 사실 보안 상의 문제를 발생 시키는 것이 아는가? 하는 오해를 불러일으키기 쉽습니다.
그러나 클라이언트가 요청을 어떻게 보내든지 처리하는 것은 서버 쪽 마음이기 때문에 이론적인 PUT, DELETE의 의미를 수정하여 처리하는 것은 개발자의 마음이기 때문에 이런 문제가 발생하지 않습니다.(억지로 해킹이 가능하도록 구현할 사람도 없겠죠;;) 웹 서비스의 측면에서 이를 처리할 때 다음과 같이 생각하고 구현하면 됩니다.

POST 는 특정 URI 자원의 생성
GET은 특정 URI 자원의 표현을 반환
PUT은 특정 URI 자원을 갱신
DELETE는 특정 URI 자원을 삭제

만약 서버 쪽 도메인 모델이 DBMS라면 각각의 요청을 처리하는 과정이 CRUD라고 생각하면 되는 것입니다. 자, 그렇다면 이런 클라이언트와 서버 쪽에서 REST 기반의 웹 서비스를 구현하려면 무엇이 필요할까요?

자바에서는 Servlet을 지원하고 있습니다. 만약 JSP 환경하에서 정확한 Rest를 구현하려면 Servlet을 통해서 구현하면 됩니다. 사실 서블릿을 일일이 매핑하는 것은 상당히 시간 낭비적이기 때문에 대표 서블릿을 하나만 매핑하고 이 서블릿을 통해서 처리하게 하는 것이 좋겠죠. 아 물론 서버에 접근하는 클라이언트 수가 작다는 가정하에서 입니다. 많다면 명령에 따라서 분배를 좀 해주셔야겠죠.

doPost, doGet, doPut, doDelete 등등의 메서드를 사용하면 됩니다.

(사실 HTTP 명세에서는 REST의 의미론 외의 OPTION, HEAD, TRACE 등의 명령도 정의 되어 있습니다. http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html )

클라이언트 측에서 웹 브라우저를 통해서 접근하려면 Javascript에 있는 XMLHttpRequest 객체에서 직접 명령을 조정해서 사용해야 합니다.

이것은 간단히 말씀드리자면

var requester = new XMLHttpRequest();
requester.open("PUT", ServletURI, false);
requester.open("DELETE", ServletURI, false);

와 같이 표현될 수 있습니다.

만약 클라이언트가 웹이 아니라 CS 환경의 자바라도 방법은 쉽습니다. HttpClient를 이용하거나 HttpURLConnection의 setRequestMethod() 같은 것을 사용하면 됩니다.



http://blog.daum.net/question0921/564 - http 전송 명령 GET과 POST

http://opensta.org/docs/sclref10/imp3ln40.htm - http 명령어

http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol - http 명령어

댓글

이 블로그의 인기 게시물

이클립스 실행 오류와 eclipse.ini 수정

1. 실행시 Java was started but returned exit code=13 에러가 날때 --> Win7 64bit를 사용중인데, 이 오류가 발생하고 있었습니다. 제가 자바도 이클립스용도 32비트 버젼을 사용중이었는데, 자바만 64비트용으로 설치를 했더니, 생긴 문제였습니다. 이클립스 64비트를 설치하시면 해결됩니다. 2.이클립스 폴더내 eclipse.ini 기본값(보통 아래 처럼 되어 있습니다.) -startup plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.1.R36x_v20100810 -product org.eclipse.epp.package.jee.product --launcher.defaultAction openFile --launcher.XXMaxPermSize 256M -showsplash org.eclipse.platform --launcher.XXMaxPermSize 256m --launcher.defaultAction openFile -vmargs -Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m 3.실행하자 마자 javaw.exe 찾기 실패시  --> jdk가 설치된 경로(javaw.exe가 있는 경로)를 추가해준다. 맨 아래쪽에 삽입하니 안되더군요.(왜죠?) -vmargs 윗부분에 삽입했습니다. 다른 블로그님 들 글에선 open 위쪽에 쓰니 괜찮다는 글도 있으니 참고하세요. -vm c:\Program Files\java\jre6\bin\javaw.exe 4.이클립스 속도 향상을 위한 추가값 출처:  http://blog.naver.com/sungback/90097516641 검색도중 이클립스 속도 향상 정보를 발

[c#.net] WPF 사용 중 xaml관련 실행시 오류 와 대처 방법

wpf 사용 중 xaml관련 실행시 오류 가 발생해서 자그마치 2일을 소비 했다..--;; 오류 내용은 아래와 같다. ================================== 'System.Windows.Markup.XamlParseException' 형식의 첫째 예외가 PresentationFrameWork.dll에서 발생했습니다. 추가 정보: '지정된 바인딩 제약 조건과 일치하는 'PapaZone.MainWindow' 형식에 대한 생성자 호출에서 예외가 throw 되었습니다.' 줄 번호 '21' 및 줄 위치 '9' 이 예외에 대한 처리기가 있으면 프로그램을 안전하게 계속할 수 있습니다. [] 이 예외 형식이 throw되면 중단 ================================== 위 Xaml 오류 메세지만으로는 내용 추적 불가하여, 도대체 뭔가 했다. 검색해도 뚜렷한 답변은 없었지만, 여러가지 의견을 종합해 보면 아래와 같다. 1. xmlns 관련 파일 과 관련된 파일 로딩 실패 이거나, 2. 신규로 추가된 namespace 에 속한 태그 사용시 오류로 판단되어 태그 하나씩 삽입하며 테스트 해봐야 한다고 함. 해결한 지금에 원인을 보면, xaml 에서 clr-namespace 로 추가된 항목들이 로딩에 실패해서 발생한 것이며, 추가된 항목은 있었으나, 이것과 연결된 파일이 없어서 로딩되지 않는 것이 문제였다. 오늘도 즐거운 하루~~

[MSSQL] SQL Server 에 원격 접속을 못하는 경우 조치 방법

[MSSQL] SQL Server 에 원격 접속을 못하는 경우 조치 방법 내부 오류 추적 결과 다음과 같이 나옴. [Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다. SqlState : 08001, NativeError : 10061 오류 원인과 처리 1.SQL 서버 로그인 계정 틀린 경우 -> A.SQL Managerment Studio에서 사용할 DB 접속 '로그인' 사용할 계정의 아이디/암호 확인 2.TCP/IP 접속 권한이 없는 경우 -> A.SQL Server 구성 관리자를 실행에서 TCP/IP 허용 되어 있는지 확인 B. 서비스 포트 값이 (보통 1433) 맞는지 확인 C. 외부에서 접속하는 경우에는 방화벽 허용 되엉 있는지 확인 C. 서비스 재시작 3.Windows 인증 모드만 허용 인 경우 -> A.SQL Managerment Studio에서 사용할 DB 접속하고, 우클릭 하여 속성 정보 확인해서 B.연결에서 인증모드 '로그인' 사용할 계정의 아이디/암호 확인 4.'exec Sp_ReadErrorLog' 명령어를 사용해서, 로그인 실패 로그를 확인해서 원인을 분석한다.