Byeonguk Kim

안녕하세요. 29살의 조금은 늦은 나이로 새롭게 개발자로 시작하는 신입 개발자입니다. 포트폴리오 [https://deaguowl.github.io]

HTML 05. Server만들기(get)

30 Apr 2019 » HTML

2019.04.30 HTML을 통한 간단한 서버 구축하기1(get)

# 질문에 답하기

HTTP Server

스크린샷 2019-04-30 오후 4 29 55

[출처 : jQuery Ajax & JSONPoiemaWeb](https://poiemaweb.com/jquery-ajax-json)
  1. 브라우저를 통해 사용자가 HTTP Rrequest message를 보내면
  2. 서버는 그 Message를 해석하고 Response Message로 응답한다.
    1. 어느 페이지로 접속하였느냐?
    2. Query string은 어떤 데이터를 가지고 있느냐?
    3. 특정 스크립트 요청이 있느냐?
    4. 최종 응답을 HTML, 다운로드는 파일로 할 것이냐?

HTTP Response만 하는 서버

  • Handler 필요 : 요청이 들어오면 어느 객체가 요청을 해석하고 처리할 것이냐?

  • 주소에 붙여서 보내면 이것을 읽어서 해석하는데 이를 쿼리스트링이라고 하고 파싱을 통해 주소내 특정 값들을 분리한다.

  • def run와 with handler는 같은 것이다.

  • 네이버 메인 페이지는 get방식 회원가입 할 때는 POST방식이다.
    근데 장고 같은 프레임워크는 한 페이지에서 접속 Method에 따라 기능을 분기한다. 예) 회원가입 페이지 domain.com/singup/
  • Get방식으로 접속하면 회원가입 양식 보여주기
  • Post방식으로 하면 전달받은 데이터를 처리해서 회원가입 진행하기, 데이터베이스에 저장하기
  • 한 주소로 고정되어 있어서 회원 가입에 오류가 있으면 회원가입으로 돌아가서 다시 메시지를 띄어야 한다. 우리가 쳤던 정보 내용들이 남아 있어야 한다. 한 페이지에서 돌아가기 때문에 비밀번호와 같은 것을 잘못 입력해도 그대로 남아 있다.

do_GET 예시 코드

스크린샷 2019-04-30 오후 4 35 17

  • Handler 클래스를 만들고 그 아래에 GET과 POST를 두어서 2가지에 대해서 어떻게 처리할지에 대한 내용이 들어간다.

do_GET을 통해 주소창에 들어간 내용 해석하기

  • 주소창에 들어간 http://127.0.0.1:8000/?height=181&weight=77와 같은 내용 해석하기
from urllib.parse import parse_qs, urlparse

PORT = 8000

class Handler(BaseHTTPRequestHandler):
	def do_GET(self):
		self.send_response(200)
		self.send_header('Content-type', 'text/html')
		self.end_headers()
		query_text = urlparse(self.paht).query
		print(query_text)
		query_vars = parse_qs(query_text)
		print(query_vars)
		
		if 'weight' in query_vars and 'height' in query_vars:
			height1 = float(query_vars['height'][0])
			weight1 = float(query_vars['weight'][0])
			BMI = weight1/((height1/100)**2)
			message = "Your BMI is " + str(BMI)
			
		self.wfile.write(bytes(message, 'utf-8'))
		return
		
	def do_POST(self):
		pass
		
def run():
	server_address = ('127.0.0.1', PORT)
	httpd = HTTPServer(server_address, Handler)
	print("serving at PORT", PORT)
	httpd.serve_forever()
	
run()

결과값

  • 주소에 http://127.0.0.1:8000/?height=181&weight=77 임의로 넣고 실행
  • print창에
    • height=181&weight=77
    • {‘height’: [‘181’], ‘weight’: [‘77’]}
  • http 창에
    • your BMI is 23.503556057507403 출력