수코딩
@sucoding
수강생
5,053
수강평
295
강의 평점
4.9
수코딩은 온라인과 오프라인을 병행하면서
코딩을 가르치는 활동을 하고 있습니다.
다년간의 오프라인 강의 경험을 바탕으로,
더 많은 사람들이 코딩을 쉽고 재미있게 배울 수 있도록
매일 고민하고, 끊임없이 노력하고 있습니다.
현재까지 다음과 같은 4권의 책을 출판하며
프런트엔드 강의 분야를 선도하고 있습니다:
또한, 유튜브 채널을 통해 다양한 무료 강의도 제공하고 있습니다.
👇 지금 바로 방문해 보세요
[유튜브 채널 링크]
다양한 할인 소식 또한 공식 홈페이지에서 빠르게 확인하실 수 있습니다.
👇 지금 바로 방문해 보세요
[공식 홈페이지 링크]
강의
로드맵
전체 2수강평
- 타입스크립트로 배우는 Next.js 16+ 완전 정복 : 기초부터 최신 아키텍처까지
- 타입스크립트로 배우는 Next.js 16+ 완전 정복 : 기초부터 최신 아키텍처까지
- 타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
- 타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
게시글
질문&답변
useOptimistic 실전-1 useState
안녕하세요.해결하셨다니 다행입니다. 😀
- 0
- 2
- 14
질문&답변
cacheLife에 대한 질문입니다
안녕하세요.말씀해주신 것처럼 3월 3일에 스펙이 변경되어,현재 default 프리셋의 expire 값은 never로 설정되어 있습니다.따라서 이해하신 바와 같이, 해당 값은 만료되지 않으며 revalidate에 의해서만 주기적으로 갱신된다고 보시면 됩니다.
- 0
- 1
- 17
질문&답변
margin, padding 사용 시기
안녕하세요.심플 랜딩 페이지를 구현하는 과정에서 느끼신 것처럼 margin과 padding은 겉보기 결과가 비슷해 보일 때가 많지만, 실제 역할과 사용 목적은 분명히 다릅니다. 이 둘의 차이를 이해하면 언제 어떤 속성을 써야 할지 자연스럽게 판단할 수 있습니다.우선 h1과 h2 사이 간격을 만들 때 margin-bottom: 40px과 padding-bottom: 40px이 비슷하게 보이는 이유는, 두 경우 모두 결과적으로 아래 요소(h2)를 아래로 밀어내기 때문입니다. 하지만 의미적으로는 차이가 있습니다. margin은 요소의 바깥 여백을 조절하여 다른 요소와의 거리를 만드는 속성이기 때문에, 제목과 제목 사이처럼 요소 간 간격을 만들 때는 margin을 사용하는 것이 올바른 방식입니다. 반면 padding은 요소 내부의 여백을 늘리는 것으로, 콘텐츠와 경계 사이의 공간을 확보할 때 사용하는 속성입니다.다음으로 margin-top: 380px이 기대와 다르게 동작하고 padding-top은 정상적으로 보였던 이유는, CSS의 margin collapse(마진 병합) 현상 때문입니다. 이는 부모 요소와 자식 요소의 위쪽 또는 아래쪽 margin이 겹칠 때 하나로 합쳐지는 동작으로, 특히 부모에 padding이나 border가 없을 경우 자식의 margin-top이 부모 바깥으로 튀어나가 버릴 수 있습니다. 이 때문에 실제로는 요소가 내려가지 않은 것처럼 보이는 상황이 발생합니다. 반면 padding은 항상 요소 내부에서 처리되기 때문에 이러한 영향을 받지 않고 의도한 대로 동작합니다.결론적으로 기준을 정리하면, 요소와 요소 사이의 간격을 조절할 때는 margin을 사용하고, 요소 내부의 공간을 조절하거나 콘텐츠와 경계 사이 여유를 줄 때는 padding을 사용하는 것이 적절합니다. 다만 margin-top이나 margin-bottom이 예상과 다르게 동작할 경우에는 버그라기보다 margin collapse 현상일 가능성이 크므로, 부모 요소에 padding을 주거나 display: flex와 같은 레이아웃 방식을 사용하는 등 구조적인 해결 방법을 고려하는 것이 좋습니다.이 기준을 익혀 두시면 단순히 “어느 쪽이 더 잘 먹히는가”가 아니라, “의미에 맞는 속성”을 선택하는 방향으로 코드를 작성할 수 있게 됩니다.
- 0
- 2
- 20
질문&답변
(제보) 쿠키를 브라우저 개발 환경에서 직접 삽입했을 때 나오지 않는 현상
안녕하세요 😀코드적인 처리를 통해서 직접 심으셔도결과는 같습니다.잘되시는 방법으로 진행하시면 되겠습니다.감사합니다!
- 0
- 2
- 38
질문&답변
discord 초대장 갱신이 필요한거같습니다.
안녕하세요. 제가 최초 공유드린 링크가 7일 제한이 있다는 것을 몇 일전에 알게 되어서모든 강의에 새로운 링크를 다시 올려 둔 상태입니다.https://discord.gg/2ByaMfUumy위 링크로도 접속이 불가능하실까요?확인 부탁드리겠습니다.감사합니다!
- 0
- 1
- 41
질문&답변
디스코드 채널 초대 링크
안녕하세요!디스코드 운영은 처음이라서 초대 링크가 7일 유효기간이 있는 것을 몰랐네요 ㅠ다시 생성해서 공유드립니다.https://discord.gg/2ByaMfUumy감사합니다!
- 0
- 1
- 52
질문&답변
revalidatePath 질문 있습니다.
안녕하세요.이 내용을 이해하려면 먼저 몇 가지 배경 지식이 필요합니다.우선 revalidatePath()는 데이터를 즉시 무효화하는 함수가 아닙니다. 해당 경로는 다음 방문 시점에 재검증되도록 설정하는 함수입니다.다만, 서버 액션(Server Action) 안에서 revalidatePath()를 호출하면, 서버 액션이 내부적으로 router.refresh()와 유사한 동작을 수행하기 때문에 같은 페이지에 머물러 있어도 데이터가 즉시 변경된 것처럼 보일 수 있습니다. 이 점을 먼저 이해하는 것이 중요합니다.revalidatePath 함수는 두 개의 매개변수를 받습니다.첫 번째는 경로(path)이고, 두 번째는 무효화 타입(type)입니다.두 번째 매개변수가 "layout"인 경우, 첫 번째 매개변수로 전달한 경로에서 사용 중인 layout.tsx를 사용하는 모든 경로가 함께 무효화됩니다. 따라서 해당 레이아웃을 공유하는 페이지들의 데이터가 일괄적으로 갱신됩니다.반면, 두 번째 매개변수가 "page"인 경우에는 첫 번째 매개변수에 해당하는 경로의 page.tsx와 그 페이지가 사용하는 layout.tsx가 무효화 대상이 됩니다.예를 들어, /about 경로에서 revalidatePath("/about", "page")를 호출하면 /about/page.tsx와 해당 페이지가 사용하는 /about/layout.tsx가 무효화됩니다. 서버 액션에서 호출한 경우에는 즉시 반영된 것처럼 보이게 됩니다.하지만 /about/detail 경로에서 revalidatePath("/about", "page")를 호출하면 상황이 달라집니다. 현재 위치한 경로와 첫 번째 인자로 전달한 경로가 다르기 때문에, 즉시 무효화가 일어나지 않고 다음에 /about을 방문할 때 재검증이 수행됩니다. 따라서 /about/detail에서는 변화가 보이지 않지만, 이후 /about으로 이동하면 /about/page.tsx의 데이터가 새로 갱신됩니다.여기서 한 가지 더 이해해야 할 부분은 라우터 캐시(router cache)입니다./about/page.tsx와 /about/detail/page.tsx는 모두 공통으로 /about/layout.tsx를 사용합니다. 이 레이아웃 파일은 기본적으로 라우터 캐시에 의해 재사용됩니다. 즉, 한 번 렌더링되면 특별한 경우(예: router.refresh() 호출)가 아니면 다시 렌더링되지 않습니다.따라서 /about 경로에서 무효화를 수행하면 서버 액션이 router.refresh()와 같은 효과를 내므로 about/layout.tsx도 함께 재렌더링됩니다.그러나 /about/detail에서 /about 경로를 무효화한 경우에는 즉시 아무 일도 일어나지 않다가, 이후 /about으로 이동하면 그때 재검증이 이루어집니다. 다만 이때도 layout.tsx는 라우터 캐시에 의해 재사용되기 때문에 값이 바로 변경되지 않을 수 있습니다.하지만 브라우저를 새로고침하면 라우터 캐시가 초기화되므로, 그 시점에는 about/layout.tsx 역시 함께 무효화되어 데이터가 갱신되는 것을 확인할 수 있습니다.이처럼 revalidatePath의 동작은 서버 액션 여부, 현재 경로, 무효화 타입, 그리고 라우터 캐시의 동작 방식에 따라 다르게 보일 수 있습니다.더 궁금한 점이 있다면 언제든지 질문해주세요.
- 0
- 2
- 50
질문&답변
수업자료
안녕하세요!해당 예제 코드는 [섹션 4. 컴포넌트와 Props] - [29. 수업 예제 코드 다운로드 및 참고하는 법] 에서 확인 및 자료 다운로드 가능합니다!잘 안되시면 말씀해주세요!감사합니다.(사진)
- 0
- 2
- 47
질문&답변
MainLayout이 중첩되어 뜨는 문제
안녕하세요.개발자 도구를 직접 열어 트리 구조까지 확인해보셨다니 정말 인상적입니다.우선 궁금해하신 부분에 대해 먼저 답변드리면, 리액트 개발자 도구에 표시되는 단순한 라벨링 차이일 뿐 실제로 컴포넌트가 두 번 실행되는 것은 아니므로 걱정하지 않으셔도 됩니다.조금 더 설명드리자면, DevTools는 우리가 작성한 컴포넌트만 보여주는 것이 아니라 Next.js가 내부적으로 라우팅을 위해 감싸는 래퍼 컴포넌트들까지 함께 표시합니다./ 경로의 경우 (with-layout)이 Header와 Footer를 포함한 레이아웃이기 때문에, Next.js 내부 래퍼와 실제 레이아웃이 함께 보이면서 WithLayout이 두 번 나타나는 것처럼 보일 수 있습니다.반면 /login의 AuthLayout은 children을 그대로 전달하는 비교적 단순한 구조이기 때문에, 트리에서는 AuthLayout 한 번과 OuterLayoutRouter(Next.js 내부 래퍼) 형태로 표시됩니다.따라서 이는 화면이 실제로 두 번 렌더링되는 문제가 아니라 DevTools의 표시 방식 차이에서 비롯된 현상입니다.추가로 만약 (auth)/layout.tsx 파일도 단순하게 children만 렌더링하는 게 아니라 다른 태그를 추가해보면 똑같이 중첩된 것처럼 보인답니다 😀(예를들면 아래처럼..)export default function AuthLayout({ children, }: Readonly) { return ( ddd {children} ); }
- 0
- 2
- 56
질문&답변
FormEvent가 deprecated 되었다고 합니다.
안녕하세요!해당 영상은 촬영 시점이 비교적 최근임에도 불구하고, 그 사이(26.1.26일)에 FormEvent가 deprecated 처리되었네요… 😂deprecated된 이유는 인프런 AI 인턴이 남긴 설명과 동일하니, 해당 내용을 참고해주시면 좋을 것 같습니다.앞으로는 아래와 같이 사용해주시면 됩니다.SubmitEvent감사합니다
- 0
- 2
- 117





