묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Memory Pool#2 삭제 Lockfree stack 과의 값 교환 차이가....?
이전에 Lock free stack 에서는 ABA problem 이 발생하지 않는다고 별도로 들고 있었기 때문이라고 하셨는데 이전에도 링크드 리스트 처럼 포인터를 들고 있던 방식이고 현재 이것도 그것과 유사한 방식인데 왜 이전에는 ABA 가 발생하지 않았다고 하는건지 잘 이해가 가질 않네요 이전 lock free stack 에서 삭제 할때의 로직과 크게 달라보이진 않는것 같은데요..이전 lock free stack 에서도 ABA Problem 이 발생하지 않나요?차이점이 명확하게 어떤 부분인지 모르겠습니다..답변좀 부탁드려요! Memory Pool#2 시간은 26:55 초에서 정도에서..
-
미해결Slack 클론 코딩[실시간 채팅 with React]
proxy 504 에러
몇 번 재확인 해도 webpack proxy 설정을 잘 한 것 같은데혹시 proxy 설정을 보여주신대로 하면 network에 Request URL이 3095로 되는게 정상 아닌가요?dev server 껐다 다시 실행, localhost를 127.0.0.1로 바꿔서 실행도 해봤습니다. 웹팩이 제대로 연결(?)이 안된건지.. 504 Gateway timeout은 새로고침하거나 네트워크 장치를 다시시작하라는데,. 좀 더 구글링 해보겠습니다. 근데 이게 근본적인 원인은 아닌것같아서.. 질문남깁니다.
-
미해결C 프로그래밍 - 입문부터 게임 개발까지
질문있습니다!
자꾸 알 수 없는 오류가 발생해서 여기저기 찾아보고 해결해보려고 헤더에 <stdlib.h>도 넣고 해봤고 나도코딩 님께서 올리신 소스코드를 그대로 복사 붙여넣기 해서 실행하는데도 아래 사진과 같은 상태로 에러가 나서 여쭤봅니다.혹시 왜 에러가 나는지, 그리고 그 해결법을 알 수 있을까요..?혹시 몰라 소스코드도 첨부합니다.#include <stdio.h>#include <time.h>#include <stdlib.h>// 10마리의 서로 다른 동물 (각 카드 2장씩)// 사용자로부터 2개의 입력값을 받아서 -> 같은 동물 찾으면 카드 뒤집기// 모든 동물 쌍을 찾으면 게임 종료// 총 실패 횟수 알려주기int arrayAnimal[4][5]; // 카드 지도 (20장의 카드)char* strAnimal[10]; // 10개의 공간배열을 만드는데, 거기에 들어가는게 문자 포인터int checkAnimal[4][5]; // 뒤집혔는지 여부 확인void initAnimalArray();void initAnimalName();void shuffleAnimal();int getEmptyPosition();int conv_pos_x(int x);int conv_pos_y(int y);void printAnimals();void printQuestion();int foundAllAnimals();int main(void){ srand(time(NULL)); initAnimalArray(); initAnimalName(); shuffleAnimal(); int failCount = 0; // 실패 횟수 while (1) { int select1 = 0; // 사용자가 선택한 처음 수 int select2 = 0; // 사용자가 선택한 두번째 수 printAnimals(); // 동물 위치 출력 printQuestion(); // 문제 출력 (카드 지도) printf("뒤집을 카드를 2개 고르세요 : "); scanf_s("%d %d", &select1, &select2); if (select1 == select2) // 같은 카드 선택 시 무효 continue; // 좌표에 해당하는 카드를 뒤집어 보고 같은지 안 같은지 확인 // 정수 좌표를 (x,y) 로 변환 int firstSelect_x = conv_pos_x(select1); int firstSelect_y = conv_pos_y(select1); int secondSelect_x = conv_pos_x(select2); int secondSelect_y = conv_pos_y(select2); // 카드가 뒤집히지 않았는지 확인하고 같은 동물인지 확인 if ((checkAnimal[firstSelect_x][firstSelect_y] == 0 && checkAnimal[secondSelect_x][secondSelect_y] == 0) && (arrayAnimal[firstSelect_x][firstSelect_y] == arrayAnimal[secondSelect_x][secondSelect_y]) ) { printf("\n\n빙고! : %s 발견!\n\n", strAnimal[arrayAnimal[firstSelect_x][firstSelect_y]]); checkAnimal[firstSelect_x][firstSelect_y] = 1; checkAnimal[secondSelect_x][secondSelect_y] = 1; } else // 다른 동물인 경우 { printf("\n\n 땡!! (틀렸거나, 이미 뒤집힌 카드입니다)\n"); printf("%d : %s\n", select1, strAnimal[arrayAnimal[firstSelect_x][firstSelect_y]]); printf("%d : %s\n", select2, strAnimal[arrayAnimal[secondSelect_x][secondSelect_y]]); printf("\n\n"); failCount++; } if (foundAllAnimals() == 1) { printf("\n\n축하합니다! 모든 동물을 다 찾았네요 \n"); printf("지금까지 총 %d 번 실수하였습니다.\n", failCount); break; } } return 0;}void initAnimalArray(){ for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { arrayAnimal[i][j] = -1; } }}void initAnimalName(){ strAnimal[0] = "원숭이"; strAnimal[1] = "하마"; strAnimal[2] = "강아지"; strAnimal[3] = "고양이"; strAnimal[4] = "호랑이"; strAnimal[5] = "사자"; strAnimal[6] = "돼지"; strAnimal[7] = "코끼리"; strAnimal[8] = "기린"; strAnimal[9] = "낙타";}void shuffleAnimal(){ // ㅁㅁㅁㅁㅁ 0 1 2 3 4 // ㅁㅁㅁㅁㅁ 5 6 7 8 9 // ㅁㅁㅁㅁㅁ 10 11 12 13 14 // ㅁㅁㅁㅁㅁ 15 16 17 18 19 // 이 배열에서 빈 공간 두 곳에 랜덤으로 동물을 배치 for (int i = 0; i < 10; i++) { for (int j = 0; j < 2; j++) { int pos = getEmptyPosition(); // 비어있는 위치 반환 int x = conv_pos_x(pos); int y = conv_pos_y(pos); // 반환한 값을 (x,y) 좌표로 변환 arrayAnimal[x][y] = i; } }}// 좌표에서 빈 공간 찾기int getEmptyPosition(){ while (1) { int randPos = rand() % 20; // 0~19 사이의 숫자 반환 // ex) 19 = (3,4) int x = conv_pos_x(randPos); int y = conv_pos_y(randPos); if (arrayAnimal[x][y] == -1) { return randPos; } } return 0; // int로 반환하는 함수이기 때문에 적은것이지, 큰 의미는 없음}int conv_pos_x(int x){ // ex) 19 = (3,4) return x / 5;}int conv_pos_y(int y){ return y % 5; // y를 5로 나눈 나머지 값}void printAnimals(){ printf("\n==================정답==================\n\n"); for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j ++) { printf("%8s", strAnimal[arrayAnimal[i][j]]); } printf("\n"); } printf("\n========================================\n\n");}void printQuestion(){ printf("\n\n(문제)\n"); int seq = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { // 카드를 뒤집어서 정답을 맞혔으면 '동물 이름' if (checkAnimal[i][j] != 0) { printf("%8s", strAnimal[arrayAnimal[i][j]]); } // 정답을 못 맞혔으면 다시 뒷면 -> 위치를 나타내는 숫자 else { printf("%8d", seq); } seq++; } printf("\n"); }}int foundAllAnimals(){ for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { if (checkAnimal[i][j] == 0) { return 0; } } } return 1;}
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
DI(의존성 주입)을 왜 해야하나요?
cats.service.ts 파일import { Injectable } from '@nestjs/common'; @Injectable() export class CatsService { getAllCats(): string { return 'get all cats1'; } } export const getAllCatsTest = () => { return 'get all cats2'; }; cats.controller.ts 파일import { CatsService } from './cats.service'; import * as catsService2 from './cats.service'; import { Controller, Get, } from '@nestjs/common'; @Controller('cats') export class CatsController { constructor(private catsService: CatsService) {} @Get() getAllCat() { return this.catsService.getAllCats(); } @Get('2') getAllCat2() { return catsService2.getAllCatsTest(); } } Dependency Injection을 사용해야하는 이유가 명확히 이해가 안됩니다. A라는 클래스에서 B라는 클래스를 인스턴스화 (new 키워드 사용) 했을 때, A클래스가 B클래스에 대해서 의존성이 발생하고만약에 B 클래스의 수정점이 발생한다면, A클래스도 수정해줘야하는 부분은 인지를 했습니다. 그런 경우에 변화를 유연하게 대응하기 위해 A클래스에서 직접 인스턴스화를 하는것이 아니라,인스턴스화된 클래스를 주입받아 사용만 하는걸 Dependency Injection(의존성 주입)으로 이해했습니다. 하지만, import해서 쓰면 되는걸 왜 굳이 의존성주입이라는 형태로 사용해야하는지 이해를 못했습니다. 제가 위에 예시로 작성한 service 파일과 controller를 보시면,getAllCat()는 의존성 주입해서 사용한거고, getAllCat2는 import한 서비스를 사용한겁니다. 어떠한 이유에서 의존성 주입의 개념을 사용해야하는지 명쾌하게 알고 싶습니다.
-
해결됨스프링 핵심 원리 - 기본편
appConfig.memberService() 와 getBean(MemberService.class)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]공부 중에 제가 이해한 것이 맞는지 아닌지 의문이 들어 질문 남깁니다.//1번 AppConfig appConfig = new AppConfig(); memberService = appConfig.memberService(); //2번 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memberService = ac.getBean("memberService", MemberService.class);1번에서 AppConfig 객체를 직접 만들어서 memeberService를 가져오는 것은 순수 Java 코드로 짜기 때문이고 2번에서 AnnotationConfigApplicationContext에서 getBean()메소드를 통해서 가져오는 것은 스프링으로 전환하여 스프링을 이용하는 것이라고 보면 되나요?+ ) 클래스 자료형을 다음과 같이 ApplicationContext로 사용하는 것보다 AnnotationConfigApplicationContext를 클래스 자료형과 생성자를 쓰는 것은 기능상 이유 때문인가요?ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
jenkins war 빌드된 파일을 tomcat 서버에 배포하기에서 질문이 있습니다.
안녕하세요 강의 정말 잘 듣고 있는 수강생입니다. 좋은 컨텐츠의 강의 제공해주셔서 감사합니다.질문이 있는데요. My-Third-Project에서 jenkins war 빌드 후 로컬 tomcat에 배포하는 부분에서 젠킨스 item 설정에 빌드 후 조치에서 궁금한 점이 있었습니다.deploy war/ear to container 설정에서 Tomcat URL 설정하는 부분에서 mac os의 ifconfig로 확인해보니 172.x.x.x:8088로 나왔습니다.이게 사실 와이파이 내부의 private ip라고 이해했고 처음에는 와이파이 외부 공인 ip주소를 입력해서 설정했었는데요. 그렇게 하니까 Connection refused 나오면서 배포 실패가 나오더라구요.172.x.x.x 로 지정해서 빌드해보니 배포 성공이 나오긴했었는데요. 로컬에서 실행한 docker 컨테이너 내의 jenkins 서버에서 로컬의 tomcat 서버 주소를 와이파이의 private ip로 설정하는 이유가 무엇인지 궁금했습니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
다대다 관계와 관련해서
안녕하세요 강의 수강 후 게시판을 만들다가 궁금한 점이 생겨 질문을 남깁니다. 게시글과 해시태그를 M:N 관계로 등록하면서 강사님이 category-item을 설명하시면서 하신 것처럼 ManyToMany로 등록을 했습니다.게시글을 작성하면서 해시태그를 작성하고 싶은데 service단에서 어떻게 작성해야 하는지 궁금합니다. (연관관계의 주인은 게시글입니다.) 현재 등록하려는 해시태그가 해시태그 테이블에 없으면 해시태그 테이블에 해당 해시태그를 저장하고, article 테이블에서도 hashtag를 등록해주었습니다. (article Entity에서 addHashtag 메서드를 만들어서)이 경우 db 조회시 중개테이블에도 값이 잘 들어가있는데 postman으로 조회시 해시태그의 article이 빈 리스트로 나옵니다. 어떻게 해야 하나요??
-
해결됨2025 언리얼 공인강사 – UE5 스파르타 클래스: 심화편
플레이타임 제작 블루프린트 질문있습니다
강의에선 남은 시간을 나타낼 때 텍스트 바인드에서 GS Game State의 플로트 타입인 Timer가 나타났는데 UE5에서는 인티저 타입인 동전점수 밖에 나오지 않습니다. Timer타입을 인티저 타입으로 바꾸면 보이는 걸로 봐선 플로트타입이 안나오는거 같은데 따로 설정을 해야하나요?
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
storetap에서 다른 사이트로 이동하는 것
마지막 인강부분을 보고 있어요. 웹뷰를 통해 Store tap을 누르면 다른 사이트로 넘어가 이동하는데요.그런데 구글 문서 링크를 넣었더니 앱에서 나와서 이동하더라구요. 어떻게 해야 앱 내에서 이동할까요???
-
해결됨스프링 핵심 원리 - 기본편
AppConfig에서 static 메소드
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] void configurationTest(){ ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); //구체 타입으로 꺼내면 원래 좋지 않지만 테스트를 위해 Impl를 꺼냄 MemebrServiceImpl memberService = ac.getBean("memberService", MemebrServiceImpl.class); OrderServiceimpl orderService = ac.getBean("orderService", OrderServiceimpl.class); MemberRepository memberRepository = ac.getBean("memberRepository", MemberRepository.class); MemberRepository memberRepository1 = memberService.getMemberRepository(); MemberRepository memberRepository2 = orderService.getMemberRepository(); System.out.println("memberService -> memberRepository1 = " + memberRepository1); System.out.println("orderService -> memberRepository2 = " + memberRepository2); System.out.println("memberRepository = " + memberRepository); Assertions.assertThat(memberService.getMemberRepository()).isSameAs(memberRepository); Assertions.assertThat(orderService.getMemberRepository()).isSameAs(memberRepository); }위의 configurationTest 중 memberRepository가 같은 인스턴스를 공유하고 있지 않아 원인을 AppConfig에서 찾을 수 있었습니다.아래 코드와 같이 AppConfig에서 실수로 static을 넣었기 때문인데 static을 사용하여 정적 메소드를 생성할 경우 왜 싱글톤이 성립하지 않는지 관계가 이어지지 않아서 질문드립니다. // 원 코드 @Bean public MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepositroy(); } // static @Bean public static MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepositroy(); }
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
fetchNowPlaying은 메소드인가요?
변수 선언이 안되있는거 같아 질문드립니다 어느서 나온건지 모르겠네요 ㅠresult 도 변수가 아닌거 같은데 궁금합니다
-
미해결만들어 가면서 배우는 JAVA 플레이그라운드
Calendar calendar = new Calendar(); 오류
호눅수님의 강의 중에. 달력 혹은 일정 만들기 프로그래밍 중 Calendar calendar = new Calendar(); 이부분에서 오류가 뜹니다. Cannot instantiate the type Calendar라고 설명이 나오는데 어떻게 하나요? JER는 SE1.8입니다.
-
해결됨실전! Querydsl
세타조인 관련된 질문입니다.
항상 강의 잘듣고 있습니다.회원의 이름과 팀 이름이 같은 회원을 조회하라는 예제를 듣고 조인 없이 직관적으로 다음과 같은 쿼리를 생각하였는데요.테스트시 빈 결과값이 반환되는것으로 추측됩니다. @Test void theta_join() { em.persist(new Member("teamA")); em.persist(new Member("teamB")); em.persist(new Member("teamC")); List<Member> result = queryFactory .select(member) .from(member) .where(member.username.eq(member.team.name)) .fetch(); System.out.println("result = " + result); // => result = [] assertThat(result).extracting("username").containsExactly("teamA","teamB"); } //----------console log---------- Expecting actual: [] to contain exactly (and in same order): ["teamA", "teamB"] but could not find the following elements: ["teamA", "teamB"] //----------------------------------- 혹시나.. Fetch타입이 LAZY로 되어있어서 그런가 싶어서EAGER로 바꿔봤는데도, 결과가 나오지 않습니다..... 그렇다면...이 쿼리는 왜 작동하지 않는지 궁금합니다.
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
화살표 함수 질문드립니다.
선생님께서 말씀하셨던 화살표 함수는 function 을 () 로 대체 해서 쓰신다고 말씀하셨습니다.궁금한게 해당 Todoinput.vue 에서 function () {} 해당 부분을 () => {} 으로 대체하면 웹 상에서 정상적으로 실행되지 않는데 제가 화살표 함수에 대해서 잘못 이해하고 있는지 여쭤봅니다.
-
미해결자바스크립트 : 기초부터 실전까지 올인원
api 호출 관련해서 Usage 가 50이라...
안녕하세요! api 에러로 확인해봤는데 error_code: "LimitReached"message: "Monthly API calls limit reached: 50"status: "error"요렇게 에러가 출력이 되더라구요 회원가입시 usage가 50이라 여기서 더 이상 작업이 어려운데 혹시 바꿀 수 있는 방법이 있나요오~! Usage 양을 늘릴려니 유료네요!!
-
미해결장고 설계철학으로 시작하는 파이썬 장고 입문
상세 페이지 이동 오류
안녕하세요,수업 잘 듣고 있습니다. :-)왕초보라 어디서부터 어떻게 잘못된 지 몰라 질문드립니다 http://localhost:8000/app/ 페이지에서 글 제목 클릭 후 들어가는, 상세 페이지에서 오류가 뜹니다.2. 오류 화면 http://localhost:8000/app1/아직 왕초보라 어느 부분에서 에러가 발생한지 모르겠어서 어느 부분 캡처를 올려야할 지 모르겠네요...처음 질문하는거라 이해하실 수 있게 질문을 잘 한지 모르겠네요 : -(도움 부탁드리겠습니다! 감사합니다!
-
미해결스프링 핵심 원리 - 기본편
FilterType.ASSIGNABLE_TYPE 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]BeanA도 빼고 싶으면 다음과 같이 코드를 쓰면 된다고 하셨습니다. (들여쓰기가 편집환경에서 잘 안돼서 가독성 양해바랍니다,,)@ComponentScan( includeFilters = { @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class), }, excludeFilters = { @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class), @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = BeanA.class) } ) 애초에 IncludeFilters를 쓰지 않고 BeanB와 같이 Annotation으로 사용하지 않을 수 있지 않나요?이는 FilterType.ASSIGNABLE_TYPE 옵션을 설명하기 위하여 일부러 IncludeFilters에 BeanA를 넣고 FilterType.ASSIGNABLE_TYPE에도 BeanA를 설정한 것으로 이해하면 될까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
이 부분의 불리언이 이해가 안갑니다 ㅜ
음... 대충.... if ((num % i) == 0 이 실행되면 소수가 아니라는게 증명되면서 불리언이 false로 바뀌고, 그러면서 "소수가 아닙니다!"가 출력되는 개념일까요? 그리고 if ((num % i) == 0 이 해당 안되면 불리언은 그대로 true 값이니 "소수입니다"가 출력되는게 맞나요?
-
미해결빅데이터분석기사 실기대비 (R 활용)
섹션 4 예상문제
작업형 1, 2 유형 문제는 어디서 볼수 있나요?
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
comments 와 votes 를 Exclude 로 하는 이유가뭔가요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강의보는데 궁금해서요. Password 를 exclude로 하는 이유는 알겠는데 comments 하고 votes 프라퍼티 들을 exclude하는 이유는 뭘까요?