DX를 위한 API 전략
·
프로젝트/1. EggERP
TL;DR1. 추상화 수준을 어느 정도로 할 것인가?Ts기반이며, 추상화 수준을 낮게 가져간다 => tRPC언어가 독립적이며, 추상화 수준을 낮게 가져간다 => gRPC추상화 수준을 높게 가져간다 => Rest, GraphQL2. Interface의 주도권을 누가 가질 것인가(client Or server)?client가 주도권을 가진다 => GraphQLserver가 주도권을 가진다 => Rest(Code-gen, Type-sharing)동등하게 주도권을 가진다 => Rest(ts-rest기반 zod계약) 3. 현재 상황과 기술적 특성을 고려했는가?팀의 러닝 커브, 마이그레이션 여부프로젝트 구조 (MonoRepo, MultiRepo, Stack..)Caching, Auth, Performance..데이..
팀 생산성을 위한 MonoRepo
·
프로젝트/1. EggERP
TL;DRFront에 재사용 컴포넌트가 많이 생기는 경우, 컨벤션이 난잡해지는 경우Front와 Back의 타입을 공유하려는 경우 MonoRepo는 유용하다. Pnpm이 도입도 쉽고 성능도 준수하다. MonoRepo란?Project 여러개를 하나의 버전관리 시스템으로 관리하는 것이다. 프로젝트 각각 snap-shot이 남는지,프로젝트의 뭉치단위로 snap-shot이 남는지의 차이다. 프로젝트가 3개 Repo로 나누어져 있는데, 합치면 MonoRepo인가요? 내 책상의 서랍장 처럼,하나의 시스템에 우겨넣는다고 MonoRepo가 되지는 않는다.하나의 시스템에 여러개의 프로젝트를 넣으면 마법이 일어나는게 아니다.그렇게 했을 때, 이득을 보는 시나리오가 존재하기 때문에 사용하는 것이다. 여러 프로젝트를 뭉쳤을 ..
Pnpm: Fast & efficient 패키지 관리자
·
프로그래밍/도구
TL;DRhard-link 기반의 효율적인 의존성 관리 툴이다.빠른 속도, 적은 용량을 사용하는 패키지 관리자이며 MonoRepo에 유용하다. Pnpm (Performant npm)공식문서의 Motivation 항목이다.아래의 그림으로 Pnpm의 특징을 이해할 수 있다.중앙 저장소에 의존성을 설치한다.그리고 /node_modules에서는 hard-link를 통해 중앙 저장소를 참조한다.한 번만 설치하면 되기 때문에, 속도와 용량이 줄어드는 건 당연한 이야기이다.모노레포를 운용하게 된다면, 이 효율성은 더욱 체감이 될 것이다. 그렇다면, npm과 yarn은 이 문제를 몰랐을까?  Npm, Yarn과 /node_moduels의 투쟁기Npm과 Yarn의 초기버전에도 이러한 문제를 인지하고 있었다.그래서 종속모..
실용주의 Agile 도입기
·
프로젝트/1. EggERP
TL;DRAgile은 은탄환이 아니다.팀이 Agile할 준비가 되지 않았는데, 방법론만 무작정 도입한다고 되는게 아니다. 우리 팀에는 어느 정도의 Agile이 필요한지,애초에 Agile이 필요한지 고민해보도록 하자. 그리고 수단이, 목적이 되지 않도록!  Agile인 '척' 했던 지난날들Agile을 처음 알았을 때는, 은탄환처럼 보였다.백로그를 만들고, 추정을 하고, 스프린트를 하면 될거라 생각했다.데일리 스크럼을 하면, 플래닝 포커를 하면, 회고를 하면 될거라 생각했다.  도입하면 모든 문제가 해결되고, 프로답게 일할 수 있을 것이라 생각했었다. 지난 2개의 프로젝트를, Agile인 '척' 해본 결과는 썩 좋지 않았다.소소한 변화는 있었지만, 전혀 Agile하고 있지 않았다. 정말로 필요했던게 아니였다..
Variable 회고 일지
·
프로그래밍/기본기
서론Variable(변수)는 변하는 값이라는 뜻이다.프로그래밍에서의 변수라는 개념도 개념적으로는 동일하다. 프로그래밍을 처음으로 시작한 2019년 3월부터,졸업을 앞둔 2025년 2월까지 개발 피지컬은 조금씩 늘어왔다. (여전히 못한다.) 그리고 변화양상은, 내가 개발에 있어서 기본적인 정의들을 어떻게 대했는가에서 드러난다. 대학생활의 마무리를 지으며,'변수'에 대한 관점의 변화를 회고하려 한다.  변수란 무엇인가?Wiki백과에서는, "하나의 값을 저장할 수 있는 기억공간"이라고 서술한다. 변수의 목표는 값을 재사용하는 것이다.우리가 원하는 '단어'로 값을 사용하고 싶은 것이다.그렇다면 다음의 조건을 충족해야 한다. 1. 메모리 어딘가에 저장되어야 한다.2. 변수이름으로 그 값을 찾아낼 수 있어야 한다...
미래는 현재의 연속선이다
·
마음가짐
기부에 대하여남을 돕는다는 것은 꽤나 아름답고 숭고한 일이다. 메마른 현실에서, 본인도 목이 마를텐데.물 한모금을 나눌 수 있는 자애로움이란 얼마나 아름다운가? 그런 사람을 동경 하기에, 기부를 하는 것은 좋아한다.내가 가진 지식, 돈, 사랑 어떤 것이든 간에 나누는건 멋진 일이다. 현실을 핑계삼아자주는 아니였지만, 지갑에 사정이 넉넉하면 가끔 후원을 하곤 했다.금액이 많지도 않았지만, 1년에 1번 정도 꼴이였던거 같다. 내 생활비, 내 꿈에 투자할 돈도 부족하기에 위축되었던 것 같다.'남을 돕는것도 중요하지만, 내가 온전해야 도울 수 있으니까'라는 그럴싸한 이유로 말이다. 현실과 이상을 합친 1,000원그래서 이전에는 다음과 같이 생각했다.'번듯한 돈벌이가 생기면, 정기후원을 해야겠다'라고. 그런데 갑..
UV: Rust 기반 python_manager
·
프로그래밍/도구
서론python의 패키지 관리자는 pip -> poetry -> pdm 등 많은 것들이 등장했고,Rust의 인기를 업고 uv가 등장했다. pip대비 10 ~100배의 속도 & python 설치 및 관리라는 매력적인 특성이 있다. 목표어떤 기능을 제공하는지 정리기존의 어떤 문제점을 해결했는지 이해  핵심 명령어1. 프로젝트 생성# 애플리케이션 생성uv init {app_name}# 라이브러리 생성uv init --lib {lib_name}# 확장 모듈 생성 (maturin: Rust, scikit-build-core: C계열)uv init --build-backend maturin {ext_name}배포용인 프로젝트와, 아닌 프로젝트를 구분할 수 있게 해준다.Rust나, C기반의 성능이 중요한 프로젝트를 ..
Statement와 Expression
·
프로그래밍/기본기
서론Statement는 한글로 '문'이고,Expression은 한글로 '표현식'이다. 프로그래밍을 해봤다면 조건'문', 반복'문' 등을 필히 들어 봤을 것이다.또한 '표현식'도 분명 들어봤을 것이다. Statement(문), Expression(표현식)에 대해 설명을 할 수 있는가?   목표Statement와 Expression의 차이점에 대해 이해한다.Expression의 특징 때문에 일어나는 일을 이해한다.  Statement란?프로그램을 구성하는 기본 단위이자 최소 실행 단위선언'문', 조건'문', 반복'문' 처럼 하나의 최소 실행 단위이다.;(세미콜론)은 하나의 Statement가 종료 되었음을 의미하는 것이다.조건문이나 반복문은, {}(중괄호)를 이용해서 범위를 표현하지 않는가?이를 block-..