![TLS 1.2, 1.3](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHOABv%2FbtsJQ2UMX9u%2FkFmIFMXV04PoDe1PalKJD0%2Fimg.png)
TLS 1.2비대칭키 암호화(RSA 등)와의 결합비대칭키 암호화를 사용하여 대칭키를 안전하게 전송하는 방식도 자주 사용됩니다. 이 방법에서는 수신자가 공개 키를 먼저 제공하고, 송신자는 이 공개 키로 대칭키를 암호화하여 수신자에게 전송합니다. 수신자는 자신의 개인 키로 이 암호화된 대칭키를 복호화하여 비밀 키를 획득하게 됩니다. TLS 1.3디피-헬만 키 교환(Diffie-Hellman Key Exchange)디피-헬만 알고리즘은 안전하게 네트워크를 통해 대칭키를 교환할 수 있는 대표적인 방법입니다. 이 알고리즘은 수학적인 원리를 이용해, 송신자와 수신자가 공개적인 통신 채널을 통해서도 비밀 키를 안전하게 교환할 수 있도록 합니다.각자가 개인키와 공개키를 생성하고, 이들을 교환해 최종적으로 동일한 비밀 ..
![Layer 4 vs Layer 7 Load balancing](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNdqUD%2FbtsJQbRcPGW%2FUhHC0NrIs1LffpUpFkCdyk%2Fimg.png)
Layer 4 Load balancingLayer 4 Load balancer는 TCP 연결을 양쪽에 하나씩만 유지합니다.그래서 모든 Segment들을 해당 연결로만 전달을 합니다. 1. Load balancer와 Backend 서버들간에 TCP Pool을 미리 연결해둡니다. 2. Client로부터 요청이 들어와서 TCP Connection을 합니다. 3. 연결된 양쪽의 TCP Connection을 통해서 데이터를 그대로 전달해줍니다. 예시그래서 아래와 같이 동일 Client(Connection)의 요청에서는 동일한 TCP connection들을 사용하구요. 새로운 Client가 들어오면 또 다른 Connection을 사용하여 다른 백엔드 서버와 연결될 수 있습니다. Layer 4의 장단점장점단점단순한 ..
![TCP Flow Control & Congestion Control](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3VJMM%2FbtsJJXR74Vb%2FTOw8E8kcaYG8o1gJq2tK2k%2Fimg.png)
TCP Flow Control How much the receiver can handle?TCP에서 Flow Control은 Sender가 데이터를 보낼때 처리량 이상으로 데이터를 전송하는 경우 데이터가 drop되므로 이를 방지하기 위한 방법입니다.즉, 수신자의 처리 능력에 맞춰 송신 속도를 제어하는 방법 이라고 요약 가능합니다.그래서 이를 해결하고자 Window size 같은 항목을 헤더에 두는것입니다.그래서 Sender에게 한번에 처리 가능한 양을 미리 알려주고 이 사이즈만큼 지속적으로 전송하도록 유도하는거죠. 아래의 예시에서는 window size가 3이고, 처음의 window size를 알기위한 패킷을 제외하면그 이후로는 Sender가 패킷을 3개씩 모아서 보내고있습니다. Sliding Windo..
![TCP Segment 구조](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F28vL8%2FbtsJJXEBEEH%2FcbAztZhD5kdEYMaP1yrrXK%2Fimg.png)
TCP SegmentTCP segment의 헤더는 20bytes 입니다. (사이즈가 더 커질수도 있지만)줄마다 4bytes라 위의 Options를 제외한 5줄입니다. 1. 기본적으로 Source port, Destination port가 있습니다.2. 그리고 UDP와는 다르게 Connection과 순서 Control을 위한 변수인 Sequence number, Acknowledgement number가 존재합니다.3. 또한, Flow control을 위한 Window Size가 있습니다.4. 그리고 CWR,ECE,URG, ACK 등의 flag값이 1bit씩 존재합니다.CWR (Congestion window reduced)host에게 자신이 ECE flag가 set된 TCP segment를 받았다는 것을..
![TCP란 (+ TCP Fast Open)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYtUgr%2FbtsJHZqvz0f%2Fb8Qx4RMh76i0DWxD441jo0%2Fimg.webp)
TCP의 특징TCP는 아래와 같은 특징을 가지고 있습니다.1. TCP: Transmission Control Protocol의 약자입니다.2. Layer 4 protocol3. Controls the transmission4. Connection5. Require handshake6. 20bytes headers Segment (can go to 60)7. Stateful TCP의 Use case1. Reliable Communication (e.g. chat 기능)2. Remote shell3. Database connections4. Web communications5. Any bidirectional communications. TCP ConnectionConnection은 Layer 5입니다. (..
![Docusaurus Sidebar 제목에 prefix Icon 추가하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI4Rgo%2FbtsJDgLXLVD%2FB932QZZ9nY9RsElRSZ7EOK%2Fimg.jpg)
Docusaurus 문서화를 하던 와중에 페이지의 직관성 및 가독성이 더 필요하다고 느끼게 되었습니다.그런 이유로 일부 기능을 더 보강하려고 합니다.그래서 가장 처음에 생각난 기능이 바로 Sidebar의 prefix에 icon을 추가해서 직관적으로 문서와 카테고리를 분류 하는 것입니다. 1. Custom CSS 추가 및 반영우선은 custom.css 파일을 적용하기 위해서아래와 같이 docusaurus.config.ts (혹은 js)에 custom.css 파일을 등록해 두어야합니다.presets: [ [ 'classic', { docs: { 중략... }, blog: { 중략... }, t..
![Golang 에러 처리 - (2) 에러 처리 시 결정해야 할 항목들](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYkaW8%2FbtsJuE0e6qA%2FTw5aDEqDlixfzNOf69kKc1%2Fimg.jpg)
Golang Error 처리를 위한 결정1. Error Wrapping으로 추가 정보를 포함한다.Wrapping 방법은 fmt.Errorf(”%w”, err)를 사용하여 에러를 추가하는 방식입니다.Go 1.13 이상 버전에서는 표준 라이브러리에 error 래핑 기능이 추가되어, 호출 스택이 필요 없는 경우에는 다음과 같이 간편하게 사용할 수 있습니다.func foo() error { return errors.New("foo error!!") } func bar() error { return fmt.Errorf("%s, %w", "bar", foo()) } func main() { err := fmt.Errorf("%s, %w", "main!!", bar()) fmt.Printf("%+v", err) } ..
![Golang 에러 처리 - (1) Google Guide/Best Practice 찾아보기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIxXFM%2FbtsJvQyBYyJ%2FUghfQWo9jIoYTncCksYgD1%2Fimg.jpg)
배경현재 프로젝트에서 Error 처리를 일관적이지 못한 방법으로 하고 있다는 생각이 들어서 글을 쓰게 되었습니다.작년의 Golang 초기 사용 시점에는 모두 언어에 대한 이해도가 낮고 MVP 완성을 위해 빠르게 코드를 짰어야 해서 전체적으로 코드를 짠 사람의 코딩 Convention을 따라가게 되었습니다.그때의 Error handling 사용의 형태를 유사하게 활용해 오다 보니 현재까지 같은 문제를 가지고 있는 Error handling을 가져오게 된 것이죠. 그래서 우리의 Error handling은 같은 문제들을 가지고 있습니다. 현재 프로젝트의 에러 처리 방식의 문제점1. 에러 로그의 일관성이 부족합니다.어떤 에러 로그는 최상위 API 실행시에만 몰아서 출력되고,어떤 에러 로그는 최상위 API 실행..
![[번역] 대부분 golang과 sqlite로 충분하다](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJRCJE%2FbtsJmLkO7jv%2F4vfIGZbzD67sy3vqvAlIwk%2Fimg.png)
https://crawshaw.io/blog/one-process-programming-notes crawshaw - 2018-07-30One process programming notes (with Go and SQLite) 2018 July 30 Blog-ified version of a talk I gave at Go Northwest. This content covers my recent exploration of writing internet services, iOS apps, and macOS programs as an indie developer. There are severcrawshaw.io위의 글을 번역해서 가져왔습니다. ----구글에서 일을 하던 시점에서 Small 비지니스를 만들기 ..
![우분투 데스크탑 별의 별 이슈 해결 - 터미널 안켜짐 이슈, NVIDIA 그래픽 driver 설치 후 네트워크 안잡힘 이슈](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEy55M%2FbtsI9ez8nRg%2Fo4NoLplkBssQlBunRBEwN1%2Fimg.png)
최근에 아래와 같은 작업을 하다가 데스크탑에 설치한 우분투가 이상해지는 경험을 두번이나 했습니다. 특정 목적이 있어서 변경한 게 Side effect를 발생 시켜서 문제를 일으킨 것인데요. 두 가지 이슈에 대해서 공유드리려고 합니다. 이슈 1. Ubuntu의 터미널이 켜지지 않는 이슈가 있었습니다.변경 배경 및 현상최근 로컬 LLM을 데스크탑에서 구동하고 싶어서 관련 오픈소스를 찾았습니다. 해당 오픈소스의 Python3의 버전이 3.11버전 부터 지원하여 파이썬 버전을 바꾸었습니다. 그런 이후 우분투 reboot을 했더니 기본 터미널을 실행해도 켜지지 않았습니다. 원인기존에 OS 설치시에 깔린 python3 버전이 아닌 상위 버전을 설치하여 default로 설정해버리면 terminal이 켜지지 않는 문제..