이론

    HTTP 와 HTTPS

    HTTP HTTP 프로토콜이란 웹 상에서 데이터를 주고 받기 위해 사용되는 애플리케이션 레벨 프로토콜로 TCP/IP 위에서 작동합니다. 크게 아래와 같은 3가지 특징을 가집니다. 서버-클라이언트 구조 클라이언트에서 요청을 보내면 서버에서 그것에 대한 응답을 보내는 구조입니다. 비연결성 클라이언트와 서버가 연결을 맺은 후, 서버가 응답을 마치면 연결을 끊어버립니다. 장점 하나의 클라이언트가 요청을 지속적으로 보내는 경우는 잘 없습니다. 그렇기에 연결을 유지한다면 많은 리소스가 낭비됩니다. 비연결성을 통해 연결하는데 필요한 리소스를 아껴 더 많은 클라이언트와 연결할 수 있습니다. 단점 매번 TCP/IP 연결을 새로 맺어야합니다. 무상태 서버가 클라이언트의 상태를 보존하지 않습니다. 장점 상태를 유지하지 않기..

    Spring 의 예외 처리 방법

    WAS 의 예외 처리 방식 우선적으로 서블릿 컨테이너가 예외 처리를 하는 방식을 알아야합니다. 서블릿 컨테이너는 2가지 방식으로 예외를 처리합니다. Exception 을 처리. response.sendError(상태코드, 메세지) 를 처리. 1. Exception 을 처리하는 경우 WAS(서블릿 컨테이너) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러 의 흐름으로 진행됩니다. 컨트롤러에서 발생한 Exception 이 처리되지 않고 다시 WAS 까지 올라온다면 500 에러로 처리되고 WAS 자체의 오류 페이지를 화면에 보여줍니다. 2. response.sendError() 를 처리하는 경우 컨트롤러에서 response.sendError() 를 호출한 경우에는 Exception 이 발생하는 것은 아니지만 서블..

    xms 와 xmx 에 대하여

    xms Java 힙의 초기 크기를 제어 적절하게 조절하면 가비지 컬렉션 오버헤드를 줄여서 응답 시간을 개선할 수 있음. 너무 낮추면 가비지 콜렉션의 수가 많아질 수 있음. xmx Java 힙의 최대 크기를 제어 이 값을 늘리면 서버에서 사용 가능한 메모리가 늘어나고 가비지 컬렉션의 빈도가 줄어듬 늘리면 가비지 컬렉션이 발생할 때, 컬렉션의 지속시간이 길어짐 xms 와 xmx 를 같게 하여 사용하는 이유 xms 가 낮으면 잦은 가비지 컬렉션 호출로 성능 이슈 발생 가능 힙 메모리 사용량이 xms 설정 값에 다다르면 추가적으로 os 에 xmx 설정 값만큼 메모리를 할당받는 것인데, 이 과정에서 추가적 시간 소요와 성능 이슈가 발생 가능함 그렇기 때문에 처음부터 최대 힙 메모리를 사용한다.

    세션 인증 방식과 토큰 인증 방식

    세션 인증 방식 사용자의 인증 정보가 서버의 세션 저장소에 저장되는 방식. 사용자가 로그인을 하면 해당 정보를 서버 세션 저장소에 저장하고 사용자에게는 세션 저장소의 식별자로 세션 id 를 발급한다. 인증 이후 매 요청마다 쿠키에 세션 id를 담아서 요청한다. 서버는 세션 id 에 해당하는 정보가 세션 저장소에 있으면 인증된 사용자로 판단한다. 토큰 인증 방식 토큰 인증 방식은 인증 정보를 클라이언트 측에서 가지고 있는 방식임. 인증 정보가 브라우저의 로컬 스토리지에 저장됨. 사용자가 가지고 있는 토큰을 http 헤더의 Authorization에 담아 보낸다. 서버는 이 헤더를 확인 후 토큰이 위변조, 만료되었는지 확인하고 판단한다. 세션 인증 방식 vs 토큰 인증 방식 안전성 세션의 경우 모든 정보를 ..

    TCP handshake 란?

    등장 배경 IP 프로토콜 만으로는 통신자들 간의 연결상태를 알지 못함. 중간에 데이터가 소실되거나 데이터의 순서가 잘못되어도 알 수 있는 방법이 없음. TCP 3 way handshake 의 단계 연결을 초기화할 때 거치는 과정 SYN: 클라이언트가 서버와 연결하기 위해 커넥션을 보낸다. SYN+ACK: 서버가 클라이언트가 보낸 SYN 을 받고 받았다는 ACK 과 함께 SYN 을 보낸다. ACK: 다시 클라이언트에서 서버가 보낸 SYN 을 받고 ACK 을 보낸다. 이 과정을 통해 클라이언트와 서버 모두 통신할 준비가 되었다는 것을 서로가 확인할 수 있다. 4 way handshake 의 단계 종료하기 위해 수행되는 과정 클라이언트 FIN-WAIT: 클라이언트가 연결을 종료하겠다는 FIN 신호를 보내고 F..