HTTP 정의: HTML 문서와 같은 리소스들을 가져올 수 있도록 해 주는 프로토콜 1989~1991 사이에 World Wide Web 통신 프로토콜로 사용하기 위해 Tim Berners-Lee가 CERN에서 만들었다 client와 server 간에 request에 따라 response 하는 model IETF와 W3C에서 개발됐으며 RFC로 관리 HTTP/0.9 원라인 프로토콜이라고 불린다. telnet friendly 한 프로토콜 초기에는 버전 번호가 없었고 차후에 구별하기 위해 0.9로 불렸다. Connection: response후에 바로 connection이 끊어진다. Reqeust 요청은 단일 라인으로 구성 URL이 아닌 GET 요청만 가능. Response 응답은 단순하게 파일 내용 자체로 ..
POSIX에서의 TCP Socket에 대해 정리합니다. Socket이란? 프로세스 간 데이터 통신의 종착점으로 OS의 API다. 프로세스와 Transport Layer 사이에서 네트워킹을 담당해준다. 네트워크를 경유하면 Network Socket, 같은 Host 상에서 통신하면 Unix domain socket로 나뉜다. UDP와 TCP를 사용한다 IP+Port의 조합으로 Endpoint를 구분한다. 쉽게 비유하면 Socket은 전화기와 같다. IP는 전화번호 Port는 통화하는 사람 Linux나 Unix를 포함한 POSIX 계열 운영체제는 소켓을 file descriptor로 애플리케이션에 노출한다 POSIX 계열의 운영체제에서 소켓은 파일의 한 종류 모든 네트워크 통신은 socket을 통한다. 사용 ..
Conveiontional Commit를 사용하면 commit 만으로 Sementic Versioning을 쉽게 할 수 있습니다. fix 타입의 커밋은 PATCH 버전으로 번역 feat 형식 커밋은 MINOR 버전으로 번역 타입과 관계없이 BREAKING CHANGE를 포함한 커밋은 MAJOR로 번역 SemVer Versioning 특정 상태에 대한 유일한 버전 이름 혹은 버전 번호를 각각 결정하는 과정이다. 소프트웨어의 관리를 위해 고안되었다 Semantic Versioning Semenantic Versioning을 줄여서 SemVer로 부르며 유의적 버저닝으로 번역된다. 버전 번호를 어떻게 정하고 올려야 하는지에 대한 규칙과 요구사항이 담긴 명세로 Github의 공동 창업자인 Tom Preston-..
ansible 등을 사용하면 필요 없을 것 같지만.. direnv를 통한 환경변수 사용을 정리합니다. direnv 프로젝트별로 환경변수를 관리하게 해주는 shell extension이다. 프로젝트 경로에 들어갔을 때. envrc에 있는 환경 변수들을 set 해준다. 프로젝트를 나오면 unset을 자동으로 해주기 때문에 편리하다. Install $ brew install direnv $ echo 'eval "$(direnv hook zsh)"' > ~/.zshrc Usage 프로젝트 폴더에서 .envrc 파일을 만들고 direnv allow를 해주면 된다. $ echo export env=local >> .envrc $ direnv allow global gitignore 프로젝트별로 따로 추가 해줄 수 ..
Concurrent한 HTTP Requests가 python과 go는 어떻게 다른지 알아봅니다. multiple requets를 간단하게 go로 작성하여 직접 확인해 봤습니다. python으로는 httpx를 사용해볼 수 있겠습니다. package main import ( "encoding/json" "fmt" "log" "net/http" "sync" "time" ) type response struct { Hello string `json: "hello"` Client string `json: "client"` } func main() { defer timeTrack(time.Now(), "main") server := []string{"A", "B", "C", "D", "E"} var wg sync...
TL;DR 어느 시점에 source code에서 machine code로 compile 되는지에 따라 다르다. interpreter : runtime compiler(AOT) : runtime 전 실행속도 이식성 컴파일 시간 종류 빠름 별로 느림 go, rust, Haskel 느림 좋음 빠름(bytecode) python, ruby 보통(JIT 구현에 따라 차이) 좋음 빠름(bytecode) pypy, java Compiler VS Interpreter Compiler : 번역기 컴파일러(compiler, 순화 용어: 해석기, 번역기)는 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램을 말한다. 특정 언어에서 특정 언어로 바꿔 주는 것 원시 코드 -> 목적 코드..
소개 2009년 11월에 구글에서 처음 발표된 후 2012년 3월에 정식 발표된 프로그래밍 언어. 로버트 그리즈머, 롭 파이크, 케네스 톰슨[2]이 디자인 Go는 명시하고 있지 않지만 단순함과 실용성을 지향하는 언어다. keyword가 25개밖에 되지 않고 문법 또한 간결해 입문이 쉬운 편이다. Go는 바이너리 컴파일러이므로 서로 다른 머신 플랫폼들을 타깃으로 배포해야 할 경우 환경변수(GOOS와 GOARCH 등)를 그에 맞게 설정한 후 컴파일해서 여러 벌의 배포판을 만들어야 한다. 개발 속도와 실행 속도, 병행성 사이의 적정 지점이 필요한 서버 애플리케이션 개발에 많이 사용되는 편 컨테이너 기반 가상화 도구인 Docker, Kubernetes를 작성하는 데 사용된 언어로 유명 이더리움의 메인 클라이언트..
Generic 과 Boxing/Unboxing Boxing 과 Unboxing 과정에서 계산 과정 비용이 들기 때문에 빈번하게 발생하면 성능에 이슈가 있다. Generic은 런타임 시점에서 인스턴스를 형성할 때 Generic Type으로 지정되어 인스턴스를 할당하기 때문에 Boxing이 아닌 처음부터 Reference type의 ValueType을 할당할 수 있다. Generic Programming(제너릭 프로그래밍) 일종의 알고리즘으로 타입이 나중에 지정되는 개념이다. 컴퓨터 프로그래밍의 한 스타일이며, 필요할 때 매개변수로 제공되면서 특정 유형으로 인스턴스화된다. data type을 추상화 함으로써 코드 재사용성을 높히고 유지보수를 용이하게 한다. Design Patterns의 저자들은 이 방법이 ..
- Total
- Today
- Yesterday
- cka
- GitHub
- Network
- 덕타이핑
- http
- inflearn
- 창업
- HTTP/3
- docker-compose
- Isolate level
- Complier
- k8s
- web_server
- 위코드
- 프리온보딩
- Python
- MSA
- Git
- gitignore
- HTTP/2
- thetextbook
- buildkit
- QUIC
- go
- database
- user-agent
- direnv
- pytest
- no-op
- 원티드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |