분류 전체보기110 Scalable한 Application 구조 이번 포스팅에서는 제일 간단한 Web Application 구조에서부터 시작해서 하나씩 덧붙여나가 많은 트래픽에도 감당가능하며 확장하기 쉬운 구조까지 살펴보겠습니다. 간단한 CRUD 기능을 수행하는 Application 구조는 아마 다음과 같을 것입니다. 제일 기본적인 구조입니다. 여기서 성능 향상을 위해서 Cache 기능을 추가할 수 있습니다. 예를 들어 티스토리 블로그를 이용자들 중에서는 티스토리 블로그를 직접 작성하는 사람들보다는 단순히 다른 사람이 쓴 블로그를 읽는 사람들이 훨씬 더 많을 것입니다. 즉, Write 보단 Read 기능이 더 자주 쓰입니다. 현재 DB에 총 3개의 블로그 글이 저장되어있다고 가정해봅시다. 그럼 누군가가 새로 글을 쓰기 전까지는 티스토리 블로그를 구경하는 사람들은 모두.. 2021. 11. 18. golang design pattern #11 Chain of Responsibility Chain of Responsibility 패턴은 어떠한 요청을 다음 대상에게 넘겨주는 패턴으로 여러 이벤트를 체인을 거치면서 처리하게 됩니다. 예제 코드를 알아보기 전에 golang의 embedding에 관한 특성 중 하나를 알아야 할게 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 type Monster interface { Attack() } type Goblin struct {} func (g *Goblin) Attack() { fmt.Println("goblin attacks!") } type GoblinKing struct { Goblin } cs 위 코드에서 GoblinKing 구조체에서 Goblin을 embedding 하였습니다. 이렇게 하면 GoblinKing 객체에서 .. 2021. 11. 16. golang design pattern #10 Proxy Proxy 패턴은 실제 동작할 object는 뒤에 숨겨놓고 client의 요청을 바로 object에 전달하는 대신, 앞단에서 필요한 처리들을 해준 후에 실제 object로 전달을 해주거나 거부하는 패턴입니다. 중요한 점은 사용자 입장에서는 proxy를 쓰고 있는지 실제 object를 쓰는지 모릅니다. 자동차 운전을 예시로 들면 자동차 운전은 운전면허가 있는 사람만 가능하게 해야합니다. 이 때, 자동차 구조체와 운전자 구조체는 서로 의존되지 않아야 합니다. 그럼 바로 코드로 구현해보겠습니다. 1 2 3 type Driven interface { Drive() } cs Car 구조체와 CarProxy 구조체를 같이 다루기 위해 interface 타입을 하나 만들어줍니다. 1 2 3 4 5 6 7 8 9 ty.. 2021. 11. 15. golang design pattern #9 Flyweight Flyweight 패턴은 메모리 사용량을 줄이기 위한 테크닉입니다. 텍스트 에디터 프로그램을 만든다고 가정해보겠습니다. 특정 위치의 문자는 대문자, bold체, 이탈릭체 등으로 이루어질 수 있습니다. 이런 상황에서 코드를 어떻게 작성할 수 있을까요? 1 2 3 4 type TextEditor struct { plainText string isCapital []bool } cs 가장 단순하게 생각했을 때 작성할 수 있는 코드입니다. 모든 글자에 대해서 해당 문자가 대문자인지 아닌지에 대한 boolean 값을 표시를 해두는 것입니다. 그러나 이 경우는 너무 비효율적입니다. 예를 들어 글자 수가 10000개라면 10000개의 boolean array를 가져야 합니다. 또 위 코드는 대문자에 대해서만 나타낸 것.. 2021. 11. 14. 이전 1 2 3 4 5 6 7 ··· 28 다음