묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
'package:get_it/get_it.dart';
nvalid depfile: C:\Users\one22\Downloads\flutter-lv1-project-calendar-scheduler-main\flutter-lv1-project-calendar-scheduler-main\.dart_tool\flutter_build\a9ce302c534db4f4b6905f8eef12818c\kernel_snapshot.dInvalid depfile: C:\Users\one22\Downloads\flutter-lv1-project-calendar-scheduler-main\flutter-lv1-project-calendar-scheduler-main\.dart_tool\flutter_build\a9ce302c534db4f4b6905f8eef12818c\kernel_snapshot.dError: Couldn't resolve the package 'get_it' in 'package:get_it/get_it.dart'.lib/main.dart:4:8: Error: Not found: 'package:get_it/get_it.dart'import 'package:get_it/get_it.dart';이런 에러가 발생합니다. 혹시 패키지 설치 강의는 앞서서 있었는데 이 문제 는 어떻게 해결하나요??
-
미해결배달앱 클론코딩 [with React Native]
음 간단한버그
Execution failed for task ':app:installDebug'.> java.util.concurrent.ExecutionException: com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: INSTALL_FAILED_INSUFFICIENT_STORAGE라고해서 안드로이드 스튜디오에서 에뮬레이터 선택한다음에 wipeData 하면 되는데 매번 안드로이드 스튜디오를 런 할때마다 키기 귀찮은데 다른 방법 있을까요?저는 맥북유저 입니다. 리액트 네이티브 버전은 0.70 쓰고 있습ㄴ다.
-
미해결[유니티6] 따라하면서 배우는 하이퍼캐주얼게임 시리즈 01
TPinDistance 프로퍼티 관련 질문드립니다
안녕하세요 먼저 수준 높고 질 좋은 강의 잘 보고 있습니다!!사소한 변수 선언 방식부터 디테일한 스크립팅 까지 C# 코딩의 정석을 보는 것 같아 정말 감사드립니다.질문이 있는데요~2D Pin Circle 튜토리얼 중 핀오브젝트 스크립트 작성 부분에서 TPinDistance 프로퍼티를 만들어서 핀오브젝트 사이의 간격을 1로 만드는데요 프로퍼티는 필드에 로직을 주거나 object initializer을 할 때 쓰기위함으로 알고 있습니다바로 위 스크립팅에서 firstTPinPosition은 필드로 변수 설정을 하였는데 TPinDistance는 왜 프로퍼티로 선언을 하셨나요?그리고 프로퍼티가 아닌 필드를 사용해도 되는지요?마지막으로 프로퍼티와 필드를 이용하여 데이터를 대입할 때 두가지의 장단점이 어떤지 궁금합니다(보안이나 데이터 사용의 효울성 등) C# 문법의 초급 정도를 여쭤보는거 같아 민망하지만 좀 더 배우고자 질문드립니다^^감사합니다!!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
이클립스 사용 http://localhost:8080/hello 작동 안되는 문제
이클립스 사용하고 있는데 http://localhost:8080/ 은 잘되고 http://localhost:8080/hello 은 사진과 같이 오류가 납니다
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
BRAM에 데이터를 쓰는 방법
안녕하세요 맛비님수동으로 BRAM에 0번지부터 내가 원하는 Data를 Write할 수 있지만, 써야 되는 데이터가 많을 때는 어떻게 하나요? 예를 들어 0번지부터 99번지까지 100개의 데이터를 써야하고, 그 값은 모두 input.txt에 저장되있으면, FPGA에 올리기 위해 이 100개의 데이터들을 손으로 각각 타이핑하는 방법 말고 input.txt 파일을 BRAM에 올릴 수 있는 방법이 있을까요?
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
trasition 효과
안녕하세요! 혹시 radio 가 checked 됐을 때,content에 transition을 주어서 부드럽게 넘어가게는 못하는건가요?
-
미해결Three.js로 시작하는 3D 인터랙티브 웹
캐릭터 이동시키면 z축 회전을 합니다
블렌더에서 새로 캐릭터 만들어서 적용해보고 있는데요일분이는 발이 땅에 고정된 상태로 이리저리 이동하는데방향을 바꿀 때 제 캐릭터는 다리가 땅에 고정되어있지 않고, 그러니까 Y축 회전을 하는게 아니고z축으로 회전해요...처음 시작 자세는 정상으로 뜨는데마우스 클릭으로 움직임 활성화하는 순간 자세가 변합니다위치 이동은 문제없이 잘 되고요어떤 것을 고쳐야할까요?ㅠㅠ
-
미해결웹 게임을 만들며 배우는 React
자식이 없는 ul 렌더링
안녕하세요 제로초님.<ul> {tries.map((t) => <Try key={} ... />)} </ul>만약 tries.length === 0 인 상태에서ul은 자식이 없는 상태로 화면에 렌더링 되는데ul이 렌더링 되지않게 하는 방법도 있나요?{ !!tries.length && <ul>{tries.map(...)}</ul> }위 방법이나 여러 방법으로 해봐도 오류 발생하네요ㅠㅠ vue에서는 ul에 v-if로 제어가 가능한데리액트에서도 비슷한 방법이 있는지 궁금합니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제 구현 방법을 떠올리는 방법이 궁금합니다
강사님께서 3. 카드 역배치 문제를 푸실 때, 예를 들어 리스트의 2번째부터 7번째까지 뒤집는 것이라면 (7-2)+1 // 2 이러한 식으로 3번만 반복해서 2번째와 7번째를 바꿔주면 된다고 하셨는데요. 저는 이 문제를 봤을 때, list[::-1] 이렇게 바꾸는 방법밖에 떠올리지 못했습니다.그리고 강사님이 (7-2)+1 // 2 이러한 식을 설명해주시면 이해는 되지만 제가 스스로 문제를 풀 때 떠올릴 수 없을 것 같다는 생각을 많이 하게 되는데, 이러한 식을 생각해낼 수 있는 방법이 있을까요?
-
해결됨스프링 핵심 원리 - 기본편
AppConfig.java memberRepository() 메서드
섹션 3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 스프링으로 전환하기 강의 듣던 중 질문있습니다.@Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); }위 코드에서 memberRepository() 메서드의 접근 지정자를 private에서 public으로 수정하셨는데요. 현재까지는 AppConfig에서만 사용되니 private으로 지정해도 상관없지 않나요? 나아가 이후에도 구현 객체를 반환하는 역할만 하지 않을까 하는 고민을 해봅니다.
-
미해결배틀로얄 게임을 만들어보며 배우는 언리얼 게임 개발
강의에서 추출한 하이트맵입니다.
이후 강의를 따라하는 데 필수 자료인 하이트맵이 올려져 있지 않아서 섹션 11에 올라와 있는 프로젝트 파일에서 추출하고 oxipng로 용량 줄였습니다.https://blog.kakaocdn.net/dn/EwIoH/btrLOnofkDR/7aCsdpD3jHqUb7xRIUmexk/Original_Heightmap.zip?attach=1&knm=tfile.ziphttps://blog.kakaocdn.net/dn/tmuNG/btrLOmizx8N/1pX94gZBXtkKlFmADgbC40/Original_Heightmap.z01?attach=1&knm=tfile.z01https://blog.kakaocdn.net/dn/85oKI/btrLK5bAnaQ/CaKwhqgXamCYBrSB4TWmUk/Original_Heightmap.z02?attach=1&knm=tfile.z02업로드할 곳이 없길래 분할 압축해서 티스토리 블로그에 올렸는데 외부 링크 다운로드 제한이 있는진 잘 모르겠습니다.자유주제로 올리면 강의 페이지에서 대시보드나 커뮤니티 눌렀을 때 글이 바로 뜨지 않아서 필요한 분들이 못 보실까봐 부득이하게 질문 카테고리로 올립니다.
-
해결됨[유니티6] 따라하면서 배우는 하이퍼캐주얼게임 시리즈 01
리셋버튼이 스테이지1로 바꿔주지 않습니다.
Pin Circle 게임에서 Reset 버튼을 눌러도스테이지1로 전환되지 않습니다. 예) 스테이지 3까지 클리어 -> 리셋버튼 클릭-> 시작버튼클릭 -> 스테이지4에서 시작(타겟에 적혀있는 스테이지 숫자만 1) 이미 클리어 될때 씬이동이 일어나기 때문입니다. 리셋버튼을 누른후에, 게임 시작을 누르면타겟에 적혀있는 숫자는 1로 바뀌지만스테이지1로 씬 전환이 일어나지는 않습니다. 리셋버튼을 누르면 호출되는 함수에서 Level 1로 씬 이동 해주는 코드를 넣어줘야 할것같습니다.저는 MainMenuUI.cs 에서 이렇게 수정했습니다. -기존 코드-public void ButtonClickEventReset(){PlayerPrefs.SetInt("StageLevel", 0);} -수정 코드-public void ButtonClickEventReset(){PlayerPrefs.SetInt("StageLevel", 0);int index = PlayerPrefs.GetInt("StageLevel");SceneManager.LoadScene(index);}
-
미해결게임 프로그래머 취업 전략 가이드
UE 공부/취업관련
안녕하세요C++만 계속 공부하다가 언리얼엔진 공부를 시작했는데 언리얼5가 나온 만큼 최신버전인 5로 공부를 시작했습니다. 그런데 여러 게임 회사들을 살펴보니 대부분은 4 경험/능력을 요구하는 것 같더라구요..(제가 가고 싶은 몇몇 회사들도 5보다는 4를 요구하고있고 5를 사용하는 곳은 신기술 등에 대해서 추가로 요구하는 부분이 많아서 쉽지 않을 것 같습니다ㅜ) 언리얼4와 5가 많이 다른가요?지금 하고 있는 5 (udemy로 강의를 듣고 있습니다) 를 중단하고 그냥 4를 쭉 공부하는 게 나을지, 아니면 5로 공부하다가 4로 넘어가도 금방 적응이 가능해서 괜찮을지 궁금합니다. 자체 엔진을 사용하는 게임회사에 지원하는 경우에도 언리얼 포폴을 사용해도 무관할까요..? 언리얼 공부 방법에 대해서도 조언을 얻고 싶습니다.강의(혹은 책)를 되는대로 들으면서 흡수한 다음 이걸 적용시켜서 게임을 만들어보면 되는 걸까요?아니면 만들 포트폴리오와 기술 내용?을 정해서 목표로 설정한 후, 공식문서나 필요한 내용을 다룬 강의/책 등을 선택적으로 찾아보고 헤딩하면서 일단 만들어보려고 하는 게 더 나은 방법일까요? (내년 여름에 취업하는 게 목표입니다. ) 언리얼과 상관없는 질문이긴 한데.. C++은 어떤식으로 공부를 해야할 지 모르겠습니다.루키스님 C++강의를 완강하고 나서 지금 modernC++을 공부중이고 알고리즘 공부도 하고 있습니다.그런데 알고리즘 문제 풀이를 할 때는 modernC++이나, C++의 다형성,상속성,은닉성 등과 관련된 것들을 연습해볼 수가 없는 것 같습니다.이런 것들을 연습하려면 어떻게 하는 게 좋을까요..? 언리얼을 하면서 C++코드 작성하는 것 정도면 충분한 연습이 될까요? 질문이 많아서 죄송하고, 좋은 강의 꾸준히 올려주셔서 정말 감사드립니다. 정말 많은 도움을 받았습니다.즐거운 추석 보내세요 :)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
jpabook.jpashop.domain.Order.delivery -> jpabook.jpashop.domain.Delivery
주문하기 화면에서 submit 시 위와 같은 에러가 발생합니다. Delivery어쩌구에서 에러가 발생하는 것 같은데 원인을 모르겠습니다.
-
해결됨(신규 강의로 재오픈 예정) 스스로 구축하는 AWS 클라우드 네트워크 - 기본편
라우트테이블문의
기본적으로 생성되는 라우트테이블Name이 -로 되어있는녀석은 뭔가요? Main이라는 속성이 Yes로 되어있던데, 삭제는 또 가능한거같네요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
v3에서 Order은 영속상태인가&트랜잭션
orderV3 메서드를 보면 orderRepository.findAllWithItem(); 은 List<Order>를 반환합니다. 이때 Order은 영속상태인가요?1번과 연관된 질문입니다.만약 Order이 영속상태라면 트랜젝션은 어느시점에 열린건가요? orderV3 메서드나 OrderApiController 클래스 모두 @Transactional 이 보이지 않습니다. 만약 생략 되었다면 어느 경우에 @Transactional 이 생략되어도 트랜젝션이 열리는 것인지 궁금합니다.2번 질문의 경우 JPA책의 578쪽을 보면 '스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다' 라 적혀 있는데 트랜잭션이 없다면 영속성 컨텍스트가 열릴 수 있는지 궁금했습니다.
-
해결됨남박사의 파이썬 기초부터 실전 100% 활용
집합 요소에 문자열
집합 요소에 문자열을 넣고 출력하면 출력 순서가 달라집니다.예)a = set("안녕하세요")print(a)=> {'녕', '요', '안', '세', '하'} 왜 이렇게 되는지 궁금합니다!!
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
user router가 실행되지 않는 문제 질문드리겠습니다.
아래와 같이 saga도 정상적으로 동작하며, 회원가입 기능, DB에 user 정보 저장, 중복ID체크 오류 모두 정상적으로 동작합니다.근데 network탭을 확인해보니 아래와 같이 user router가 실행되지 않습니다.또한 cors문제도 해결했는데 Resopnse Headers탭에는 Access-Control-Allow-Origin이 적용되지 않아 질문드립니다.참고할 수 있는 코드 첨부하겠습니다.바쁘시겠지만 답변해주시면 정말 감사하겠습니다. <참고 코드>signupformimport React, { useCallback, useEffect } from 'react'; import { Button, Checkbox, Form, Input, message } from 'antd'; import { useSelector, useDispatch } from 'react-redux'; import Router from 'next/router'; import { formItemLayout, tailFormItemLayout } from './styles'; import { signupRequestAction } from '../../reducers/user'; const SignupForm = () => { const { signUpLoading, signUpDone, signUpError } = useSelector((state => state.user)); const dispatch = useDispatch(); const [form] = Form.useForm(); useEffect(() => { if (signUpDone) { Router.push('/'); message.success('정상적으로 회원가입이 완료됬습니다.'); } }, [signUpDone]); useEffect(() => { if (signUpError) { message.error(signUpError); } }, [signUpError]); const onSubmitForm = useCallback((value) => { console.log(value); dispatch(signupRequestAction(value)); }, []); return ( <section> <Form {...formItemLayout} form={form} name="signup" onFinish={onSubmitForm} scrollToFirstError > <Form.Item name="email" label="E-MAIL" rules={[ { type: 'email', message: 'E-mail형식이 올바르지 않습니다.', }, { required: true, message: 'E-mail을 입력하세요.', }, ]} > <Input /> </Form.Item> <Form.Item name="password" label="Password" rules={[ { required: true, message: '비밀번호를 입력하세요.', }, ]} hasFeedback > <Input.Password /> </Form.Item> <Form.Item name="confirm-password" label="Confirm Password" dependencies={['password']} hasFeedback rules={[ { required: true, message: '비밀번호를 입력하세요.', }, ({ getFieldValue }) => ({ validator(_, value) { if (!value || getFieldValue('password') === value) { return Promise.resolve(); } return Promise.reject(new Error('비밀번호가 일치하지 않습니다.')); }, }), ]} > <Input.Password /> </Form.Item> <Form.Item name="nickname" label="Nickname" rules={[ { type: 'text', }, { required: true, message: '닉네임을 입력하세요.', }, ]} > <Input /> </Form.Item> <Form.Item name="agreement" valuePropName="checked" rules={[ { validator: (_, value) => value ? Promise.resolve() : Promise.reject(new Error('약관에 동의해 주세요.')), }, ]} {...tailFormItemLayout} > <Checkbox> 이용약관에 모두 동의합니다. </Checkbox> </Form.Item> <Form.Item {...tailFormItemLayout}> <Button type="primary" htmlType="submit" loading={signUpLoading} >회원가입</Button> </Form.Item> </Form> </section> ); }; export default SignupForm; reducers/user.jsimport produce from 'immer'; import { dummyPost } from './post'; export const initialState = { me: null, signUpData: {}, loginData: {}, logInLoading: false, logInDone: false, logInError: null, logOutLoading: false, logOutDone: false, logOutError: null, signUpLoading: false, signUpDone: false, signUpError: null, nicknameEditLoading: false, nicknameEditDone: false, nicknameEditError: null, }; const dummyUser = (data) => ({ ...data, // email, password nickname: 'Mirrer', id: 2, Posts: [], Scrap: [], Board: [], }); 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 NICKNAME_EDIT_REQUEST = 'NICKNAME_EDIT_REQUEST'; export const NICKNAME_EDIT_SUCCESS = 'NICKNAME_EDIT_SUCCESS'; export const NICKNAME_EDIT_FAILURE = 'NICKNAME_EDIT_FAILURE'; export const BOARD_ADD_POST_TO_ME = 'BOARD_ADD_POST_TO_ME'; export const BOARD_REMOVE_POST_OF_ME = 'BOARD_REMOVE_POST_OF_ME'; export const SCRAP_ADD_POST_TO_ME = 'SCRAP_ADD_POST_TO_ME'; export const SCRAP_REMOVE_POST_OF_ME = 'SCRAP_REMOVE_POST_OF_ME'; export const loginRequestAction = (data) => { return { type: LOG_IN_REQUEST, data } }; export const signupRequestAction = (data) => { return { type: SIGN_UP_REQUEST, data } }; export const nicknameEditRequestAction = (data) => { return { type: NICKNAME_EDIT_REQUEST, data } }; const reducer = (state = initialState, action) => { return produce(state, (draft) => { switch (action.type) { case LOG_IN_REQUEST: draft.logInLoading = true; draft.logInDone = false; draft.logInError = null; break; case LOG_IN_SUCCESS: draft.logInLoading = false; draft.logInDone = true; draft.me = dummyUser(action.data); break; case LOG_IN_FAILURE: draft.logInLoading = false; draft.logInError = action.error; break; case LOG_OUT_REQUEST: draft.logOutLoading = true; draft.logOutDone = false; draft.logOutError = null; 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.signUpDone = false; draft.signUpError = null; 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 NICKNAME_EDIT_REQUEST: draft.nicknameEditLoading = true; draft.nicknameEditDone = false; draft.nicknameEditError = null; break; case NICKNAME_EDIT_SUCCESS: draft.me.nickname = action.data.nicknameEdit; draft.nicknameEditLoading = false; draft.nicknameEditDone = true; break; case NICKNAME_EDIT_FAILURE: draft.nicknameEditLoading = false; draft.nicknameEditError = action.error; break; case SCRAP_ADD_POST_TO_ME: draft.me.Scrap.unshift(dummyPost(action.data)); break; case SCRAP_REMOVE_POST_OF_ME: draft.me.Scrap = draft.me.Scrap.filter((v) => v.id !== action.data); break; case BOARD_ADD_POST_TO_ME: draft.me.Board.unshift(dummyPost(action.data)); break; case BOARD_REMOVE_POST_OF_ME: draft.me.Board = draft.me.Board.filter((v) => v.id !== action.data); break; default: break; } }); }; export default reducer; sagas/user.jsimport { all, fork, delay, put, takeLatest, call } from 'redux-saga/effects'; import axios from 'axios'; import { LOG_IN_REQUEST, LOG_IN_SUCCESS, LOG_IN_FAILURE, LOG_OUT_REQUEST, LOG_OUT_SUCCESS, LOG_OUT_FAILURE, SIGN_UP_REQUEST, SIGN_UP_SUCCESS, SIGN_UP_FAILURE, NICKNAME_EDIT_REQUEST, NICKNAME_EDIT_SUCCESS, NICKNAME_EDIT_FAILURE, } from '../reducers/user'; // function logInAPI(data) { // return axios.post('/api/login', data); // } function* logIn(action) { try { // const result = yield call(logInAPI, action.data); yield delay(1000); yield put({ type: LOG_IN_SUCCESS, data: action.data, }) } catch(err) { yield put({ type: LOG_IN_FAILURE, error: err.response.data }) } } // function logOutAPI() { // return axios.post('/api/logout'); // } function* logOut() { try { // const result = yield call(logOutAPI); yield delay(1000); yield put({ type: LOG_OUT_SUCCESS, }) } catch(err) { yield put({ type: LOG_OUT_FAILURE, error: err.response.data }) } } function signUpAPI(data) { console.log('signUpAPI 실행'); return axios.post('/user', data); } function* signUp(action) { console.log('signUp 실행'); try { const result = yield call(signUpAPI, action.data); console.log(result); yield put({ type: SIGN_UP_SUCCESS, }) } catch(err) { console.log(err); yield put({ type: SIGN_UP_FAILURE, error: err.response.data }) } } // function NicknameEditAPI() { // return axios.post('/api/NicknameEdit'); // } function* nicknameEdit(action) { try { // const result = yield call(NicknameEditAPI); console.log(action.data); yield delay(1000); yield put({ type: NICKNAME_EDIT_SUCCESS, data: action.data, }) } catch(err) { yield put({ type: NICKNAME_EDIT_FAILURE, error: err.response.data }) } } function* watchLogIn() { yield takeLatest(LOG_IN_REQUEST, logIn); } function* watchLogOut() { yield takeLatest(LOG_OUT_REQUEST, logOut); } function* watchSignUp() { console.log('watchSignUp 실행'); yield takeLatest(SIGN_UP_REQUEST, signUp); } function* watchNicknameEdit() { yield takeLatest(NICKNAME_EDIT_REQUEST, nicknameEdit); } export default function* userSaga() { yield all([ fork(watchLogIn), fork(watchLogOut), fork(watchSignUp), fork(watchNicknameEdit), ]); } back/app.jsconst express = require('express'); const cors = require('cors'); const postRouter = require('./routes/post'); const userRouter = require('./routes/user'); const db = require('./models') const app = express(); db.sequelize.sync() .then(() => { console.log('db 연결 성공'); }) .catch(console.error); app.use(cors({ origin: true, })); app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.get('/', (req, res) => { res.send('Hello Express'); }); app.get('/api', (req, res) => { res.send('Hello API'); }); app.get('/api/posts', (req, res) => { res.json([ { id: 1, content: 'Hello1'}, { id: 2, content: 'Hello2'}, { id: 3, content: 'Hello3'}, ]) }); app.use('/post', postRouter); app.use('/user', userRouter); app.listen(3065, () => { console.log('서버 실행 중'); }); back/routes/user.jsconst express = require('express'); const bcrypt = require('bcrypt'); const { User } = require('../models'); const router = express.Router(); router.post('/', async(req, res, next) => { try { const exUser = await User.findOne({ where: { email: req.body.email, } }); if (exUser) { return res.status(403).send('이미 사용중인 아이디입니다.'); } const hashedPassword = await bcrypt.hash(req.body.password, 10); await User.create({ email: req.body.email, password: hashedPassword, nickname: req.body.nickname, }); res.status(200).send('OK'); } catch (error) { console.error(error); next(error); } }); module.exports = router; back/models/user.jsconst DataTypes = require('sequelize'); const { Model } = DataTypes; module.exports = class User extends Model { static init(sequelize) { return super.init({ email: { type: DataTypes.STRING(30), allowNull: false, unique: true, }, nickname: { type: DataTypes.STRING(30), allowNull: false, }, password: { type: DataTypes.STRING(100), allowNull: false, }, }, { modelName: 'User', tableName: 'users', charset: 'utf8', collate: 'utf8_general_ci', sequelize, }); } static associate(db) { db.User.hasMany(db.Post); db.User.hasMany(db.Comment); db.User.belongsToMany(db.Post, { through: 'Like', as: 'Liked' }) } };
-
미해결
작업 폴더에 css폴더 만들었는데 사이드 바엔 css폴더가 보이지 않습니다.
강의에서 사이드 바의 CSS폴더에서 마우스 오른쪽 클릭해 파일 만들기해서 style.css 파일 만들라고 하셨는데 작업 폴더에 css폴더 만들었는데 사이드 바엔 css폴더가 보이지 않습니다. 어떻게 보이게 합니까?
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
사이드 바에 css폴더와 script폴더, images폴더 보이게 어떻게 합니까?
작업폴더 내에 index파일과 css폴더와 script폴더, images폴더 만들어 놓았는데 사이트 바에 css폴더와 script폴더, images폴더가 보이지 않는데 강의 화면에 처럼 사이드바에 보이게 어떻게 합니까?