winterlood
@winterlood
受講生
36,700
受講レビュー
2,516
講義評価
4.9
웹 프론트엔드 한 입 크기로 잘라먹어 볼까요?!
안녕하세요 🙇♂
저는 무엇이든 쉽고 재미있게 설명할 방법이 있다고 믿는 사람이자
세상에서 가장 따뜻한 개발자 커뮤니티를 만들고자 하는 사람입니다.
📚 도서
📹 강의
한 입 크기로 잘라먹는 Next.js
한 입 크기로 잘라먹는 타입스크립트
한 입 크기로 잘라먹는 리액트
講義
受講レビュー
- 一口サイズで学ぶReact.js:基礎から実践まで
- 一口サイズで学ぶTypeScript(TypeScript)
- 一口サイズで学ぶReact.js:基礎から実践まで
投稿
Q&A
취약점 제거시 nestjs 버전 문제가 생길까요?
안녕하세요 Sec님 이정환입니다.문제가 발생하신다면 그때 원상복구 하셔도 무방할 것 같습니다. API 엔드포인트가 모두 잘 동작한다면 크게 문제될 일은 없어보입니다
- 0
- 1
- 26
Q&A
모달 UI 관련 질문
안녕하세요 keenco님 이정환입니다.이런 경우 모달내부 요소의 CSS 속성에 overflow-scroll 등을 추가해 스크롤바를 통해 해결할 수 있습니다. 강의에서도 아래에 보이시는 것 처럼 스크롤바를 통해 해결했으니 강의 코드를 참고해보셔도 좋을 것 같습니다 😀(사진)
- 0
- 1
- 19
Q&A
안녕하세요 이정환님!
안녕하세요 이정환입니다.우선 취업 준비 화이팅입니다!! 다만 저는 현재 1:1 개인 멘토링은 진행하지 않고 있습니다 🥲🥲🥲
- 0
- 1
- 17
Q&A
eslint.config.mjs 내 rules 어떻게 설정 하나요?
안녕하세요 김주일님 이정환입니다.넵! 고렇게 작성하시면 됩니다 😀
- 0
- 1
- 27
Q&A
[book]/[id]/page.tsx 모달 띄울 때 성능 하락 현상은 ReviewList를 불러오면서 발생하는 문제 같습니다.
안녕하세요 이인기님 이정환입니다.맞습니다. ReviewList 컴포넌트의 렌더링이 꽤 오래걸리긴 하더라구요 🥲다만 실습 환경에서는 리뷰 데이터가 많아야 10~100개 정도라서, “수십 개의 데이터를 한꺼번에 가져와서 생기는 성능 이슈일 것 같다”는 가정이나, 페이지네이션 API를 학습 겸 /review/book/${bookId}를 고도화하자는 제안은 이번 케이스의 원인/해결책과는 조금 결이 다를 수 있을 것 같습니다.(10 ~ 100개 수준의 레코드를 단순 조회하는 작업은 보통 네트워크 전송량도 크지 않고, DB 입장에서도 인덱스(예: bookId 기준)가 잡혀 있는 한 응답 시간이 병목이 되기 어렵습니다.) 실제로 느리게 느껴지는 이유는 리뷰 개수가 많아서라기보다는, 해당 페이지가 정적으로 빌드된 결과를 바로 보여주는 구조가 아니라 매 요청마다 데이터를 다시 가져오는 Dynamic 렌더링으로 동작하기 때문입니다. 특히 데이터 소스가 Supabase이고, 프리티어 환경에서는 트래픽 상황이나 인스턴스 리소스에 따라 응답 시간이 일정하지 않거나 상대적으로 느려질 수 있어서, 같은 양의 데이터라도 “항상 바로 온다”는 보장이 없습니다. 결국 병목의 핵심은 “수십 개 데이터를 한 번에 가져왔기 때문”이라기보다, “요청 시점에 서버에서 실시간으로 데이터를 받아와야 하는 구조 + 외부(Supabase) 응답 지연 가능성” 쪽에 더 가깝다고 보는 편이 자연스럽습니다.가장 간단한 해결책으로는 해당 컴포넌트를 Suspense로 감싸서, 데이터가 준비되기 전까지는 fallback UI를 먼저 보여주도록 만드는 방법이 있습니다. 혹은 인터셉트 라우트로 제공되는 모달이라면, 모달의 컨텐츠 영역(리뷰 목록이 렌더링되는 부분)을 아예 Suspense로 감싸면 로딩 시간이 실제로 줄어들지는 않더라도, 사용자가 즉시 로딩 상태를 확인할 수 있어서 “모달이 멈춘 것처럼 보이는 체감”은 확실히 줄어듭니다.
- 0
- 2
- 22
Q&A
Node.js 설치에 관한 질문입니다.
안녕하세요 이정환입니다.강의에서 안내드렸듯 LTS 버전이라면 숫자 무관하고 설치하셔도 됩니다 😀
- 0
- 2
- 20
Q&A
함수 타입 호출 시그니처
안녕하세요 루룸님 이정환입니다.함수 타입 표현식과 호출 시그니쳐의 가장 핵심적인 차이점은 함수 타입 표현식은 해당 타입을 함수로 정의한다는 것이고, 호출 시그니쳐는 해당 타입을 객체로 정의한다는 것 입니다.자바스크립트에서는 함수 또한 객체의 일종으로 분류되기 때문에 일반적인 객체가 그렇듯 프로퍼티를 가질 수 있습니다. 타입스크립트에서 호출 시그니처 문법을 사용하는 이유도 바로 이런 특성(함수도 프로퍼티를 가질 수 있다)을 타입 레벨에서 자연스럽게 표현하기 위해서인데요. 함수 타입 표현식은 “어떤 인자를 받아 어떤 값을 반환하는 함수”라는 호출 형태를 간결하게 나타내는 데 적합한 반면, 호출 시그니처는 여기에 더해 label 같은 추가 프로퍼티를 함께 정의하거나, 여러 형태의 호출을 오버로드처럼 묶어서 표현해야 할 때 특히 유용합니다. 즉, 두 표현은 모두 “호출 가능하다”는 의미를 담고 있지만, 호출 시그니처 쪽이 객체 타입을 기반으로 하기 때문에 확장성이 더 크다고 이해하시면 됩니다.
- 0
- 1
- 18
Q&A
Live Server 실행 후 브라우저 자동 활성화 방법
안녕하세요 망나뇽님 이정환입니다.오잉 혹시 설치하신 라이브 서버 확장 프로그램이 아래 사진으로 첨부해 드린 항목이 맞을까요!?유사한 항목이 여러개 있어서 확인 부탁드립니다!(사진)새해 복 많이 받으세요 🙇♂
- 0
- 2
- 44
Q&A
Supabase 테이블 생성 시 content 컬럼 문의 드립니다.
안녕하세요 뚜루뚜루님 이정환입니다.우선 NULL과 EMPTY 둘 중 무엇으로 하셔도 기능 동작에는 큰 지장 없습니다. 그러나 가급적 타입의 기본값 (스트링이라면 빈 문자열, 넘버라면 0)을 사용하는게 안전하기 때문에 가능하시다면 EMPTY로 설정하시는 걸 권장드립니다 😀
- 0
- 1
- 33
Q&A
캐시 데이터 다루기 - 낙관적 업데이트(2)에서 질문
안녕하세요 김재홍님 이정환입니다.우선 질문을 제가 제대로 이해했는지부터 확인해보겠습니다. "createTodo의 리턴값을 활용하면서 Todo를 생성했을 때, 캐시 무효화를 해서 데이터가 많은 경우 서버에 부하를 주는 코드를 개선했었었는데"위 질문은 useCreateTodoMutation의 onSuccess 이벤트 핸들러에서 발생한 일을 말씀하신게 맞을까요?추가로 invalidateQueries 함수를 호출한 onSettled가 useUpdateTodoMutation의 이벤트 핸들러를 말씀하시는 걸까요? 위 두개가 맞다면 네, 말씀하신 방향이 맞습니다. useUpdateTodoMutation처럼 체크박스 토글처럼 “특정 Todo 하나만 바뀌는” 상황에서는 전체 리스트 캐시(QUERY_KEYS.todo.list)를 매번 invalidateQueries로 날려서 다시 받아오는 것보다, 지금 코드처럼 해당 Todo의 캐시만 딱 집어서 수정(setQueryData) 해주는 방식이 훨씬 효율적입니다. 네트워크 요청도 줄고, 데이터가 많아질수록 성능/UX 측면에서 이점이 커집니다.다만 지금 단계에서는 데이터가 완전히 “정규화”되어 있지 않다 보니, 리스트 캐시와 개별 캐시를 동시에 깔끔하게 유지하려면 조금 불편한 지점이 생길 수 있습니다. 그래서 강의에서는 우선 토글처럼 단순한 케이스는 “부분 업데이트”로 처리하고, 이후에 정규화 전략으로 캐시를 더 안정적으로 관리하는 방식을 다루게 됩니다. 정규화 전략은 4.12, 4.13 챕터에서 다루니 뒷 내용까지 수강하시면 좋을 것 같습니다.
- 0
- 2
- 35




