[250218] TIL
오늘 한 일
OSI 7계층
OSI 7계층이란 네트워크 통신을 할 때 데이터가 각각 거처가는 독립적인 계층을 말합니다.
이 계층은 말 그대로 7계층으로 이루어져있습니다. 각 계층은 독립적으로 동작하며 특정 기능을 수행합니다.
각 계층은 최상단 순서대로 응용 계층, 표면 계층, 세션 계층, 전송 계층, 네트워크 계층, 데이터 링크 계층, 물리 계층으로 이루어져있습니다.
TCP
서버와 클라이언트가 양방향으로 연결을 하기 때문에, 안정성 있는 데이터 전송을 보장하는 통신 프로토콜입니다.
3way-handshake 를 이용해 3단계로 나누어져 서버와 클라이언트가 연결됩니다.
3way-handshake 3 단계로는 SYN → SYN/ACK → ACK 로 이루어져있습니다.
UDP
UDP는 TCP와 다르게 서버와 클라이언트가 연결 되어있지 않습니다. 빠른 속도로 데이터를 보낼 수 있는 통신 프로토콜 입니다. 3way-handshake 과정이 없어 당연하게도 TCP보다 속도가 빠릅니다.
비연결형으로 데이터를 주고 받기 때문에 TCP보다 신뢰도를 보장하지 않습니다. 보통 게임이나 스트리밍 서비스 등 빠르게 데이터 전송이 필요할 때 사용됩니다.
HTTP
HTTP 는 클라이언트와 서버간에 데이터를 주고 받는 통신 프로토콜입니다. HTTP 는 다양한 메소드들을 제공하는데, 대표적으로는 GET, POST, PUT, PATCH, DELETE 가 있습니다. 해당 메소드 덕분에 서버와 클라이언트가 메소드명만 보고 어떤 동작을 하는지 유추할 수 있습니다.
HTTP 큰 특징중에 하나는 stateless 하다는 것입니다. stateless 하다는 말의 뜻은 클라이언트의 상태를 서버가 갖고 있지 않는다는 의미입니다. 이 특징 덕분에 서버는 확장성이 높아지고 요청을 처리할 때 필요한 리소스가 줄어듭니다. 대신 클라이언트가 더 많은 정보를 저장하고 있어야 할 가능성이 있습니다.
HTTPS
HTTPS 는 HTTP 프로토콜에서 보안계층을 추가한 프로토콜입니다. 여기서 말하는 보안계층은 OSI 7계층에서 6계층에 포함됩니다. 6계층에서 TLS/SSL 방식을 이용해서 암호화를 진행합니다.
HTTPS를 이용하면 데이터가 전송 중에 변조되지 않을 수 있고, 통신하고 있는 서버가 신뢰할 수 있다는 것을 알 . 수 있습니다.
TLS / SSL
TLS와 SSL은 네트워크 통신을 할 때 전송되는 데이터들에게 암호화를 제공하는 프로토콜 입니다. SSL은 옛날 프로토콜로 더 이상 사용 되지 않고 현재는 TLS 프로토콜로 암호화를 진행합니다. TLS 도 3번 간 서버와 클라이언트 통신을 주고 받습니다. 통신을 주고 받으면서 처음에는 비대칭키로 서로의 신원을 확인하고, 그 이후 인증이 완료되면 대칭키를 이용해서 데이터를 암/복호화하고 주고 받습니다.
대칭키 / 비대칭키 암호화 방식
대칭키 방식은 암호화, 복호화를 진행할 때 같은 키를 이용하는 방식입니다. 이 방법은 간단하고 빠르지만 대칭키를 잃어버리지 않도록 주의해야합니다. 대칭키를 안전하게 교환하는 것이 중요합니다.
비대칭키는 암호화, 복호화를 진행할 때 다른 키를 이용하는 방식입니다. 공개키, 개인키로 쌍을 이루는데 공개키로 암호화를 하면 개인키로 복호화를 해야합니다. 개인키로 암호화를 하면 공개키로 복호화를 해야합니다. 대칭키 방식보다 속도가 느리지만 두 개의 키로 관리되기 때문에 더 안전합니다. 개인키는 공개되어선 안됩니다.
DNS
읽기 쉬운 도메인 주소를 ip 주소로 변환해주는 곳을 말합니다. DNS를 이용하여 로드밸런스로도 이용할 수도 있습니다. 예를 들어 같은 도메인에 여러 개의 ip를 세팅하는 방법도 가능합니다.
REST API
REST 아키텍처의 조건을 만족하려고 노력하는 API 를 말합니다. 참고로 API 는 객체(시스템) 사이에 만들어진 약속을 말합니다. REST API 의 특징으로는 자원을 중심으로 규칙이 구성되어있습니다. HTTP 메소드를 사용하고, 그 외에도 언더바(_) 대신 하이폰(-)을 권장, URL에서 동사 사용을 지양하고 명사 사용을 지향합니다. URL을 보고도 어떤 자원을 얻으려는 건지 유추할 수 있어야 합니다. 정해진 규칙 덕분에 개발자들간에 업무 효율이 높아질 수 있습니다.
JWT
JWT는 사용자의 정보를 토큰 형식으로 담아서 서버에게 전달하는 방식입니다. JWT는 Base64로 인코딩된 헤더, 페이로드, 서명 세 부분으로 구성됩니다.
헤더에는 토큰 타입과 사용된 알고리즘 정보가 담겨있고, 페이로드에는 사용자 정보와 토큰 관련 정보(만료시간 등)가 담겨있습니다. 서명은 헤더와 페이로드를 비밀키로 암호화한 것으로, 데이터가 변조되었는지 확인할 수 있습니다. JWT 토큰을 탈취 당하면 남용될 수 있기 때문에 토큰 유효시간을 길게 두지 않는 것을 권장합니다.
OAuth
OAuth는 인증을 제 3자 서버에서 진행하고, 인가(권한)만 받아오는 방식을 말합니다. OAuth 를 통해 사용자는 별도의 회원가입을 하지 않아도 되고, 필요한 정보만 허용해주면 됩니다. 서비스 제공자 입장에서도 별도의 인증 관리 비용 없이 인가를 받아 필요한 데이터를 받을 수 있는 장점이 있습니다.
쿠키
쿠키는 웹 브라우저 공간에 데이터가 저장되는 파일을 말합니다. 서버와 통신할 때 자동으로 서버에게 쿠키를 주기 때문에 네트워크 부하를 방지하기 위해 많은 쿠키 정보를 담지 않도록 주의해야합니다. 현재 이용중인 도메인인지, 타 도메인인지에 따라 퍼스트파티 쿠키, 서드파티 쿠키로 나누어집니다.
세션
세션은 특정 기간동안 사용자의 상태를 서버에 저장하고 있는 정보를 말합니다. 세션과 쿠키는 동시에 사용될 수 있고 보통은 세션 DB에 세션 id 를 저장하는 방식으로 사용됩니다. 브라우저가 종료될 때 세션 값은 삭제됩니다. 세션은 서버 측에서 관리되어 보안성이 높습니다.
Leave a comment