SQL & HTTP

SQL


 

SQL이란 무엇인가?

SQL은 (Structured Query Language)의 약자로, 데이터베이스 관리 시스템 (DBMS)에서 정보를 저장하고 처리하기 위해

사용되는 데이터 처리 언어를 말한다. SQL은 정보를 표 형식으로 저장하며, 행과 열은 다양한 데이터 속성과 데이터 값 간의

다양한 관계를 나타낸다.

 

[ DBMS ]
DBMS (Database management System)는 데이터베이스를 관리하고 운영하는 소프트웨어를 말한다.

 

SQL의 특징

  • 표준 SQL 문법이 존재하기 때문에 DBMS 종류에 얽매이지 않고 사용할 수 있다.
  • SQL은 데이터 연산에 대한 처리가 절차적으로 진행되지 않고, 데이터의 집합 단위로 처리된다.
  • 기본적으로 대소문자를 구분하지 않는다. 다만 가독성을 위해, 또는 서버 환경이나 데이터 베이스 시스템에 따라 구분하기도 한다.
  • SQL 명령은 반드시 세미콜론 ( ; ) 으로 끝나야 하고, 고유의 값은 따옴표 ( ' ' ) 로 감싸준다.

 

SQL 문법

  • Data Manipulation Language ( DML)
  • Data Definition Language ( DDL )
  • Data Control Language ( DCL )

 

DML (Data Manipulation Language) - 데이터 조작

데이터 조작어를 뜻하는 DML은 정의된 데이터베이스에 입력된 레코드를 조회하거나 수정, 또는 삭제하는 등의

역할을 하는 언어를 말한다. 간단히 말하자면 테이블에 있는 행과 열을 조작하는 언어라고 할 수 있다.

SELECT 데이터 조회
INSERT 데이터 삽입
UPDATE 데이터 수정
DELETE 데이터 삭제

 

DDL (Data Definition Language) - 데이터 정의어

데이터 정의어를 뜻하는 DDL은 데이터베이스를 정의하는 언어를 말하며, 데이터를 생성, 수정, 삭제하는 등의

데이터의 전체 골격을 결정하는 역할의 언어를 말한다.

CREATE 데이터베이스, 테이블 생성
ALTER 테이블 수정
DROP 데이터베이스, 테이블 삭제
TRUNCATE 테이블 초기화

 

DCL (Data Control Language) - 데이터 제어어

데이터 제어어를 뜻하는 DCL은 데이터베이스에 접근하거나 객체에 권한을 주는 등의 역할을 하는 언어를 말한다.

데이터의 보안, 무결성, 회복 등을 정의하는 데 사용한다.

GRANT 특정 데이터베이스 사용자에게
특정 작업에 대한 수행권한 부여
REVOKE 특정 데이터베이스 사용자에게
특정 작업에 대한 권한 박탈, 회수

 

TCL (Transaction Control Language) -트랜잭션 제어어

TCL은 DCL과 맥락이 비슷하지만, 데이터가 아닌 트랜잭션을 제어할 때 사용된다.

논리적인 작업 단위를 묶어 DML에 의해 조작된 결과를 트랜잭션 별로 제어한다.

DCL에서 트랜잭션을 컨트롤할 때 사용하는 명령어롤 TCL로 분류하기도 하나, 

따로 분리하지 않고 DCL로 분류하는 경우도 있다.

 

COMMIT 트랜잭션의 작업이 정상적으로
완료되었음을 관리자에게 알림
ROLLBACK 트랜잭션의 작업이 비정상적으로
종료되었을 때 원상태로 복구

 

 


 

HTTP


 

HTTP란 무엇인가?

HTTP (HyperText Transfer Protocol) 은 텍스트 기반의 통신 규약으로, 서버와 클라이언트

사이에서 데이터를 주고받는 방법을 정해놓은 프로토콜을 말한다.

 

HTTP Method ( 메서드 )

HTTP 메서드란 클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식을

일컫는다. 한마디로 서버가 수행해야 할 동작을 지정하는 요청을 보내는 방법이다.

메서드를 사용하는 이유는 리소스와 동작을 분리하기 위해서이다.

 

HTTP Method 의 종류 

주요 메서드

  • GET : 리소스를 검색, 반환
  • POST : 요청 데이터 처리, 주로 데이터 등록에 사용
  • PUT : 리소스를 수정, 해당 리소스가 없으면 생성
  • DELETE : 리소스 삭제, 다만 대부분의 서버는 비활성화
  • PATCH : 리소스를 일부만 변경

기타 메서드

  • HEAD : GET과 동일하지만 메시지 부분을 제외하고 상태 줄과 헤더만 반환
  • OPTIONS : 대상 리소스에 대한 통신 가능 옵션을 설명 (주로 CORS에서 사용)
  • CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
  • TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

 

HTTP Method의 속성

안전 (Safe)

  • 메서드를 호출해도 리소스를 변경하지 않는다.
안전한 메서드 안전하지 않은 메서드
GET POST
HEAD PUT
OPTION DELETE
TRACE PATCH

멱등성 (Idempotent)

  • 동일한 요청을 여러 번 보내도 한 번 보내는 것과 같다.
  • 멱등성은 '요청의 효과'를 보고 판단한다.

캐시 가능 (Cacheable)

  • 응답 결과를 서버에 캐시해서 사용하는 메서드를 의미한다.
  • 캐싱을 통해 데이터를 효율적으로 가져올 수 있다.

 


 

HTTP COOKIE & SESSION


 

HTTP COOKIE 란?

HTTP 쿠키는 웹 쿠키, 브라우저 쿠키라고도 불리며, 서버가 사용자의 웹 브라우저에 전송하는

작은 데이터 조각을 의미한다. 쿠키는 주로 세션관리, 개인 설정유지, 사용자 트래킹 용도로 사용된다.

쿠키는 HTTP의 특징을 해결하기 위해 사용되는데, 그 특징은 바로 비연결성 (Connectionless)와 무상태 (Stateless) 다.

 

비연결성 (Connectionless) 이란?

HTTP는 클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답하고 연결을 끊는 특징을 가지고 있다.

 

무상태 (Stateless) 란?

서버는 클라이언트의 상태를 보존하지 않는다. 이를 무상태 (Stateless) 라고 한다.

예를 들어, 로그인 페이지에서 요청을 보내면, 서버는 그 요청을 처리하고 응답을 보낸다.

이후, 연결이 끊기는 순간 통신은 끝나고 상태 정보는 유지되지 않는다.

 

 

HTTP 쿠키의 특징

  • 텍스트 파일이며, 한 개에 4kb, 최대 300개까지 저장할 수 있다.
  • 클라이언트에 저장된다.
  • 이름, 값, 만료일 (저장 기간), 경로 정보로 구성된다.
  • 하나의 도메인 당 20개의 쿠키를 가질 수 있다.
  • Key-Value 쌍으로 구성되어 있다.

 

 

SESSION 이란?

일정 시간 동안 같은 사용자 (브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고,그 상태를 유지시키는 기술이다.

여기서 일정시간은 사용자가 브라우저를 통해 서버에 접속한시점부터 브라우저를 종료하여 연결을 끝내는 시점까지를 말한다.

 

세션의 특징

  • 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다.
  • 웹 서저에 저장되는 쿠키 (세션 쿠키)이다.
  • 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제되기에 쿠키보다 비교적 보안이 우수하다.
  • 저장 데이터에 제한이 없다. (서버의 허용 범위 내)
  • 각 클라이언트에 고유 세션 ID (Session ID)를 부여한다.

 

쿠키 vs 세션

  Cookie Session
저장 위치 클라이언트 서버
저장 형식 텍스트 오브젝트 (Object)
만료 시점 쿠키 저장 시 설정
(설정 없을 경우 브라우저 종료 시)
정확한 시점 X
리소스 클라이언트의 리소스 서버의 리소스
용량 제한 한 도메인 당 20개, 한 쿠키 당 4KB 제한 없음
속도 정보가 쿠키에 있어 비교적 빠름 정보가 서버에 있어 비교적 느림

 

세션과 쿠키가 모두 사용되는 이유

세션이 쿠키에 비해 보안이 높은 편이나, 쿠키가 사용되는 이유는 세션은 서버에 저장되고,

서버의 자원을 사용하기 때문에 서버 자원의 한계가 있고, 속도가 느려질 수 있다.

따라서 자원 관리 차원에서 쿠키과 세션을 모두 사용하여 서버 자원의 낭비를 막고

웹사이트의 속도를 높일 수 있다.

 

 

 

 


 

HTTP PACKET


 

패킷 (Packet) 이란?

패킷은 화물 (Package) + 덩어리 (Bucket)의 합성어이다.

통신에서 주고받는 데이터의 구조 (데이터의 묶음 단위)라고 할 수 있다.

 

패킷의 구조

HTTP 통신으로 보내는 패킷은 크게 헤더 (Header)와 바디 (Body) 로 나뉜다.헤더는 데이터 이외에 HTTP 선두에 삽입되는 부분을

말하며, 목적에 따라 응답/요청 헤더로 나뉜다.바디는 실제 데이터 부분을 말한다. 페이로드 (Payload)라고도 불리며, html 텍스트

외에도 이미지 등과같은 이진 데이터도 가능하다. 헤더와 바디의 구분은 라인 공백 (CRLF)로 구분한다.

 

[ 요청 / 응답 라인 ] [ 헤더 ] [ CRLF ] [ 바디 ]

 

 

import socket

HOST = "me2nuk.com"
PORT = 80

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

client_socket.connect((HOST, PORT))

cmd = b'GET / HTTP/1.1\r\nHost: me2nuk.com\r\n\r\n'

client_socket.send(cmd)

while True:
    response = client_socket.recv(1024)
    if(len(response)<1):
        break
    print(response.decode('UTF-8'))
client_socket.close()
Python socket 모듈을 사용하여 me2nuk.com 에 요청을 보내보았다.