안녕하세요! 서강대학교 컴공과를 졸업하고 현재 대학원 진학을 준비 중인 학생입니다.
고등학교 때 우연히 풀스택 웹 개발과 파이썬을 활용한 자동 매매를 시작하면서 프로그래밍에 빠지게 되었습니다.
그 후 다양한 프로젝트와 프로그래밍 과외활동을 경험하며 실력과 노하우를 공유했습니다. 이러한 경험을 통해 프로그래밍을 처음 접하는 분들에게도 "이렇게 쉬울 수 있구나!"라는 느낌을 줄 수 있는 강의를 만들고자 노력하고 있습니다.
실용적인 예제와 친근한 설명으로 여러분의 학습을 돕고 싶습니다. 감사합니다.
강의
로드맵
전체 1수강평
- React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드
- Firebase 시리즈 #1: 소셜 로그인·휴대폰·위치 인증 완벽 가이드
- React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드
- React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드
- React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드
게시글
질문&답변
모바일 화면 전환
안녕하세요. 질문 주셔서 감사합니다!컴퓨터 크롬 및 브라우저에서 모바일 화면을 보는 방법은 다음과 같습니다.1) 홈페이지 화면에서 Ctrl + Shift + i 를 입력하시면 오른쪽에 개발자 도구가 뜨게 됩니다.(사진) 1-1) 만약 무반응이라면 엣지 브라우저 기준으로 오른쪽 상단에 ... 클릭 후 기타 도구 -> 개발자 도구를 눌러주세요!(사진)2) 개발자 도구의 상단 탭의 태블릿 & 모바일 아이콘을 클릭합니다.(사진)모바일 화면 전환이 가능합니다!(사진) 질문 남겨주셔서 감사드리며 추가 질문이 있으실 경우 언제든지 문의 바랍니다.감사합니다!
- 0
- 1
- 11
질문&답변
tailwind css 설치 위치
안녕하세요. 질문 남겨주셔서 감사합니다!질문을 다시 정리해보면 1. devDependencies와 dependencies 차이2. 프레임워크나 설정을 다른 쪽 프로젝트로 옮길 때 복붙하면 되는지1번 질문에 대해 먼저 설명 드리기 전에 npm install명령어 옵션에 대해 먼저 설명 드리겠습니다.npm install -D 아니면 npm install --save-dev 처럼 뒤에 해당 옵션이 붙는 경우에는 devDependencies에 넣으라는 뜻입니다.반대로, 아무런 옵션 없이 npm install만 사용하게 되면 dependencies 로 설치가 될 것 입니다.따라서 1-2 강의에서는 -D 옵션이 추가로 사용되었기에 devDependencies로 설치가 되었고 Tailwind CSS 4.1의 공식문서에는 아무런 옵션이 없었기 때문에 dependencies 에 설치가 되었습니다.구글링을 하셔서 얻으신 정보처럼 dependencies는앱(=프로젝트)이 실제로 실행될 때 필요한 라이브러리를 명시한 것이고, devDependencies는앱을 개발하거나 빌드할 때만 필요한 도구만 명시한 항목을 의미합니다.강의 후반부부터 axios라는 패키지를 통해 백엔드와 API 통신을 하게 됩니다. 해당 패키지는 배포 이후에도 실제로 사용되는 패키지이기 때문에 dependencies 항목에 추가가 될 것이고,반대로 TailwindCSS도 배포 이후에도 사용되지 않나요? 라고 질문 하실 수 있지만, TailwindCSS는 배포된 웹사이트에서 “결과물(CSS)”은 사용되지만, Tailwind 자체 코드는 사용되지 않기 때문에 devDependencies로 설치해도 괜찮습니다.이렇게 둘을 나눠서 관리하는 이유는 배포 시 불필요한 개발 도구를 제거해 용량을 줄이는 것이 가장 큰 핵심이라고 할 수 있겠습니다! 2번 질문에 대해서 답변 드리겠습니다.네, 맞습니다! 패키지를 설치하시면 동일한 폴더 위치에 node_modules라는 폴더가 새로 생성 되었을 것입니다. 이 폴더 안에 실제 패키지 코드들이 있습니다. package.json 파일은 단순히 이 프로젝트에서 어떤 패키지가 사용되었고 해당 버전은 무엇인지 명시한 설계도라고 보시면 되고 따로 node_module를 전체 복사하실 필요 없이 설계도(=package.json)와 홈페이지 코드만 갖고 다른 컴퓨터로 옮기셔서 npm install 명령어 한번 만으로 프로젝트 복사 붙여넣기가 가능합니다! 도움이 되셨길 바라며 추가 질문이 있으시면 언제든지 문의 바랍니다. 감사합니다!
- 0
- 1
- 16
질문&답변
결제기능 관련
안녕하세요. 결제 기능 질문 주셔서 감사합니다.저희 강의는 회사 웹사이트 구축을 주제로 하고 있으며, 회사 소개, 공지사항 작성, 문의글 등록 등의 기능에 중점을 두고 있습니다. 이러한 컨셉 상 결제 시스템까지 포함시키는 것은 웹사이트의 목적과는 다소 맞지 않아, 현재 커리큘럼에는 포함되어 있지 않습니다.또한, 결제 기능은 강의 가격 책정에 있어서 만약 포함이 되는 경우 수강료 인상이 불가피하다는 점으로 인해 조심스럽게 고려하고 있습니다. 다만, 최근 출시된 ‘TalkAndVote’ 강의에서는 결제 기능이 포함된 프로젝트를 다루고 있으니, 결제 시스템 구현이 필요하신 분들께서는 해당 강의를 참고해 주시면 감사하겠습니다.감사합니다!
- 0
- 2
- 21
질문&답변
vite 설치 관련 문의
안녕하세요. 질문 주셔서 감사합니다!npm create vite@latest . --template 입력 시 아래와 같은 화면이 뜨게됩니다.(사진)저희는 React 개발이기에 키보드 상하키를 이용해 React를 선택합니다.(사진)JavaScript VS TypeScriptJavaScript는 동적 타입 언어로, 변수에 어떤 타입이 들어갈지 정해져 있지 않아 빠르게 개발을 시작할 수 있지만, 런타임 오류가 발생하기 쉽습니다. 반면, TypeScript는 정적 타입 언어로 컴파일 시점에 타입을 검사할 수 있어 코드의 안정성과 유지보수성이 높습니다. 처음 개발에 입문하시는 수강생 분들께서는 JavaScript로 시작하셔서 문법에 익숙해지시면 TypeScript도 같이 배우시는 것을 추천드립니다. SWC가 포함된 템플릿과 포함되지 않은 템플릿의 차이점SWC가 포함된 템플릿은 코드 실행 속도와 개발 속도가 빠릅니다. SWC는 코드를 변환해주는 도구인데, 기존보다 훨씬 빠르게 작동해서 개발 중 저장하거나 새로고침할 때 더 빠르게 반영됩니다. 큰 프로젝트일수록 SWC의 빠른 속도가 유리합니다.반면, SWC가 포함되지 않은 템플릿은 속도가 조금 느리지만, 다양한 기능과 호환성이 더 좋습니다.저희 강의에서는 SWC가 포함되지 않은 템플릿으로 진행했었습니다. 이 방식은 속도는 다소 느릴 수 있지만, 호환성이 더 높고 설정이 단순해서 학습용이나 기본 프로젝트에는 적합합니다. 따라서 나중에 규모가 큰 프로젝트를 하거나 더 빠른 개발 환경이 필요할 경우, SWC 포함 템플릿을 사용하는 것도 좋은 선택입니다. 감사합니다.
- 0
- 1
- 15
질문&답변
배포관련 질문드립니다.
안녕하세요. 질문 주셔서 감사합니다!공유해주신 GitHub 및 배포 링크 확인했습니다. 업무게시판 기능은 정상적으로 백엔드 연동이 되고 있지만, 관리자 로그인(admin)에서 문제가 발생한다고 하셨네요.먼저 확인 결과, 관리자 로그인 요청 시 500 Internal Server Error가 발생하고 있으며 이는 백엔드에서 로그인 관련 로직을 진행 중 발생한 에러인 것을 짐작할 수 있습니다.그 후, 백엔드 라우터 폴더의 user.js에서 오타를 발견했습니다. // user.js 55줄부터 if (!user) { return res.status("401").json({ message: "사용자 없음" }) } 로그인 코드 중 res.status("401")처럼 문자열로 상태 코드를 반환하고 있어, 이는 Express 내부에서 오류를 유발할 수 있습니다. "401"이 아닌 숫자형 값 401로 수정을 하시면 정상적으로 로그인이 되는 것을 확인하실 수 있습니다. if (!user) { return res.status(401).json({ message: "사용자를 찾을 수 없습니다." }); }나머지 코드들도 숫자형이 아닌 문자형으로 되어있다면 수정 부탁드립니다! 강의 중 제가 작성한 코드에서 상태 코드를 문자열("401")로 입력했던 오타 때문이었습니다. 제 실수로 인해 혼란을 드려 죄송합니다. 회사 사이트 GitHub 예제 코드도 수정 완료 했습니다. 앞으로는 이런 부분도 더 꼼꼼히 안내드릴 수 있도록 하겠습니다.그리고 또 작성하신 코드에서 에러가 발생할 만한 코드가 있는 것 같아 안내드립니다.// App.jsx 57줄 const response = await axios.post(`${import.meta.env.VITE_API_URL}/auth/login` 토큰 검증을 하기 위해서는 login이 아닌 verify-token으로 변경을 하셔야 정상적으로 로그인이 가능합니다! const response = await axios.post("http://localhost:3000/api/auth/verify-token", 추가 질문이 있으시면 언제든지 문의 주시면 감사하겠습니다! 감사합니다.
- 0
- 3
- 34
질문&답변
PUT, DELETE 등의 http 메소드 질문있습니다.
안녕하세요! 질문 주셔서 감사합니다 😊말씀하신 PUT, DELETE 메서드가 보안에 취약한가?에 대한 부분과 권한 인증 방식에 대해서 정리해서 안내드리겠습니다.Q1. PUT, DELETE 메서드가 보안에 취약한가?A1. 질문에 답변드리기 전에 먼저 짚고 넘어가야 할 점이 있습니다.HTTP 메소드(GET, POST, PUT, DELETE 등) 자체는 보안 수준을 구분하는 기능이 아닙니다.이 메소드들은 단지 클라이언트가 서버에 어떤 작업을 요청하고자 하는지를 표현하는 방식일 뿐입니다.예시를 들자면, 프론트엔드에서 "이 데이터를 수정해줘"라고 요청을 보낼 때, 백엔드는 그 요청을 보고 "아, 프론트엔드가 데이터를 수정하길 원하는구나!" 하고 알아차릴 수 있도록 정해둔 약속(규칙) == PUT 메소드가 바로 HTTP 메소드입니다. 즉, PUT, DELETE라고 해서 특별히 더 보안에 취약하다거나 안전하다고 보기는 어렵습니다. 말 그대로 약속이니까요.실제로 중요한 것은 어떤 메소드를 쓰는가가 아니라, 그 요청을 처리하는 서버 쪽에서 적절한 인증/인가, 권한 검사, 입력 검증, HTTPS 사용 등이 얼마나 잘 구현되어 있는가입니다.아마 이후 챕터에서 이전에 만든 authenticateToken 함수를 사용해서 JWT 토큰 인증으로 토큰을 가진 사용자만 PUT 요청이 실제로 이뤄질 수 있도록 하는 권한 검사 기능 구현이 있을 것 입니다.const authenticateToken = (req, res, next) => { const token = req.cookies.token; if (!token) { return res.status(401).json({ message: "토큰이 없습니다." }); } try { const decoded = jwt.verify(token, process.env.JWT_SECRET); req.user = decoded; next(); } catch (error) { return res.status(403).json({ message: "유효하지 않은 토큰입니다." }); } }; // authenticateToken을 미들웨어로 사용 router.put("/:id", authenticateToken, async (req, res)
- 0
- 2
- 37
질문&답변
안녕하세요 선생님 특정 IP만 접속 가능한 기능 강의 예정 있으실까요??
안녕하세요, 좋은 질문 감사합니다. 해당 기능에 관심을 가져주셔서 정말 감사드립니다.말씀해주신 특정 IP만 접속 가능한 기능(화이트리스트 및 블랙리스트 처리)은, 초보자님께서 실제로 해당 기능에 대해 질문을 주신 덕분에, 기능 구현의 흐름과 코드까지 담은 별도 강의로 추가하게 되었습니다.수업 중에는 핵심 로직 위주로 설명드리다 보니, 이렇게 세부 기능에 대해 다시 한 번 관심을 가져주시고 문의해 주신 점 정말 감사드립니다.해당 내용은 방금 강의 자료에 반영되었으며, Notion 강의 노트 및 GitHub 코드 저장소를 통해 관련 코드 및 설명을 자세히 확인하실 수 있으니 참고 부탁드립니다.앞으로도 강의에서 다루지 않은 기능이라도 필요하시거나 궁금하신 점이 있다면, 언제든지 편하게 질문 남겨주세요. 감사합니다!
- 0
- 1
- 31
질문&답변
질문 userSchema 의 timestamps: true
안녕하세요. 질문에 답변드리도록 하겠습니다.Q. createdAt 필드를 직접 작성한 이유가 있나요?A. timestamps 옵션을 true로 설정하면 Mongoose는 자동으로 createdAt과 updatedAt 필드를 생성하고, 각각의 기본값은 현재 시간(new Date())으로 자동 설정됩니다.timestamps: true 로 설정하면 createdAt 필드를 따로 명시하지 않아도, 문서 생성 시 자동으로 현재 시간이 기록됩니다.하지만 createdAt을 스키마에 직접 명시한 이유는 다음과 같습니다:강의 목적: 수강생분들에게 createdAt 필드가 어떻게 동작하는지를 명확히 보여드리기 위해 기본 옵션을 코드에 직접 작성했습니다.가독성과 명시성: 스키마를 보는 사람에게 해당 필드의 존재와 타입, 기본 동작을 명확히 전달하기 위해 의도적으로 작성한 경우입니다.커스터마이징 및 호환성 고려: 실제 프로젝트에서는 createdAt 값을 직접 포맷하거나 사용하는 커스텀 로직이 있을 수 있어, 명시적으로 정의해두는 것이 향후 유지보수나 확장 시 유리할 수 있습니다.즉, 실무 개발 단계에서는 timestamps: true만 설정해도 충분하고, createdAt 필드를 기본 옵션만 사용할 경우에는 생략하셔도 전혀 문제되지 않습니다.사용자에게 포맷된 날짜를 보여줘야 하는 경우에 대해 간략히 설명드리면사용자에게 2025-05-19 20:10처럼 보기 좋은 형식으로 날짜를 보여줘야 할 때, createdAt을 직접 정의하고 관련 포맷터를 설정해둘 수 있습니다. createdAt: { type: Date, default: Date.now, get: (timestamp) => { // 한국 시간 기준 YYYY-MM-DD HH:mm 형식 return new Date(timestamp).toLocaleString("ko-KR", { timeZone: "Asia/Seoul", year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", }); }, },결과 예시:{ "username": "example", "createdAt": "2025.05.19. 20:10" } 답변이 도움이 되셨길 바랍니다!혹시 이해가 어려운 부분이 있거나 추가로 궁금한 점이 있으시면 언제든지 편하게 질문해주세요
- 0
- 3
- 29
질문&답변
배포에 대해서 질문있습니다
안녕하세요, 질문 감사합니다!Java WAR 배포 방식에 대해서는 깊게 알지 못하기에 만족하실만한 설명을 드릴 수 있을지 조심스럽습니다만, Node.js와 Vite 프로젝트를 배포하는 관점에서 말씀드리겠습니다.일단 배포 방식은 크게 두 가지로 나눌 수 있습니다:1. 클라우드 서버에 배포하는 방식AWS, Heroku, Firebase Hosting, Vercel, Netlify, Railway 등과 같은 외부 서버(클라우드 플랫폼)에 소스코드를 올리고 실행하는 방식입니다.이 방식은 인터넷만 연결되어 있으면 누구든 접속 가능하다는 장점이 있습니다.하지만 별도 계정 생성, 빌드 파이프라인 구성, 유료 요금제 고려 등의 요소가 필요할 수 있습니다.만약 클라우드 서버에 배포하시고 싶으시다면, 프론트엔드 React-Vite는 Firebase Hosting(무료)이 적합하고, 백엔드의 경우에는 Vercel이나 Netlify 같은 Node.js 서버를 배포할 수 있는 서비스를 추천드립니다. 각각 클라우드 서버만의 장단점이 있기 때문에 비교해보셔서 배포를 진행하시면 되겠습니다.또한, 배포 후 커스텀 도메인을 구매해 연동하면 배포를 완전히 마무리할 수 있습니다.2. 로컬 서버(내 컴퓨터)에서 배포하는 방식지금 질문자님이 설정하신 방식입니다.예: 데스크톱 A는 서버 역할, 데스크톱 B는 클라이언트 역할.이 경우 서버로 사용될 데스크톱에서 애플리케이션을 실행해두고, 같은 네트워크(예: 집 공유기)를 사용하는 다른 컴퓨터에서 접근합니다.이때는 로컬 IP 주소를 사용해 접근하게 됩니다. 예시: http://192.168.0.5:3000그 후, 로컬 IP와 공인 IP 그리고 커스텀 도메인을 연동하려면, Nginx와 같은 리버스 프록시 서버를 사용해 트래픽을 적절히 분배하고 라우팅 설정을 해주는 것이 일반적입니다.Q1. vite와 node.js만의 배포하는방법이 있나요?A. 강의에서는 Vite와 node.js 서버를 실행시킬 때 npm run dev명렁어를 통해 실행 했었습니다. 배포 가능한 형태로 만드는 방법은1. Vite 프론트엔드: npm run buildcd frontend npm run build이 명령어를 실행하면, frontend/dist 폴더에 정적 파일(HTML, JS, CSS 등)이 생성됩니다.이 폴더는 Java의 .war처럼 서버에 올려서 실행만 하면 되는 결과물이라 보시면 됩니다.2. 프론트엔드 폴더에 index.js 작성하기// frontend/index.js const express = require('express'); const path = require('path'); const app = express(); app.use(express.static(path.join(__dirname, 'dist'))); app.get('*', (req, res) => { res.sendFile(path.join(__dirname, 'dist/index.html')); }); app.listen(5173, () => { console.log('Frontend running on http://localhost:5173'); });생성된 index.js를 실행할 때 node index.js만 실행하면 됩니다. 추가적으로 PM2를 통해 서버가 꺼지더라도 Node.js 앱을 자동으로 재시작해주는 프로세스를 사용하실 수도 있습니다.마지막으로, 백엔드 코드는 별도로 수정/빌드할 필요 없이 nodemon이나 pm2로 서버를 실행한 후, 포트 번호만 공인 IP나 커스텀 도메인에 라우팅해주면 배포가 완료됩니다.Q2. frontend폴더와 backend폴더가 따로 있는데 하나로 로컬데스크톱에 배포하는 방법이 있나요?A. 질문자님께서 보유하고 계신 A 데스크톱과 B 데스크톱에 각각 프론트엔드와 백엔드를 나누어 배포하셔도 괜찮고, A 데스크톱에 프론트엔드와 백엔드를 함께 배포하셔도 무방합니다.어차피 같은 통신사의 인터넷망을 통해 외부로 접속하게 되므로, 실제로 어느 컴퓨터를 사용하느냐는 큰 차이가 없습니다. 추가적으로 궁금한 점이 있으시면 언제든지 편하게 질문 주세요! 감사합니다.
- 0
- 1
- 71
질문&답변
초기 설정에 대한 질문
안녕하세요. 질문 남겨주셔서 감사합니다! Q1. Frontend와 Backend 폴더에 node-modules를 각각 만든 이유A1. 일단 Frontend 폴더와 Backend 폴더를 나눠서 개발을 진행한 이유를 설명드리면두 영역은 역할과 기술 스택이 완전히 다르기 때문에, 프로젝트 구조상 기능별로 분리하는 것이 효율적이기 때문입니다.프론트엔드는 React-Vite 라이브러리를 사용해서 사용자 인터페이스(UI)를 구성하고, 브라우저 환경에서 동작하는 코드가 많습니다. 반면, 백엔드는 Express 프레임워크로 서버 API를 구성하며, 데이터베이스와의 통신이나 인증 로직 등 서버 측 비즈니스 로직을 담당합니다.물론, React-Vite와 Express를 같은 루트 폴더에 함께 설치해서 운용하는 것도 가능합니다. 실제로 하나의 package.json에 프론트엔드와 백엔드에서 사용하는 모든 의존성을 함께 설치하고, React 개발 서버와 Express 서버를 동시에 구동하도록 npm scripts를 설정하는 방식이 있습니다.이런 방식은 초기 개발 속도가 빠르고 폴더 구조가 단순하다는 장점이 있어서, 특히 혼자 개발하거나 소규모 프로젝트에서는 사용해볼 만합니다.다만 이 구조는 다음과 같은 단점이 있습니다:의존성 충돌 가능성: 프론트엔드와 백엔드에서 사용하는 동일한 패키지(예: dotenv, axios)의 버전 충돌이 발생할 수 있습니다.빌드 및 배포의 혼합: React 빌드 파일(dist/)과 백엔드 서버 파일이 같은 공간에 얽히면, 정리나 배포 시 혼동이 생길 수 있습니다.테스트 및 CI/CD의 복잡성 증가: 두 환경을 분리해서 테스트하거나, 각각 배포하고자 할 때 설정이 복잡해집니다.말씀하신 node_modules도 동일한 이유입니다.프론트엔드와 백엔드가 같은 루트 폴더에서 작동한다면 하나의 node_modules만으로도 모든 패키지를 공유할 수 있지만, 이는 곧 두 영역의 의존성 관리가 얽히게 된다는 단점을 의미합니다. 예를 들어, 프론트에서만 필요한 vite, react-dom 같은 패키지와 백엔드에서만 쓰는 express, cors 등이 한 공간에 뒤섞이면, 어떤 패키지가 어느 역할을 위해 설치된 것인지 파악하기 어렵고, 불필요한 패키지까지 함께 설치/배포되는 비효율이 발생합니다.결국 이런 이유들로 인해, 프로젝트를 보다 명확하게 관리하고 확장성을 고려하려면 초기부터 프론트엔드와 백엔드를 폴더 단위로 분리하고, node_modules 역시 각자 독립적으로 유지하는 구조가 더 바람직합니다.Q2. 깃허브에 node-modules가 업로드 되지 않은 이유. 다른 환경에서 개발을 이어나가고 싶을 때 방법A2. node_modules 폴더는 용량이 크고 수많은 파일을 포함하고 있어, GitHub 같은 버전 관리 시스템에 업로드하게 되면 저장소가 불필요하게 무거워지고 관리가 어려워집니다. 실제로 프로젝트 내의 node_modules 폴더의 용량을 확인해보시면 수십~수백 MB의 용량일 것입니다.또한, 이 폴더는 각 개발 환경에 따라 자동으로 다시 생성할 수 있기 때문에, 직접 업로드할 필요도 없습니다. 그래서 일반적으로 .gitignore 파일에 node_modules를 명시해 Git 추적 대상에서 제외하게 됩니다.다른 개발 환경에서 프로젝트를 이어받아 작업하려면, 루트 폴더에 포함된 package.json과 package-lock.json만 있으면 됩니다. 이 파일들은 프로젝트에 필요한 모든 의존성과 버전 정보를 담고 있어서, 동일한 개발 환경을 자동으로 복원할 수 있도록 도와줍니다.특히 package.json은 단순히 패키지 목록을 담는 것을 넘어서, 프로젝트 이름, 설명, 실행 스크립트, Node.js 버전 등 핵심 설정 정보를 포함하고 있어 협업과 유지보수, 배포의 기반이 되는 중요한 파일입니다.따라서 node_modules 없이도, 이 설정 파일들만 잘 유지하면 npm install 명령어를 통해 언제든지 같은 개발 환경을 재현하며 작업을 이어갈 수 있습니다.Q3. Create React App(CRA)로 만드는 법과 Vite, Next.js로 만드는 방법 중 Vite를 고른 이유가 있을까요?Create React App(CRA), Vite, Next.js 중에서 Vite를 선택한 이유는 개발 속도가 빠르고 설정이 간편하기 때문입니다. Vite는 코드 변경 시 실시간으로 빠르게 반영되기 때문에, 개발하면서 더 효율적으로 작업할 수 있습니다. 또한, Vite는 빌드 속도가 빠르고, 설정이 간단해서 프로젝트를 빠르게 시작할 수 있습니다. Next.js는 추가적인 서버 사이드 렌더링(SSR) 같은 기능을 제공하지만, 단순한 React 애플리케이션을 만들기엔 Vite가 더 적합하다고 생각했습니다.도움이 되셨길 바랍니다. 감사합니다!
- 0
- 1
- 86