눈치 빠른 사람들은 어렴풋이 이것들이 웹에서 사용되고, 뭔가를 저장한다는 것은 알 것이다.
조금 더 자세하게 왜 사용되고 어떻게 사용되는지 알아보자
쿠키는 사이트를 이용할 때 내 브라우저에 저장되는 정보들이다.
세션은 서버에서 유저의 인증상태 (로그인 여부) 을 임시로 저장한 정보들이다.
브라우저가 사이트의 페이지에 접속하면 서버에서는 사용자를 구분하기 위해 짧은 임시키 하나를 보낸다. 브라우저는 이 키를 쿠키로 저장을 하고 http 요청에 이 키를 실어서 보내면 서버는 이 키를 보고 사용자가 누구인지를 인식해서 사용자의 정보를 가공해서 응답으로 보내준다.
네이버에 한번 로그인 한 다음 다른 페이지를 이용할 때마다 로그인이 유지되어 있는 것은 이 쿠키와 세션의 조합이다.
쿠키는 로그인창의 아이디를 자동완성하거나, 공지메세지를 하루 안보기, 로그인 안한 상태로 장바구니를 하는 등 지워지거나 조작되거나 가로채이더라도 큰 일은 없을 그런 수준의 정보를 브라우저에 저장하는데 사용된다.
이외 서비스 제공자가 직접 관리해야 할 정보들은 세션으로 서버 안에서 다룬다. 세션이 많으면 접속자가 많을 때 서버 부하를 발생시킬 수 있으므로 쿠키와 세션을 적절히 사용할 수 있어야 한다.
캐시는 웹 뿐 아니라 안드로이드, 컴퓨터의 메모리 등 에서 공통적인 의미로 쓰이는 데, 가져오는데 비용이 드는 데이터를 처음 가져올 때 임시로 저장해둬서 다음에 필요할 때는 저장해두는 것을 사용하는 방식이다.
웹 캐시는 이미지 등의 데이터를 가져올 때 데이터 사용량도 발생하고 시간도 들기 때문에 사용자가 여러번 방문할 법한 사이트에서는 한번 받아온 데이터를 사용자의 컴퓨터 또는 중간 역할을 하는 서버에 저장해두는 방식을 말한다.
멀티태스킹이 가능해지기 전까지 예전 컴퓨터들은 게임이 다운받아 질때까지 마우스로 입력 받는 작업, 브라우저 작업을 동시에 하지 못했따.
exe 파일은 프로그램이라 하며, 이 프로그램이 실행돼서 컴퓨터가 돌아가고 있는 상태를 프로세스라고 한다.
요즘 컴퓨터는 여러개의 프로세스를 함께 돌려 쾌적한 작업을 도와준다. 이것은 동시성, 병렬성 또는 이 둘의 혼합으로 진행된다.
동시성은 여러 프로세스를 조금씩 일부분을 진행해서 모든 프로세스를 작업하는 것으로, 이 과정이 매우 빠르게 돌아가서 사람들에게는 마치 동시에 진행되는 것 처럼 보인다.
병렬성은 프로세스 하나에 코어 여러개가 달려서 각각 동시에 작업들을 수행하는 것이다. 듀얼코어, 쿼드코어, 옥타코어 등 이러한 명칭이 붙는 멀티코어 프로세서가 달린 컴퓨터에서 할 수 있는 방식이다. CPU가 발열 등의 문제 때문에 예전만큼 빠르게 발전하지 못하게 되자 그 대안으로 코어를 여러개 달아서 작업을 분담할 수 있도록 만든것이다.
한 프로세스 내에서도 여러 갈래의 작업들이 동시에 진행될 필요가 있다.
이 갈래를 스레드 라고 부른다.컴퓨터는 프로세스마다 자원을 분할해서 할당한다.
스레드는 프로세스에서 각 작업에 따라 나눠진 자원들을 함께 사용하는 것이다.
프로세스 하나에 사용되는 변수를 스레드 두 개가 동시에 사용하면 에러가 발생하는 단점을 가지고 있기도 하다.
요즘에는 이런 상황들을 예방하고 방지하기 위해 디버깅을 해서 오류를 찾아내고 원인을 밝히기 까다로운 점을 Lambda, Actor 등의 도구들로 해결한다.
인터페이스란 기계와 인간간의 소통을 도와주는 도구이다. 마우스, 키보드, 버튼, 모니터 등이 인터페이스에 해당하는데 웹에서는 버튼, 스크롤바, 슬라이더, 브라우저 창 등 소프트웨어와 인간의 소통을 위한 인터페이스가 있다.
UI 뿐만 아니라 소프트웨어가 다른 소프트웨어에게 지정된 형식으로 요청, 명령을 받을 수 있도록 소통을 하는 수단을 API(Applicatoin Programming Interface)라고 한다.
REST API는 정보들이 주고 받아 지는데 있어서 개발자들 사이에 널리 쓰이는 일종의 형식이다.
RESTful하게 만든 API는 요청을 보내는 주소만으로도 대략 이게 뭘 하는 요청인지 파악이 가능하다.
형식이기 때문에 내가 무슨 언어를 쓰고 무슨 프레임워크를 쓰던 그냥 이 폼에 맞춰서 기능을 만들어 낼 수 있다.
과거의 SOAP이라는 복잡한 형식을 대체한 것으로 가장 중요한 특성은 각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론 가능하다는것이다.
서버에 REST API로 요청을 보낼때는 HTTP라는 규약에 따라 신호를 전송한다.
http의 method 중 POST, PUT, PATCH는 body라는 일종의 주머니가 있기 때문에 GET이나 DELETE 보다 정보를 더 많이, 비교적 안전하게 실어보낼 수 있다.
이것들의 기능은 특정용도에 제한되어 있지는 않다. POST 하나로도 데이터를 읽고 쓰고 수정하고 지우고까지 다 할 수 있다.
하지만 누구든 각 요청의 의도를 쉽게 파악할 수 있도록 RESTful하게 API를 만들기 위해서는 목적에 따라 구분해서 사용하는 것이 좋다.
GET은 데이터를 READ(조회)하는데 사용한다.
class/2/students
다음 주소를 GET으로 요청을 보내면 2반의 학생이 누구인지 요청하는 것이다.
POST는 CREATE(정보추가)에 사용한다.
class/2/students
다음 주소를 POST로 요청해서 Body에 학생의 정보를 실어 보내면 2반에 새 학생을 추가하게 된다.
PUT 또는 PATCH를 사용해서 UPDATE(변경) 될 새 정보를 역시 BODY에 실어보낼 수도 있다.
알려진 정석으로는 PUT은 통째로 갈아야 할 때, PATCH는 정보 중 일부를 특정 방식으로 변경할 때 사용한다고 한다.