일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 회고
- 멀티스레드
- 멀티프로세스
- 짝선배 짝후배 매칭 웹 개발 회고
- teave
- wanted-preonboarding-course
- CS
- TypeScript
- CRUD w ReactQuery
- Spa
- refactoring
- error
- Today
- Total
목록Programming (25)
깊고 넓은 삽질

React Router loader | React Router 공식 문서의 loader 링크 loader란 react router에서 path에 등록한 element를 랜더링하기 이전에 호출되는 함수다. react router 6.4버전 이후의 data router을 사용했을 때 loader를 사용할 수 있다. ... createBrowserRouter([ { element: , path: "teams", loader: async () => { return fakeDb.from("teams").select("*"); }, children: [ { element: , path: ":teamId", loader: async ({ params }) => { return fetch(`/api/teams/${pa..

리액트 쿼리는 mutate 함수의 옵션 값으로 onSuccess 콜백을 설정할 수 있다. mutate가 성공했을 때 호출되는 콜백함수다. 나는 주로 mutate 성공 시 mutate와 연관되는 쿼리들의 쿼리키들을 invalidate하게 해서 데이터를 동기화할 때 사용한다. 그런데 가끔 mutate를 기다리지 않고 onSuccess를 호출하는 것 같은 때가 있다. 아래의 코드는 찜하기(favorite) 훅의 구현이다. 어딘가 잘못된 코드 ... const { data: favorites, ...rest } = useSuspenseQuery({ queryKey: [queryKey.favorite], queryFn: async () => { const res = await apiInstance.get(`/fa..

Tailwind CSS를 다운받으려고 공식 홈페이지에 들어갔는데 이상한 점이 있었다. 공식 홈페이지 예시에서 Tailwind CSS를 개발 종속성으로 다운받고 있었다. Tailwind CSS는 프로덕션 단계에서 빌드할 때 필요한거 아닌가라는 의문이 들었다. npm 공식 문서에서는 종속성과 개발 종속성을 다음과 같이 정의하고 있다. "dependencies": Packages required by your application in production. "devDependencies": Packages that are only needed for local development and testing. - npm Docs | Specifying dependencies and devDependencies in..

짧은 기간동안 다양한 사람들과 팀 프로젝트를 할 기회가 있었다. 각 프로젝트를 진행한 시간도 모두 2주 내외로 짧기도 하고 쉬는 기간도 짧아서 바로바로 회고록을 쓰지 못했다. 그래서 이 포스팅 하나에 각 프로젝트에 대한 짤막한 회고를 적고자 한다. 아래의 모든 프로젝트에서 팀장과 풀스택을 맡았다. 프로젝트의 결과물들은 현재 배포를 중단하였습니다. 시연 영상과 발표자료는 구글 드라이브 링크를 참고해주세요. 1. 침착맨 팬 페이지 만들기 프로젝트 (2주) Typescript, React, Express, MongoDB GitHub - calmdownmanfanpage/calmdownmanfanpage: 침착맨 팬페이지 침착맨 팬페이지. Contribute to calmdownmanfanpage/calmdow..

이 글은 MSA 혹은 Monorepo를 실제 서비스에서 구축해본 경험이 없는 초보 개발자의 글입니다. 정확하지 않은 정보가 있다면 피드백 부탁드립니다. 모노레포는 서로 다른 프로젝트를 하나의 레포에 관리할 때 사용하는 전략이다. 여기서 서로 다른 프로젝트는 어떤 의미일까? 만약 할 일 관리 앱에서 클라이언트와 서버가 있는데 이를 하나의 레포에서 관리한다고 하면 모노레포 전략이 필요할까? 모노레포의 의의 모노레포는 MSA의 단점에서 나온 전략이다. Micro Service Architecture는 서비스, 즉, 프로젝트가 각각 분리되어있는 환경이다. MSA는 어떻게 나왔을까? 다이어리 앱을 만든다고 가정해보자. 다이어리에는 할 일 관리와 달력이 필요하다. 다이어리 앱이 점점 고도화되면서 할 일 관리와 달력..

firebase는 필드 '하나'에서만 범위나 같지 않음 비교 할 수 있습니다. 헬스 보조자 매칭 웹 서비스를 만들고 있다. 우리 팀은 3명 모두가 프론트엔드 개발자다. 백엔드 개발자를 못 구했다. 이가 없으면 잇몸으로, 우리가 직접 백엔드를 구축할 수 있으나 짧은 시간 안에 완성도 있는 프로젝트를 위해 백엔드 구축을 외부 서비스에 위임하기로 협의했다. 여러 서비스 중 firebase를 선택했다. 많이 사용되는 것 같고 우리 서비스에는 복잡한 쿼리가 없다고 생각해 document db도 충분할 것 같았다. AND 쿼리만 지원한다면 소규모 서비스에선 문제없다고 생각했다. 트랜잭션이나 소켓통신도 지원한다고 해서 필요하다면 나중에 더 발전 시킬 생각으로 firebase를 선택했다. 사용자가 자신의 conditi..

Execute Asynchronous Functions in Parallel 비동기 함수들의 배열을 병렬적으로 실행한 결과를 배열로 반환하는 함수를 만드는 문제가 있었다. 문제의 조건으로 Promise.all을 사용하지 않아야 한다. leetcode 문제 링크 만들다보니 Promise.all의 병렬 처리에 대해 궁금점이 생겼다. 싱글스레드로 작동하는 자바스크립트 엔진이 어떻게 병렬처리를 할 수 있을까? Promise.all을 사용하면 병렬 처리가 가능하다는데, Promise의 콜백도 결국 콜스텍에서 실행되지 않나? Promise의 콜백은 언제 실행되나 Promise의 콜백은 Promise 객체가 생성될 때 즉시 실행된다. const promise = new Promise((resolve) => { con..
문제 붐붐붐내심장이뛰네 붐붐게리라익붐 위의 HTML에서 최상위 div 태그를 선택하려면 어떤 정규식을 써야 할까? 하위에 있는 자식 태그를 제외한 div태그의 여는 부분과 닫는 부분 만을 선택해야 한다. 아래의 사이트에서 정규식을 쉽게 테스트해볼 수 있다. https://regexr.com/ 챗지피티에게 마구마구 물어봐버리기 chatGPT에게 물어보니 다음과 같은 정규식을 뱉어냈다. /^|$/g 그런데 * 뒤에 ? 는 뭘까? ?를 없애도 테스트할 때는 같은 결과가 나오는 듯했다. 그러나 개행이 없다면 결과가 달라진다. Greedy and lazy quantifiers 우리가 방금 봤던 물음표는 lazy quantifier라고 한다. 정규표현식에서 quantifier(수량자)는 일치하는 인스턴스의 개수를 ..

프로젝트 개요 및 목표 SAT 시험을 대비하기 위한 웹앱 구현 실제 온라인 SAT 앱과 최대한 비슷한 경험 제공이 목표 선생님이 시험을 칠 학생들을 관리할 페이지도 구현 기한은 2주차에 시험페이지 프로토타입 제공, 4주차에 완성 페이지 제공 실제 SAT 앱에서 사용되는 용어 및 주요 기능 | 펼쳐서 보기 더보기 문제 단위 | Exam, Section, Module, Question Exam: 시험 set 단위. 가장 넓은 단위 Section: Exam의 하위 단위. Reading and Writing(영어)과 Math(수학)로 구분(과목이라고 생각하면 됨) Section이 바뀔 때 Break time이 존재(10분) Section마다 제한 시간이 다름 Module: Section의 하위 단위. 각 Sec..
프론트엔드 테스트 코드 작성에서 사용되는 보편적인 라이브러리가 RTL(React-Testing-Library)라고 한다. 해당 라이브러리를 사용하려고 보니 CRA로 만든 프로젝트에서는 기본적으로 환경설정이 되어 있지만 vite는 따로 설치하고 설정해줘야할게 많았다. React 테스트 환경 구축하기 create react app으로 react 애플리케이션을 생성하면 이런 문제에 관해 크게 고민할 일이 없으나, 전 cra에서 snowpack을 거쳐 요즘은 vite를 쓰고 있기에, 테스트 환경을 알아서 구축해줘야 합니다. 참고 marshallku.com 과정이 무척 복잡하기도 하고 각 설정이 뭘 의미하는지 찾아보다가 vitest라는 것을 발견했다. vite가 친절하게 why vite를 설명해준것처럼 vites..