CS (54) 썸네일형 리스트형 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) 하나의 트랜잭션이 실행중일 경우 다른 트랜잭션 연산이 끼어들 수 없다. 수행 중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다. 영속성, 지속성.. Key Key란? 데이터베이스에서 일을 수행할 때 튜플들을 구별할 수 있는 유일한 속성 1. 후보키(Candidate Key) 릴레이션을 구성하는 속성들 중에서 유일하게 튜플을 식별할 수 있는 속성들의 부분집합 모든 릴레이션은 반드시 하나 이상의 후보키 보유 모든 튜플에 대해서 유일성과 최소성을 만족 2. 기본키(Primary Key) 후보키에서 선택한 키 튜플을 구별할 수 있는 속성 null값을 가질 수 없음 중복 허용하지 않음 3. 대체키(Alternate Key) 후보키에서 기본키를 제외한 나머지 키 4. 슈퍼키(Super Key) 릴레이션 내에 있는 속성들의 집합으로 구성된 키 유일성은 만족하지만, 최소성은 만족시키지 못함 ex) '이름+주민번호' 는 튜플을 구별할 수 있지만(유일성 만족) '이름' 단독.. 로드밸런싱 1. 로드 밸런싱이란? 트래픽이 대량으로 발생했을 때, 여러 대의 서버가 분산 처리하여 트래픽을 분산시키는 기법이다. 2. 로드 밸런싱의 주요 기능 NAT(Network Address Translation) 사설 IP주소를 공인 IP주소로 바꾸는 변조기 Tunneling 눈에 보이지 않는 통로를 만들어 통신할 수 있도록 하는 개념 데이터를 캡슐화하여 연결된 상호 간의 패킷만을 구별하여 캡슐화 해제 가능 DSR 서버에서 클라이언트로 응답 시 스위치를 거치지 않고 곧바로 클라이언트로 응답 Health Check 주기적인 Health Check를 통해 서버 장애 여부 판단 몇 대에 이상이 생기더라도 정상 작동중인 다른 서버로 트래픽을 보내주는 Fail-over 가능 L3 체크, L4 체크, L7체크 등 3. .. Authentification과 Authorization의 차이 Authentification(인증) 사용자 자신이 누구인지를 증명하는 프로세스이다. Authorization(승인, 인가) 말 그대로 '허락 권한'이다. 예를 들어보면, 권한을 가진 사람이 부엌에서 그릇을 꺼낼 수 있을 것이다. 이 사람은 방에 들어갈 권한이 없을 수도 있다. 즉, 특정한 장소에서 승인을 가진 사람만이 특정 task를 수행할 수 있다. 인증 후 인가 과정을 거친다고 생각하면 된다. 쿠키, 세션, 토큰 더 나아가서 OAuth까지 연결되는 개념인데 추후 따로 포스팅할 예정이다. HTTP 헤더 공통헤더 request, response에 모두 사용되는 헤더이다. Date HTTP 메시지가 만들어진 시각. 자동생성된다. ex) Date: Thu, 12 Jul 2018 03:12:27 GMT Connection HTTP 1.1을 사용한다면 default로 keep-alive로 설정되어 있다. 사실상 아무 의미가 없다. HTTP 2에서는 해당 형식이 제외되었다. ex) Connection: keep-alive Cache-Control 중요한 부분이다. 이 부분과 관련해서는 추후 포스팅할 예정이다. 304를 받았다면 이 부분을 의심해보자. Cache-Control 속성은 누가 응답을 어떤 조건에서, 얼마나 캐시할 수 있는지 정의한다. Content-Length request, response 메시지의 .. GET과 POST HTTP 프로토콜의 종류이다. GET 메서드 정보를 조회하기 위한 메서드 가져와서 보여준다(select) url 끝에 ?가 붙고, 정보가 key=value 형태의 쌍을 이루어 서버로 전송된다. 요청정보가 여러개일 경우 &로 구분한다. ex) www.aa.com?name=value url에 요청 정보가 붙기 때문에 길이 제한이 있다.→대용량 데이터 전송 불가능 url에 정보가 담겨 전송되기 때문에 보안에 취약하다. body는 비어 있는 상태로 전송된다.→body의 데이터 타입 표현하는 Content-Type도 비어 있는 상태 post 방식보다 빠르다. 캐싱 사용이 가능하다. POST 메서드 서버의 값이나 상태 바꾸기 위한 메서드 요청을 수행한다(Insert, Update, Delete) 요청 정보를 HTT.. 이전 1 2 3 4 5 6 다음 목록 더보기