본문 바로가기

분류 전체보기129

FSD에서 도메인 중심 아키텍처로 전환하며 마주한 현실적인 선택들 본격적인 글을 들어가기 앞서원래는 프로젝트 아키텍쳐의 방향성을 검토하고, 더 나은 아키텍쳐를 고안해내었다. 그리고 적용하는데 드는 비용을 따져서 현재 프로젝트에 개선된 아키텍쳐를 적용하지 않고, 다음 프로젝트에서부터 적용할 예정이었다. 처음에는 전체 코드베이스를 전부 검토하고 리팩토링하는 비용을 계산하였을 때, 전체 프로젝트를 갈아엎는 선택이 득보다는 실이 많다는 생각이 들었었다. 하지만 마침 개발기간이 연장되었기에 썩은 가지를 도려내기 위한 여정을 출발하였고, 이 글은 그 여정의 시작과 끝, 그리고 그 여정의 도중에 마주친 현실적인 고민들을 담기 위해 노력하였다. 사실 아키텍쳐 개선이라는게 현실적으로 무조건 좋은 결과만 driven되는 것은 아니였다. 결과를 예측하고, 개선에 드는 비용을 따져가면서 신.. 2026. 1. 4.
Zustand 역설계 Zustand는 왜 React의 바깥에서도 동작하는가React-Router의 loader는 React의 렌더링 사이클에서 벗어나 있다.그래서 이 React-Router의 loader는 React hooks를 사용할 수 없는데, 흥미롭게도 이 loader에서 Zustand는 사용이 가능하다.이게 어떻게 가능한걸까, 항상 의문이 들어 이 자리를 빌어 Zustand 그 자체를 해부하겠다. Zustand의 철학은 createStore에서 드러난다Zustand를 사용할 때, 제일 먼저 호출되는 함수는 createStore다. 흔히들 프론트엔드 개발자들은, 이 createStore를 통해 React의 컴포넌트 트리와 무관하게 전역으로 상태를 관리한다. 그러나 이 createStore의 진가는 단순히 전역 상태 관리.. 2025. 12. 14.
Execution Context를 통한 Closure의 이해 ExecutionContext { GlobalExecutioncontext FunctionalExecutionContext EvalFunctionExecutionContext // 보안에 문제있어서 이젠 거의 안씀} Global Execution Context ├─ LexicalEnvironment │ ├─ EnvironmentRecord (GlobalDeclarative + GlobalObject) │ └─ Outer = null ├─ VariableEnvironment └─ ThisBinding = global object (browser=window, node=global) Function Execution Context ├─ LexicalEnvironment (Fu.. 2025. 12. 11.
tanstack query 개선기 내가 tanstack-query를 바꾼 이유custom hook 무조건 좋은건 아니다.보통 리액트 쿼리를 사용할 때에는, 아래와 같은 방식을 사용하였었다.import { useQuery } from "@tanstack/react-query";import { getData } from "../Services/http/getData";import { District } from "../Types/CityAndDistrict";import { ApiResponse } from "../Types/ResponseType";function useDistrictQuery(cityId: string) { return useQuery({ queryKey: ["district", cityId], queryFn.. 2025. 12. 7.
백준 16954 움직이는 미로 탈출 C++ 요약 그래프는 순서에 따라서 구현만 잘하면 된다.방문처리를 잊지말것. 답#include #include #include #include #include #define ll long longusing namespace std;bool visited[100][8][8];int dy[9]={ -1,-1,-1,0,0,0,1,1,1};int dx[9]={ -1,0,1,-1,0,1,-1,0,1};bool set(pair& order,vector& board,int time){ if(order.first7||order.second7) return false; if(visited[time][order.first][order.second]) return false; if(board[order.first][ord.. 2025. 8. 8.
백준 23559 밥 C++ 요약밥을 잘먹으면 되는이야기 N일간의 최대치를 구해야하는데, 5000원 1000원이 있다. 1. 먼저 1000원으로 N일치를 채우고, 가진 돈에서 1000원 * N을 제한다.2. 5000원과 1000원의 차를 큐에 넣는다.3. 차가 제일 큰 수부터 가능한 예산에서 뽑는다. A_0, A_1, ... A_N을 뽑고, 그 다음에 ( B_k - A_k )를 뽑기에 최대값을 뽑을 수 있다. 답#include #include #include #include #define ll long longusing namespace std;int main(){ int n,x; cin>>n>>x; vector> v(n,pair()); for(int i=0;i>v[i].first>>v[i].second; } vecto.. 2025. 8. 8.