HTTP의 비연결성(Connectionless)과 비상태성(Stateless)을 보완하여 서버가 클라이언트를 식별하기 위해 사용합니다.
HTTP는 서버의 자원을 절약하기 위해 모든 사용자의 요청마다 연결과 해제의 과정을 거치기 때문에 연결 상태를 유지하지 않고(비연결성), 연결 해체 후에도 상태 정보를 저장하지 않습니다.(비상태성) → 사용자를 식별할 수 없어 매번 새로운 사용자로 인식하게 됩니다. ex) 페이지를 이동할 때마다 로그인을 다시 해야 됨.
+ 비연결성(Connectionless) : 클라이언트가 요청(request) 한 후 응답(response)을 받으면 연결을 끊는다
+ 비상태성(Stateless) : 통신이 끝나면 상태를 유지하지 않는다.
▶쿠키와 세션의 차이 -> 저장 위치, 보안, 속도
가장 큰 차이점은 정보의 저장 위치입니다. 쿠키는 클라이언트에, 세션은 서버에 저장됩니다.
보안면에서는 세션이 더 우수하며, 요청 속도는 쿠키가 세션보다 더 빠릅니다. 그 이유는 세션은 서버의 처리가 필요하기 때문입니다.
쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 스니핑 당할 우려가 있어 보안에 취약하지만 세션은 쿠키를 이용하여 sessionid만 저장하고 그것으로 구분해서 서버에서 처리하기 때문에 비교적 보안성이 좋습니다.
쿠키와 세션은 비슷한 역할을 하며 동작 원리도 비슷합니다. 그 이유는 세션도 쿠키를 사용하기 때문입니다.
+ 세션을 사용하면 좋은데 왜 쿠키를 사용하는가?
-> 세션은 서버의 자원을 사용하기 때문에 사용자가 많을 경우 소모되는 자원이 상당합니다. 때문에 자원관리 차원에서 쿠키와 세션을 적절히 사용하여 서버 자원의 낭비를 방지하고 속도를 높일 수 있습니다.
▶ 쿠키(Cookie)
쿠키란
클라이언트(브라우저) 로컬에 저장되는 Key와 Value로 구성된 String형태의 작은 데이터 파일
쿠키의 구성요소 : 이름, 값, 유효시간, 도메인, 경로
세션 관리 : 로그인, 접속 시간, 장바구니 등 서버가 알아야 할 정보들을 저장
개인화 : 사용자마다 다르게 그 사람에 적절한 페이지를 보여줄 수 있다.
트래킹 : 사용자의 행동과 패턴을 분석하고 기록한다
쿠키 사용 예
-> 사용자 편의를 위한 것, 지워져도 되고, 가로채이더라도 큰 지장이 없는 수준의 정보
쇼핑몰의 장바구니 기능
ID 저장, 자동 로그인
자동 완성, 팝업창 일주일간 다시 보지 않기
최근 검색한 상품들을 광고에서 추천
▶ 세션(Session)
세션이란
세션은 쿠키를 기반으로 하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리합니다.
각 클라이언트에게 고유 세션 ID를 부여한다.
보안면에서 쿠키보다 우수하다. -> 사용자에 대한 정보를 서버에 두기 때문에
사용자가 많아질수록 서버 메모리를 많이 차지하게 된다
동접자 수가 많은 웹 사이트의 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 됩니다.
표현(Layer 6) : 공통된 표현 형식으로 데이터를 변환하거나, 암호화, 압축을 수행한다.
세션(Layer 5) : 데이터의 동기화를 위해 일정한 길이마다 sync를 삽입하여 전송 계층으로 데이터를 전달한다.
전송(Layer 4) : 발신지와 목적지의 주소를 지정하고, 연결 방식, 흐름제어, 오류제어를 한다. 그리고, 데이터를 전송할 수 있는 세그먼트 단위로 나눈다.
네트워크(Layer 3) : 발신지와 목적지의 주소가 아닌 라우팅에 필요한 논리 주소를 설정하고, 패킷에 대한 라우팅 정보를 삽입한다.
데이터링크(Layer 2) : 프레인 단위로 데이터를 나눈다. 그리고 MAC 주소를 지정하고, 각 양 끝단의 속도차이에 대해 원활하게 해주기 위한 흐름제어를 한다. 또한 데이터의 오류를 막기 위해 CRC방법이나 체크썸 방식을 사용해 데이터를 받는 쪽에서 데이터의 오류를 검사할 수 있도록 설정한다.
물리계층(Layer 1) : 전송 매체가 일반 케이블인지, 광 케이블인지 등의 설정을 한다. 그리고 전송 방식과 데이터를 회선으로 보내기 위한 전기적인 변환을 담당한다.
-> SQL은 테이블 구조를 갖고, 스키마를 준수하며, 수직적 확장만 가능하지만, NoSQL은 Document구조로서 테이블을 유연하게 변경할 수 있으며, 수직적, 수평적 확장이 모두 가능합니다. 대표적인 SQL은 MySQL이 존재하고 NoSQL은 MongoDB가 존재합니다.
-> 꼬리 질문
SQL과 NoSQ의 장점은 무엇인가요?
SQL과 NoSQL의 단점은 무엇인가요?
SQL과 NoSQL 중에 어떤 것이 더 좋나요?
수직적, 수평적 확장이 무엇인가요?
더 자세히 알아보자.
SQL ( 관계형 데이터베이스 )
SQL(Structured Query Language : 구조화된 쿼리 언어)
관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 저장, 수정, 삭제 및 검색할 수 있습니다.
데이터는 정해진 데이터 스키마에 따라 테이블에 저장됩니다.
데이터는 관계를 통해서 여러 테이블에 분산됩니다.
수직적 확장만 지원
NoSQL ( 비관계형 데이터베이스 )
스키마도 없고, 관계도 없습니다.
레코드를 문서(documnets)라고 부르고 JSON 데이터와 비슷한 형태를 가지고 있습니다.
수직적, 수평적 확장 가능
+ NoSQL에는 조인이라는 개념이 존재하지 않는다. 그러면 조인하고 싶을 때 NoSQL은 어떻게 할까?
-> 컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 산출하도록 합니다. 하지만 이러면 데이터가 중복되어 서로 영향을 줄 위험이 있습니다. 따라서 조인을 잘 사용하지 않고 자주 변경되지 않는 데이터일 때 NoSQL을 사용하면 효율적입니다.
수직적(Vertical) vs 수평적(Horizontal) 확장(Scaling) -> 데이터베이스의 서버의 확장성
수직적(Vertical) 확장 : 데이터베이스 서버의 성능 향상 ex) CPU 업그레이드
수평적(Horizontal) 확장 : 더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산됨 (하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동)
Q. SQL과 NoSQL의 장점
SQL 장점
명확하게 정의된 스키마, 데이터 무결성 보장
관계는 각 데이터를 중복없이 한 번만 저장
NoSQL 장점
스키마가 없기 때문에 유연함. 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가 가능
데이터는 애플리케이션이 필요로 하는 형식으로 저장됨. 데이터를 읽어오는 속도가 빨라짐
수직 및 수평 확장이 가능하므로 애플리케이션에서 발생시키는 모든 읽기/쓰기 요청을 처리 가능
Q. SQL과 NoSQL의 단점
SQL 단점
상대적으로 덜 유연함. 데이터 스키마를 사전에 계획하고 알려야 함. (수정이 번거롭거나 불가능할 수 있음)
관계를 맺고 있기 때문에, JOIN문이 많은 복잡한 쿼리가 만들어질 수 있음
수평적 확장이 어렵고, 대체로 수직적 확장만 가능함
NoSQL 단점
유연성 때문에 데이터 구조 결정을 하지 못하고 미루게 될 수 있음
데이터 중복은 여러 컬렉션과 문서가 여러 개의 레코드가 변경된 경우 업데이트해야 함.
데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정 시 모든 컬렉션에서 수행해야 함 (SQL은 중복된 데이터가 없기 때문에 한 번만 수행하면 됨.)
Q. SQL과 NoSQL 중에 어떤것이 더 좋나요?
-> 어떤 데이터를 다루는지에 따라 선택해야 합니다.
SQL의 경우 관계를 맺고 데이터가 자주 변경되는 애플리케이션의 경우, 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우에 사용하는 것이 좋습니다.
NoSQL의 경우 정확한 데이터 구조를 알 수 없거나 변경/확장될 수 있는 경우, 읽기(read) 처리를 자주 하지만, 데이터를 자주 변경(update) 하지 않는 경우, 데이터를 수평적으로 확장해야 하는 경우(즉, 막대한 양의 데이터를 다뤄야 하는 경우)에 사용하는 것이 좋습니다.