묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
내장 SQL Server
SQL Server 2022에서는 SQL Server Native Client 드라이버가 제거된 것 같습니다. 이 경우에는 ODBC Driver 17 for SQL Server 드라이버를 활용하면 되나요?
-
미해결홍정모의 따라하며 배우는 C언어
13.1 파일 입출력의 작동원리 파일스트림
파일 스트림도 버퍼를 사용하는 스트림이라는 말씀이신가요?
-
미해결C++20 훑어보기
module 질문
1.ixx파일에서와 main.cpp 파일에서 둘다 std::cout 사용하려면 둘다에서 #include <iostream> 해야하나요? 제가 두군데 모두 사용하려니 ixx 파일에서만 추가해줬더니 main 파일에서 에러가 생기는군요 ㅠ 그렇다면강의에서처럼 #include <vector>추가 해줄 시 ixx파일에서만 사용가능하고 main 에서도 다시 추가를 해주어야 하는 것일까요? 모듈을 잘 사용하면 이제 .hpp 파일을 쓸 일은 없는건가요? 그리고 화면이 blur 됐다 선명해졌다 하는데... 이건왜 그런걸까요 ㅠㅠ blur가 될때 ; 가 : 인지 잘 표시가 안되는 어려움이 있네요.. ㅠ #include <iostream>
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 mvc2 - api예외처리 - @ExceptionHandler 강의 관련 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@ExceptionHandler 강의에서 @ResponseStatus(HttpStatus.BAD_REQUEST)를 지정했으므로 HTTP 상태코드 400으로 응답한다고 하셨는데 또 @ResponseStatus 는 HTTP 응답 코드를 동적으로 변경할 수 없다고 하시는데 @ResponseStatus(HttpStatus.BAD_REQUEST)는 동적으로 상태코드를 변경한거 아닌가요??
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
서비스 파일의 쿼리 빌더 관련 질문입니다.
안녕하세요.강의를 듣던 도중 갑자기 궁금한게 생겨서 글을 남기게 되었습니다.service 파일에서는 어떤 서비스의 로직만을 구현하는 것으로 들었었습니다.다만 해당 강의에서는 service 파일에 로직 + 쿼리빌더로 쿼리까지 사용하는 부분에서 repository.ts 파일을 따로 만들어서 분리시킬 필요는 없는건가요??
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
Vivado, Linux위해 재설치 필요할까요
데스크탑에 Vivado 2020.2가 깔려있고, 그 동안 계속 사용해왔습니다.첫 동영상처럼 2~3시간 과정을 거쳐 재설치를 해야할까요?그래야한다면 그럴만한 이유가 무엇인지 궁금합니다. 물론 시간이많으면 군말없이 해보겠지만 제가 시간이 여유치 않은 상황이라서요..! 시간적 여유가 없다면 기존 사용환경에서 진행해도 해당 강좌 수강하는 데에 차질 없을지 궁금합니다.감사합니다.
-
미해결[도서 포함] 현직 11년차 대기업 UX 디자이너가 알려주는 UX 취업 가이드
도서 발송 관련 문의
구글 시트에 정보를 기입했는데, 언제쯤 책이 발송되는지 궁금합니다.
-
해결됨Airflow 마스터 클래스
Bash Operator with Macros 수업에서 날짜에 대해 올바르게 해석했는지 질문드리고 싶습니다.
안녕하세요. airflow에 관한 질 높은 수업을 정말 잘 듣고 있습니다. 다른 공부보다 airflow 공부하는 게 재밌어서, 시간 가는 줄 모르고 노션에 정리하며 실습을 해보고 있습니다. 다름이 아니라, airflow의 날짜 개념에 대해 제가 올바르게 이해했는지 확인을 하고 싶어서 문의를 드리게 되었습니다.강의 내용은 Bash Operator with macros부분이며dags_bash_with_macros_eg1과 dags_bash_with_macros_eg2에 대한 airflow log 값에 대한 부분입니다 START_DATE와 END_DATE에 대해서 올바르게 이해했는지 여쭈어보고 싶습니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
포트번호 때문에 에러 날 수 있나요
프론트,백엔드,몽고db로 api 조회하는게 강의 듣고복습폴더에서 포트번호 똑같이 4000으로 했다가 에러나서 3000으로 바꿨더니 해결됐어요근데 어쩔땐 복습폴더에서 포트번호 4000으로 맞춰놓고 도커 접속했더니 잘만 되더라구요에러나는 기준이 궁금해요
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
redux toolkit ssr 질문
계속 똑같은 부분을 질문하고있는데 혹시 똑같은 오류가 발생하고 이 부분 코드는 양이 적고 코드 양이 적어서 오류의 원인을 아는데 용이 할꺼 같아 질문드립니다pages/about.js import React from "react"; import { useSelector } from "react-redux"; import Head from "next/head"; import { Avatar, Card } from "antd"; import AppLayout from "../components/AppLayout"; import wrapper from "../store/configureStore"; import { loadUserInfo } from "../reducers/user"; const Profile = () => { const { userInfo } = useSelector((state) => state.user); return ( <AppLayout> <Head> <title>ZeroCho | NodeBird</title> </Head> {userInfo ? ( <Card actions={[ <div key="twit"> 짹짹 <br /> {userInfo.Posts.length} </div>, <div key="following"> 팔로잉 <br /> {userInfo.Followings.length} </div>, <div key="follower"> 팔로워 <br /> {userInfo.Followers.length} </div>, ]} > <Card.Meta avatar={<Avatar>{userInfo.nickname[0]}</Avatar>} title={userInfo.nickname} description="노드버드 매니아" /> </Card> ) : null} </AppLayout> ); }; export const getStaticProps = wrapper.getStaticProps( (store) => async ({ req }) => { console.log("getStaticProps"); await store.dispatch(loadUserInfo(1)); } ); export default Profile; reducers/user.js export const loadUserInfo = createAsyncThunk( "/user/LoadUserInfo", async (data) => { const response = await axios.get(`/user/${data}`, data); return response.data; } ); const userSlice = createSlice({ name: "user", initialState, reducers: { addPostToMe(draft, action) { // 값을 하나만 전달해서 값이 바로 payload에 저장이된다 // 내가 만든 포스트를 me state에 저장하는 reducer draft.me.Posts.unshift({ id: action.payload }); }, removePostOfMe(draft, action) { draft.me.Posts = draft.me.Posts.filter((v) => v.id !== action.payload); }, }, // 외부에서 action을 만든것은 extraReducers로 가져와서 사용한다 주로 createAsyncThunk로 action을 만들 때 사용한다 extraReducers: (builder) => builder .addCase([HYDRATE], (state, action) => ({ ...state, ...action.payload.user, })) // 다른유저정보 가져오는 리듀서 .addCase(loadUserInfo.pending, (state, action) => { state.loadUserInfoLoading = true; state.loadUserInfoError = null; state.loadUserInfoDone = false; }) .addCase(loadUserInfo.fulfilled, (state, action) => { state.loadUserInfoLoading = false; state.me = action.payload; state.loadUserInfoDone = true; }) .addCase(loadUserInfo.rejected, (state, action) => { state.loadUserInfoLoading = false; state.loadUserInfoError = action.error; }) .addDefaultCase((state) => state), });이런 코드인데 // 다른유저정보 가져오는 리듀서 .addCase(loadUserInfo.pending, (state, action) => { state.loadUserInfoLoading = true; state.loadUserInfoError = null; state.loadUserInfoDone = false; }) .addCase(loadUserInfo.fulfilled, (state, action) => { state.loadUserInfoLoading = false; state.me = action.payload; state.loadUserInfoDone = true; }) .addCase(loadUserInfo.rejected, (state, action) => { state.loadUserInfoLoading = false; state.loadUserInfoError = action.error; })제가 이것저것 하다가 알게된거 action에 이부분을 전부 주석처리하게 되면 에러가 안난다는 겁니다 그래서 결정적으로 initalstate에 있는 변수들을 변경하는 과정이 브라우저의 정보와 서버의 정보를 다르게만드는 일을 하는것 같은데 혹시 의심가시는거 있으신가요?
-
해결됨[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
The binary version of its metadata is 1.9.0, expected version is 1.7.1.
auth = Firebase.auth강의에서 이 부분을 작성하고 코드를 돌린 후에 The binary version of its metadata is 1.9.0, expected version is 1.7.1. 라는 문제가 발생하였습니다. 찾아보니 최신버전이 아니라서 그럴 수 있다고 하여서 File -> Settings -> Appearance & Behavior -> System Settings -> Updates로 들어가서 최신 버전으로 업데이트도 해보고 build.grandle 파일 2개에 이것저것 추가도 해봤지만 결과는 같았습니다.buildscript { ext { agp_version = '7.4.1' } repositories { google() mavenCentral() } dependencies { classpath 'com.google.gms:google-services:4.3.15' } }// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id 'com.android.application' version '7.4.1' apply false id 'com.android.library' version '7.2.2' apply false id 'org.jetbrains.kotlin.android' version '1.7.10' apply false id("com.google.gms.google-services") version "4.3.15" apply false } task clean(type: Delete) { delete rootProject.buildDir }plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'kotlin-android-extensions' // 위 선언시 val joinBtn = findViewById<Button>(R.id.joinBtn) 이처럼 따로 설정 안해주고 바로 쓸 수 있다 id 'com.google.gms.google-services' } android { compileSdk 33 defaultConfig { applicationId "com.example.sogating_final" minSdk 19 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } buildFeatures { viewBinding true } } dependencies { implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.annotation:annotation:1.2.0' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.1' // 최신 버전으로 변경 implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1' // 최신 버전으로 변경 testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' implementation "com.yuyakaido.android:card-stack-view:2.3.4" implementation(platform("com.google.firebase:firebase-bom:32.2.2")) implementation("com.google.firebase:firebase-analytics-ktx") implementation("com.google.firebase:firebase-auth-ktx") }더 찾아보니 kotlin-version과 gradle-version을 변경하라고 하는데 지금 버전이 문법이 달라서인지 정확하게 나와있는것을 찾기 힘들어서 질문 드립니다!
-
미해결홍정모의 따라하며 배우는 C++
포인터 배열
이런 식으로 배열을 초기화 하게 되면, matrix에는 첫번째 원소의 주소만 저장이 되지만, 컴퓨터 내부에서는 row * col개의 원소 만큼의 주소를 matrix에 할당해주는 것인지 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
오류 코드 Validation과 메세지 처리 과정
@PostMapping("/add") public String addItemV4(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { //검증 로직 if(!StringUtils.hasText(item.getItemName())) { bindingResult.rejectValue("itemName","required"); } if(item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { bindingResult.rejectValue("price", "range", new Object[]{1000,1000000}, null); } if(item.getQuantity() == null || item.getQuantity() > 9999) { bindingResult.rejectValue("quantity", "max", new Object[]{9999}, null); } //특정 필드가 아닌 복합 룰 검증 if(item.getPrice() != null && item.getQuantity() != null ) { int resultPrice = item.getPrice() * item.getQuantity(); if(resultPrice < 10000){ bindingResult.reject("totalPriceMin", new Object[]{10000, resultPrice}, null); } } if (bindingResult.hasErrors()) { log.info("errors={}", bindingResult); return "validation/v2/addForm"; } ... }제가 생각하는 error 메세지 출력 과정(검증과정)이 맞는 것인지 확인부탁드립니다..!! (addItemV4 기준) 스프링 부트가 errors 메시지 파일을 인식…HTML 폼에서 넘어온 데이터가 검증로직에 걸리면 rejectValue를 통해 bindingResult에 에러 내용을 담는데 MessageCodesResolver을 통해 다음과 같은 오류 코드도 자동으로 생성한다. 예) required.item.itemName, required.itemName, required.java.lang.String, required 또한 사용자 입력 값을 저장해준다.bindingResult에 에러사항이 있으면 bindingResult의 에러 내용이 자동으로 model에 포함되고 다시 validation/v2/addForm으로 돌아간다.타임리프 화면을 렌더링 할 때 th:errors가 실행되면서 오류가 있다면 위에서 생성된 오류 메시지 코드를 순서대로 돌아가면서 메세지 파일과 만족하는 값을 찾아 나타내고(세부적인 것이 더 우선) 없으면 디폴트 메시지를 출력한다. 그리고 th:field는 정상 상황에서는 모델객체의 값을 보여주지만 에러가 있다면 FieldError에서 보관한 값을 꺼내어 나타낸다.추가적으로 만약 타입 오류와 같은 바인딩 오류라면 스프링은 FieldError 를 생성하면서 사용자가 입력한 값을 넣어둔다. 그리고 해당 오류를 BindingResult에 담아서 컨트롤러를 호출한다. 감사합니다!
-
미해결
로그인 요청으로 jwt토큰을 발급 해 줄때
발급하여 줄 때 서버에서 클라로 응답을 보내주잖아요그 응답 헤더에 토큰을 담아서 클라단으로 보내주나요아니면 응답 바디에 토큰을 담아서 클라단으로 보내주나요? 서버단에서 로그인 요청으로 토큰 발급 과정을 얘기하는겁니다!
-
미해결
노션 회의록 페이지가 삭제되었는데 복원을 할 수 없는 걸까요?
사이드 프로젝트를 팀원들과 진행하면서 남긴 회의록들이 노션에 페이지로 저장하고 있었습니다. 그런데 최근 노션을 보니 그 페이지가 사라져 삭제된 페이지 기록과 휴지통을 뒤져 복원을 하려 했지만 그 어떤 기록도 남겨져 있지 않았습니다. 업데이트 기록에도 회의록 페이지를 건든 흔적이 전혀 없고요. 혹시 페이지를 누군가가 작정하고 휴지통에서도 영구삭제하면 기록도 남겨지지 않는건가요? 팀원 누군가의 개인 페이지로 실수로 옮겨졌거나 하는 가능성을 고려하고 있지만 만약 영구삭제가 되어 기록도 없다면, 정말 복원할 방법이 없을까요??
-
미해결토비의 스프링 부트 - 이해와 원리
PropertySourcesPlaceholderConfigure에 대해 질문있습니다.
먼저 양질의 강의를 제공해주신 점에서 매우 감사하다는 말씀을 드리고 있습니다. 강의에서 /app란 값을 @Value로 주입을 해줬을때 ${contextPath}만 출력이 되는 부분에 질문이 있습니다. 제가 이해하기로는 커스텀 빈들이 먼저 주입이 되기 때문에 실제로 스프링부트의 인프라스트럭처 빈인 PropertySourcesPlaceholderConfigurer가 주입이 되지 않아 ${contextPath}가 나온다고 이해를 했습니다.제가 이해한게 맞다면 빈의 주입 순서에 따라 @Value의 값이 달라진다는 것인데, 만약 tobyspring.config.autoconfig.PropertyPlaceholderConfig 이 클래스가 tobyspring.config.autoconfig.TomcatWebServerConfig 이 클래스보다 더 늦게 주입이 된다면 여전히 ${contextPath}가 나오게 되는지 궁금합니다!또한 테스트를 한 번 해보고싶어서 계속해서 시도해봤지만 테스트 방법이 도저히 감이 오질않는데, 이럴 때는 어떻게 테스트를 하면 되는지 알 수 있을까요?
-
해결됨스프링 시큐리티 OAuth2
디폴트 로그인페이지인 /login 페이지에 대해 질문있습니다.
안녕하세요 강사님. 13분 20 초쯤 보시면 디폴트 로그인 페이지에서 href 걸려있는 oauth2-client-app이라는 링크를 누르게 되면 인가서버의 로그인페이지로 이동하는 것을 보실 수 있습니다. 여기서 제가 궁금한 것은 oauth2-client-app 이라는 링크를 누르는 순간 /oauth2/authorization/keycloak 경로의 요청이 Client 로 보내지게 되고, Client 에서 해당 경로로 요청이 들어오길 기다리고있던OAuth2AuthorizationRequestRedirectFilter 가 내부적으로 권한부여 요청을 보낼 수 있는 uri 인 authorization-uri 로 Redirection 시키게되어 현재 로그인페이지로 이동한것인가요? 보다 정확하게 알고싶어 이렇게 질문드립니다!! 아 그리고 강의 너무나도 잘듣고있습니다!
-
해결됨하루만에 배우는 AWS REDIS
aws 비용과 upstlash 비용차이가있을까요?
다음과 같은 양식으로 남겨주세요.질문을 한 배경 : 개발중에 제가 aws 에대해서 잘몰라서 질문드려요질문내용 : aws 비용이 대략적이게 몇배정도 걸리는지 경험상 예제로알려주실수있나요..?
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
에뮬레이터가 렉이 많이 걸릴떄 어떻게 해야하나요?
test device 실행 버튼 왼쪽편에 거꾸로 되있는 삼각형을 누르면 AVD manager가 있습니다. 거기서 위 사진과 같이 cold boot now를 클릭 해주시면 재부팅을 시켜주는것 같아요. 앱을 실행시키는 시간이 단축되더라구요혹시라도 다른 팁 있으면 댓글로 부탁드려요. 나름 최신형 노트북인데 실행시키는데 시간이 너무 많이 걸려서요. 사양은 i5 1340p 16gb arc350m 입니다.
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
npx cli 명령어가 작동되지 않습니다.
이전 강의까진 npx cli가 작동이 잘 되었는데 이번 강의 코드에선 npx cli -v 하니깐 에러가 나는 것도 아니고 아무것도 안 뜨고그냥 이렇게 끝나는데 이거 해결법이 있나요? 물론 node command -v는 잘 작동이 됩니다.