CS

CS 스터디 4주차 Network & Spring

SeungbeomKim 2022. 10. 27. 01:44

최근 2~3주 동안 시험기간이라서 CS에 집중하지 못했습니다. 

이제 다시 커리큘럼에 맞춰 또 집중해야 할 것 같습니다.

4주차 내용은 다음과 같습니다.

 

 

4주차 학습 내용

  1. Network
    • 대칭키 / 공개키
    • HTTP / HTTPS
    • 로드 밸런싱
    • Blocking, Non-blocking / Synchronous, Asynchronous
    • Blocking / Non-Blocking I/O
  2. Spring
    • Bean Scope
    • MVC Framework
    • Spring Boot, SpringApplication

대칭키 / 공개키

 

대칭키(Symmetric key) / 공개키(Public Key, Asymmetric Key)

 

대칭키는 보내는 사람의 key와 받는 사람의 key가 동일하다.

속도 측면에서는 빠르지만, 안정성이 떨어진다는 단점이 있다.

 

공개키는 보내는 사람의 key와 받는 사람의 key가 동일하지 않다.

속도 측면에서는 떨어지지만, 자신의 key로만 복호화를 할 수 있기에 안정성이 뛰어나다.

 

https://raptor-hw.net/xe/know/155910

다음과 같이, 공개키 암호화 알고리즘에서는 받는 사람의 공개키를 이용해 평문을 암호화하여 암호문을 보내게 된다.

하지만, 받을 때는 받는 사람의 비밀키를 통해 암호문을 복호화하여 평문을 확인한다.

그리고 받는 사람은 보내는 사람의 공개키를 통해 응답을 암호화하여 보내는 사람에게 다시 전달한다.

그리고 보내는 사람은 보내는 사람의 비밀키를 통해 암호문을 다시 복호화한다.

결국, 비밀키는 복호화의 용도로 사용하고 공개키는 암호화의 용도로 사용한다고 해석하면 좋을 것이다.

 

하지만, 이 경우에는 Confidentiality만 보장하고, 무결성과 확실성에 대해서는 보장이 안된다.

->이를 MAC(Message Authentication Code), 전자 서명(Digital Signature)을 통해 해결한다.

 

 

HTTP / HTTPS

 

HTTP란 무엇인가?

Hypertext Transfer Protocol 

: W3상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는데 쓰인다.

https://velog.io/@po05360/HTTP

클라이언트 : HTTP request를 보낸다.(요청)

서버 : HTTP response를 보낸다.(응답)

 

HTTPS : HTTP + Secure

: 인터넷 상에서 정보를 암호화하는 프로토콜인 SSL 프로토콜을 사용하여 클라이언트와 서버가 자원을 주고 주고받기 위한 규약이다.

 

HTTPS는 텍스트를 공캐기 암호화 방식을 통해 암호화한다.

 

HTTPS 통신 흐름

 

애플리케이션 서버를 만드는 기업은 HTTPS를 적용하기 위한 공개키와 비밀키 생성

 

CA 기업(공개키를 저장해주는 민간 기업) 선택 후, 그 기업에게 공개키 관리를 부탁하며 계약을 진행

 

계약이 완료된 CA기업은 해당 기업의 이름, A서버 공개키, 공개키 암호화 방법을 담은 인증서를 만들고, 해당 인증서를 CA 기업의 개인키로 암호화해서 A서버에게 제공

https 적용하기 위한 인증서 발급 화면

A서버는 암호화된 인증서를 갖게 되고, A서버는 A서버의 공개키로 암호화된 HTTPS 요청이 아닌 요청이 오면, 이 암호화된 인증서를 클라이언트에게 전해준다.

다음과 같이 저는 HTTP 요청을 보냈는데, 암호화된 HTTPS로 반환이 되었는걸 확인할 수 있었습니다.

 

로드 밸런싱

로드 밸런싱이란 ?

 

컴퓨터 네트워크 기술 중 하나로, 한 대의 서버가 모든 트래픽을 감당하기에는 매우 난해하다.

그래서 여러 대의 서버에게 트래픽을 균등하게 분산시켜줌으로써, 서버에게 무중단 서비스를 제공함과 동시에 웹 서버의 과부하를 막을 수 있는 기술이다.

클라이언트와 서버 사이에 Load Balancer를 두고, 여러 서버에 분산시켜준다.

 

https://ko.wikipedia.org/wiki/%EB%B6%80%ED%95%98%EB%B6%84%EC%82%B0

Blocking/Non-blocking & Synchronous/Asynchronous

 

blocking : 호출된 함수가 호출한 함수에게 대기하라고 명령 

non-blocking : 호출된 함수가 바로 return하여 호출한 함수에게 다른 일을 할 수 있게 하는 기회를 줌

Synchronous : 호출하는 함수가 호출되는 함수의 작업 완료 후 return을 기다리거나, 스스로 호출된 함수의 작업 완료 여부에 대해 신경을 쓴다.  

Asynchronous :  호출되는 함수에게 callback을 전달하여, 호출된 함수의 작업 완료 여부를 신경 쓰지 않는다. 

작업 완료 여부를 호출된 함수를 호출한 함수가 신경 쓰면 동기

호출된 함수를 호출된 함수가 신경쓰면 비동기이다.

 

Blocking & Non-Blocking I/O

blocking I/O

blocking I/O란 I/O작업이 진행되는 동안 자신의 작업을 중단한 채, I/O가 끝날 때까지 대기하는 방식이다.

응용 계층에서 Read()함수를 호출하면 Kernal에 System Call을 보내면 read I/O가 수행될 때까지 application은 block 상태가 되어서 다른 작업을 못하게 되며 Kernal 측에서 Read response를 보내기 전까지 다른 작업을 수행하지 못한다.

non blocking I/O

read I/O를 수행하기 위해 System call을 보내면, Kernal이 작업을 완료했는지와는 무관하게 즉시 응답하게 된다. System call을 받는 즉시 다시, CPU의 제어권을 Application으로 넘겨주며 다른 작업을 수행할 수 있게 된다. 

 

Spring에 관한 내용은 Spring 관련 게시글에 작성하겠습니다.

 

<참고 자료>

https://gyoogle.dev/blog/computer-science/network/HTTP%20&%20HTTPS.html

 

HTTP & HTTPS | 👨🏻‍💻 Tech Interview

HTTP & HTTPS HTTP(HyperText Transfer Protocol) 인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약 HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는

gyoogle.dev

 

 

HTTP & HTTPS | 👨🏻‍💻 Tech Interview

HTTP & HTTPS HTTP(HyperText Transfer Protocol) 인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약 HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는

gyoogle.dev

 

 

HTTP & HTTPS | 👨🏻‍💻 Tech Interview

HTTP & HTTPS HTTP(HyperText Transfer Protocol) 인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약 HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는

gyoogle.dev

https://gyoogle.dev/blog/computer-science/network/Load%20Balancing.html

 

로드 밸런싱(Load Balancing) | 👨🏻‍💻 Tech Interview

로드 밸런싱(Load Balancing) 둘 이상의 CPU or 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것 요즘 시대에는 웹사이트에 접속하는 인원이 급격히 늘어나게 되었다. 따라서 이 사람들에 대해

gyoogle.dev

https://velog.io/@wonhee010/%EB%8F%99%EA%B8%B0vs%EB%B9%84%EB%8F%99%EA%B8%B0-feat.-blocking-vs-non-blocking

 

동기 vs 비동기 (feat. blocking vs non-blocking)

동기/비동기, blocking/non-blocking에 대해 알아봤다.

velog.io