전체 글 40

[Concurrency-5] Fan-Out, Fan-In

Best Practices for constructing Pipelines(이어서) Generator: data set을 stream of data on a channel 로 만드는 것이다. channel을 사용함으로써 함수를 사용해서 할 때와 다른 점은 value를 추출하기 위해서 range statement 를 사용할 수 있고, 이를 통해 안전하고 concurrent 하게 사용할 수 있다. 이렇게 각각의 value들뿐만 아니라 pipeline 단계 별로도 concurrent 하다. 단계가 독립적으로 실행된다고 보면 된다. 예시에서 나오는 stage들은 공통으로 사용하는 done channel과 다음 스테이지로 전달되는 channel 에 의해서 interconnected 되어 있다. preemptabl..

Backend with Golang 2023.09.12

Rate Limiting

Rate limiting - concurrency in go Why do we need Rate Limiting? malicious users can access your system as quickly as their resources allow it. -> they can do all kinds of things 악의적이지 않더라도, 큰 볼륨으로 operation을 수행하거나, 실행하려는 코드가 buggy하다면, performance를 저하시킬수 있다. 일반적으로 서비스에서는 어느정도의 성능을 지속적으로 유지할 수 있다는 것을 보증하고 싶어하고, 한명의 유저라도 그 agreement에 영향을 받는다면 좋지 않은 결과를 낳는다. 일반적으로 유저들은 시스템에 대한 자신들의 접근이 sandboxed되어 있..

Backend with Golang 2023.09.06

Effective Go - Part 4: Embedding & Concurrency

Embedding Go does not provide the typical, type-driven notion of subclassing, but it does have the ability to “borrow” pieces of an implementation by embedding types within a struct or interface. subclassing이란 ? 오직 인터페이스 만이 interface안에 embedded될 수 있다. struct에서도 비슷한데, interface 보다는 광범위한 영향(implication)을 끼친다. field 이름 없이 type을 listing 할 수 있고, field이름과 함께 쓰여질 수 도 있다. 하지만 이름이 있을 경우 method를 전달해주기 위해서..

Backend with Golang 2023.08.16

Effective Go - Part 3

Interface 인터페이스는 어떤 객체가 정해진 행동을 할 수 있다면, 어떤 곳에서 쓰일 수 있다는 object의 행동을 명시한다. 인터페이스의 이름은 보통 method의 이름에서 파생된다. Conversion type Sequence []int일때 프린팅에 필요한 메서드인 String 함수를 만든다면 사실 Sprint 함수가 slice를 가지고 하는 일을 반복하는 꼴이 된다. 이때 Sprint 를 실행하기 전에 Sequence 타입을 []int로 변환할 수 있다. 이름만 무시하면 동일하기 때문에 conversion이 가능한 것이고, 새로운 값을 만들어 내지 않고 현재 값에 새로운 타입이 있는 것처럼 일시적으로 행동하게 된다. (int -> floating point로 변환할 때는 새로운 값을 만드는 ..

Backend with Golang 2023.08.13

Effective Go - Part 2

Initialization Init function : 각각의 source file에서 its own init function을 정의할 수 있다. 여러개 정의할 수도 있다. init 초기화 단계에서 마지막에 되는 단계라고 할 수 있다. init 함수는 모든 variable declaration이 끝난 뒤에 불리게 되며, imported packages가 모두 initialized되었을 때만 불린다. 선언의 형태로 표현할 수 없는 것들을 초기화 하는 것 이외에도, 실제 프로그램의 실행전에 상태를 검증하고 올바르게 복구하는데 자주 사용된다. Go 프로그램은 항상 main 함수로 시작된다. main package가 다른 패키지를 import 하고 있으면 import된 각각의 packages를 먼저 불러온다. ..

Backend with Golang 2023.08.10

Effective Go - Part 1

Switch switch문 밖에 있는 loop을 break하고 싶을때는 label을 사용해서 해당 라벨을 break하면 된다. continue statement 도 마찬가지로 label을 사용할 수 있다. Type switch : switch 는 interface variable의 dynamic type을 밝혀내는 것에 쓰이기도 한다. 아래의 예시처럼 되는데, 이때 t:=t.(type)으로 변수 재사용하는 것은 idiomatic하다. var t interface{} t = functionOfSomeType() switch t:=t.(type) { } defer defer statement는 function call을 function이 return하기 바로 직전에 실행되도록 scheduling한다. def..

Backend with Golang 2023.08.09

[Network] IP Class, Subnet Mask, CIDR

1. IP Class A,B,C 등등 클래스로 나누게 되는데, A클래스: 00000000.00000000.00000000.00000000 (Network Address: 0 - 127) A class network → 128개 → 하나 당 사용할 수 있는 ip 개수 16,777,216 가 된다. B클래스: 10000000.00000000.00000000.00000000 (Network Address: 128.0 ~ 191.255) C클래스: 11000000.00000000.00000000.00000000 (Network Address: 192.0.0 ~ 223.255.255) highlight : network number, other numbers for local address inflexible 하..

Backend with Golang 2023.08.03

Building HTTP Services - Middleware(Network programming with Go)

Middleware는 http.Handler를 인풋으로 받아서 http.Handler를 return 하는 reusable function들이다. 다음 handler에게 passing하기 전에 content에 기반하여 몇가지를 결정하는데 쓰이곤 한다. 아니면 request content에 따라서 response의 header를 작성하기도 한다. 그리고 아래 리스트와 같은 일들을 처리하기도 한다. 하나의 middleware에서 여러개의 테스크를 담당하지 않도록 하는 게 좋다. 대신에 minimalist middleware 를 작성하는 것이 중요하다. authentication collect metrics log requests control access to resources middleware에서는 par..

Backend with Golang 2023.07.30

Building HTTP Services - Handler (Network programming with Go)

Go HTTP Server는 먼저 Server의 multiplexer가 있고, 이 client request 를 받는 것이다. Multiplexer 는 request 의 목적지를 결정한다. 그리고 처리할 수 있는 것으로 전달한다. 처리하는 곳이 Handler이다. Multiplexer 자체도 handler 인데, request를 가장 적절한 handler로 라우팅하는 역할을 한다. Handler가 요청을 전달받기 전에 middleware를 거치게 된다. Middleware는 handler의 behavior를 변경하거나 auxiliary task들을 수행한다. 예를 들면 logging, authentication, access control 등이 있다. srv := &http.Server { Addr: H..

Backend with Golang 2023.07.30

Using Matterjs & React to render to the DOM (Matterjs와 React를 사용하여 DOM element에 2d 물리엔진을 적용해보기)

Matter js 를 사용해서 움직이는 DOM element 를 만들어 보기로 했다. Matterjs 는 2d physics engine을 만들 수 있는 library 이다. Matterjs만 사용해서 그 안에 있는 render 기능을 쓰면 canvas element를 사용하게 된다. 이렇게 되었을 때 어떤 event가 있을 때 각 body의 style property를 쉽게 변경할 수 없다는 단점이 있다. https://stackoverflow.com/questions/63906218/using-matter-js-to-render-to-the-dom-or-react Using Matter.js to render to the DOM or React I want to render custom HTML el..

Frontend (React) 2023.07.26