Network & CS
[CS] 대칭키 & 비대칭키 / HTTPS 통신 방법
대칭키와 비대칭키는 데이터 보안 및 통신에서 중요한 역할을 하며, 정보를 안전하게 보호하고 전달하기 위해 사용되는 암호화 기법이다.자세한 내용들보다는 내가 기억하기 쉽게 이해한 과정을 서술해보려 한다. 앞으로 나올 "자물쇠를 잠구는 행위"는 암호화, "자물쇠를 여는 행위"는 복호화를 뜻한다.대칭키암호화하는 키와, 복호화하는 키가 같다고 하여 대칭키라고 불린다. 대칭키 기법을 이해하기 쉽게 한줄로 표현해 보면 아래와 같다.열쇠1로 자물쇠를 잠그고, 받을 사람에게 열쇠1과 자물쇠를 보내준다.대칭키 방식은 간단한 연산을 사용해 암호화를 진행한다. XOR 연산, 치환, 전치 등 단순한 연산으로 암호화를 진행해 빠른 연산이 가능하다. 하지만 암호화, 복호화 시 같은 키를 사용하기 때문에 안전하게 키를 전달하는 부..
멀티스레드? 비동기? (동기, 비동기, 싱글 스레드, 멀티 스레드)
진행하고 있는 프로젝트에서 @Async를 통해 비동기 처리를 하여 성능 개선을 계획 중이다. 관련 공부를 하던 와중에 멀티스레드, 비동기의 차이가 뭐지?라는 질문에 대답을 못하였고 이번 기회에 제대로 알고 가기 위해서 정리해 본다. 우선 결론은 멀티스레드 ≠ 비동기동기, 비동기 VS 단일스레드, 멀티스레드 동기, 비동기 -> 작업(Task)에 관한 것 / 단일스레드, 멀티스레드 -> 작업자(Thread)에 관한 것 이 기본 개념이다. 이해를 돕기 위해 라면을 끓여 보겠다(?) (이해를 돕기 위함이므로 맛은 중요하지 않다. 처리 속도, 효율성을 생각해 보자~) Task -> 물 끓이기, 스프 넣기, 면 넣기 / Thread -> teho, 백종원님(이하 백선생) 동기 : 물이 다 끓으면 -> 스프를 다 ..
HTTP 캐시 (캐시, 조건부 요청, 캐시 VS 쿠키?)
Cache 캐시는 한번 사용한 데이터를 복사하여 사용자한테 저장하는 공간으로 빠른 사용자 경험을 제공한다. ( 그냥 내가 정리한 거야~) 사용자가 어느 이미지를 다운로드하였다. 나중에 다시 같은 이미지를 요청할 때 캐시가 아직 유효하다면 서버에서 가져오는 것이 아니라 캐시에서 이미지를 가져온다. 결과적으로 다운 속도도 빠르고 네트워크 사용량을 줄일 수 있다. max-age cache-control: max-age=은 캐시가 유효한 시간을 설정한다. 이 부분이 왜 필요할까?? 데이터가 수정되었을수도 있기 때문이다. 서버에서 같은 uri의 데이터를 수정했는데 계속 캐시에서만 가져오면 클라이언트한테는 수정 데이터가 반영되지 않기 때문이다. max-age는 초 단위로 설정한다. 그렇다면 캐시의 유효 시간이 끝난..
http 일반 헤더 (쿠키?)
HTTP 헤더는 http 메시지를 전송할때 필요한 부가 정보를 담는다. ex) 메시지 바디의 내용, 메시지 바디의 크기, 압충 방법, 인증 방법, 캐시 등등.. 표준으로 정해져있는 헤더는 매우 많고 필요할 경우 임의의 헤더도 추가 가능하다. 가장 최신 http 표준 스펙에서는 헤더를 표현 헤더, 메시지 바디를 표현 데이터라고 부른다. 표현 헤더는 표현 데이터를 해석할 수 있는 정보를 제공해준다. 위의 그림을 표현 메타데이터와 페이로드 메시지로 구분한다. 메타 데이터는 데이터에 대한 데이터다. 전송하려는 데이터에 대한 정보라고 생각하면된다. => 헤더, 페이로드 메시지는 전송하고 싶은 데이터 그 자체이다 => 표현 데이터. 표현 헤더 표현 헤더는 전송, 응답 메시지에서 모두 사용한다. Content-Typ..
HTTP 상태 코드 (404 error??)
HTTP 상태 코드는 클라이언트가 보낸 요청에 대한 처리 결과를 알려주는 기능이다. HTTP 응답 메시지에서 status-code 역할을 한다. 이때 100 ~ 500 대 까지의 상태 코드가 사용된다. 그러면 모든 상태 코드의 뜻을 알아야 할까?? 101? 342? 254? 아니다. 상위 상태 코드로 해석해서 처리하면 된다. 다시 말하자면 2XX, 3XX, 4XX, 5XX 이렇게 몇백 번대의 상태 코드는 무엇을 의미한다라고 해석해도 된다. 상태 코드는 reason-phrase와 짝으로 많이 쓰인다. 매칭 되는 상태 코드와 reason-phrase를 설명하겠다. 1XX (Informational) 100번대의 상태 코드는 요청이 수신되어 처리중임을 나타낸다. 김영한님께서 백번대의 코드는 실무에서 한 번도 ..
HTTP 메서드 (GET, POST, PUT, PATCH, DELETE), 메서드 속성
GET 리소스를 조회하는 역할을 한다. 서버에 전달하고 싶은 데이터는 query를 통해서 전달한다. (저번에 포스트 했던 글을 생각해보면 GET/search?q=hello&hl=ko HTTP/1.1 에서 GET과 HTTP 사이를 말한다.) 메시지 바디를 사용할 수도 있지만 최근 나온 스펙에서만 가능해서 권장하지 않고 query를 이용하는 것을 권장한다. 왼쪽 이미지(요청 메시지)는 GET을 사용하여 URI에 접근을 요청했다. 오른쪽 이미지(응답 메시지)에서 200으로 상태를 표시해주었고 OK로 상태 설명을 간단히 해주었다. 부가 정보가 있는 header를 보면 json 형식으로 길이 34의 메시지를 전달한다. POST 클라이언트가 보내는 데이터를 처리하는 메서드이다. POST는 메시지 바디에 데이터를 담..
HTTP란? & HTTP 메시지
HTTP(Hyper Text Transfer Protocol) http는 네트워크 상에서 데이터를 주고 받는 프로토콜이다. 프로토콜이므로 통신 규칙 정도로 이해하면 될것 같다. http로 HTML, IMAGE, 영상, JSON, API 등 거의 모든 형태의 데이터를 전송 가능하다. http는 버전 3 즉 http/3가 현재 개발 진행 중이다. 우리가 가장 많이 사용하는 버전은 http/1.1이다. http/3은 TCP 대신 UDP 사용하는 방식으로 만들어 졌다. 정리를 하다보니 TCP와 HTTP 모두 프로토콜인데 둘 중 하나만 써야하는 것 아닌가? http가 tcp를 사용하는 것은 뭐지 라는 의문이 들어서 찾아보았다. OSI 7 계층은 다양한 통신 시스템이 표준 프로토콜을 사용하여 통신할 수 있도록 국제..
URI
URI(Uniform Resource Identifier) URI는 resource를 통일된 방식으로 다른 항목과 구분하는 식별자이다. 여기서 resource는 URI로 식별 가능하면 무엇이든 될 수 있다. (딱히 제한 없다.) 강의에서도 그렇고 구글링을 해본 결과 보통 URI와 URL을 혼용해서 사용한다. 그 이유를 자료들과 나의 해석을 섞어서 설명해보겠다. 그림을 보면 알 수 있듯이 URI는 URL, URN을 포함하고 있다. URI는 Identifier이다. 식별자이다. 식별하는 방법에는 경로(Locator), 이름(Name)을 사용하는 두 가지 방법이 있다. 단어에서 알 수 있듯이 Locator를 사용해서 리소스를 찾는 방법이 URL, Name을 사용해서 찾는 방법이 URN이다. 하지만 Name만으..
인터넷 네트워크 (IP, TCP, UDP, PORT, DNS)
IP 인터넷에서 컴퓨터들은 여러 노드들을 거쳐서 서로 통신을 한다. (이 과정에서 우리 집에서 준용이 집으로 데이터를 보낼 때 날마다 다른 노드를 타고 갈 수 도있다. 인터넷 망은 매우 복잡하기에 출발지와 목적지가 같아도 다른 경로를 사용할 수 있다는 뜻이다.) 이때 컴퓨트들은 각자의 IP(Internet Protocol) 주소를 갖는다. IP는 지정한 주소로 패킷(packet, package + bucket)이라는 통신 단위로 데이터를 전달한다. 패킷에는 출발지 IP, 목적지 IP 등과 전송 데이터로 이루어져 있다. IP프로토콜의 한계 비연결성 - 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송. 준용이 집 컴퓨터가 꺼져있어도 내가 알 수 있는 방법이 없다. 일단 전송한다. 비신뢰성 - 중간..