한땀한땀 정성들인 코딩
웹 서비스 본문
프롤로그
-웹프로그램(어플리케이션)은 http프로토콜로 통신하는 네트워크 프로그램
-http프로토콜을 직접 다루는 코드를 작성하기 보
-웹 어플리케이션 서버(미들웨어)로 제품이 제공하는 환경위에서 동작
-이 미들웨어는 tcp/ip 연결관리와 http프로토콜 해석등의 네트워크 기반 작업
-보통 사용자는 요청과 응답 개념위에서 구현 시작
-웹어플서버가 제공하는 추상화된 API로 네트워크에 접근
서블릿 컨테이너
-http요청을 받아 처리
-아파치 톰캣, 제티, 그리즐리
통신지원
-통신하기위해 소켓을 생성할 필요가 없다. 즉 통신api에 신경 쓸필요가 없다.//?? webserver아님?
생명주기 관리
-서블릿클래스를 로딩하여 인스턴스화
-초기화 메소드 호출
-가비지 컬렉션
멀티스레딩
-요청이 올때마다 쓰레드 생성
선언적인 보안관리
-xml 배포 서술
아파치 TPCMon - http패킷 분석기
http프로토콜
-tcp/ip기반
-get, post 메소드
-request, response
request structure
request_line : <request_method><URL><HTTP_Ver>
-요청방식, url
request header : <header_name>:<header_value><CR><LF>
an empty line : <CR><LF>
optional mesaage body : post data
response structure
response line : <http ver><status code><status-message>
response header : <header_name>:<header_value><CR><LF>
An empty line : <CR><LF>,carriage return
message body : html contents
브라우저
-html코드 파싱
-화면출력
-크롬,파이어폭스,인터넷 익스플로어
웹서버
-클라이언트로부터 http요청을 받아들여 html문서 응답하는 소프트웨어 //기본기능
- +부가기능
웹서버 코드의 예
import socket
import os.path
import sys
DOCUMENT_ROOT = "d:/temp"
RESPONSE_TEMPLATE = """HTTP/1.1 200 OK
Content-length: {}
{}"""
def main():
listen_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
listen_socket.bind(('', 80))
listen_socket.listen(1)
while True:
connection, address = listen_socket.accept()
request = connection.recv(1024)
start_line = request.split('\n')[0]
method, uri, version = start_line.split()
path = os.path.join(DOCUMENT_ROOT, uri[1])
if not os.path.exists(path):
connection.sendall('HTTP/1.1 404 Not Found\n')
else:
with open(path) as file_handle:
file_content = file_handle.read()
response = RESPONSE_TEMPLATE.format(len(file_content), file_content)
connection.sendall(response)
connection.close()
if __name__ == "__main__":
sys.exit(main())
패킷의 첫줄을 파싱해서 파일을 불러 읽어 보내준다.
WAS
-서버 단(사이드)에서 애플리케이션을 동작할수 있도록 지원
-컨테이너+web server
-초창기 CGI
-servlet, ASP, JSP, ASP, PHP
web server VS was(web application server)
- was = web server + web container
- web server는 http요청을 reponse해준다.
- 또 전송받은 data를 container로 전송한다.
- 컨테이너는 jsp,servlet을 처리한다.
- 웹서버의 예로 apache가 있고
- container 예로 tomcat이 있다.
java servlet
-자바를 사용
-웹페이지를 동적으로 생성하는 서버사이드 어플리케이션
-Jave EE사양의 일부분
-요청때마다 쓰레드 생성
CGI
-perl을 이용한 동적 웹페이지 생성 서버측 어플리케이션
-요청때마다 프로세스 생성
mod_php
-php 동적 웹페이지 생성
엔터프라이즈 자바빈즈
-EJB는 기업 환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델
-업무로직
-jsp는 화면로직 처리, EJB는 업무로직 처리
자바 메시지 서비스
-JMS는 자바 프로그램이 네트워크를 통해 data를 송수신하는 java api
자바 가상 머신(jvm)
-자바 bytecode를 실행하는 환경
-대부분의 플랫폼에 설치( window,linux,web browser)
-미들웨어, 플랫폼
자바 서버 페이지(jsp)
-html내에 자바 코드 삽입
-동적으로 웹페이지 생성후 웹브라우저에 반환
-.jsp -> servelt원시코드 -> .html
web service
SOAP
-xml, html등을 기본으로 하여 다른 컴퓨터에 있는 data나 서비스를 호출하는 프로토콜
-http기반 위에서 동작
-프록시, 방화벽에 구애받지 않음
-http외 전송층 프로토콜 사용가능
-플랫폼 및 프로그래밍 언어에 독립적
-xml메시지 지원
UDDI
-전역 비즈니스 레지스터리
-웹 설명서가 있는 마켓
-꼭 wsdl이 uddi에 있는것은 아니다.
WSDL
-xml기반의 마크업 언어
-웹서비스 기술언어
-설명서
<definitions>
<types>데이터 타입</types>
<message>메소드 인자와 리턴값 선언</message>
<portType>인터페이스 정의</porType>
<binding>실제 네트워크 프로토콜과 port type 매핑</binding>
<service>endpoint의 물리적 위치정의
<port>웹 서비스 URI</port>
</service>
</definitions>
'자격증 > 정보보안기사' 카테고리의 다른 글
web어플 공격기법 (0) | 2017.02.12 |
---|---|
XSS (0) | 2017.02.12 |
리눅스 계정관리 (0) | 2017.02.10 |
취약점 진단도구(시스템) (0) | 2017.02.09 |
bof 방지기법 그외(objdump 사용,rtl chain) (0) | 2017.02.09 |