묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Slack 클론 코딩[실시간 채팅 with React]
swr 설정 살펴보기 > revalidate 문제
swr 최신버전에서 revalidate가 삭제 된 것 같아서 질문드립니다! 제로초님의 강의를 듣고, 제가 이해한 것은, 기본 swr설정으로 사용을 하면, 지속적으로 데이터를 요청하게 되는데, swr에서 revalidate를 설정해주고, onSubmit의 post의 then에 reavalidate함수를 넣어주면, 그 함수가 실행 되었을 때부터 swr이 작동한다고 이해했는데 그게 맞을지 여쭤보고 싶습니다. swr 공식문서를 읽어보긴 했는데 확실히 이해가 되지 않아서요.. 조건부로 실행시키기 위해서, useSWR()에서 조건을 주어, 조건에 따라 false일 때 url의 위치에 null 안에 조건을 넣어주는 방식으로 공식 문서에 적혀있는데, 이렇게 되면 useState로 조건을 하나 만들어주어야 할까요? 해당 방법이 맞는지와 올바른 코드 예시가 있다면 알려주시면 감사하겠습니다!! ㅠ
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
viscose / macOS 버전에 대한 설명은 없을까요?
viscose / macOS 버전에 대한 설명은 없을까요? 너무 윈도우 위주 인거 같아요... 약간 맥 vscode 에서 기본적인 사용 방법이라도 알려주시면 좋을 거 같습니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 코드 오류가 발생합니다!!
[질문 내용] 주문 기능 테스트 코드를 작성하였는데 이런 오류가 발생합니다. 직접 해결해보려고 구글링해봐도 명확한 메시지가 없네여ㅠㅠ 무슨 이유일까여 ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요 강사님! 회원등록 API 관련 400에러 문의 드립니다
안녕하세요 강사님! 좋은 강의 잘 듣고 있습니다:) 다름이 아니라 해당 강의 회원등록 API 파트를 수강 중 포스트 맨에 json을 넘길 때 400에러가 발생하여 문의 드립니다. 이전 5월에 다른 분께서 질문 주신 게시판 글을 찾았는데 해결을 어떻게 하셨는지 알 수가 없어서요. api 컨트롤러 코드 확인을 했는데도 어느 부분을 고쳐야 하는지 모르겠어서 문의 남깁니다. 그럼 좋은 저녁 보내세요!
-
미해결스프링 핵심 원리 - 기본편
안녕하세요
생에 처음으로 유로강의를 듣습니다. 고민했지만 무료강의에서 얻은게 많아서.... 많이 얻어 가겠습니다. 감사합니다.
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
fsreadfile 같은 비동기 함수의 작동방식질문
강좌에서 resolve()까지는 비동기로 진행이 된다고 하셨는데 fs.readfile로 예를 들었을때 fsreadfile에서 resolve를 호출하려면 파일을 읽어온 값이 resolve의 인자로 들어가야하는데 그 다음 resolve가 실행되고 그다음 then이 비동기로 간다고 생각됩니다. 그럼 만약에 (편의상 fs.readfile을 프로미스 방식으로 쓰겠습니다) fs.readFile("somefile").then((data)=>console.log(data))); console.log("Hi"); 라고 코드가 있을때 실제로 Hi가 먼저 출력되는데 fs.readFile에서 실제로 이미 데이터를 먼저 다 읽어오고 resolve()가 호출되어야 Hi가 출력되고 그다음 큐에 있는 then부분의 익명함수 console.log(data)가 호출 스택으로 와서 실행 되는 것인가요? resolve까지 동기로 진행된다고 하셨는데 원래 노드의 장점이 파일같은것을 주고 받는 서버로써 파일 같은 주고받는 작업이 백그라운드에서 진행되어야 한다고 들었습니다,. 그런데 제가 이해한 방식은 메인 쓰레드에서 resolve까지 동기식으로 처리가 되는듯해서 질문드립니다.
-
미해결딥러닝 CNN 완벽 가이드 - TFKeras 버전
AlextNet 모델로 CIFAR10 학습 및 성능 테스트 강의 질문
강의 마지막 부분에 flow() 는 넘파이 어레이를 처리할 때 , flow_from_dataframe() 은 시퀀스 데이터를 처리 할때 사용하고 target_size를 원하는대로 바꿀 수 있도록 인자로 들어가있다고 하셨고 앞 강의에서는 flow() 함수를 사용하려면 먼저 타겟 사이즈를 고정하고 그 사이즈에 맞게 데이터가 들어와야 한다고 하셨는데 만약 넘파이 어레이로 된 데이터가 사이즈가 다 다르면 데이터의 사이즈를 어떤 방법으로 변경 할 수 있을까요? 단순하게 넘파이의 resize 같은 함수를 사용하는것은 아닐 것 같은데 이부분에 대해 잘 알고 싶습니다. 각기 다른 사이즈의 넘파이 어레이를 어떻게 처리하여 트레이닝을 시작하는지. 감사합니다.
-
미해결30분 요약 강좌 시즌2 : Python 활용편
구글 코랩
구글 코랩의 경우 어떻게 파일을 저장하고 읽고 쓰나요? f = open('C:\\Study\\Colab\\test.html', 'w', encoding = 'utf-8') f.write(html) f.close() 이런 식으로 경로를 지정해줬는데, 안떠서 어떻게 해야할지 모르겠습니다.
-
미해결유니티 게임 개발 (Unity 2D) - 시작부터 배포까지
다양한 함수 -3 첨부파일이 어디있나요?
박스이미지 받아야하는데 첨부파일이 없어요
-
미해결비전공자를 위한 개발자 취업 올인원 가이드 [취업편]
최근에는 멘토링 안받으시나요?
안녕하세요. 강사님 공지에 나와있는 1:1멘토링을 받고싶은데 공지해주신 링크로 들어가니 강사님의 멘토링이 나오지 않습니다. 요즘에는 멘토링 하지 않으시는걸까요 ㅠ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
정적 html을 반환해주는 좋은 방법(주소창에 localhost/xx.html 제외?)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.w2tomwsznga7)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://docs.google.com/document/d/1xCQKit-1V6l6ObeCe49St33RHPzLF_P_c3o7aSDTKs0/edit#heading=h.7dhnp46ven0v)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. http응답해주는 방법이 3가지라고 설명해주셨는데요. restapi방법. 동적html방법. 정적html방법. [질문1] 이중에서 정적 html은 주소창에 localhost:8080/xxx.html과 같은 방법으로 접근하는 방법 이외에는 없는걸까요? 정적 html은 localhost:8080/xxx와 같은 방법으로 접근 불가능한가요? [질문2] 아니면, 동적인 요소가 전혀 없는 html파일도 그냥 template폴더에 넣어서 매핑시키나요? 그런데, @RequestMapping을 사용하여 정적인 html을 매핑하면 핸들러, 핸들러어뎁터, 뷰리졸버가 의미없이 호출될거같습니다.. 정적 html을 호출하는데 template에 넣어서 @RequestMapping하는건 너무 손해이지 않을까요 [질문3] 완전 정적인 html은 실무에서는 어떻게 처리하는지, 어떻게 다루는지 궁금합니다. 짧은 지식으로 중구난방하게 질문해서 죄송합니다.. 최대한 구글링해보고 최대한 정제해서 질문드렸습니다. 번거로우시겠지만, 이런 중구난방 질문에 답변해주셔서 감사합니다.
-
미해결따라하며 배우는 NestJS
async await
안녕하세요 강사님! 좋은 강의 감사합니다!1. 혹시 board.service createBoard 부분만 async await를 안해주는 이유가 있을까요?! 2. controller에서 비동기 함수인 서비스 메소드를 호출할 때 async await를 안해줘도 왜 pending 값이 아닌 정상적인 Board promise객체가 반환되는 것인가요..?
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
이런 코드는 어떤식으로 동작하나요?
async function f() { console.log("Hei2"); let promise = new Promise((resolve, reject) => { setTimeout(() => resolve("완료!"), 1000); }); let result = await promise; // 프라미스가 이행될 때까지 기다림 (*) console.log(result); // "완료!" console.log("Hei3"); } f(); console.log("Hei"); 위와 같은 코드를 분석중인데요. 처음에 호출스택에 f()가 들어가고 console.log('Hei2'); 가 호츨스택에 실행되어서 나와 출력되고 그 다음 프로미스가 생성되어서 setTimeout()이 호출스택에 들어가서 실행되고 백그라운드에 1초짜리 timer가 올라가고 1초후에 task큐로가서 호출스택에 아무것도 없으면 then이 실행되어 result에 해당 값이 들어가고 console.log(result)와 console.log("Hei3")가 출력된다고 생각되었습니다. 실제 출력 결과는 Hei2 -> Hei -> 완료! -> Hei3 순인데 함수 f는 프로미스가 이행될때까지 pause상태인데 어떤식으로 중간에 Hei가 호출스택에 쌓이고 출력되는 것인지 잘 모르겠어 질문드립니다. 제 추측은 await 밑이 전부 then 함수처럼 처리되어서 백그라운드로가게 되고 f()가 종료되어 호출스택에서 나와서 Hei가 먼저출력되고 그다음 백그라운드에있던 await promise밑 부분들이 테스크 큐로들어와 이벤트루프에 의해 호출컨텍스트로 들어와 최종적으로 실행되는 것입니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
어... 이 에러를 어떻게 처리할지 몰라서.. 어떻게 해야요 ?ㅜㅜ
(사진)
-
미해결자바스크립트 비기너: 튼튼한 기본 만들기
강의내용문의
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님. localecompare()설명주실때 앞에있으면 1, 뒤에있으면 -1이라고 하셨는데요. 앞에 있으면 -1, 같은위치면0, 그보다 오른쪽에있으면 1 아닌가요?
-
미해결
어소트락 c언어/c++ 강의 39강 중에 이해안되는 부분 질문드려요
코드에서 움직이라고 만들어주는 부분에서 코드에서 왜 움직이는지를 모르겠는데요.. 코드 완성본은 아니고 배우던부분까지 쓴건데요. MoveUp, MoveDown, MoveLeft, MoveRight 함수에서 움직이는 코드(명령어?)는 따로 없어보이는데 w,a,s,d 를 누르면 별이 왜 움직이는건가요? #include <iostream> #include <conio.h> //키를 입력하면 반응할 수 있게 해주는 해더파일(_getch) using namespace std; //플레이어(위치) 구조체 struct _tagPoint { int x; int y; }; // typedef: 타입을 재정의하는 기능이다. _tagPoint를 POINT로도 사용할 수 있게 해준다. typedef _tagPoint POINT; typedef _tagPoint* PPOINT; //참고! 하향식으로(객체지향) 인식하므로 구조체를 먼저 선언하고 함수를 선언해야 PPOINT를 사용할 수 있다. void SetMaze(char Maze[21][21], PPOINT pPlayerPos, PPOINT pStartPos, PPOINT pEndPos); void OutPut(char Maze[21][21], PPOINT pPlayerPos); void MoveUp(char Maze[21][21], PPOINT pPlayerPos); void MovePlayer(char Maze[21][21], PPOINT pPlayerPos, char cInput); void CreatBomb(char Maze[21][21], const PPOINT pPlayer, PPOINT pBombArr, int* pBombCount); void Fire(char Maze[21][21], PPOINT pPlayer, PPOINT pBombArr, int* pBombCount); int main() { //20 x 20 미로를 만들어준다.{21에는 0(null)이 들어가야 하므로 21로 설정} char strMaze[21][21] = {}; POINT tPlayerPos; POINT tStartPos; POINT tEndPos; int iBombCount = 0; int addBomb = 0; POINT tBombPos[5]; //미로를 설정한다. SetMaze(strMaze, &tPlayerPos, &tStartPos, &tEndPos); while (true) { system("cls"); //미로를 출력한다. OutPut(strMaze, &tPlayerPos); if (tPlayerPos.x == tEndPos.x && tPlayerPos.y == tEndPos.y) { cout << "도착했습니다." << endl; break; } cout << "t: 폭탄설치, u:폭탄 터트리기" << endl; cout << "w: 위, s: 아래, a: 왼쪽, d: 오른쪽, q: 종료: "; char cInput = _getch(); if (cInput == 'q' || cInput == 'Q') break; else if (cInput == 't' || cInput == 'T') CreatBomb(strMaze, &tPlayerPos, tBombPos, &iBombCount); else if (cInput == 'u' || cInput == 'U') { Fire(strMaze, &tPlayerPos, tBombPos, &iBombCount); } else MovePlayer(strMaze, &tPlayerPos, cInput); } } /* 0: 벽 1: 길 2: 시작점 3: 도착점 4: 폭탄 */ void SetMaze(char Maze[21][21], PPOINT pPlayerPos, PPOINT pStartPos, PPOINT pEndPos) { pStartPos->x = 0; pStartPos->y = 0; pEndPos->x = 19; pEndPos->y = 19; *pPlayerPos = *pStartPos; strcpy_s(Maze[0], "21100000000000000000"); strcpy_s(Maze[1], "00111111111100000000"); strcpy_s(Maze[2], "00100010000111111100"); strcpy_s(Maze[3], "01100010000000000100"); strcpy_s(Maze[4], "01000011110001111100"); strcpy_s(Maze[5], "01000000001111000000"); strcpy_s(Maze[6], "00000000001000000000"); strcpy_s(Maze[7], "00100000001111111000"); strcpy_s(Maze[8], "00100011100000001000"); strcpy_s(Maze[9], "01111110111111111000"); strcpy_s(Maze[10], "01000000000000000000"); strcpy_s(Maze[11], "01111110001111100000"); strcpy_s(Maze[12], "00000011111000111110"); strcpy_s(Maze[13], "01111110000000000010"); strcpy_s(Maze[14], "01000000000111111110"); strcpy_s(Maze[15], "01111110000100000000"); strcpy_s(Maze[16], "00000010001100000000"); strcpy_s(Maze[17], "00000010001000000000"); strcpy_s(Maze[18], "01111110001111000000"); strcpy_s(Maze[19], "11000000000001111113"); Maze = { }; } void OutPut(char Maze[21][21], PPOINT pPlayerPos) { for (int i = 0; i < 20; ++i) { for (int j = 0; j < 20; ++j) { if (Maze[i][j] == '4') { cout << "♨"; } else if (pPlayerPos->x == j && pPlayerPos->y == i)//플레이어를 띄운다. cout << "☆"; else if (Maze[i][j] == '0') cout << "■"; else if (Maze[i][j] == '1') cout << " "; //2바이트므로(■,★,◎) 두번띄운다. else if (Maze[i][j] == '2') cout << "★"; else if (Maze[i][j] == '3') cout << "◎"; } cout << endl; } } void MoveUp(char Maze[21][21], PPOINT pPlayerPos) { if (pPlayerPos->y - 1 >= 0) { //벽인지 체크한다. && 폭탄인지 체크한다. if (Maze[pPlayerPos->y - 1][pPlayerPos->x] != '0' && Maze[pPlayerPos->y - 1][pPlayerPos->x] != '4') { --pPlayerPos->y; } } } void MoveDown(char Maze[21][21], PPOINT pPlayerPos) { if (pPlayerPos->y + 1 < 20) { //벽인지 체크한다. && 폭탄인지 체크한다. if (Maze[pPlayerPos->y + 1][pPlayerPos->x] != '0' && Maze[pPlayerPos->y + 1][pPlayerPos->x] != '4') { ++pPlayerPos->y; } } } void MoveRight(char Maze[21][21], PPOINT pPlayerPos) { if (pPlayerPos->x + 1 < 20) { //벽인지 체크한다. && 폭탄인지 체크한다. if (Maze[pPlayerPos->y][pPlayerPos->x + 1] != '0' && Maze[pPlayerPos->y][pPlayerPos->x + 1] != '4') { ++pPlayerPos->x; } } } void MoveLeft(char Maze[21][21], PPOINT pPlayerPos) { if (pPlayerPos->x - 1 >= 0) { //벽인지 체크한다. && 폭탄인지 체크한다. if (Maze[pPlayerPos->y][pPlayerPos->x - 1] != '0' && Maze[pPlayerPos->y][pPlayerPos->x - 1] != '4') { --pPlayerPos->x; } } } void MovePlayer(char Maze[21][21], PPOINT pPlayerPos, char cInput) { switch (cInput) { case 'w': case 'W': MoveUp(Maze, pPlayerPos); break; case 's': case 'S': MoveDown(Maze, pPlayerPos); break; case 'a': case 'A': MoveLeft(Maze, pPlayerPos); break; case 'd': case 'D': MoveRight(Maze, pPlayerPos); break; } } //포인터 변수를 const로 생성하면 가리키는 대상의 값을 변경할 수 없다. void CreatBomb(char Maze[21][21], const PPOINT pPlayer, PPOINT pBombArr, int* pBombCount) { if (*pBombCount == 5) return; for (int i = 0; i < *pBombCount; ++i) { if (pPlayer->x == pBombArr[i].x && pPlayer->y == pBombArr[i].y) return; } pBombArr[*pBombCount] = *pPlayer; ++(*pBombCount); Maze[pPlayer->y][pPlayer->x] = '4'; } void Fire(char Maze[21][21], PPOINT pPlayer, PPOINT pBombArr, int* pBombCount) { for (int i = 0; i < *pBombCount; ++i) { Maze[pBombArr[i].y][pBombArr[i].x] = '1'; if (pBombArr[i].y - 1 >= 0) { if (Maze[pBombArr[i].y - 1][pBombArr[i].x] == '0') Maze[pBombArr[i].y - 1][pBombArr[i].x] = '1'; //플레이어가 폭탄에 맞았을때 시작점으로 보낸다. if (pPlayer->x == pBombArr[i].x && pPlayer->y == pBombArr[i].y - 1) { pPlayer->x = 0; pPlayer->y = 0; } } if (pBombArr[i].y + 1 < 20) { if (Maze[pBombArr[i].y + 1][pBombArr[i].x] == '0') Maze[pBombArr[i].y + 1][pBombArr[i].x] = '1'; //플레이어가 폭탄에 맞았을때 시작점으로 보낸다. if (pPlayer->x == pBombArr[i].x && pPlayer->y == pBombArr[i].y + 1) { pPlayer->x = 0; pPlayer->y = 0; } } if (pBombArr[i].x - 1 >= 0) { if (Maze[pBombArr[i].y][pBombArr[i].x - 1] == '0') Maze[pBombArr[i].y][pBombArr[i].x - 1] = '1'; //플레이어가 폭탄에 맞았을때 시작점으로 보낸다. if (pPlayer->x == pBombArr[i].x - 1 && pPlayer->y == pBombArr[i].y) { pPlayer->x = 0; pPlayer->y = 0; } } if (pBombArr[i].x + 1 < 20) { if (Maze[pBombArr[i].y][pBombArr[i].x + 1] == '0') Maze[pBombArr[i].y][pBombArr[i].x + 1] = '1'; //플레이어가 폭탄에 맞았을때 시작점으로 보낸다. if (pPlayer->x == pBombArr[i].x + 1 && pPlayer->y == pBombArr[i].y) { pPlayer->x = 0; pPlayer->y = 0; } } } *pBombCount = 0; }
-
미해결Vue로 Nodebird SNS 만들기
start script 누락 오류가 떠서 질문드립니다
안녕하세요 제로초님 server.js만든후 express와 cross-env를 만들고 package.json에 "start": "cross-env PORT=80 NODE_ENV=production node server", 이렇게 추가도 하였습니다 그 후 npm start를 하는데 root@ip-172-31-26-247:/home/ubuntu/VUE.SNS/ch1/front# npm start npm ERR! missing script: start npm ERR! A complete log of this run can be found in: npm ERR! /root/.npm/_logs/2021-09-15T07_12_41_448Z-debug.log 이러한 오류가 뜹니다 ㅜ 무엇이 문제인지 구글링도 해보고 찾아봤는데 해결하지 못하여 질문드립니다. 피드백 주시면 감사하겠습니다! package.json { "name": "vue-nodebird-front", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "dev": "nuxt", "build": "nuxt build", "start": "cross-env PORT=80 NODE_ENV=production node server", "lint": "eslint **/*" }, "author": "", "license": "ISC", "dependencies": { "@nuxtjs/axios": "^5.13.6", "@nuxtjs/moment": "^1.6.1", "@nuxtjs/vuetify": "^1.12.1", "axios": "^0.21.1", "cross-env": "^7.0.3", "express": "^4.17.1", "lodash.throttle": "^4.1.1", "nuxt": "^2.15.7", "vue": "^2.6.14", "vuetify": "^2.5.6" }, "devDependencies": { "eslint": "^7.31.0", "eslint-plugin-vue": "^7.14.0" } } server.js const { loadNuxt, build } = require('nuxt') const app = require('express')() const isDev = process.env.NODE_ENV !== 'production' const port = process.env.PORT || 3080 async function start() { // We get Nuxt instance const nuxt = await loadNuxt(isDev ? 'dev' : 'start') // Render every route with Nuxt.js app.use(nuxt.render) // Build only in dev mode with hot-reloading if (isDev) { build(nuxt) } // Listen the server app.listen(port, '0.0.0.0') console.log('Server listening on `localhost:' + port + '`.') } start() 참고할 코드 보내드립니다!
-
미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
실전 크롤링: 브라우저를 제어해서 트위터 사이트 로그인 하기 질문
안녕하세요. 선생님 선생님 강의를 따라하며 정말 잘 듣고 있습니다. 실전 크롤링의 트위터 사이트 로그인 강의를 따라하다 질문이 있어서 이 곳에 글을 올립니다. 선생님께서 강의를 만드셨을 때의 트위터 사이트와 현재의 트위터 사이트가 다르게 바뀌었습니다. 선생님께서 올려주신 새소식의 공지사항을 읽어보고 로그인 및 크롤링을 다시 시도를 해보았지만 잘 되지 않았습니다. 선생님께서 가르쳐 주신 방법으로 driver.find_element_by_name 으로 "username"과 "password"를 입력하려고 시도하였지만 이것도 잘 되지 않아 어떻게 해결 할 수 있을지 모르겠어서 질문을 드립니다.
-
미해결Svelte.js 입문 가이드
혹시 에코시스템에 대한 질문을 해도 괜찮을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 강사님 패캠에서 구매했던 강의에 강사님이 있었는데, svelte에서도 또 만나뵙네요. ㅎㅎ 무료 강의분을 들어보았는데 맘에 들어서 바쁜일이 마무리되면 강사님의 svelte 강의를 구매해 보려고 합니다. 그 전에 제가 잘 이해가 안가는 부분이 있어 질문을 드립니다. 타 블로그 등에서 서로 상반되는 얘기들이 좀 있어서 헷갈리더라고요. 제가 잘못 이해하고 있거나 부족한 부분에 대해 설명 부탁 드립니다. 강사님이 강의에서 프로젝트 생성에 사용하신 방법이 degit을 사용해서 template을 가져오는 방법이었고, 여기서는 rollup을 사용하고 있는 것으로 알고 있습니다. 현재 svelte 쪽에서는 snowpack으로 이전을 하려고 하고 있고, 현재 beta가 공개된 것으로 알고 있고요. 이 snowpack, vite, sveltekit의 관계를 잘 모르겠어서 여쭤봅니다. 누구는 snowpack이 sveltekit을 사용하려다 vite로 바꿨다 하고 누구는 다 다른거다라고 하고 누구는 sveltekit이 vite 기반으로 만들어서 snowpack으로 이름을 바꾼거다 라는 것 같더라고요. 모두 영어권 자료를 본 거라 제가 잘못 해석했을수도 있지만, 이정도로 정리가 되는 거 같은데, 혹시 강사님께 정확한 설명을 부탁 드려도 괜찮을까요? 제가 이해하기로는 현재 svelte 진영은 sveltekit을 recommend 하고, sveltekit은 snowpack을 기반으로 했다가 현재는 vite 기반으로 하는 것으로 이해했습니다. 개인적으로는 template보다 이 방법이 선호되더라고요. linter나 formatter 설정도 쉽고, typescript도 깔끔하게 잘 붙고, 좋아하는 tailwindcss 같은 3rd party를 붙이기도 쉽고 ^^;; 끝으로, 좋은 강의 감사합니다. 설명이 장황하지 않고 깔끔해서 좋았어요. ^^
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
github 권한신청
github 권한신청 확인한번만 부탁드립니다.. 퇴근해서 공부해보고싶습니다