본문 바로가기

전체 글

(73)
웹서버와 WAS 일단 해당 내용을 들어가기 전에 웹, 웹서버에 대해 알고 넘어가야 한다. 웹은 인터넷 상에서 텍스트나 그림, 소리, 영상 등과 같은 멀티미디어 정보를 하이퍼텍스트 방식으로 연결해서 제공한다. 여기서 하이퍼텍스트란 문서 내부에 또 다른 문서로 연결되는 참조를 집어 넣음으로써 웹 상에 존재하는 여러 문서기리 서로 참조할 수 있는 기술을 의미한다. HTML을 사용하여 작성할 수 있고 HTTP프로토콜을 사용하면 누구나 검색하고 접근할 수 있다. 웹서버는 인터넷을 기반으로 클라이언트에게 웹 서비스를 제공하는 컴퓨터를 말한다. 그리고 또 한가지, 정적 콘텐츠와 동적 콘텐츠에 대해서도 정리해보자. 정적 콘텐츠란 말 그대로 항상 동일한 페이지를 말한다. image, html, css, javascript와 같은 파일들..
HTTP 2.0 현재 구글에서는 HTTP 3.0 + QUIC을 사용하고 있는데.. HTTP 1.0부터 차근차근 정리해보자. 1) HTTP 1.0 하나의 요청에 하나의 응답. 매번 새롭게 연결해야하기 때문에 성능이 저하되고 서버 부하 비용 또한 증가한다. 2) HTTP 1.1 HTTP 1.0의 불편함을 줄이기 위해 persistent connection 을 도입한 HTTP 1.1이 나왔다. 일정한 TIME동안 connection을 닫지 않는 방식이다. pipelining: 순차적인 여러 요청을 연속적으로 보내서 순차적으로 응답을 받아 시간 지연을 줄인다. 하지만, 만약 한 작업이 오래 걸리는 작업이라면? 뒷부분은 무한 대기상태.. head of line blocking의 단점이 있다. 또, 헤더 구조가 중복될 수 있다. ..
Forward Proxy, Reverse Proxy, LoadBalancing 프록시는 말 그대로 '대리'라는 뜻이다. 즉, 서버 또는 클라이언트의 역할을 대신할 수 있는 것을 말한다. 포워드, 리버스 프록시 모두 익명성, 필터링, 캐싱, 접근 제어 등의 기능을 제공한다. 1. Forward Proxy 포워드 프록시는 클라이언트-인터넷 사이에 위치하는 프록시를 말한다. 먼저 포워드 프록시의 특징을 살펴보자면, 1. 캐싱: 클라이언트가 요청한 내용을 캐싱한다. 따라서 전송 시간이 절약되고 불필요한 외부 전송을 하지 않고, 외부 요청이 감소한다. 이에 따라 네트워크 병목현상을 방지할 수 있다. 2. 익명성 보장: 포워드, 리버스 프록시 모두에 해당되는 내용이다. 포워드, 리버스 프록시는 각각 클라이언트와 서버의 대리인 역할을 수행하기 때문에 정확히 어떤 IP에서 요청이 들어왔는지 알지..
JWT 토큰 쿠키와 세션에 이어... JWT 토큰이다. 사실 토큰이란 것이 무엇인지 모르고 그냥 핸디캔디 프로젝트를 하면서 토큰을 사용했었더랬다. 일단 다시 한 번 요약하자면, 쿠키는 브라우저가 종료되어도 유지되고 클라이언트에 정보가 저장되기 때문에 보안에 취약하다. 이를 보완하기 위해 세션이 나왔다. 세션은 정보가 서버에 저장되어 있어 상대적으로 쿠키보다는 안전하지만, 일단 세션ID도 쿠키에 저장되고(이건 토큰도 마찬가지) 서버 확장성이 매우 불편하다는 단점이 있다. 서버가 확장될 경우 로드밸런서가 세션ID를 갖고 있는 서버에 연결을 시켜주어야 한다. 이를 해결하기 위해서 세션 스토리지도 있지만, 마찬가지로 대용량 트래픽일 경우... 서버가 과부화된다. JWT토큰은, 시크릿키를 사용하여 유저를 구분한다. 따라서 별..
쿠키와 세션 먼저, 쿠키와 세션에 대해 들어가기 전에 기억해야 할 것이 있다. HTTP는 Stateless한 상태라는 것. stateless라는 것은, 클라이언트와 서버의 통신이 각각 독립적이라는 것이다. 따라서 장점으로는 서버의 확장성이 용이하다는 것이고 단점으로는 클라이언트가 매번 요청을 보내야 한다는 것이다. 특히 로그인 후 특정 데이터에 접근할 때는..? 매번 유저 정보를 보내기 번거로울 것이다. 이 때 사용하는 것이 쿠키, 세션, 더 나아가서 토큰의 개념이다. 여기서는 쿠키와 세션에 대해서만 살펴보고자 한다. 쿠키 클라이언트에 저장되는 작은 데이터 파일이다. 이 때 만료 날짜가 들어있어 쿠키가 만료되면 해당 정보로 데이터에 접근할 수 없다. 클라이언트에 저장되어 사용되기 때문에 편리한 만큼, 해커에게도 편리..
HTTP 메소드 서버 개발을 시작하면서 자세한 메소드를 모른채 무작정 api를 코딩했다. 다시 한 번 제대로 살펴보자... GET 서버의 데이터를 가져올 때 사용한다. 파라미터로 데이터를 전송한다. 즉, URI에 클라이언트에서 보낸 데이터가 찍힌다. 캐시 사용 가능 POST 바디에 내용을 담아서 서버에 데이터를 전송한다. 가져오고 싶을 때도 바디에 넣어서 보내고 싶다면 POST를 사용해도 되지만, 캐싱이 어렵기 때문에 GET을 추천한다. PUT 처음엔 PUT을 몰라서 GET과 POST로만 api를 작성했더랬다.. 정보 갱신을 하고 싶을 때 PUT요청을 보낸다(기존 리소스를 삭제하고 덮어쓰기 한다) 이 때 데이터의 모든 정보가 전달되지 않으면 해당 필드값은 NULL처리가 된다!! PATCH PUT과 마찬가지로 기존 정보를..
인덱스란? 1. 인덱스란? 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조 인덱스를 사용하지 않은 컬럼을 조회해야 한다면 전체를 탐색해야 한다(Full Scan) 하지만 인덱스를 사용한다면 일부만 탐색하면 되기 때문에 속도가 향상된다(Range Scan) 2. 인덱스의 장점과 단점 인덱스를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다. 인덱스는 약 10%의 공간을 차지한다고 한다. 하지만, INSERT : 만약 할당된 공간이 가득 차 있는 상황에서 INSERT 연산이 수행된다면, 다시 새 페이지를 할당해서 밀어내고 정렬하고... 할 일이 매우 많다! 또한 인덱스 할당을 위한 공간이 추가적으로 더 필요하다. DELETE: 데이터가 삭제되어도 인덱스는 '사용 안 함'으로 기록되고 ..
트랜잭션의 정의와 특징 1. 트랜잭션이란? 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 2. 트랜잭션의 특징 ACID 원자성(Atomicity) 트랜잭션의 연산은 DB에 모두 반영 or 전혀 반영되지 않아야 한다. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 한다. 그렇지 않을 경우 트랜잭션 전부가 취소되어야 한다. 일관성(Consistency) 트랜잭션이 연산을 완료하면 일관성 있는 DB 상태로 변환한다. 시스템이 갖고 있는 고정요소는 트랜잭션 수행 전/후가 같아야 한다. 독립성, 격리성(Isolation) 하나의 트랜잭션이 실행중일 경우 다른 트랜잭션 연산이 끼어들 수 없다. 수행 중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다. 영속성, 지속성..