묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
테스트 오류
강의 영상을 쭈욱 똑같이 따라왔는데 테스트를 찾을 수 없다는 오류가 뜹니다. 뭐가 문제일까요?
-
미해결시스템엔지니어가 알려주는 리눅스 실전편 Bash Shell Script
오류 확인 부탁드릴게요
intel cpu 사용중이고 vt-d랑 virtualization쪽 가상화 옵션은 전부 on인 상태인데 virtual box에서 vt-d를 지원 안한다는 메세지가 뜨네요 ㅠㅠ ==> cent1: Booting VM...There was an error while executing VBoxManage, a CLI used by Vagrantfor controlling VirtualBox. The command and stderr is shown below.Command: ["startvm", "b8759987-e51e-488b-bb98-0bc272f83de4", "--type", "headless"]Stderr: VBoxManage: error: VT-x is not available (VERR_VMX_NO_VMX)VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
[SequelizeEagerLoadingError]: Post is not associated to Post! 에러 질문드립니다.
좋아요한 게시글을 마이페이지에서 확인하고 싶어서 기능을 구현했는데 다음과 같이 Post끼리는 관계가 없다고 에러가 발생하더라고요처음에 구현하고나서는 잘 동작했는데 갑자기 재실행하니까 다음과 같은 오류가 발생하더라고요router쪽에서 발생하는 에라같은데 혹시 이유에 대해서 알 수 있을까요? 에러 로그SequelizeEagerLoadingError: Post is not associated to Post! at Function._getIncludedAssociation (C:\Users\Administrator\OneDrive\Desktop\Recipe.io\prepare\back\node_modules\sequelize\lib\model.js:565:13) at Function._validateIncludedElement (C:\Users\Administrator\OneDrive\Desktop\Recipe.io\prepare\back\node_modules\sequelize\lib\model.js:502:53) at C:\Users\Administrator\OneDrive\Desktop\Recipe.io\prepare\back\node_modules\sequelize\lib\model.js:421:37 at Array.map (<anonymous>) at Function._validateIncludedElements (C:\Users\Administrator\OneDrive\Desktop\Recipe.io\prepare\back\node_modules\sequelize\lib\model.js:417:39) at Function.findAll (C:\Users\Administrator\OneDrive\Desktop\Recipe.io\prepare\back\node_modules\sequelize\lib\model.js:1118:12) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async Function.findOne (C:\Users\Administrator\OneDrive\Desktop\Recipe.io\prepare\back\node_modules\sequelize\lib\model.js:1228:12) at async C:\Users\Administrator\OneDrive\Desktop\Recipe.io\prepare\back\routes\post.js:122:18 PATCH /post/15/like 500 7.755 ms - 1344 postcardconst onLikePost = useCallback(() => { dispatch(likePostRequestAction(post.id)); message.success('게시글이 스크랩에 추가되었습니다.', 3); }, []); const unLikePost = useCallback(() => { dispatch(unLikePostRequestAction(post.id)); message.error('게시글이 스크랩에서 제거되었습니다.', 3); }, []);reducercase LIKE_POST_SUCCESS: { const post = draft.mainPosts.find((v) => v.id === action.data.id); 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 = 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 SCRAP_ADD_POST_TO_ME: draft.me.Liked.unshift(action.data); break; case SCRAP_REMOVE_POST_OF_ME: draft.me.Liked = draft.me.Liked.filter((v) => v.id !== action.data.id); break;sagafunction likePostAPI(data) { 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, }) yield put({ type: SCRAP_ADD_POST_TO_ME, data: result.data, }) } catch(err) { yield put({ type: LIKE_POST_FAILURE, data: err.response.data }) } } function unLikePostAPI(data) { return axios.delete(`/post/${data}/like`); } function* unLikePost(action) { try { const result = yield call(unLikePostAPI, action.data); yield put({ type: UNLIKE_POST_SUCCESS, data: result.data, }) yield put({ type: SCRAP_REMOVE_POST_OF_ME, data: result.data, }) } catch(err) { yield put({ type: UNLIKE_POST_FAILURE, data: err.response.data }) } }routerrouter.patch('/:postId/like', isLoggedIn, async (req, res, next) => { // likePostAPI / PATCH /post/1(게시글번호)/like try { const post = await Post.findOne({ where: { id: req.params.postId }, include: [{ model: Post, include: [{ model: Image, }, { model: Comment, include: [{ model: User, attributes: ['id', 'nickname'], }], }, { model: User, attributes: ['id', 'nickname'], }, { model: User, as: 'Likers', attributes: ['id'], }] }], }); if (!post) { return res.status(403).send('게시글이 존재하지 않습니다.'); } await post.addLikers(req.user.id); res.status(200).json(post); } catch (error) { console.error(error); next(error); } }); router.delete('/:postId/like', isLoggedIn, async (req, res, next) => { // unLikePostAPI / DELETE /post/1(게시글번호)/like try { const post = await Post.findOne({ where: { id: req.params.postId }, }) if (!post) { return res.status(403).send('게시글이 존재하지 않습니다.'); } await post.removeLikers(req.user.id); res.json({ PostId: post.id, UserId: req.user.id }); } catch (error) { console.error(error); next(error); } });
-
미해결Do it! 자바 프로그래밍 입문 with 은종쌤
Class간의 연결
public void takeBus(Bus bus){ bus.take(1000); money -=1000; }Student 클래스의 takeBus메소드의 (Bus bus) 이 부분이 아래의 Bus 클래스와 어떻게 연결되는지 이해가 가지 않습니다.(Bus bus)의 Bus 는 Bus 클래스를 나타내는 것이 맞나요?그럼 bus 는 임의로 매개변수?로 정해서 take 함수를 Bus class에서 불러오는게 맞을까요? 답변주시면 감사하겠습니다.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
adapter에서 implement할 때 문제..
안녕하세요. 강의 잘 보고 있습니다. 아직 답변 달아주시는지 모르겠지만 아무리 구글링해도 모르겠어서 혹시몰라 질문 남깁니다. 이전까지는 implement members하면 세 개 함수가 잘 불러와졌는데 갑자기 class rvAdapters()에서 implement하면 onCreateViewHolder이랑 onBindViewHolder이 실행되지 않습니다. error type: Unresolved type for rvAdapters.ViewHolder라는 문구가 보이는데 무슨 뜻일지..ㅠ 여기서 막혀서 진행이 안되네요..
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JpaMain 실행시 오류가 발생합니다
게시판을 검색해보니 H2를 찾지 못해서 나오는 오류라고 하는데 xml에 소스 추가했고 jpasho.mv.db도 만들어져 있습니다파일은 블로그에 올려두었습니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
오류가 많은거 같습니다ㅠㅠ
이게 뭔가요...ㅠ첨보는건데 js파일 분할하면서 꼬인건지 설치가 잘못된건지 모르겠어요 PostCardContent.js 파일에 postData?.split ~ 하면 아래 에러는 없어지는데 위에 오류 뜹니다reducers/index.jsimport {HYDRATE} from 'next-redux-wrapper'; import {combineReducers} from 'redux'; import user from './user'; import post from './post'; // (이전상태, 액션) => 다음상태 const rootReducer = combineReducers({ index: (state = {}, action) => { switch (action.type) { case HYDRATE: console.log('HYDRATE', action); return {...state, ...action.payload}; default: return state; } }, user, post }); export default rootReducer; reducers/post.jsimport shortId from 'shortid' import produce from 'immer'; import faker from 'faker'; export const initialState = { mainPosts: [{ id: 1, User: { id: 1, nickname: 'z', }, content: '첫 번째 게시글 #해시태그 #익스프레스', Images: [{ id: shortId.generate(), src: 'https://bookthumb-phinf.pstatic.net/cover/137/995/13799585.jpg?udate=20180726', }, { id: shortId.generate(), src: 'https://gimg.gilbut.co.kr/book/BN001998/rn_view_BN001998.jpg', }, { id: shortId.generate(), src: 'https://gimg.gilbut.co.kr/book/BN001998/rn_view_BN001998.jpg', }], Comments: [{ id: shortId.generate(), User: { id: shortId.generate(), nickname: 'nero', }, content: '우와 개정판이 나왔군요~', }, { id: shortId.generate(), User: { id: shortId.generate(), nickname: 'hero', }, content: '얼른 사고싶어요~', }], }], imagePaths: [], addPostLoading: false, addPostDone: false, addPostError: null, removePostLoading: false, removePostDone: false, removePostError: null, addCommentLoading: false, addCommentDone: false, addCommentError: null, }; initialState.mainPosts = initialState.mainPosts.concat( Array(20).fill().map(() => ({ id: shortId.generate(), User: { id: shortId.generate(), nickname: faker.name.findName(), }, Content: faker.lorem.paragraph, Images: [{ src: faker.image.imageUrl(), }], Comments: [{ User: { id: shortId.generate(), nickname: faker.name.findName(), }, content: faker.lorem.sentence(), }], })), ); export const ADD_POST_REQUEST = 'ADD_POSTS_REQUEST'; export const ADD_POST_SUCCESS = 'ADD_POSTS_SUCCESS'; export const ADD_POST_FAILURE = 'ADD_POSTS_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 dummyPost = (data) => ({ id: data.id, content: data.content, User: { id: 1, nickname: 'Z0', }, Images: [], Comments: [], }); const dummyComment = (data) => ({ id: shortId.generate(), content: data, User: { id: 1, nickname: 'Z1', }, }); // 이전 상태를 액션을 통해 다음 상태로 만들어내는 함수(불변성은 지키면서) const reducer = (state = initialState, action) => produce(state, (draft) => { switch (action.type) { 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 = (dummyPost(action.data)); break; case ADD_POST_FAILURE: draft.addPostLoading = true; 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 = state.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(dummyComment(action.data.content)); draft.addCommentLoading = false; draft.addCommentDone = true; break; // const postIndex = state.mainPosts.findIndex((v) => v.id === action.data.postId); // const post = {...state.mainPosts[postIndex]}; // post.Comments = [dummyComment(action.data.content), ...post.Comments]; // const mainPosts = [...state.mainPosts]; // mainPosts[postIndex] = post; // return { // ...state, // mainPosts, // addCommentLoading: false, // addCommentDone: true // }; } case ADD_COMMENT_FAILURE: draft.addCommentLoading = false; draft.addCommentError = action.error; break; default: break; } }); export default reducer; reducers/user.jsimport produce from 'immer'; export const initialState = { logInLoading: false, // 로그인 시도중 logInDone: false, logInError: null, logOutLoading: false, // 로그아웃 시도중 logOutDone: false, logOutError: null, signUpLoading: false, // 회원가입 시도중 signUpDone: false, signUpError: false, changeNicknameLoading: false, // 닉네임 변경 시도중 changeNicknameDone: false, changeNicknameError: false, me: null, signUpData: {}, loginData: {} }; export const LOG_IN_REQUEST = 'LOG_IN_REQUEST'; export const LOG_IN_SUCCESS = 'LOG_IN_SUCCESS'; export const LOG_IN_FAILURE = 'LOG_IN_FAILURE'; export const LOG_OUT_REQUEST = 'LOG_OUT_REQUEST'; export const LOG_OUT_SUCCESS = 'LOG_OUT_SUCCESS'; export const LOG_OUT_FAILURE = 'LOG_OUT_FAILURE'; export const SIGN_UP_REQUEST = 'SIGN_UP_REQUEST'; export const SIGN_UP_SUCCESS = 'SIGN_UP_SUCCESS'; export const SIGN_UP_FAILURE = 'SIGN_UP_FAILURE'; export const CHANGE_NICKNAME_REQUEST = 'CHANGE_NICKNAME_REQUEST'; export const CHANGE_NICKNAME_SUCCESS = 'CHANGE_NICKNAME_SUCCESS'; export const CHANGE_NICKNAME_FAILURE = 'CHANGE_NICKNAME_FAILURE'; export const FOLLOW_REQUEST = 'FOLLOW_REQUEST'; export const FOLLOW_SUCCESS = 'FOLLOW_SUCCESS'; export const FOLLOW_FAILURE = 'FOLLOW_FAILURE'; export const UNFOLLOW_REQUEST = 'UNFOLLOW_REQUEST'; export const UNFOLLOW_SUCCESS = 'UNFOLLOW_SUCCESS'; export const UNFOLLOW_FAILURE = 'UNFOLLOW_FAILURE'; export const ADD_POST_TO_ME = 'ADD_POST_TO_ME'; export const REMOVE_POST_OF_ME = 'REMOVE_POST_OF_ME'; const dummyUser = (data) => ({ ...data, nickname: 'zo', id: 1, Posts: [{id: 1}], Followings: [{nickname: 'Boo'}, {nickname: 'B'}, {nickname: 'C'}], Followers: [{nickname: 'ZZ'}, {nickname: 'BB'}, {nickname: 'CC'}] }); export const loginRequestAction = (data) => { return { type: LOG_IN_REQUEST, data, } } export const logoutRequestAction = () => { return { type: LOG_OUT_REQUEST, } } const reducer = (state = initialState, action) => produce(state, (draft) => { switch (action.type) { case LOG_IN_REQUEST: draft.logInLoading = true; draft.logInError = null; draft.logInDone = false; break; case LOG_IN_SUCCESS: draft.logInLoading = false; draft.me = dummyUser(action.data); draft.logInDone = true; break; case LOG_IN_FAILURE: draft.logInLoading = false; draft.logInError = action.error; break; case LOG_OUT_REQUEST: draft.logOutLoading = true; draft.logOutError = null; draft.logOutDone = false; break; case LOG_OUT_SUCCESS: draft.logOutLoading = false; draft.logOutDone = true; draft.me = null; break; case LOG_OUT_FAILURE: draft.logOutLoading = false; draft.logOutError = action.error; break; case SIGN_UP_REQUEST: draft.signUpLoading = true; draft.signUpError = null; draft.signUpDone = false; break; case SIGN_UP_SUCCESS: draft.signUpLoading = false; draft.signUpDone = true; break; case SIGN_UP_FAILURE: draft.signUpLoading = false; draft.signUpError = action.error; break; case CHANGE_NICKNAME_REQUEST: draft.changeNicknameLoading = true; draft.changeNicknameError = null; draft.changeNicknameDone = false; break; case CHANGE_NICKNAME_SUCCESS: draft.changeNicknameLoading = false; draft.changeNicknameDone = true; break; case CHANGE_NICKNAME_FAILURE: draft.changeNicknameLoading = false; draft.changeNicknameError = action.error; break; // 게시글 등록 case ADD_POST_TO_ME: draft.me.Posts.unshift({id: action.data}); break; // return { // ...state, // me: { // ...state.me, // Posts: [{ id: action.data }, ..state.me.Posts], // }, // }; // 게시글 삭제 case REMOVE_POST_OF_ME: draft.me.Posts = draft.me.Posts.filter((v) => v.id !== action.data); break; // return { // ...state, // me: { // ...state.me, // Posts: state.me.Posts.filter((v) => v.id !== action.data) // }, // }; default: break; } }); export default reducer; pages/profile.jsimport Head from 'next/head'; import React, {useEffect} from 'react'; import Router from 'next/router'; import AppLayout from '../components/AppLayout'; import NicknameEditForm from '../components/NicknameEditFrom'; import FollowList from '../components/FollowList'; import { useSelector } from 'react-redux'; const Profile = () => { const {me} = useSelector((state) => state.user); useEffect(() => { if (!(me && me.id)) { Router.push('/'); } }, [me && me.id]); if(!me) { return null; } return ( <AppLayout> <Head> <title>내 프로필 | NodeBird</title> </Head> <NicknameEditForm /> <FollowList header="팔로잉" data={me.Followings} /> <FollowList header="팔로워" data={me.Followers} /> </AppLayout> ) } export default Profile; 로그인하고 게시글 쓰면 profile.js에 useEffect쪽 '/' 루트로 가지는거 같습니다빈 창 떠요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4- c질문
http://boj.kr/f73a62d8306144558a6106909f0c9e2fi = 1부터 돌려가며 예를 first, second를 초기화해준뒤예를들어 n = 6이면 first -> 110011 이면 second -> 001100두 부분으로 나눈 뒤 각각의 부분에 포함된 정점이 연결되어 있는지를 bfs를 통해서 알아봐서 두 부분다 연결이 되어있으면 두 부분의 인구수 차를 구해 출력했습니다.선생님 처럼 dfs가 아니라 이렇게 bfs로 연결되어있는지를 확인하는 로직인데 혹시 괜찮은 방법인지, 개선할 점이 있는지 궁금합니다.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
docker-compose에 대한 질문입니다
volumes: -./data:/var/lib/postgresql/data 이러한 형식으로 volume의 위치를 지정했는데 왜 이 위치로 지정했는지 알 수 있을 까요?
-
미해결[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문
(int*)이 어떤 원리인건지 잘 이해가 안되요 ㅜ
형변환이라는건 어렴풋이 알겠는데 char형 포인터에서 주소를 출력하는데 왜 int*로 형변환이 되는건가요? char형 이기에 가능한 방식인건가요? ㅜ이래저래 실험도 해보고 인터넷으로도 찾아보려했는데 잘 모르겠습니다 ㅜ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
MEMBER_SEQ를 2번 호출 하는 이유
처음 호출 하면 51개로 맞추고 그 다음부터, 메모리에서 사용한다고 하는데 이렇게 하는 이유가 무엇인가요 ? 처음 호출 할때 50개를 미리 세팅 하고 1번부터 사용하면 안되나요???
-
해결됨그림으로 쉽게 배우는 운영체제
다중큐 강의에서 I/O 작업시 질문
안녕하세요. 재밌은 강의로 출퇴근때 꿀잼으로 강의 잘 보고 있습니다. 다중큐 강의에서 실행중인 프로세스에서 I/O 작업 이 발생하면 해당 I/O 작업의 종류별로 나뉜 큐로 들어간다고 하셨는데 이건 실행중인 프로세스의 큐가 비동기적으로 작성이 되어야 하는게 맞나요? 일반적으로 작성하면 계속 프로세스가 실행되고 있지만 I/O 작업이 끝나기를 기다리고 있는 상태인지 궁금합니다. 감사합니다!
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
config/config.json 파일을 읽을 수 없다고 나옵니다.
npx sequelize db:create를 하게되면 Error reading "config/config.json". Error: Error: Cannot find module 라는 오류가 뜹니다. config파일을 수정해야 하나요?
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
npm start시 에러가 발생합니다.
"scripts": { "start": "nodemon app" },scripts 부분에 nodemon이 들어가 있는데 npm ERR! Missing script: "start" 라는 에러가 뜹니다
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
[에러] GoRouter 적용하는 단계에서 401 에러가 뜹니다.
GoRouter 프로젝트에 적용하기 / Authentication 마무리하기 강의 단계에서서버에서 401 Unauthorized 에러가 발생합니다.디버그 내용을보면 잘못된 토큰이라고 나와서토큰 변환 코드가 잘못됐나 확인했지만 문제가 없었습니다.에러 발생 후 바로 이동한 파일이 user_me_repository.g.dart 파일이고아래 두 번째 사진에서 코드에서 에러 메세지가 발생했습니다.아이폰 시뮬레이터에선 splash_screen에서 멈추고로그인 화면으론 넘어가지 않았습니다.어떻게 해야 이 에러를 해결 할 수 있나요?<작업 컴퓨터><1번째 사진><2번째 사진><3번째 사진><서버 컴퓨터>
-
미해결피그마(Figma)를 활용한 UI디자인 입문부터 실전까지 A to Z
짝수/홀수 프레임 width와 object 크기 결정 문의
에릭님 안녕하세요~강의를 듣던 중에 궁금한 점이 있습니다.저희가 프로젝트에 따라 다르겠지만 보통 프레임을 선택할 때 안드로이드는 360*XXX iPhone은 375*812 사이즈로 선택하고 작업을 진행한다고 알고 있습니다.관련해서 제가 프레임 중앙에 어떤 객체 (예. 정사각형 카드)를 배치한다고 했을 때 안드로이드에서는 짝수 (240*240)의 경우 가운데 정렬을 했을 때 좌/우 60씩 남지만 아이폰에서는 67/68로 배치가 됩니다. (피그마에서 억지로 가운데 정렬을 할 수 있을 것 같긴 한데 그러면 그게 0.5단위여서 개발에 전달할 때 문제가 있지 않을까 싶기도 하고 다른 객체들을 디자인 할 때 방해가 되지 않을까 싶습니다.)위와 같은 예시로 한 앱을 두 OS에서 동일하게 보여주고 싶다면 객체 크기를 어떻게 설정하는게 좋을까요?아이폰에서도 프레임의 짝수 홀수의 width가 섞여 있는데 정사각형/원형이 개체를 정 가운데 배치할 때 어떻게 기준을 잡아야 할까요?더불어 안드에서는 8의 배수로 디자인 하는 것을 많이 권장하시는데 아이폰에서도 그런 기준이 있을까요? 미리 감사합니다~
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
[Postman에서 인증 URL 테스트하기 (login)] 토큰 발급 질문
현재는 POST 요청에 {id:id, pw:pw} body를 작성해서 토큰을 받아오고 있는데요, 제가 기존에 사용하고 있는 방식과 Basic + email:password 방식과의 차이점과 장단점을 알 수 있을까요?
-
미해결Java TPC (생각하고, 표현하고, 코딩하고)
궁금한 게 있습니다.
extends와 impolements의 차이점이 무엇인가요?둘이 어떤 때 사용해주는 건지 구체적으로 알 수 있을까요?강의 늘 잘 보고 있습니다 감사드립니다 ^^
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품주문 페이지가 안떠요
다 똑같이 따라했는데 왜그런거죠 ?
-
미해결
spotfire 데이터시각화
인프런에서 운영하는 soptfire 교육을 수강하기 전에 몇가지좀 알아보려고 합니다.따로 spotfire , python에 대해 흥미가 있는데 python 같은경우 국가공인자격증은 아니지만 민간자격증으로 증명할 수있는 방법이 있는걸로 압니다.spotfire 또한 수료증이 아닌 자격요건을 충족하기 위한 자격증이 따로 존재할까요? 아니면, 교육을 통해서 받는 수료증으로 자격요건을 충족시켜야하나요?