묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
소켓과 세션
소켓과 세션의 차이를 모르겠습니다. 소켓은 휴대폰에 비유를 하자면 세션은 뭔가요? 그리고 네트워크이론강의때에 손님,문지기,대리인이 필요하다고 말씀하셨는데 대리인이 왜필요한건지 모르겠어요 고로 문지기만 있어도 서로 소통이 잘 되지않나요? 똑같은말인데 소통하는데에 있어서 소켓이 두개만있으면 되지 왜 대리인까지 소켓을만들어서 3개의 소켓을쓰는지 모르겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
지연 로딩 질문드립니다.
질문. 지연로딩은 연관된 엔티티를 실제로 사용할ㄸ때 쿼리가 나가는데. (member.getTeam 프록시 객체익고 member.getTeam().getName() 하면 팀 엔티티를 조회하듯이) 그래서 지연로딩이 일어나는 위치가 2번째줄에서 일어나는게 맞는지 질문드립니다. orderItem.getItem()(연관된 엔티티 실제로 사용) 함으로써 프록시 초기확가 일어나서 orderitem을 조회하고, 여기서 getName() 에 의해서 프록시 초기확가 되어 item 조회 쿼리가 나가는게 맞는지 질문 드립니다.
-
해결됨Node.js 교과서 - 기본부터 프로젝트 실습까지
9장 세션을 DB에 저장시 리다이렉션 오류 발생
9장 강의를 실습하고 나서 session을 DB에 저장하고 싶어 connect-session-sequelize를 이용하여 MySQL의 session 테이블에 저장하는 데 까지는 성공했습니다. 하지만 강의 대로 passport를 이용하여 로그인을 구현한 상태로 로그인을 시도하면 로그인이 된 상태가 새로고침을 해야 반영되는 오류가 발생하는 것을 알게되었습니다. 로그인 버튼을 누른 후 정상적으로 redirect 될 때가 있고, 로그인 후 redirect를 해도 로그인이 안된 상태의 페이지에 머무르는 상태가 될떄도 있어서 정확히 제가 무슨 실수를 했는지 판단할 수가 없습니다. 더 당혹스러운 점은 session을 DB에 저장하지 않고 진행하면 이런 현상은 나타나지 않아서 DB에 session을 저장하는 과정에서 오류가 발생한다는 것 까지만 추측한 상태입니다. 로그인 할때마다 새로고침을 강제할 수도 없는 상황이라 어떻게 해결해야 할지 정말 막막한 상태입니다. 브라우저 캐시 문제인지도 확신이 서질 않습니다. 주변에 도움을 구할 수 있는 분이 없는 상태라 이렇게 제로초님께 질문하게 되었습니다. 혹시 제 코드에 문제가 있는지 봐주시면 정말 감사하겠습니다.또 이런 현상이 왜 나타나는지 제로초님의 생각을 들어보고 싶습니다. Github
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
WrappedApp created new store with.. 반복 오류 질문입니다.
안녕하세요! 강의 잘 듣고 있습니다. 다름이 아니라, 유사 에러 겪은 다른 학생들 질문 찾아봤는데도 해결이 안되서 질문드립니다. 다른 페이지에서는 저 에러가 안 뜨는데 index 페이지에만 가면 state가 전부 초기화가 되네요. 그리고 해당 문구가 계속 무한루프 돌듯이 반복되구요. 또 실행 잘 되다가 갑자기 저럴 때가 생깁니다. // reducers 내부 index.js import { HYDRATE } from "next-redux-wrapper"; import { combineReducers } from "@reduxjs/toolkit"; import userSlice from "./user"; import alertSlice from "./alert"; const rootReducer = (state, action) => { switch (action.type) { case HYDRATE: console.log("root reducer", state, action); return { ...state, ...action.payload }; default: { const combinedReducer = combineReducers({ user: userSlice.reducer, alert: alertSlice.reducer, }); return combinedReducer(state, action); } } }; export default rootReducer; // actions user.js export const fetchUser = async () => { const response = await api.get(`/users/load`); console.log(response.data); return response.data; }; export const loadUser = createAsyncThunk("user/loadUser", fetchUser); // reducers user.js import { createSlice } from "@reduxjs/toolkit"; import { loadUser } from "../action/user"; const initialState = { userData: null, requestId: null, auth: false, }; const userSlice = createSlice({ name: "user", initialState, extraReducers: (builder) => builder .addCase(loadUser.pending, (state, action) => { const { meta } = action; state.requestId = meta.requestId; return { ...state, }; }) .addCase(loadUser.fulfilled, (state, action) => { state.requestId = null; state.auth = true; state.userData = action.payload; return { ...state, }; }) .addCase(loadUser.rejected, (state) => { state.requestId = null; state.auth = false; return { ...state, }; }) .addDefaultCase((state) => { return { ...state }; }), }); export default userSlice; // store/index.js import { configureStore, getDefaultMiddleware } from "@reduxjs/toolkit"; import { createWrapper } from "next-redux-wrapper"; import rootReducer from "../reducer"; const store = configureStore({ middleware: [...getDefaultMiddleware()], reducer: rootReducer, devTools: process.env.NODE_ENV !== "production", }); export const makeStore = (context) => store; const wrapper = createWrapper(makeStore, { debug: process.env.NODE_ENV !== "production", }); export default wrapper; // pages/index.js // 컴포넌트 코드 생략 export const getServerSideProps = wrapper.getServerSideProps( async (context) => { console.log("getServerSideProps start"); console.log(context.req.headers); const cookie = context.req ? context.req.headers.cookie : ""; axios.defaults.headers.Cookie = ""; if (context.req && cookie) { axios.defaults.headers.Cookie = cookie; } context.store.dispatch(loadUser()); console.log("getServerSideProps end"); }, );
-
스프링 기반 REST API 개발
EventResource 질문입니다!
삭제된 글입니다
-
미해결C 와 C++ 을 동시에 배워보자 - 두들낙서의 C/C++
double
9:00 문제에서 float대신 double을 사용해 보았는데 컴파일 결과값이 정답과 전혀 다르네요 왜그런거죠?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
Inconsistent Accessibility
강의 한번 듣고 처음부터 다시 복습 중인데요 이전에도 한 강 들을 때마다 몇번씩 다시 복습 하고 그래서 왜 이런지 도통 이해가 가질 않습니다 현재 단계는 Player 클래스 생성하고, 프로퍼티 및 Initialize 함수 생성하고, 그에 맞춰 Program 및 Board 클래스에 수정을 가하는 부분입니다 문제는 이전에는 한번에도 그러지 않다가 Board 클래스의 Initialize 함수에 파라미터로 Player를 넣을때 Inconsistent Accesibility 오류가 생깁니다 해당 함수의 Accesibility보다 Player 클래스의 Accesiblity가 낮아서 생기는 걸로 보이기에 Player 클래스 앞에 Public을 추가하면 해결을 됩니다만 제가 몇번이고 복습한 내역에서도 강의에서도 이 부분에 Public을 추가 하신적은 없었습니다 어떻게 된건지 알려주세요 namespace MMO2_CompleteReview { public class Board { const char CIRCLE = '\u25cf'; public int Size { get; private set; } public TileType[,] Tile { get; private set; } Player _player; public enum TileType { Empty, Wall } public void Initialize(int size, Player player) { if (size % 2 == 0) return; Size = size; _player = player; Tile = new TileType[Size, Size]; //GenerateBinaryTree(); GenerateSideWinder(); } namespace MMO2_CompleteReview { class Player { public int PosY { get; private set; } public int PosX { get; private set; } Random random = new Random(); Board _board; public void Initialize(int posY, int posX, int destY, int destX, Board board) { PosY = posY; PosX = posX; _board = board; } } }
-
해결됨더 자바, 코드를 조작하는 다양한 방법
바이트코드 조작 강의 매우 유익했습니다.
컴포넌트 스캔 동작이 전부터 궁금했었는데, 명쾌한 설명 정말 감사합니다!
-
해결됨스프링 웹 MVC
세션에서 넘어오는 데이터 바인딩
강의 3분 정도의 설명에 session 에 있는 데이터를 받아와 @ModelAttribute 의 객체에 바인딩이 가능하다고 하셔서, 테스트를 작성해봤지만 실패해 테스트를 어떻게 작성해야하는지 질문드립니다.. 제가 시도한 방법은 다음과 같습니다. <컨트롤러> @Controller public class TestController { @PostMapping("/session") @ResponseBody public Event sessionTest(@ModelAttribute Event event){ return event; } } <테스트 코드 > @WebMvcTest class TestControllerTest { @Autowired MockMvc mockMvc; @Test void sessionTest() throws Exception { MockHttpSession session = new MockHttpSession(); session.setAttribute("name", "jaden"); mockMvc.perform(post("/session") .session(session) .param("limit", "10")) .andDo(print()) .andExpect(status().isOk()); } } <실행결과> 세션을 목업해서 넘겨봤는데, 바인딩이 되지 않아 null 이 찍힙니다. 또한, 두번째로 시도한 방법은 mockMvc 에 .sessionAttr 을 넣을 수 있어서 사용해 봤습니다. <테스트코드> @Test void test2() throws Exception{ mockMvc.perform(post("/session") .sessionAttr("limit", "10") .param("name", "jaden")) .andDo(print()) .andExpect(status().isOk()); } <실행결과> 하지만 마찬가지로 바인딩이 잘 되지 않는 것 같더라구요.. 어떻게 테스트 코드를 작성해야 제대로 바인딩을 할 수 있을까요? --- 아니면 혹시, session 에서 값을 받아와 setter 를 통해 직접 바인딩 해줄 수 있기 때문에 그렇게 말씀하신걸까요? 좋은 강의 감사드립니다!
-
해결됨홍정모의 따라하며 배우는 C++
namespace 사용 관련 질문 드립니다.
안녕하세요. 강의에 나온 대로 코드를 조금 변형해서 짜는 중인데 namespace에 걸린 함수를 어떻게 불러오느냐에 따라 값이 달라서 궁금해서 질문드립니다. #include <iostream> using namespace std; namespace work1 { int a = 1; int doSomething() { a += 3; return a; } } namespace work2 { int a = 2; int doSomething() { a += 5; return a; } } int main() { cout << "<First Try> \nwork1_a: " << work1::a << endl; cout << "\nwork2_a: " << work2::a << endl; cout << "\nwork1_doSomething: " << work1::doSomething << endl; cout << "\nwork2_doSomething: " << work2::doSomething << endl; cout << "\nwork1_doSomething(): " << work1::doSomething() << endl; cout << "\nwork2_doSomething(): " << work2::doSomething() << endl; work1::a; work1::doSomething; work2::a; work2::doSomething; cout << "\n<Second Try> \nwork1_a: " << work1::a << endl; cout << "\nwork2_a: " << work2::a << endl; cout << "\nwork1_doSomething: " << work1::doSomething << endl; cout << "\nwork2_doSomething: " << work2::doSomething << endl; cout << "\nwork1_doSomething(): " << work1::doSomething() << endl; cout << "\nwork2_doSomething(): " << work2::doSomething() << endl; return 0; } 이걸 출력하면 <First Try> work1_a: 1 work2_a: 2 work1_doSomething: 0056107D work2_doSomething: 00561145 <Second Try> work1_a: 4 work2_a: 7 work1_doSomething: 0056107D work2_doSomething: 00561145 work1_doSomething(): 7 work2_doSomething(): 12 이렇게 나옵니다. doSomething에서 ()를 붙이지 않은 경우에는 16진수로 나오고, 코드를 돌릴 때마다 계속 바뀌던데 이거는 주소값 인가요? 그게 아니라면 왜 이렇게 나오는 지 궁금합니다. 그리고 second try에서는 work1_a와 work2_a의 값이 4와 7이 되어서 doSomething()의 값도 7과 12로 변하는데, 이는 First try에서 cout << work1::doSomething() << endl; cout << work2::doSomething() << endl; 을 하면서 a의 값이 4와 7로 변했기 때문인 것으로 보입니다. 그런데 main 함수 내에서 work1::a; work1::doSomething; work2::a; work2::doSomething; 을 쓰고 second try 이하를 출력하나, 이를 빼고 바로 second try 이하 부분을 출력하나 같은 결과(a값이 각각 4와 7)인데, 그렇다면 메인 함수에서 단순히 work1::a; work1::doSomething;을 쓸 때에는 어떤 효과를 가지게 되나요? 메인 함수 내에서 work1::doSomething; 을 쓴다면 일종의 정의(definition)가 되는 것이고, work1:doSomething()을 하면 그때부터 함수를 사용하는 것이라고 봐도 될까요?
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
toggleOneItem관련 질문드립니다.2
답변 감사합니다. 질문이 너무 안좋았네요 죄송합니다. 동영상 4분30초 정도에서 설명해 주신부분이 잘 이해가 안되네요 toggleOneItem의 todoItem.completed =!todoItem.completed 는 하위에서 이벤트 전달로 올라온 파라메터 todoItem의 값을 변경하는 거고this.todoItems[index].completed = !this.todoItems[index].completed 는 App에 있는 배열의 값을 변경하는건데 이 두개가 왜 동일한건지 이해가 안갑니다. 바쁘시겠지만 답변 부탁 드리겠습니다.
-
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
postman으로 json파일 불러올때
삭제된 글입니다
-
풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]
안녕하세요 이후 커리큘럼 문의 드립니다
삭제된 글입니다
-
미해결홍정모의 따라하며 배우는 C언어
%lld 형식지정자 질문 드립니다!
%lld 가 long long int의 자료형을 받을 수 있는 형식 지정자로 기억하는데, long long int는 8바이트 = 64비트의 사이즈를 가지니 signed의 경우 2^63인 9223372036854775807 까지 표현이 되어야하는 것으로 이해하고 있습니다. 허나 강의 내용 마지막에서 x86 환경 %lld 에서 INT_MAX + 1 을 출력했을때 오버플로우가 발생하는 이유를 알고 싶습니다! 32비트 환경에서는 64비트 크기인 long long int 자체가 지원이 안되고, 32비트의 모든 자료형의 최대 크기가 32비트로 제한이 되는건가요? 이해에 도움을 주시면 감사하겠습니다!
-
미해결실전 자바스크립트
프로토타입 예제에서 궁금한게 있습니다.
제가 이해한 것은 const person1 = new Person('mike') 를 하면 현재 person1은 Person.prototype을 참조하는게 되고 나중에 Person.prototype = newPrototype; 을 실행하게되면서 person2가 결국 Person.prototype의 이름을 가져가게되는것 같은데...그러면 person1은 예전 함수가 Person.prototype 이름 말고 무엇을 가지게되나요??? 헷갈리네요 제가 잘못 이해한것일까요.. ㅠ 질문도 잘 이해되게 썻는지 모르겟네요
-
미해결SVG 마스터
svg 파일 불러오기
안녕하세요! 섹션5 그라이언트 부분 수업을 듣고 있습니다! 수업 자료를 다운 받아보니 확장자가 ai로 뜨는데 포토샵이나 변환 프로그램을 이용해 svg파일로 변환시키면 불러오기는 되지만 path 태그가 안떠서요ㅠㅠ 이럴 땐 어떻게 해야 하나요??
-
미해결더 자바, Java 8
안녕하세요.
안녕하세요. SI 회사를 다니고 있는 3년차 개발자입니다. 코딩실력이 그렇게 좋은 편은 아닙니다. 다름아니라 Mybatis,Ibatis를 회사에서 많이 사용하고있는데요. where절에 있는 조건을 매핑해서 가져오는게 아니라, 전체를 다 가져와서 함수형 인터페이스인 Predicate를 이용하여 조건을 작성후 가져오는게 어떤점에선 성능상에 유리한점이 있는걸 테스트 결과로 확인했습니다. 근데 그렇게하면 도메인에 맞지않을수도있다. 웹하고는 거리가 먼거 아니냐라는 소리를해서 현업에서는 알고있어도 사용하지 않고있어요. 같은팀원들이 아직 1.8에대한 공부나 지식이 없는거 같아서요. 아무튼 함수형프로그래밍은 웹에서 사용하면 안되는건가요?강의는 잘보고있고 자바 1.8의 기능을 이용한 프로젝트를 콘솔이용해서 간단하게 하고있습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
무슨 오류일까요
음.. 제가 해결..할수가 없었습니다
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
mybatis 와 jpa
영한님 mybatis 와 jpa 의 개념을 둘다 모르고있는데 어떤것을 먼저 공부하는것이 좋을까요?
-
미해결대세는 쿠버네티스 (초급~중급편)
name: empty-dir 관련
name: empty-dir은 다른 이름으로 설정해도 되는지요? 예를 들면 name: docu-dir 같이 container1 and container2에 동일하게 설정한다면 empty-dir과 동일한 결과를 가져오는지 궁금합니다.