분류 전체보기 38

Nest.JS

프로젝트 진행하면서 아무래도 현재 사용중인 expressJS만으로는 백엔드 서버 구축이 힘들다는 결론에.. NestJS 도입을 결정했다!(도입이라 쓰고 이제부터 공부 시작으로 읽기 ^_^ㅎ)  왜 NestJS냐 하면1. 모듈화된 아키텍처로 확장과 관리를 유연하게 해주고2. 기본으로 Typescript를 지원해주기 때문에 탄탄하고 편리하게 사용할 수 있다.3. 또 프레임워크 자체적으로 의존성주입을 제공해준다고 함! express는 DI를 직접했어야 했다.4. REST API랑 GraphQL 모두 지원!5. 현재 프로젝트 준비단계에서 고려할 부분은 아니지만... (첫 서비스 계획이고 규모도 매우매우 작고 소중하기 때문에 😂)추후 MSA를 생각해봤을 때 NestJS는 MSA를 고려해 설계됐기 때문에 이 부분..

npm install 오류

npm verb node v20.11.0 npm verb npm  v10.2.4 npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: react-popper@2.3.0 npm ERR! Found: react@19.0.0 npm ERR! node_modules/react npm ERR!   react@"^19.0.0" from the root project npm ERR!   peer react@">=16.8.0" from @dnd-kit/accessibility@3.1.1 npm ERR!   node_modules/@dnd-kit/accessibility npm ERR!     @dnd-ki..

아마도 메모장 2025.02.07

next.js에서 local font를 사용하는 이유

1. 속도 향상구글 웹 폰트를 import하는 방식은 CDN을 통해 폰트 파일을 로드해야하기 때문에 네트워크 상태에 따라 로드 속도가 영향을 받을 수 있다. => 로컬 파일을 사용하면 네트워크 요청이 줄어들어 속도 개선2. 사용자 경험 개선폰트 로딩 속도가 빨라지면서, FOIT(Flash of Invisible Text)나 FOUT(Flash of Unstyled Text) 현상이 줄어든다. 간단히 말하면 폰트가 로드 되지 않아서 텍스트가 보이지 않거나 다른 폰트로 보이는(대체폰트를 지정해놓지 않으면 굴림체로 보인다던가..ㅎ) 현상을 줄일 수 있다.3. 캐싱 및 오프라인 접근성프로젝트에 포함된 로컬 폰트 파일은 브라우저 캐시에 저장된다. 그 이후 방문 시에는 로컬 캐시에서 불러올 수 있어 성능 향상에 도..

아마도 메모장 2024.11.08

[파이널 프로젝트] 개발 일지-1

📌 개발 진행 및 완료상황페이지 만들기 전에, 컴포넌트 먼저 만들자!  1. 체크박스 컴포넌트 만들기 (view파일 만들어서 테스트 해보기,,)[참고]수업 때 배운 modu-next 폴더의 views의 signUp.view와 components의 ClientCheckBox 2. 추천 검색어를 표시하는 재사용 가능한 칩스 컴포넌트 만들기  [이슈] App.tsx 파일에서 컴포넌트를 넣어주고 localhost에서 확인해보니 {term} 이라고 그대로 노출됨.. map부분 코드를 보니까 말도 안되게 label을 문자열로 쓰고 있었다 label까지 치고 엔터쳐서 자동완성 된 것 같다 😕 암튼 빼주니까 잘 나오는 걸 확인했고스타일도 적용까지 끝 !  3. 탑탭(TopTab) 컴포넌트 만들기 [이슈] 클릭된 탭..

동글동글 2024.11.05

안드로이드 에뮬레이터 expo 연결

까먹을까봐 써두기 📝📝 맥북이나 아이맥 쓰면 안드로이드 버전으로도, ios 버전으로도 pc에서 시뮬레이터 확인이 가능하지만나는 노트북은 삼성, 폰은 아이폰 쓰고 있어서.....ㅎ 개발환경을 아이폰에서 expo 앱으로 볼 수 있는데 오히려 안드로이드화면을 확인 할 수 없었다. 안드로이드 스튜디오의 에뮬레이터 다운받고, 시스템 환경 변수 설정해주고 이런 것들은 다 블로그에 잘 정리되어 있다근데 난 이 모든걸 다 해줘도 안드로이드 에뮬레이터랑 expo 연결이 안됐었는데,, 방금 해결했다! npx create-expo-app 프로젝트명프로젝트 폴더 생성한 다음에cd 프로젝트명해당 프로젝트 폴더로 이동한 다음 npm run android해줬더니 너 지금 2.31.1 쓰고 있는데 51.0.0 다운 받는거 추천함..

동글동글 2024.11.01

[React Native] FlatList의 keyExtractor 에러

ScrollView 대신에 FlatList 사용하기!return ( {props.data.map((item, index) => ( // key는 최상단에! ))} );이 부분을 FlatList를 사용해 구현하는데 FlatList에서는 keyExtractor로 키를 지정할 수 있다.그래서 ↓ 다음과 같이 작성했는데 keyExtractor부분에 에러가 발생함.. return ( index} ItemSeparatorComponent={ItemSeparatorComponent} renderItem={renderItem} /> );이 호출과 ..

동글동글 2024.11.01

Storybook

수업에서 배운 storybook을 이용해 todo 컴포넌트를 만들어보자!공식문서에 친절하게 todo 컴포넌트를 만들어보는 튜토리얼이 제공된다. 그러나 jsx 파일이 기준이고, 이전 버전이라 최신버전과 tsx를 사용하고 있는 내 작업 환경에서는 수정해야하는 부분이 몇 가지 있었다,, 튜토리얼 참고https://storybook.js.org/tutorials/intro-to-storybook/react/ko/simple-component/ 1.  Task.tsx 와 Task.type.tsx 파일 생성// 공식문서 튜토리얼에서 알려주는 Task.jsx import React from 'react';export default function Task({ task: { id, title, state }, onAr..

TanStack Query(React Query)

📌 탄스택 쿼리서버로부터 데이터 가져오기, 데이터 캐싱, 캐시 제어 등 데이터를 쉽고 효율적으로 관리할 수 있는 라이브러리.React Query라는 이름으로 시작했지만, v4부터 Vue나 Svelte 등의 다른 프레임워크에서도 활용할 수 있도록 기능이 확장되며 TanStack Query라는 이름으로 변경되었다. 1. 탄스택 쿼리의 특징데이터 가져오기 및 캐싱동일 요청의 중복 제거신선한 데이터 유지무한 스크롤, 페이지네이션 등의 성능 최적화네트워크 재연결, 요청 실패 등의 자동 갱신옵션에 쿼리 키(queryKey) 필수!!  2. useQuery가장 기본적인 쿼리 훅, 컴포넌트에서 데이터를 가져올 때 사용const 반환 = useQuery(옵션)   useQuery 를 사용해 JSONPlaceholder..

[React 연습] 간단한 카운터 & Todo 만들기

아무리 생각해도 리액트 공부 시작하면서 코드를 직접 쳐보기 보다는 수업 때 배운거 뜯어보기만 한 것 같아서코드 익힐 연습 겸 아주 기본적인 카운터 (그냥 +1, -1, 리셋만 되는 거)랑 Todo 리스트 (근데 이제 추가와 삭제만 있는...^^ㅎ)를 만들어봤다! 스타일 적용도 없고 그냥 정말 간단하게... 코드 작성 익히는 거에만 초점을 맞췄다 하하  📌카운터 만들기// Counter.tsx import { useState } from 'react';const Counter = () => { const [count, setCount] = useState(0); // useState 훅을 사용해 count라는 변수를 생성하고, 초기값을 0으로 설정 // setCount는 count값을 업데이트하..

상태 관리 라이브러리 Recoil

📌 Recoil React를 위한 상태관리 라이브러리 💡 상태관리란? 애플리케이션의 상태를 효율적으로 관리하고 업데이트하는 과정을 의미.상태는 사용자의 입력, 서버의 응답, UI의 현재 상태 등 데이터와 관련된 모든 정보를 포함한다.  1. 꼭 Recoil 같은 상태 관리 라이브러리를 써야할까? 리액트에 내장 된 상태관리를 위한 훅인 useState ⇒ props를 이용해 부모 컴포넌트에서 자식 컴포넌트로 값을 전달해야하기 때문에 props drilling이 생길 수 있다.이를 개선하기 위해 만들어진 것이 ➰리액트의 Context API ⇒ Context의 값이 변경되면 이 값을 사용하는 모든 컴포넌트가 리렌더링 됨. 불필요한 리렌더링이 발생할 수 있다. 부모 컴포넌트에서 자식 컴포넌트로 props를..