묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C++
벡터에 변수로 array 입력
std::vector<int> array; int arr[] = { 1, 2, 4, 5, 6 }; int* ar = new int[5]; ar = arr; //초기화 하는 법 std::vector<int> array2 = { 1, 2, 3, 4, 5 }; std::vector<int> array3 = arr; 벡터를 사용한 동적 배열의 경우에는 new int를 사용한 동적 배열처럼 변수로 입력 받아 배열을 만들 수 있는 방법이 없는지 궁금합니다. vector를 초기화 할 때 arr을 이용하려고 하니 계속 오류가 발생하는데, arr처럼 초기화 하기 위해서는 array3에 같은 값을 적어주는 방법 밖에는 없는 지 궁금합니다. 그리고 정적 배열에 비해 동적 배열이 가지는 장점이 사이즈를 런타임 중에 결정할 수 있다는 것만 있는지도 궁금합니다. 항상 친절하신 답변 정말 감사합니다.^^
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
slave 에는 jenkins를 설치할 필요 없나여?
jenkins를 설치하지 않은 것 같은데 동작하는 것 같아요
-
미해결설계독학맛비's 실전 Verilog HDL Season 2 (AMBA AXI4 완전정복)
[프로젝트-1] 참고, Address Map, DDRI Features
zynq DDR 컨트롤러 특성상 burst length 는 16개, burst size 는 8바이트가 최대네요. BASE_ADDR 는 최소 1MB 이후가 안전해 보이네요. (0x100000 ~ 0x3fffffff) zynq User Guide 에서 캡쳐한 것입니다.
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
서버 연동 질문드립니다
벌써 루키스님 강의를 보기 시작한지 2년이 넘었습니다.항상 좋은 강의 감사드립니다 특히 요즘 다이렉트 강의보면서 혼자 공부할 때는 많이 힘들었는데 엔진 구조 개발 부분에서 많이 얻어가고 있습니다.이 강의를 공개하신 시점도 벌써 2년이 지나게 되었는데 혹시 언리얼과 게임서버 연동 하실 때 이 서버를 그대로 사용 하실 것 인지 아니면 다른 방식으로 업그레이드 후 서버 개발 후 연동하실지가 궁금합니다.
-
해결됨스프링 핵심 원리 - 고급편
protected() 접근제어자
안녕하세요.AbstractTemplate 클래스의 call() 함수의 접근제어자를 protected 로 한 이유가 있을까요?private - 상속을 받지 못하므로 사용Xcall()은 execute() 가 호출하는 내부함수이므로 최대한 접근제어를 줄이면 좋으니까 protected() 사용한 것이 맞을까요?default와 public 로 굳이 외부로 노출할 필요없다. 이런 것 맞을까요? 감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
게시글 구현에 대한 질문
현재 게시글과 댓글에 대한 프로젝트를 만들고 있습니다.만들던 도중에 질문이 생겨 글을 올리게 되었습니다. 게시글과 댓글은 각각 다른 어그리거트인거 같은데,게시글 상세페이지를 보여주는 서비스에서다른 어그리거트인 댓글repository를 di해서 사용해도 문제가 없나요? 그리고게시글 댓글의 연관관계를 양방향으로 하지 않고단방향으로 manyToOne만 해놓았습니다.게시글 상세페이지 서비스에서는 댓글repository를 활용하여댓글 10개를 가져옵니다. (manyToOne로 엮인 게시글은 fetch join)이 댓글 10개를 게시글상세responseDto로 넘겨서 dto로 변환합니다.이 방식도 문제가 없을까요 패키지 구조는 이렇습니다.controller - post - comment service - post (게시글 상세 페이지를 보여주는 서비스 위치) - comment domain - post - comment repository - post - comment (댓글repository 위치)
-
미해결[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토큰을 발급 해 줄때
발급하여 줄 때 서버에서 클라로 응답을 보내주잖아요그 응답 헤더에 토큰을 담아서 클라단으로 보내주나요아니면 응답 바디에 토큰을 담아서 클라단으로 보내주나요? 서버단에서 로그인 요청으로 토큰 발급 과정을 얘기하는겁니다!