Lemon Mint's Blog
  • Posts
  • Github

"h1" 고속 HTTP/1.1 파서

March 06, 2022


HTTP/1.1 요청 파서 설계 GET / HTTP/1.1 Host: localhost:8080 Connection: keep-alive HTTP/1.1 요청은 CRLF로 구분되어 있습니다. 따라서 \r\n을 사용하여 각 라인을 분리합니다. 불필요한 string과 []byte사이의 변환을 최소화 하려고 노력했습니다. REQUEST LINE 파싱 Request Line은 요청 메시지의 첫 라인입니다. Method Request-URI HTTP-Version 메서드, 요청 URI, HTTP 버전이 Space로 구분되

"h1" 고속 HTTP/1.1 파서

Nginx 웹소킷 설정 스니펫

January 18, 2022


map $http_upgrade $connection_upgrade { default "upgrade"; '' $http_connection; } proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; ``

Nginx 웹소킷 설정 스니펫

08 메서드와 인터페이스

October 30, 2021


메서드 Go에서의 구조체는 메서드를 가질 수 있습니다. 메서드는 함수 정의 앞에 리시버를 적어주면 됩니다. 메서드는 . 연산자를 사용해서 호출할 수 있습니다. 이 코드에서 (p Person)는 값 리시버 입니다. 값 리시버는 구조체의 값을 복사합니다, 따라서 메서드에서 구조체의 값을 변경할 수 없습니다. (복사본만 변경됩니다) type Person struct { Name string Age int } func (p Person) YearOfBirth() int { return 2021 - p.A

08 메서드와 인터페이스

07 포인터

October 29, 2021


포인터는 메모리 상에서 어떤 한 지점을 가르키는 주소 값 입니다. Go에서의 포인터는 "uintptr" 정수형과 같은 크기를 가집니다. 어떤 변수의 주소를 가르키는 포인터를 생성하려면 변수 이름 앞에 "&"를 붙여야 합니다. 이렇게 만들어진 포인터의 타입은 "*변수타입"입니다. Go에서의 포인터의 Zero Value는 nil입니다. var ptr *int var value int = 1000 ptr = &value fmt.Println(ptr) // 0xc000126000 (실행시마다 다르게 나올 수 있습니다)

07 포인터

06 Map 맵

October 27, 2021


Go에서의 맵은 기본적으로 Hash Table 입니다. 맵은 키를 이용해 값을 찾는 자료구조입니다. Go에서의 맵은 나중에 자세히 다루겠지만, 동시성을 지원하지 않습니다. 따라서 동시 접근이 필요한 경우에는 "sync.Map"을 사용하면 편리합니다. 맵은 map[키타입]값타입 형태로 선언합니다. var m map[string]int fmt.Println(m) // map[] fmt.Println(m == nil) // true Map의 Zero Value는 nil이며 사용전에 초기화가 필요합니다. 맵 리터럴은 기본

06 Map 맵

05 struct와 slice

October 26, 2021


구조체 Go에는 struct라고 불리는 구조체 타입이 있습니다. 구조체는 여러 필드들의 집합입니다. 에를 들어 Person 구조체는 이름과 나이를 가지고 있습니다. type Person struct { Name string Age int } type 구조체이름 struct { 필드1 타입 필드2 타입 필드3 타입 } 구조체는 struct 키워드를 사용하여 정의할 수 있습니다. 구조체의 인스턴스를 생성하려면 구조체이름{ 필드1: 값1, 필드2: 값2, ... } 형태로 생성합니다.

05 struct와 slice

04 for, defer문

October 25, 2021


FOR문 Go의 for문은 여러가지 방식으로 사용 될 수 있습니다. 무한루프 for { // 무한루프 } 순회 가능한 객체 Go에서의 슬라이스, 맵, 배열, 채널, 스트링등은 순회 가능한 객체입니다. 순회 가능한 객체의 경우에는 for range 문을 사용하여 순회할 수 있습니다. for key, value := range map { // 순회 } for key := range map { // 순회 } for _, value := range map { // 순회 } for inde

04 for, defer문

03 if, switch문

October 24, 2021


IF문 Go에서의 if문은 다음과 같이 작성합니다. if 조건0 { // 조건0이 참일 때 실행할 문장들 } if 조건1 { // 조건1이 참일 때 실행할 문장들 } else if 조건2 { // 조건1이 거짓이고 조건2가 참일 때 실행할 문장들 } else if 조건3 { // 조건1이 거짓이고 조건2가 거짓이고 조건3이 참일 때 실행할 문장들 } else { // 조건1이 거짓이고 조건2가 거짓이고 조건3이 거짓일 때 실행할 문장들 } 또한 Go에서의 if문은 변수를 정의할 수 있습니

03 if, switch문

02 변수, 상수, 함수!

October 23, 2021


변수 Go에서의 변수는 기본적으로 Zero Value로 초기화된다. 정수는 0, 실수는 0.0, 문자열은 ""(빈 문자열), 논리는 false, 복소수는 0+0i로 초기화됩니다. interface나 포인터, 슬라이스, 맵, 배열, 함수는 nil이다. Go에서는 변수는 var 키워드를 사용하여 선언할 수 있다. var msg string var 변수이름 타입을 사용하여 변수를 선언할 수 있다. 이렇게 선언한 변수는 Zero Value로 초기화됩니다. 또한 선언문 뒤에 값을 할당할 수 있다. var msg string

02 변수, 상수, 함수!

01 Getting Started

October 23, 2021


GO PROGRAMMING LANGUAGE Go는 정적 타입 네이티브 컴파일 언어입니다. Go는 유저 레벨 쓰레드인 Goroutine을 사용하여 동시성을 제공합니다. Goroutine의 기본 스택 크기는 2KB입니다 (Go 1.17.2 기준), 이는 pthread의 기본 스택 크기인 2MB보다 훨씬 작습니다. Goroutine간의 정보 공유는 채널을 제공합니다, 이는 동시성 작업에서의 동기화 문제를 쉽게 해결해줍니다. 또한 문법 구조가 간단하고 가독성이 좋아서 대규모 프로덕선 어플리케이션에서도 사용하기 적합합니다. Go는

01 Getting Started
  • Copyright © 2022 Lemon Mint
  • Third Party Licenses Third Party Licenses