본문 바로가기
  • 🦄 창민이 개발일지
서버

Django을 위한 웹 지식

by 창민이 개발일지 2022. 6. 20.
 

웹 개발 요소

  • URL 파싱
  • 응답 생성
  • 세션 관리
  • 요청 파싱
  • 데이터베이스 연동
  • 관리자 페이지

웹 프레임워크

  • 프레임워크: 라이브러리와 혼동될 수 있으며, 건축에 비유하면 구조를 만드는 골격이 프레임워크라면 그 외 자재들이 라이브러리가 됨.
  • 라이브러리보다 규모가 큰 프로젝트에 사용됨.
  • 위에 설명한 웹 개발 요소를 웹 프레임워크는 자동으로 관리 해준다.
  • 따라서 프레임워크를 사용하면 개발 영역(무엇을 만들까?)에 더 신경 쓸 수 있게 됨.
 

MVC 패턴

출처: https://ko.wikipedia.org/wiki/모델-뷰-컨트롤러[위키백과]

  • 웹 프로그램 개발시 MVC 패턴은 데이터, 사용자 인터페이스, 데이터를 처리하는 로직을 구분해서 한 요소가 다른 요소들에 영향을 주지 않도록 설계하는 방법
  • MVC: Model, View, Controller
  • Model: 데이터베이스에 저장되는 영역(데이터베이스 연동, SQL문법 대신 django함수를 통해 구현가능.)
  • View: 사용자 인터페이스, 사용자에게 보여지는 부분(html, css, javascript)
  • Controller: 데이터 처리, 실질적으로 프로그램 로직이 동작하여 적절한 처리 결과를 Template에게 전달하는 역할
  • 디자이너와 개발자가 협업하기에 용이

 

MTV 패턴

출처: https://m.blog.naver.com/nuberus/221747636515 [항상 충실하게]

  • 장고의 MVC 패턴
  • Model, Templete(view), View(Contoller)

 

URL 구조

  • 브라우저에서 서버한테 데이터를 요청하기 위해서 url를 통해 구현한다. www. naver.com 처럼 해당 서버의 도메인을 통해 url를 표현하는데, 도메인 뒤에 파라미터를 추가해서 서버한테 특정 목적을 수행하도록 할 수 있다. 
    https://www.beusable.net/blog/?p=4507

path(/)

  • 파일의 경로를 가리키며, /(슬래시) 뒤에 나온다. 
  • 폴더 내에 파일과 폴더를 계속 만들 수 있는 것처럼 컴퓨터의 폴더와 비슷한 개념
  • https:// www. beusable.net/blog/files/pdf

parameter(?)

  • key(파라미터의 이름)=value(파라미터의 값) 형태로 이루어짐
  • ?(물음표) 뒤에 나열되고, & 기호로 구분되어 여러 개가 존재할 수 있음.
  • 쿼리 파라미터 또는 스트링이라고도 부름
  • https:// www. beusable.net/blog?utm_source=google&utm+content=domaincontent

fragment(#)

  • 해당 페이지의 특정 요소를 지시할 수 있음.
  • 예를 들어 해시태그로 이동을 원하는 요소의 id를 링크로 연결하면, 스크롤 이동없이 바로 해당 위치로 이동.
  • 해시태그(Hashtag), 앵커(Ancher)라고도 부름. 
  • https:// www.beusable.net/blog/#content

Query Parameter VS Path Variable

  • 위에 말한 듯이 URL로 서버 주소 뿐만 아니라 추가 값을 넣어서 보낼 수 있는 데, 이때 쓰는 방식이 Query Parameter 와 Path Variable 이다. 
  • 두 방식은 GET method를 통해 데이터 넘길때 사용되는 기법이다.(POST 방식이 아니다.)

Path Variable

  • 이름에서도 알 수 있듯이 경로를 변수로서 사둉하는 방식.
  • ex) /post/6

Query Paramether

  • 경로 뒤에 입력 데이터를 함께 제공하는 방식
  • ex) /post?post_id=6

Path Variable과 Query Parameter를 각각 언제 사용해야 하는가?

  • 만약 어떤 resource를 식별하고 싶으면 Path Variable을 사용하고, 정렬이나 필터링을 한다면 Query Parameter를 사용하는 것이 좋다.

 

URL 매핑

  • 매핑: 해당 값이 다른 값을 가리키도록 하는 것.
  • http:// localhost:8080/action.do 처럼 URL이 그대로 노출되면 보안상 매우 취약하기 때문에 다른 값으로 표현한다.(포트 포워딩이랑 비슷)
  • 또한 주소가 간결해지는 장점이 있다.
  • URL 매핑이름을 URL패턴(pattern)이라고 한다.
  • django에서 urls.py 파일의 urlpatterns 변수

 

FORM 태그

  • 폼은 해당 웹페이지에 입력된 데이터를 한번에 서버로 전송하는 태그.
  • 전송된 데이터는 웹 서버가 처리하고, 결과에 따른 또 다른 웹페이지를 보여줌.

폼 태그 동작방법

  1. 폼이 있는 웹페이지를 방문
  2. 폼 내용을 입력함.
  3. 폼 안에 있는 모든 데이터를 웹 서버로 보냄.
  4. 웹 서버는 받은 폼 데이터를 처리하기 위해 웹 프로그램으로 넘김
  5. 웹 프로그램은 폼 데이터를 처리
  6. 처리결과가에 따른 새로운 html 페이지를 웹 서버로 보낸다.
  7. 받은 웹서버는 클라이언트한테 보냄

폼 태그 속성

method: 폼을 서버에 전송할 http 메소드를 정함(GET 또는 POST)

 위 그림에서 위쪽은 GET 방식이고 아래쪽은 POST 방식이다.

GET 방식은 URL 끝에 데이터를 붙여 보내기 때문에 외부에 노출되어 보안에 취약 반면
POST 방식은 폼 데이터를 별도로 첨부하여 서버로 전달함(개인정보 보안에 강함)

 

웹 서버 VS 애플리케이션 서버

  • 웹 서버는 애플리케이션 서버의 공통 서브세트
  • 현재는 웹 서버도 애플리케이션 기능을 지원하기 때문에 웹 서버와 애플리케이션 간의 차이가 모호해짐.

참조

웹 서버

  • 주로 웹 브라우저에서의 하이퍼텍스트 전송 프로토콜(HTTP) 요청에 응답하여 정적 웹 콘텐츠(예: HTML 페이지, 파일, 이미지, 동영상)를 제공.
  • Apache, nginx 등

애플리케이션 서버

  • 웹 콘텐츠를 제공할 수도 있지만, 이의 주요 작업은 클라이언트와 서버 애플리케이션 코드(비즈니스 로직 코드) 간의 상호작용을 통해 트랜잭션 결과, 의사결정 지원 또는 실시간 분석 등의 동적 콘텐츠를 생성하고 이를 제공하는 것
  • WAS (Web Application Server) 이라고도 함
  • Appache Tomcat

CGI VS WAS

CGI(Common Gateway Interface)

  • 공용 게이트웨어 인터페이스
  • 서버와 애플리케이션 간에 데이터를 주고 받는 방식.
  • 정적인 HTML 문서 서비스의 한계를 극복(즉 동적 HTML 문서 구현)
  • 방식: 클라이언트 요청 -> 웹 서버(아파치, nginx 등) -> (웹 서버가 직접실행)웹프로그램(Java Servlet, mod php, FastCGI: 소켓 단위의 프로세스)
  • 웹서버와 요청을 받아 처리해줄 로직을 담고 있는 애플리케이션 프로그램 사이의 인터페이스
  • 웹서버가 특정 언어로 쓰인 구체적인 프로그램이 아니라 이 인터페이스에 의존하고 있기 때문에 어떤 언어든 이 인터페이스를 구현하기만 한다면(CGI 스펙을 따른다면) 웹서버와 소통 가능

WAS(Web Application Server)

  • Web Server + CGI + Application Server
  • 방식: 클라이언트 요청 -> 웹 서버(아파치, nginx 등) -> 웹 어플리케이션 서버(톰캣, JBoss등) -> (웹 애플리케이션 서버가 실행)프로그램(JSP,ASP.net: 소켓 단위의 프로세스)

WSGI(Web Server Gateway Interface)

출처: https://wayhome25.github.io/django/2018/03/03/django-deploy-02-nginx-wsgi/ [초보몽키의 개발공부로그]
 
  • 웹 서버와 파이썬으로 작성된 웹 애플리케이션 간의 표준 인터페이스.
  • 방식: 요청 -> 웹서버 -> WSGI Server(middleware) -> WSGI를 지원하는 웹어플리케이션(Django, flask: 소켓 단위의 프로세스)등
  • 대표적인 WSGI 서버: mode_wsgi, uWSGI, Gunicorn 

 

{ REST API }

  • Representational State Transfer API
  • HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미

REST 구성

  • 자원(Resource) - URI : 명사 표현
    • URI: (Uniform Resource Identifier)
    • Client는 URI를 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청
  • 행위 (Verb) - HTTP Method : 동사 표현
    • HTTP 프로토콜의 Method 사용
    • GET, POST, PUT, DELETE 메소드 사용
  • 표현 (Representation)
    • Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 보낸다.
    • REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타내어 질 수 있다.
    • JSON 통해 데이터를 주고 받는 것이 일반적이다.

CRUD

  • Create : 데이터 생성(POST) -> INSERT
  • Read : 데이터 조회(GET) - SELECT
  • Update : 데이터 수정(PUT) -> UPDATE
  • Delete : 데이터 삭제(DELETE) -> DELETE

HTTP 메서드를 기준으로 API 작업 정의

리소스POSTGETPUTDELETE

응답코드

  • 200 : 클라이언트 요청 정상수행 (응답에 대한 메시지가 포함)
  • 404 : 클라이언트가 요청한 리소스가 존재하지 않을 때 사용

쓰는 이유

  • 기존에는 웹 페이지를 보여주는 웹서버만 구현하여 웹 서버에서 DB서버의 데이터도 읽어오고, 사용자들이 글을 남기면 DB 서버에 저장까지 하는 기능을 모두 담당했다. 
  • 하지만 스마트폰이 출시되고, 어플리케이션의 등장으로 더이상 웹으로만 서비스를 제공하는 것에 한계가 있었다.
  • RESTful 아키텍쳐를 HTTP Method와 함께 사용해 웹, 데스크탑 앱, 스마트폰 어플들까지 하나의 API 서버를 생성할 수 있다