안녕하세요 강사님! 현재 회사에서 사이드 프로젝트로 리액트 네이티브 프로젝트를 혼자서 진행해야 되는 상황이라 강의를 듣고 있습니다. 아직 기획만 나온 상황이고 디자인은 전혀 나오지 않은 상태입니다. 만약에 구현하다가 expo에서는 구현할 수 없는 기능이 생길수도 있는 부분에 대해서 미리 인지하고 싶은데, 혹시 expo로 구현할 수 없는 기능들에는 어떤 것들이 있는지 미리 알 수 있는 방법이 있을까요..?
안녕하세요 제로초님 CSS 관련해서 질문 드립니다. expo에서는 styleSheet와 react-native-safe-area-context 이용해서 css 작업하는걸로 강의에서 설명해 주셨는데 NativeWind(TailwindCss)를 모바일에서 사용하는건 어떻게 생각하시는지 궁금합니다 또, gluestack ui 라이브러리도 있는데 이것도 혹시 아시면 같이 이야기 해주시면 감사하겠습니다! StyleSheet 사용해서 하는게 나중에 최적화가 더 잘 될지 그런것도 고민이 되긴 합니다
이번 장에서 서버액션에 관한 내용을 들었는데 유지보수 측면에서 이 기술이 좋은 방법일까 하는 의문이 들었습니다! 아래는 이런 경우가 생기지 않을까 해서 적어둔 내용입니다. 서버액션으로 프론트에서 "a를 오른쪽으로 옮겨주세요" 라는 api를 백엔드에 만들었습니다. 그런데 기존의 백엔드 api에선 a는 왼쪽으로 옮기는 스크립트를 만들어놨는데 서버액션으로 인해 백엔드 서버엔 예정에 없던 동작이 발생했습니다. 그러다 나중에 a를 오른쪽으로 옮긴것에 대해 문제가 발생해서 백엔드 코드를 하루 꼬박 세면서 뒤져봤는데 오류를 못 찾았습니다 그런데 알고보니 프론트에서 서버액션으로 보내는 a를 오른쪽으로 옮겨라는 코드 때문에 발생한 문제였습니다. 이런 상황이 실무에서 발생할거 같다는 생각이 들어서 이 서버액션 기능을 실제로도 많이 사용하는지 궁금합니다!!
리엑트 객체 업데이트하기 강좌에 내용 중 질문입니다. const handleTitleChange = (e) => { setForm({ ...form, title: e.target.value, }); }; 이런 부분이 있는데요. ...form이 title:e.target.value 보다 앞서 나와야 정상 작동하더라구요. javascript 문법을 정확히 몰라서 그런건지 모르겠지만, 전개구문을 앞에 둬야 되는 이유(?)가 있을까요? 그냥 이렇게 사용하는거니 익숙해지면 되나요?
[3줄 요약] 비전공자로 10년 전 JSP, PHP 기반 개발 경험이 있으며, 현재는 헤드헌터로 활동 중입니다. React + Java(Spring) + MongoDB 기반으로 헤드헌터 업무에 활용할 수 있는 웹/모바일 플랫폼을 직접 개발하고자 합니다. 기술 공백과 최신 스택(Git 등) 부족으로 학습 방향 및 인프런/부트캠프 강의 추천이 필요합니다. [본문] 안녕하세요. 현재 40세, 비전공자(경영학과)이며, 현재는 헤드헌터로 활동 중입니다. 12년 전 독학과 오프라인 Java 강의(6개월) 수강 후 JSP 기반 웹 개발을 약 6개월, 또한 웹호스팅 업체에서 리눅스/윈도우 서버 운영과 PHP 유지보수를 약 1년간 경험했습니다. 퇴사 후 HTML5, CSS3, PHP, MySQL 기반으로 1인 창업 프로젝트(플랫폼)를 개발 경험도 있으나, 프론트엔드 실무 한계로 인해 학원과 인강으로 보완했지만 실무 수준에 도달하기는 어려웠습니다. 이후 창업을 접고 현재는 헤드헌터 일을 8년째 하고 있습니다. 최근 AI 도구(GPT, CURSOR 등)로 인해 1인 개발의 장벽이 많이 낮아졌다고 느꼈고, 사이드프로젝트로 다시 한번 플랫폼을 만들어보자는 생각에 도전하고 있습니다. 우선 서버는 아마존이나 네이버 등 1년 동안 무료로 제공하는 클라우드를 생각하고 있습니다. [프로젝트 방향] 목표: 헤드헌터 업무에 활용 가능한 게시판 중심의 웹 & 모바일 플랫폼 프론트엔드: React 백엔드: Java(Spring), 일부 Python (데이터 분석용) DB: MongoDB (NoSQL 기반) 기능: 기능: 엑셀 데이터 업로드/필터링, 검색, 태그, 동료와 공유 및 협업 플랫폼: PC 웹 + Android 우선 대응 [현재 느끼는 기술적 한계] 10년 이상의 개발 공백 → 신규 기술 감각이 거의 없음 Git, 협업 툴, 배포 등 실무적인 스택을 제대로 써본 적 없음 과거 창업 경험 덕에 HTML/CSS/JS 기본 흐름은 이해 주당 약 20시간 정도 학습 및 개발 시간 확보 가능 [현재 계획 중인 학습 우선순위] 모든 강의를 다 듣기엔 시간 제약 이 있으므로, 아래와 같은 것부터 선택적으로 수강 하려고 합니다. React 중심 프론트엔드 학습 – 프로젝트 기반으로 실습 위주 Spring 백엔드 학습 – REST API + MongoDB 연동 포함 Git, 배포, 협업 도구 등 실무 환경 익히기 Python 기초 + 데이터 분석 활용 (선택적) (Node.js나 웹 자동화는 현재는 후순위입니다) 시간상 모든 강의를 다 들을 수는 없어, 섹션별로 필요한 내용만 골라 수강할 수 있는 방식이 있는지 궁금합니다. 또한 혼자서 진행하는 프로젝트이기에, 코드 리뷰나 피드백 커뮤니티가 병행되는 부트캠프가 있다면 병행하고 싶습니다. 비슷한 경험을 하신 분이나, 인프런/코드잇 등에서 유익했던 강의나 커뮤니티가 있다면 조언 부탁드립니다 감사합니다. #사이드프로젝트 #React #JavaSpring #MongoDB #프론트엔드 #백엔드 #풀스택도전 #개발공백극복 #IT학습로드맵 #인프런강의추천 #코드잇추천
a.md 파일 만들고 u에서 a 이후 첫 커밋하는 건 잘 따라했는데요. 이후 두 번째 커밋 하는 방법 보여주실 때 a.md 파일 수정하니까 강사님 화면에서는 m으로 바뀌더라구요. 근데 저는 아무리 a.md 를 수정해도 m으로 바뀌지 않아서.. 챗지피티 통해 알아보니까, a.md 수정 후 "저장(ctrl+s)" 해야 m으로 바뀌는 거였군요.. 강사님은 자동 저장이 되어 있어서 그런걸까요?
우선 좋은 강의 만들어주셔서 정말 감사드립니다. 이번에 새로 출시된 강의 " eks를 활용한 spring 운영서버 배포(feat. devops의 모든것)" 이 강의 질문 할 곳이 없어서 여기다가 질문을 드립니다. 양해 부탁드립니다. 제가 쿠버네티스 지식이 없다보니 질문 드리는 건데요. 해당 강의 경우 무중단 배포 로 진행 되는 강의 인지 궁금 합니다. 아무래도 실전에서는 무중단 배포로 진행 해야 하는 경우 많아서 이렇게 질문 하네요. 감사합니다.
useEffect가 잘못짜면 디버깅이 골치아파서 관리에 신경을 쓰는데요. 제로초님의 useEffect 사용패턴이 궁금합니다 deps가 같은 것 끼리는 전부 묶어둔다 deps가 같아도 로직 범주가 다르면 분리한다 저는 보통 2번을 선호하는데 useEffect 많아져서 드러워집니다. 그렇다고 1번은 더 머리가 아픈데,, 제로초님의 기준이나 이 문제에 대한 나름의 best practice가 있으신지 궁금합니다
강의에서 말씀주시는 것 처럼 가급적 라이브러리를 쓰고 싶은데요. 제가 경력이 짧아서인지 라이브러리 서치에 애를 먹습니다 "가장 대중 픽" 찾는다고 할 때 어떤 방법으로 접근하시는지 궁금합니다 제 생각엔 다운로드 수..는 순위가 아닌 절대량이라 모호하고 이 기능은 요즘 이게 좋더라하는 얘기를 나누는 커뮤니티가 따로 있으려나요? npm이나 구글링해서 나오는 무수한 라이브러리들 다 비교하는건 거시기한 상황입니다
현재 군대 사지방에서 공부를 하고 있는 군인입니다. 여기서 깃허브 코드스페이스로 개발 공부를 하고 있습니다. iframe을 사용했을 때, live server로 포트를 열어 html을 열면 https 주소로 이동되고 iframe은 작동되지 않습니다. vscode 다운로드가 불가능해 로컬 환경에서 돌릴 수가 없는 상황인데 해결방법이 있을까요?
안녕하세요! 언제나 멋진 강의 감사드립니다. 다름이 아니라, 프로젝트를 Vercel에 배포하는 과정에서 아래와 같은 컴파일 실패 에러가 빌드 로그에서 검출되어서 이에 대해 여쭤보고 싶습니다. 화면 상에서는 src/app/(with-searchbar)/search/page.tsx 에 선언한 generateMetaData 함수가 Next.js 페이지의 요구조건을 충족시키지 못한다라는 내용으로 보여지는데요, 이런 경우에는 해당 요소에서 어떤 부분을 확인해볼 수 있을까요? 해당 페이지에 대한 코드도 함께 첨부해 드리겠습니다. \app\(with-searchbar)\search\page.tsx import BookItem from "@/components/book-item"; import BookListSkeleton from "@/components/skeleton/book-list-skeleton"; import { BookData } from "@/types"; import { delay } from "@/util/delay"; import { Metadata } from "next"; import { Suspense } from "react"; //index 페이지와 다르게 search 페이지는 QueryString과 같은 동적인 값에 의존하고 있기 때문에 static 페이지로는 설정할 수 없지만, 데이터 캐시를 최대한 이용하는 것으로 최적화 async function SearchResult({q}:{q:string}) { await delay(2000); const response = await fetch( `${process.env.NEXT_PUBLIC_API_SERVER_URL}/book/search?q=${q}`, {cache: "force-cache"} ); if(!response.ok){ return <div>오류가 발생했습니다 ...</div> } const books: BookData[] = await response.json(); return ( <div> {books.map((book) => ( <BookItem key={book.id} {...book} /> ))} </div> ); } //현재 페이지의 메타데이터를 동적으로 생성하는 함수 export async function generateMetaData({ searchParams, }: { searchParams: Promise<{q?: string}>; }): Promise<Metadata> { const {q} = await searchParams; return { title: `${q} : 검색 결과`, description : `검색어 ${q}의 검색 결과입니다`, openGraph: { title: `${q} : 검색 결과`, description : `검색어 ${q}의 검색 결과입니다`, images: ["/thumbnail.png"], } } } export default async function Page({ searchParams, }: { searchParams: Promise<{ q: string }>; }) { const {q} = await searchParams; return ( <Suspense key={q || ""} fallback={<BookListSkeleton count={3} />}> <SearchResult q={q ||""} /> </Suspense>); }