📺 시리즈 2023.10.02 - [Go/디자인 패턴] - [Go] SOLID in Go - SOLID란? 2023.10.03 - [Go/디자인 패턴] - [Go] SOLID in Go - 구조체와 메서드 2023.10.04 - [Go/디자인 패턴] - [Go] SOLID in Go - 인터페이스 🔗 컴포지션 Go는 상속을 지원하지 않습니다. 대신 구조체 안에 구조체 또는 인터페이스를 임베딩하는 컴포지션을 사용합니다. 인터페이스 또는 구조체에 다른 타입을 임베딩할 수 있게 함으로써 임베딩된 내부 타입의 메서드를 외부 타입이 차용할 수 있습니다. 구조체 임베딩 해적단에는 먼저 선원(Crew)이 있습니다. 선원들은 저마다 이름(Name)을 가지고 있습니다. 그리고 뱃노래를 부를(SingShanty) 수도 있..
🪓 서킷 브레이커(Circuit Breaker)란? 서킷 브레이커는 실패할 가능성(likely to fail)이 있는 작업이 반복적으로 실행되는 것을 방지하기 위한 디자인 패턴의 일종입니다. 서킷 브레이커는 원격 서비스에 대한 요청을 모니터링하여 오류 수를 측정하고, 오류 수가 임계치(threshold)를 넘어가게 되면 원격 서비스로의 요청을 차단하여 장애가 발생한 부분을 격리, 빠르게 오류를 반환함으로써 불필요하게 자원이 낭비되는 것을 방지합니다.🤲 서킷 브레이커는 왜 필요한가? 사용자의 요청이 서비스 A를 거쳐서 서비스 B로 전달됩니다. 그런데 예기치 않은 문제로 인해 서비스 B가 서비스 A에게 응답을 주지 못하고 있습니다. 이 경우 서비스 B의 장애가 서비스 A로 전이되어 서비스 A는 사용..
문제 6220번: Making Change Poor Bessie has taken a job in the convenience store located just over the border in Slobbovia. Slobbovians use different coinages than the USA; their coin values change day-by-day! Help Bessie make optimal change for Slobbovian shoppers. You will need www.acmicpc.net Poor Bessie has taken a job in the convenience store located just over the border in Slobbovia. Slobbovia..
📑 context 패키지 Go의 context 패키지는 API의 경계를 넘어, 프로세스 간의 종료 시점, 취소 신호 그리고 요청 범위 값을 전달하는 Context 타입을 정의합니다. 쉽게 말해, Context 타입을 사용하여 작업 흐름을 제어할 수 있습니다. type Context interface { // context가 취소되어야 하는 시점을 반환합니다. // 만약 취소되어야 하는 시점이 없다면, ok는 false를 반환합니다. Deadline() (deadline time.Time, ok bool) // context가 취소되었을 때 닫히는 채널을 반환합니다. // 만약 취소될 수 없는 context라면, Done은 nil을 반환합니다. Done()
문제 LeetCode - The World's Leading Online Programming Learning Platform Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com You are given a positive integer n, you can do the following operation any number of times: Add or subtract a power of 2 from n. Return the minimum number of operations to ..
📺 시리즈 2023.10.02 - [Go/디자인 패턴] - [Go] SOLID in Go - SOLID란? 2023.10.03 - [Go/디자인 패턴] - [Go] SOLID in Go - 구조체와 메서드 👾 인터페이스 인터페이스를 사용하면 구조체와 메서드를 사용해 구현한 구체화된 객체가 아닌 추상화된 객체를 통해 객체 간의 상호작용을 정의할 수 있습니다. 인터페이스는 메서드의 이름, 매개변수와 반환값의 타입을 정의하며, 이를 구현하는 것은 구조체 또는 별칭 타입과 같은 타입에 달려있습니다. type DuckInterface interface { Say() Swim() Walk(distance int) int } Go에서 인터페이스는 'implements'와 같은 구현을 위한 명시적인 키워드를 사용하지 ..
🦅 이전글 2023.10.03 - [Solidity] - [Solidity] 재진입 공격 (Reentrancy Attack) 🚫 재진입 공격 예방 기법 1. Checks Effects Interactions 패턴 Checks Effects Interactions 패턴은 컨트랙트 내부에서 외부 주소를 호출할 때 적용할 수 있는 패턴입니다. 외부 함수를 호출하거나 이더를 다른 계정으로 보낼 때, 이를 호출하는 컨트랙트는 제어 흐름을 외부 개체에게 넘겨주게 됩니다. 이러한 이유로 재진입 공격도 가능한 것입니다. 그렇기 때문에 외부 주소를 호출하기 전에 충분한 검토가 필요합니다. 먼저 가능한 모든 조건들을 검사(checks)하고, 컨트랙트 내부에서 실행가능한 모든 것들을 적용(effects)한 뒤에 마지막으로 ..
🚨 재진입 공격 (Reentrancy Attack)이란? BadBank 컨트랙트는 10 이더를 가지고 있고 Bob은 1 이더를 가지고 있습니다. BadBank가 가진 10 이더는 다른 사용자 또는 스마트 컨트랙트가 입금해 놓은 금액입니다. BadBank는 이를 안전하게 지켜야만 하고 소유주의 인출 요청에만 응답을 해야 되겠죠. 그런데 BadBank의 withdraw 함수에는 취약점이 존재합니다. 그리고 이를 오직 Bob만 눈치를 챘습니다. Bob은 공격을 감행하기로 마음먹습니다. 공격에 앞서 withdraw 함수를 호출하기 위한 조건을 만족시키기 위해 Bob은 자신이 가진 1 이더를 BadBank에 입금합니다. 그리고 withdraw 함수를 호출합니다. BadBank가 Bob에게 1 이더를 보내는 순간,..
📺 시리즈 2023.10.02 - [Go/디자인 패턴] - [Go] SOLID in Go - SOLID란? 🐭 Go는 클래스와 객체 대신 값과 타입을 가지고 있다 Go는 클래스(class)와 객체(object)를 사용하는 대신 다음과 같이 구조체(struct)와 다른 타입을 기반으로 정의된 타입(type)을 사용합니다. type Gopher struct { // 구조체: 필드들의 집합체 Name string State GopherState } func (g Gopher) String() string { return fmt.Sprintf("%s is %s", g.Name, g.State) } type GopherState int8 // 별칭 타입: int8을 기반으로 새로운 타입을 정의 const ( Aw..
💧 SOLID 원칙 SOLID 원칙은 객체지향 설계 다섯 가지 원칙의 앞글자를 따서 만든 용어로, 로버트 C. 마틴(Robert C. Martin)에 의해 제시되었습니다. 단일 책임 원칙 (Single Responsibility Principle, SRP) 개방-폐쇄 원칙 (Open-Closed Principle, OCP) 리스코프 치환 원칙 (Liskov Substitution Principle, LSP) 인터페이스 분리 원칙 (Interface Segregation Principle, ISP) 의존성 역전 원칙 (Dependency Inversion Principle, DIP) 이 다섯 가지 원칙들은 반드시 지켜야 하는 의무사항은 아니지만, 좋은 설계를 위해 지향해야 하는 원칙들입니다. 💯 좋은 설계..