본문 바로가기

전체 글

(90)
[Laboratrix] - Application 정의 보호되어 있는 글입니다.
[Python] 파이썬 비동기 프로그래밍 asyncio Intro비동기 프로그래밍이란 무엇일까요? 작업이 완료될 때까지 기다리지 않고 잠재적으로 오래 실행되는 작업을 시작하여 해당 작업이 실행되는 동안에도 다른 이벤트에 응답할 수 있게 하는 기술입니다. 이러한 비동기 프로그래밍이 필요한 이유는  Server Request, Disk Read/Write 등 CPU작업 없이 결과를 기다리기 심심할 때(?) 그 사이에 CPU작업을 할 수 있도록 설계하기 위함입니다. 만약 Server와 통신하는 프로그램이 항상 동기적으로 작성하게 된다면 Server Request를 요청한 다음에 Response가 올때까지 아무 작업도 하지 못한 채 기다려야만 합니다. CPU는 놀고있는데 말이죠. 이렇게 외부 요청, Disk작업이 진행될 때에도 CPU가 멈추지 않고 계속 진행하도록 ..
[Git] 실제로 경험해 본 Git-Flow에 대한 정리 * 목차 - Intro - 필자가 사용한 Git-Flow 전략 - Git-Flow 예시   - Case1. Pull Request   - Case2. Release   - Case3. Hotfix - 마치며   Introgit은 소스 코드 형상관리(Configuration Management) Tool입니다. git을 잘 사용한다면 개발자들 간의 협업을 용이하게 해주며 다양한 변경사항에 대한 추적 관리를 보다 쉽게 할 수 있습니다. git 자체는 Tool이므로 어떤 전략에 따라 사용하느냐, 어떤 git Repository Service를 사용하느냐에 따라 Process는 얼마든지 달라질 수 있습니다. 이런 방법을 선택하는데 있어서 가장 큰 요소는 Project의 크기입니다. Project의 크기가 크다 ..
[Python] - numba가 빠르긴 빠릅니다 IntroPython은 쉽고 직관적인 문법 덕분에 많은 개발자들에게 사랑받는 Interpreter 기반의 언어입니다. 하지만, 순수 Python 코드의 실행속도는 C/C++, Go, Rust같은 Compile 기반의 언어에 비해 상당히 느립니다. 이런 느린 실행속도는 대규모 데이터를 처리할 때 매우 불리하게 작용합니다.이러한 대규모 데이터를 빠르게 처리하기 위해서 Numpy를 사용하기도 합니다. Numpy는 C언어로 구현된 고성능 library로, Python만으로 구현된 코드와 비교하면 상당한 실행속도를 보입니다. 하지만 이는 Python의 자체 속도를 늘려주기 보다는 Numpy에서 제공하는 수학 공식과 관련된 함수들이 빠르게 동작하는 것에 의의가 있습니다. 본인이 작성한 알고리즘이 Numpy에서 지원..
[Python] only python vs numpy vs multiprocessing Intro저는 개발 업무를 진행하면서 주로 Python을 사용해왔지만, 최근에 Rust를 접하게 되면서 Rust에 대해 궁금한 점이 생겼습니다.  Application 영역에서 Rust는 Python과 비교했을 때 어떤 차이가 있을까요?   Python은 간결한 문법과 강력한 라이브러리 생태계를 갖춘 언어로, 이미 여러 응용 분야에서 널리 사용되고 있습니다. 예를 들면 아래와 같은 분야들이 있습니다. 각 분야에 제공되는 library도 다양합니다. Web Development : Django, Flask, FastAPIData Science : Numpy, Scikit-learn, Pandas, MatplotlibAI, ML : Tensorflow, Pytorch, KerasImage Processing..
[Rust Tutorial] 11 - Option IntroRust에서는 null값이 없는 대신에 None이 있습니다. 하지만 None은 null과 다른 점이 있습니다. null은 단독으로 사용할 수 있었지만, None의 경우 Option이란 Type을 사용해야 합니다. Option이란 None, 혹은 Some(Value)중 하나의 값임을 Enum으로 나타낸 Type입니다. 즉 Value를 바로 사용하기 전에 None인지 확인하고 사용하라는 의미이지요. None을 값으로 오해하지 않도록 하는 Rust의 방지책 중 하나입니다. 정리하자면 아래와 같습니다. Option : T Type(generic)을 가지는 Some(value)이거나  None인 값을 가지는 Enum.Some(value) : Option와 대응되는 값. T처럼 바로 사용할 수는 없다. v..
[Rust Tutorial] 10 - Generic IntroGeneric이란? Type에 의존하지 않는 유연한 코드를 작성할 수 있도록 도와주는 기능입니다. Generic을 처음 접하게 되면 Code의 새로운 문법으로 인한 거부감이 있을 수 있습니다. 하지만 Rust에서 Generic은 꽤 이점이 많은 기능입니다.  코드 재사용성 향상 : 여러가지 Type에 대해서 동작이 필요할 때 각 Type별로 작성할 필요 없이 Generic을 통해 범용 코드를 작성할 수 있습니다.타입 안전성 보장 : Generic을 사용하면 Compiler가 코드에서 type의 일관성을 검증합니다. 특히 Trait Bound (Generic Constraints) 로 특성이 포함되지 않은 Type은 Generic에 허용하지 않도록 Compiler가 검증합니다. zero-cost ..
[Rust Tutorial] 9 - mod, use Intro필자는 처음 보는 Programming language를 접하게 되면 가장 먼저 찾아보는 것이 있습니다. 변수 선언? 반복문? class? 모두 아닙니다. 저는 source file이 다른 path에 있는 source file을 읽는 방법을 항상 가장 먼저 찾습니다. 왜냐하면 공부한 내용을 적다보면 분리해야 할 때가 있는데 file 단위로 분리하지 않으면 곤란한 경우가 많기 때문입니다. 그리고 이런 속성은 언어별로 많이 다르게 동작합니다. (main file에서 modules/util를 불러온다고 가정합니다)C/C++ : #include "modules/utils.h"로 header 불러오기Java : util code는 package 선언, import modules.Util로 불러오기Pyth..
[Rust Tutorial] 8 - Struct, Impl, Trait IntroRust는 Class가 없습니다. 대신에 Rust는 다음과 같은 개념으로 Object에 대한 정의를 합니다. Data의 구조를 설계하는 Struct (구조)Behavior(행동)를 정의하는 Trait (특성)Data에 Behavior를 연결하여 구현하는 Impl (구현) Rust에서는 Struct, Trait, Impl 이 3가지로 Object를 정의합니다. 개인적인 사용 경험에 따르면 Struct + Impl로 구현을 하거나 mod + Struct + Impl + Trait으로 이전 class처럼 만드는 것도 가능합니다. 하지만 Rust의 철학은 확실히 class가 아닌 3가지로 분리한 문법을 지향하고 있습니다. 이유는 아래와 같습니다. 명시적이고 유연한 설계 : 데이터와 동작을 분리하여 같은..
[Rust Tutorial] 7 - Ownership Intro프로그래밍을 처음 접할 때 C/C++를 배우게 된다되면 가장 큰 벽 중 하나는 바로 포인터(pointer)입니다. Rust에서는 Ownership(소유권) 개념이 이와 비슷한 벽일 수 있습니다. 다른 Programming에서는 나오지 않는 규칙이기 때문이죠. Ownership : 하나의 데이터는 하나의 변수가 소유한다.  하지만 Rust의 소유권 개념은 새로운 규칙일 뿐 그렇게 어렵지는 않습니다. 만약 여러분이 소유권 규칙을 어긴 코드를 작성했을 경우 rust에 내장된 Linter가 소유권을 위반한 위치와 대처법에 대해서 상세하게 알려주기 때문에 큰 부담감을 가지지 않아도 됩니다. 애초에 소유권 규칙을 어기고 build를 수행하게 된다면 컴파일 타임 에러(Compiler time error)가 ..