공부하고 기록하는, 경제학과 출신 개발자의 노트

학습일지/Language 22

GopherCon 2023 - the Secret life of Goroutine

https://youtu.be/MYtUOOizITs?si=bUId7ieorNpUOvJD Jesús Espino: mattermost (slack의 오픈소스 버전) 소속 Software Engineer goroutine을 설명하려면, go의 scheduler 이해가 필요하다.go scheduler를 구성하는 컴포넌트부터 간단히 소개하자면 Processor (alias P): Representation of Virtual CPUgoMaxProcs: number of Ps that scheduler have.Status 정보 가지고 있음 - Idle, Running, Syscall, gcStopAssociated the Current 'M'개별 P는 본인이 실행할 GoRoutine정보를 관리할 Queue가 있..

EuroPython 2022 - From Pip to Poetry: Python ways of packaging and publishing

https://youtu.be/KlvOIuifE5cFrom pip to poetry - Python ways of packaging and publishing발표자: Vinícius Gubiani FerreiraQA Senior Analyst at Azion (Security | Cells Squads)Python Backend Engineer로 오래 일했다고 함 Package ManagersPackage Manager: Configuration Management을 위한 tool.Configuration Management: System Engineering process for establishing consistence of our products attributes through its lifet..

Writing Beautiful Package in Go

Golang UK Conference 2017 발표. https://youtu.be/cmkKxNN7cs4 go로 개발한 오픈소스 패키지가 여러 사람들에게 유용하고 쉽게 쓰이려면 어떻게 해야 하는지를 설명한 강연 package는 go파일 (_test.go 포함) 로 구성된 하나의 디렉토리. 다른 프로젝트에서 import해서 사용할 수 있음 exported / internal 두 종류가 있음 main 패키지 말고. main 패키지는 command를 의미함 user-centred Design 결국 사람이 쓰는 거니까, 개발하려는 프로덕트의 최종 사용자의 요구사항, 제한조건을 고려해서 설계해야 한다. 따라서 고민해야 할 점 누가 쓸 건지 하려는 건 무엇인지 왜 하려는 건지 굳이 내 패키지를 쓰려는 이유는 뭔지 ..

Go - Context 정리

Context Package https://youtu.be/mgJMIZsWfB4 go의 다양한 패키지에서 사용되고 있는 Context Context의 기능은 크게 세 가지. Deadlines Concellation Signals Request-scoped values Deadline - withTimeout, withDeadline WithDeadline: 시작 시간과 끝 시간을 정하고, 그 시간동안만 실행되도록 (endtime) WithTimeout: 시작 시간을 정하고, 얼마의 시간이 지난 뒤 종료되도록. (Duration) const shortDuration = 1 * time.Millisecond func main() { ctx, cancel := context.WithTimeout(context..

JIT Compiler

Just in Time Compilation, and the Code Cache 자바 컴파일러가 .java -> .class 바이트코드 파일로 변경. 이 변경된 .class 파일이 JVM 위에서 실행된다. 바이트코드로 변환된 후 jvm에서 runtime에 실행되는 구조 : 어느 하드웨어에서건 동일한 실행이 가능하다. 단순히 바이트코드 변환하는 용도뿐만 아니라, 일반적인 인터프리터보다 효율적으로 동작하도록 설계되어 있음. 기본적으로 인터프리터는 코드 한 줄씩 런타임에서 읽어들여 실행하는 구조. 느린 편이다. JVM의 바이트코드 interpretation은 느린 속도를 해결하기 위해 JIT compilation (Just in time compilation) 을 사용한다. 어떤 코드가 가장 자주 실행되는지를..

[Design Pattern] Facade

Facade Facade 패턴은 '하위 시스템을 보다 쉽게 사용할 수 있게 해주는 인터페이스를 정의하는 것' Adapter 패턴과 거의 같은 방식으로 작동하지만, 목적이 다르다. Adapter : 원래 코드를 다른 코드와 작동할 수 있도록 하는 Wrapper를 제공 Facade : 원래 코드를 더 쉽게 처리할 수 있는 Wrapper를 제공 객체나 클래스, 인터페이스가 복잡할 경우, 쉽게 사용할 수 있도록 프론트 인터페이스를 제공하는 형태. 캡슐화되지 않은 코드를 처리할 때 / 원하는 코드를 다시 작성할 수 없을 때 주로 사용한다. 단, 원래의 클래스, 인터페이스 코드가 변경될 경우 Facade 패턴도 변경해야 한다. 패턴의 특징 여러 복잡한 클래스를 하나로 간주해서 편하게 다루는 방법 따라..

[Design Pattern] Strategy

Strategy 패턴 여러 알고리즘을 하나의 추상적인 접근점 (인터페이스)을 만들어서, 인터페이스에서 알고리즘이 서로 교환 가능하도록 하는 패턴. 동일한 목적의 알고리즘 여러 개 중 특정 알고리즘을 선택해야 할 때. 인터페이스는 '기능의 선언 (구현부와 분리)' 역할을 담당. 하나의 인터페이스로 여러 가지 기능을 구현하기 위한 단일 통로를 생성하는 것. ex) 워드에서 프린터 명령어 -> 어느 기종의 프린터를 사용하건 상관없이 프린트 명령어가 실행됨 기능 위임 (Delegation) 예시코드. // AObject : 객체 정의. 이 객체에서 수행할 기능을 인터페이스에 위임하는 방식 public class AObject { BInterface bInterface; // 객체 생성 시, 기능을..

[Design Pattern] Bridge

Bridge 두 가지 개념을 먼저 정리해야 한다. 기능 클래스 계층. = 새로운 기능을 추가하고 싶은 경우 구현 클래스 계층. = 새로운 구현을 추가하고 싶은 경우 즉, 클래스를 생성할 때 생성의도를 먼저 고민해야 한다. 기능을 추가할 것인가? 구현을 추가할 것인가? public interface IRobot { void powerOn(); void powerOff(); } public class RobotModel1 implements IRobot { @Override public void powerOn() { System.out.println("type1 : power on"); } @Override public void powerOff() { System.out.println("type1 : pow..

[Design Pattern] Decorator

Decorator 객체 결합으로 기능을 동적으로 유연하게 확장할 수 있게 하는 패턴. 기본 기능에 추가할 수 있는 기능 종류가 많은 경우, 각 추가 기능을 Decorator 클래스로 정의한 뒤 필요한 Decorator 객체를 조합하는 식으로 설계함 상속을 통해 확장할 수도 있지만, 디자인 유연성 면에서 상속은 비추천 기존 코드를 수정하지 않고도 확장할 수 있도록 Decorator 패턴 사용 ex) 자바 입출력의 Filter Stream 기능. 단점 자잘한 객체가 많이 추가되므로, Decorator 패턴을 너무 많이 사용할 경우 코드가 필요 이상으로 복잡해질 수 있다. Component를 초기화하기 위한 코드가 복잡해진다. Decorator로 Wrapping해야 하는 경우가 종종 생김. 따라서 보통 Fac..

[Design Pattern] Adapter

Adapter Pattern 한 클래스의 인터페이스를, 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환하는 역할. 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스를 연결하는 역할. 이미 제공되어 있는 것 / 필요한 것 사이의 차이를 없앤다고 보면 된다 Wrapper 패턴이라고도 불림. 다른 용도로 사용할 수 있도록 변경해주는 개념 두 가지 종류가 있다. Class 기반 Adapter (상속을 사용한 방법) Instance 기반 Adapter (위임을 사용한 방법) 기존의 클래스를 개조해서 필요한 클래스를 생성하는 방법. 일반적으로 기존의 클래스 == "잘 만들어졌고, 버그가 발생하지 않는다는 걸 오랜 시간 사용하며 증명한 코드". 이 클래스를 더 많은 곳에서 다양한 방식으로 사용하기 위해 고..