inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

176만명의 커뮤니티!! 함께 토론해봐요.

강의에서 추출한 하이트맵입니다.

미해결

배틀로얄 게임을 만들어보며 배우는 언리얼 게임 개발

이후 강의를 따라하는 데 필수 자료인 하이트맵이 올려져 있지 않아서 섹션 11에 올라와 있는 프로젝트 파일에서 추출하고 oxipng로 용량 줄였습니다. https://blog.kakaocdn.net/dn/EwIoH/btrLOnofkDR/7aCsdpD3jHqUb7xRIUmexk/Original_Heightmap.zip?attach=1&knm=tfile.zip https://blog.kakaocdn.net/dn/tmuNG/btrLOmizx8N/1pX94gZBXtkKlFmADgbC40/Original_Heightmap.z01?attach=1&knm=tfile.z01 https://blog.kakaocdn.net/dn/85oKI/btrLK5bAnaQ/CaKwhqgXamCYBrSB4TWmUk/Original_Heightmap.z02?attach=1&knm=tfile.z02 업로드할 곳이 없길래 분할 압축해서 티스토리 블로그에 올렸는데 외부 링크 다운로드 제한이 있는진 잘 모르겠습니다. 자유주제로 올리면 강의 페이지에서 대시보드나 커뮤니티 눌렀을 때 글이 바로 뜨지 않아서 필요한 분들이 못 보실까봐 부득이하게 질문 카테고리로 올립니다.

  • unreal
인스터디 댓글 0 좋아요 2 조회수 451

리셋버튼이 스테이지1로 바꿔주지 않습니다.

해결됨

[유니티6] 따라하면서 배우는 하이퍼캐주얼게임 시리즈 01

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); }

  • unity
  • C#
Gaia 댓글 1 좋아요 2 조회수 294

UE 공부/취업관련

미해결

게임 프로그래머 취업 전략 가이드

안녕하세요 C++만 계속 공부하다가 언리얼엔진 공부를 시작했는데 언리얼5가 나온 만큼 최신버전인 5로 공부를 시작했습니다. 그런데 여러 게임 회사들을 살펴보니 대부분은 4 경험/능력을 요구하는 것 같더라구요.. (제가 가고 싶은 몇몇 회사들도 5보다는 4를 요구하고있고 5를 사용하는 곳은 신기술 등에 대해서 추가로 요구하는 부분이 많아서 쉽지 않을 것 같습니다ㅜ) 언리얼4와 5가 많이 다른가요? 지금 하고 있는 5 (udemy로 강의를 듣고 있습니다) 를 중단하고 그냥 4를 쭉 공부하는 게 나을지, 아니면 5로 공부하다가 4로 넘어가도 금방 적응이 가능해서 괜찮을지 궁금합니다. 자체 엔진을 사용하는 게임회사에 지원하는 경우에도 언리얼 포폴을 사용해도 무관할까요..? 언리얼 공부 방법에 대해서도 조언을 얻고 싶습니다. 강의(혹은 책)를 되는대로 들으면서 흡수한 다음 이걸 적용시켜서 게임을 만들어보면 되는 걸까요? 아니면 만들 포트폴리오와 기술 내용?을 정해서 목표로 설정한 후, 공식문서나 필요한 내용을 다룬 강의/책 등을 선택적으로 찾아보고 헤딩하면서 일단 만들어보려고 하는 게 더 나은 방법일까요? (내년 여름에 취업하는 게 목표입니다. ) 언리얼과 상관없는 질문이긴 한데.. C++은 어떤식으로 공부를 해야할 지 모르겠습니다. 루키스님 C++강의를 완강하고 나서 지금 modernC++을 공부중이고 알고리즘 공부도 하고 있습니다. 그런데 알고리즘 문제 풀이를 할 때는 modernC++이나, C++의 다형성,상속성,은닉성 등과 관련된 것들을 연습해볼 수가 없는 것 같습니다. 이런 것들을 연습하려면 어떻게 하는 게 좋을까요..? 언리얼을 하면서 C++코드 작성하는 것 정도면 충분한 연습이 될까요? 질문이 많아서 죄송하고, 좋은 강의 꾸준히 올려주셔서 정말 감사드립니다. 정말 많은 도움을 받았습니다. 즐거운 추석 보내세요 :)

  • 포트폴리오
  • 기술면접
최지원 댓글 1 좋아요 0 조회수 352

jpabook.jpashop.domain.Order.delivery -> jpabook.jpashop.domain.Delivery

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

주문하기 화면에서 submit 시 위와 같은 에러가 발생합니다. Delivery어쩌구에서 에러가 발생하는 것 같은데 원인을 모르겠습니다.

  • JPA
  • java
  • 웹앱
  • spring
  • spring-boot
machine0716 댓글 1 좋아요 0 조회수 216

라우트테이블문의

해결됨

(신규 강의로 재오픈 예정) 스스로 구축하는 AWS 클라우드 네트워크 - 기본편

기본적으로 생성되는 라우트테이블 Name이 -로 되어있는녀석은 뭔가요? Main이라는 속성이 Yes로 되어있던데, 삭제는 또 가능한거같네요?

  • network
  • aws
zergcity 댓글 1 좋아요 0 조회수 296

v3에서 Order은 영속상태인가&트랜잭션

해결됨

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

orderV3 메서드를 보면 orderRepository.findAllWithItem(); 은 List<Order>를 반환합니다. 이때 Order은 영속상태인가요? 1번과 연관된 질문입니다. 만약 Order이 영속상태라면 트랜젝션은 어느시점에 열린건가요? orderV3 메서드나 OrderApiController 클래스 모두 @Transactional 이 보이지 않습니다. 만약 생략 되었다면 어느 경우에 @Transactional 이 생략되어도 트랜젝션이 열리는 것인지 궁금합니다. 2번 질문의 경우 JPA책의 578쪽을 보면 '스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다' 라 적혀 있는데 트랜잭션이 없다면 영속성 컨텍스트가 열릴 수 있는지 궁금했습니다.

  • java
  • JPA
  • spring-boot
  • spring
tksrleo123 댓글 1 좋아요 0 조회수 283

집합 요소에 문자열

해결됨

남박사의 파이썬 기초부터 실전 100% 활용

집합 요소에 문자열을 넣고 출력하면 출력 순서가 달라집니다. 예) a = set("안녕하세요") print(a) => {'녕', '요', '안', '세', '하'} 왜 이렇게 되는지 궁금합니다!!

  • python
  • 웹-크롤링
kimyongjun0129 댓글 1 좋아요 2 조회수 236

user router가 실행되지 않는 문제 질문드리겠습니다.

해결됨

[리뉴얼] React로 NodeBird SNS 만들기

아래와 같이 saga도 정상적으로 동작하며, 회원가입 기능, DB에 user 정보 저장, 중복ID체크 오류 모두 정상적으로 동작합니다. 근데 network탭을 확인해보니 아래와 같이 user router가 실행되지 않습니다. 또한 cors문제도 해결했는데 Resopnse Headers탭에는 Access-Control-Allow-Origin이 적용되지 않아 질문드립니다. 참고할 수 있는 코드 첨부하겠습니다. 바쁘시겠지만 답변해주시면 정말 감사하겠습니다. <참고 코드> signupform import 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.js import 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.js import { 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.js const 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.js const 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.js const 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' }) } };

  • Next.js
  • redux
  • react
  • nodejs
  • express
hib4888 댓글 1 좋아요 0 조회수 434

사이드 바에 css폴더와 script폴더, images폴더 보이게 어떻게 합니까?

미해결

[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드

작업폴더 내에 index파일과 css폴더와 script폴더, images폴더 만들어 놓았는데 사이트 바에 css폴더와 script폴더, images폴더가 보이지 않는데 강의 화면에 처럼 사이드바에 보이게 어떻게 합니까?

  • HTML/CSS
  • jquery
  • 웹 디자인
HL5PFM 댓글 2 좋아요 1 조회수 366

3:12 초의 내용을 인덱스드 시그니쳐 처럼 어떻게 쓰나요?

미해결

[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편

3:12 초의 코드를 보면 변수 aaaa의 속성에 type의 모든 속성을 넣어주어야 하고 있습니다. (모든 속성 안넣으면 빨간줄 뜸) 인덱스드 시그니쳐처럼 let temp: A = { Human: "Human" }; let temp: A = { Human: "Human", Mammal: "Mammal" }; (작성한 코드처럼 ) 필요한 만큼만 넣고 상황에 따라 확장하려면 어떻게 해야하나요?

  • typescript
콩팥팥죽 댓글 1 좋아요 0 조회수 225

@ModelAttribute 어노테이션에 대해 질문 있습니다.

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

@ModelAttribute 에 대해 의문이 생겨 커뮤니티 글도 읽어보고 구글링도하면 찾아봤는데 이제 제가 생각한 부분이 맞는건지 궁금해서 질문을 합니다. 아래 두 함수는 똑같은 기능을 구현하고 있는건가요? @GetMapping("/add") public String addItem(@Valid ItemSaveForm formm, Model model) { model.addAttribute("formm", formm); return "validation/v3/addForm"; } @GetMapping("/add") public String addItem(@Valid @ModelAttribute("formm") ItemSaveForm formm) { return "validation/v3/addForm"; }

  • spring
  • MVC
감바스 댓글 1 좋아요 0 조회수 429

하나의 프로세스만 사용한다는 의미

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

안녕하세요 우연 찮게 강의를 보게 되었는데 도움이 많이 됩니다. 감사합니다! 미천한 실력이라 기초적인 질문 하나 하고싶습니다. synchronized가 하나의 서버, 하나의 프로세스에서만 적용된다는 의미는 예를들어, 스프링부트로 하나의 어플리케이션을 뛰운다는 단위인가요? 하나의 서버에서 여러 어플리케이션을 뛰운다면 synchronized는 각 어플리케이션에서만 동기화가 적용되는 것일까요 ?

  • java
  • spring
  • 동시성
이북자 댓글 1 좋아요 0 조회수 350

HTTP 메시지 컨버터 사용 시 핸들러 어댑터의 반환 값

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

안녕하세요! 강의를 들으며 결국 HandlerAdapter는 내부 로직을 통해 핸들러 종류에 관계없이 ModelAndView를 생성해 DispatcherServlet에게 전달해준다고 이해했습니다. 그렇다면, @ResponseBody 등을 사용해 HTTP 메시지 바디에 값을 직접 입력하는 경우에도 ModelAndVIew가 반환되나요? ModelAndVIew 가 내부적으로 뭔가 HTTP 메시지 바디를 그대로 들고있을 수 있는 field 같은 것이 있는건지 궁금합니다. 감사합니다!

  • MVC
  • spring
현상혁 댓글 1 좋아요 1 조회수 476

강의 잘 듣고있습니다. 그런데 소스코드에 오타가 있는듯합니다.

미해결

[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문

참조를 이용한 값의 교환 함수 swapA(&wallet1, &wallet2); 에서 &를 빼주셔야하고 값을 이용한 값의 교환 함수 swapC(&wallet1, &wallet2); 에서도 &를 빼주셔야할듯 합니다.

  • 참조자
  • swap
  • C++
Ambition 댓글 0 좋아요 1 조회수 354

Nginx의 Proxy를 이용한 설계 관련해서 질문있습니다

미해결

따라하며 배우는 도커와 CI환경 [2023.11 업데이트]

안녕하세요! 좋은 내용으로 강의해주셔서 정말 감사드립니다. 질문이 하나 있습니다. 리액트에서 axois.get("/api/values") 이런식으로 요청해서 백엔드에서 응답을 받아오는데, 그 부분이 위의 사진에서 노란색 부분인가요? 리액트에서 요청하면 다시 엔진엑스를 거쳐서 /api가 있으니까 백엔드 가서 응답을 받아오는건가요, 아니면 프론트에서 백엔드로 바로 요청을(? 어떻게 하는지는 모르겠지만..) 해서 응답을 받아오는 건가요? 저 노란색 과정이 잘 이해가 안가서 조금 더 상세하게 설명해주실 수 있나요? 감사합니다. 추석 잘 보내세요!

  • cicd
  • travis-ci
  • 데이터 엔지니어링
  • github
  • aws
  • docker
asdf5184 댓글 1 좋아요 0 조회수 738

passport-local 사용.

미해결

탄탄한 백엔드 NestJS, 기초부터 심화까지

소개해주시는 nestjs 문서에서는, 로그인시의 Authentication을 passport-local strategy를 통해 구현하고 있습니다. 다만 강사님 강의에서는 이를 사용하지 않고, authService의 jwtLogin으로만 처리합니다. 이 부분에서 질문이 있습니다. 제가 느끼기에, 굳이 passport local 전략은 필요하지 않다고 생각합니다. 공식 문서에서 굳이 이를 사용한 이유가 있을까요? passport local은 로그인 때만 사용되는 전략인가요? 그러면 jwt등의 사용자 접속을 유지시키는 전략과는 다르다고 봐야하나요? 그것(2번)이 아니고, passport local도 jwt 전략과 같은 개념부류에 속한다면, stateful혹은 stateless한 방식으로 사용자 접속을 유지시켜야할텐데 이를 어떻게 처리하는지 궁금합니다. 좋은 강의 감사합니다.

  • nodejs
  • express
  • mongodb
  • ssr
  • NestJS
Anthony Jo 댓글 3 좋아요 1 조회수 650

vs code 인터프리터 설정 (3)

미해결

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

https://inf.run/scRw 안녕하세요. 인터프리터 설정 관련으로 위 문의를 남겼던 수강생입니다. 강사님께서 말씀하신 대로 해봤는데도 문제가 해결되지 않아서 다시 문의 드립니다. 새로운 계정에서도 해보고, 내부망도 아닙니다. 인터프리터 설정에서 막혀서 아직 시작도 못하고 있습니다... 다른 문제가 있을까요?

  • python
이건호 댓글 1 좋아요 0 조회수 266

6-7 좌표 정렬 문제 질문

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

안녕하세요 강의 잘 듣고 있습니다. compareTo 메소드를 정의하는게 이해가 잘 안되는 부분이 있습니다. compareTo 메소드를 재정의 해주었는데 그러면 Collections.sort(리스트); 이렇게 해주면 Collections 내부에서 제가 재정의한 compareTo 메소드를 사용해 알아서 리스트를 정렬해준다고 이해하면 되는걸까요?

  • java
  • 코테 준비 같이 해요!
오늘내일 댓글 1 좋아요 0 조회수 197

Memory limit exceeded 에러

미해결

15일간의 빅데이터 파일럿 프로젝트

Impala 쿼리 실행 시 위와 같은 에러가 나는 경우가 있습니다 Impala 데몬 메모리 제한이 낮게 잡혀 있어서 생기는 문제인데요 해결방법은 클라우데라 매니저 -> Impala -> 구성 -> mem_limit 로 검색 -> Impala Daemon 메모리 제한을 늘려주시면 됩니다 저는 1GiB 로 늘려서 쿼리를 실행에 성공했습니다

  • redis
  • ZooKeeper
  • Kafka
  • Impala
  • Flume
  • 데이터 엔지니어링
  • bigdata
  • Hadoop
chul kim 댓글 1 좋아요 0 조회수 719

인기 태그

인프런 TOP Writers

주간 인기글