묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결C#과 유니티, 실전 게임으로 제대로 시작하기 (저자 직강)
컴파일러 에러가 났다는데 어떻게 하나요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
데이터베이스의 read, write는 동기적으로 실행되는 건가요?
클라이언트에서 로그인 패킷을 던져서 서버의 PacketHandler에서 login을 처리하는 함수가 아래와 같다고 예를 든다면 void handle_c_login_packet(){ ... 다른 코드들 dbBind.Execute() // select query dbBind.Fetch() ... 코드 A } 코드 A는 db의 정보를 읽어온 뒤에 실행되는 건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
18분23초
public FrontControllerServletV5() { initHandlerMappingMap(); initHandlerAdapters(); } 생성자가 두 메서드를 호출해서 초기화가 되는거죠?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
KeyHolder가 데이터베이스에 따라 다르게 동작할까요?
안녕하세요 :) @Override public Item save(Item item) { String sql = "insert into item(item_name, price, quantity)" + " values (:itemName,:price,:quantity)"; BeanPropertySqlParameterSource param = new BeanPropertySqlParameterSource(item); KeyHolder keyHolder = new GeneratedKeyHolder(); template.update(sql, param, keyHolder); long id = keyHolder.getKey().longValue(); item.setId(id); return item; } save 메서드를 강의대로 했을때 저는 InvalidDataAccessApiUsageException 이 발생 하더라고요. org.springframework.dao.InvalidDataAccessApiUsageException: The getKey method should only be used when a single key is returned. The current key entry contains multiple keys: [{id=7, item_name=productE, price=50000, quantity=20}] 그래서 id 를 받아 오는 부분을 ```java Long id = (Long) keyHolder.getKeys().get("id"); ``` key를 받아오고 id 를 빼는 식으로 변경 했더니 잘 동작 합니다. 혹시나 해서 테이블을 확인 했는데 primary key 설정도 되어 있는 상태 입니다. 강의를 회사에 일찍 출근해서도 듣고 집에 퇴근하고 와서도 듣다보니 연속성을 위해 PostgresDB를 따로 구축해두고 사용하고 있는데 .. 혹시나 해서 H2 로 변경 해서 테스트 해 보니 getKey() 만 해도 정상적으로 동작 되었습니다. KeyHolder의 getKey가 DB에 따라 상이하게 동작하는걸까요..? update 파라미터를 우연히 보았더니 keyColumn 을 파라미터로 받길래 혹시나 해서 "id" 를 넣었더니, 이 때에도 getKey()가 정상적으로 동작 하였습니다. 우연히 해결을 하기는 했는데 KeyHolder의 작동 원리에 대한 이해가 없다보니 궁금하네요.. 1. DB 에 테이블을 등록할 때 제가 뭔가 누락한게 있어서 그럴까요? 아니면 단순히 Postgres 를 사용해서 그런 걸까요? 2. DB에 따라 getKey()가 안될 수 있다면, getKeys() 후에 원하는 key를 받아오는 것과 update 할 때에 key column을 명시해 주는 것 중 어느쪽이 더 명확할까요? 혹은 더 나은 방법이 있을까요? 감사합니다
-
미해결문제로 배우는 C언어
[최솟값 구하기]
scanf()를 활용하여 7개의 변수를 입력받을 때 for(i = 0; i<=6; i++) { scanf("%d", &a); ... } 로 작성을 하셨습니다. for문의 반복 순서가 초기화 -> 조건문 - > (참) -> 코드블럭 실행 -> 증가감 -> 조건문... 이기 때문에 하나 입력받고 엔터 누르고 다시 하나 입력 받고 엔터를 누르는 거라 생각을 했는데 엔터없이 한번에 7개의 값을 입력넣고 엔터를 눌러도 정상적으로 입력이 되는건가요?? 저의 경우 처음에는 scanf("%d %d %d %d ...", &a,&b,...); 로 하나씩 받아야하나 생각했는데 이러면 반복문을 사용할 수 없어서 배열을 사용하여 문제를 해결했습니다. 다만 지금 단계는 배열없이 푸는거라 결국 강의를 보았는데 제가 scanf - for 활용에 미처 몰랐던 부분이 있는거 같더라고요! 즉, OS는 프롬프트 창에 나와있는 값의 개수를 한꺼번에 써놔도 scanf로 반복문을 수행해가며 하나씩 가져가는건가요?
-
미해결풀스택 리액트 라이브코딩 - 간단한 쇼핑몰 만들기
api respon 시간
api 받아오는 시간이 5 ~ 6초 걸릴정도를 느릴때도 있고, 가끔 빠를때는 0.5초만에 값을 가지고 오는데 fake store api 문제인건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberServiceTest.java 에서 오류가 나는 이유
섹션 3 회원관리 예제 - 백엔드 개발을 학습 중에 있습니다. package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemoryMemberRepository; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.Optional; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; // Test 는 한글로 바꾸어도 된다 (실제 prodution 되는 코드는 한글 x) ,test 코드는 build 시 포함 안됨 class MemberServiceTest { // MemberService memberService=new MemberService(); // MemberService 에서 memberRepository 객체와 Test 에서의 memberRepository 객체가 달라서 // 객체 변수(store) 접근시 다른 store 로 접근할 수 있다 // 다른 repository 를 이용하기 때문에 문제가 된다 // MemoryMemberRepository memberRepository=new MemoryMemberRepository(); MemberService memberService; MemoryMemberRepository memberRepository; // test 전에 같은 memberRepository 를 가지도록 할 수 있다 (service 와 test 모두 같음) // 이와 같은 상황을 DI(Dependency Injection) 의존성 주입 이라고 한다 @BeforeEach // 각각의 test 메소드 실행 전에 호출되어 처리 public void beforeEach(){ memberRepository =new MemoryMemberRepository(); memberService=new MemberService(memberRepository); } // // test 실행될 때마다 store 를 지우게 된다 // @AfterEach // 각각의 test 메소드 실행 후에 호출되어 처리 // public void afterEach(){ // memberRepository.clearStore(); // } @Test void 회원가입() { //given : 이런 data 를 Member member=new Member(); member.setName("spring3"); //when : 이러한 경우에 Long saveId=memberService.join(member); //then : 검증 부분 Member findMember = memberService.findOne(saveId).get(); assertThat(member.getName()).isEqualTo(findMember.getName()); } // 예외인 경우가 터지는지 확인하는 것도 중요하다 @Test public void 중복_회원_예외(){ //given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //when memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2)); // message 검증 assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); // try catch 활용 /* try{ memberService.join(member2); fail(); }catch (IllegalStateException e){ // 중복 예외 터져서 정상적으로 수행된 경우 assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } */ //then } @Test void findMembers() { } @Test void findOne() { } } 위와 같은 코드에서 제가 생각하기에 현재 @BeforeEach 에 의해서 test 메소드 실행전에 memberRepository와 memberService가 각각 new 연산자를 통해서 새롭게 메모리를 부여받는다고 생각합니다. 그래서 @AfterEach 코드가 없어도 매번 새로운 값이기 때문에 서로 중복되는 name을 가지면서 test를 해도 문제가 안된다고 생각하는데 @AfterEach를 생략하고 실행하니 회원가입 메소드에서 중복때문에 오류가 납니다. 제가 어떤 부분을 놓친 건가요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
인텔리제이 인코딩 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 한글이 깨지길래 인터넷에 인코딩 방법을 검색해서 UTF-8로 설정을 했는데도 계속해서 깨지는데 이유를 알 수 있을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
강의를 정말잘듣고있는데 오류가 발생하여 질문드립니다
강의대로 그대로 따라쳤는데 오류가 오류가 발생해서 글을 작성하게 되었습니다, 구글 드라이브 링크 남겨드릴게요 https://drive.google.com/drive/folders/1DmiETYFjQvDDv2hOmNS4iu6w_y60Srws?usp=sharing
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
C# 유니티 1강과 C++언리얼 1강 둘다 수강하고있을시에는..
안녕하세요 강의 정말 잘 보고 있는 한 수강생입니다! 현재 언리얼 강의를 3강까지 수강하고 이번에 유니티로 포폴만들어보고싶어서 중복되는 알고리즘 정도만 제외하고 구매를 했습니다. 예전에 겉핥기로 C#을 한번 구경했을때에 C++과는 조금 다른 모양새였었던것 같아서 일단 유니티1강도 보고있는중인데 기본 문법들은 비슷한것 같고 1강에서 이정도만 보고 넘어가도 괜찮다 하는 항목들 있을까요? 바로 3강 유니티엔진으로 넘어가도 괜찮을까요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
04-02 예제 3번 질문입니다.
예제 3번에서 Beautiful은 하나의 문자열이기 때문에 for구문으로 실행시켰을때 Beautiful로 출력되어야 하는 것 아닌가요? 왜 B,e,a,u,t,i,f,u,l 이렇게 한 단어씩 출력되나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
해당 예제에서 Book 의 모든 필드를 바꾸고자 할 때
안녕하세요 해당 수업에서 만약 Book 의 모든 필드를 변경하고자 한다면 실제 실무에서는 어떻게 사용하면 좋을까 하면서 만들어 보았는데, 틀린 부분이나 고쳐야할 부분이 있다면 말씀해주실 수 있을까요 ? 작은 부분이라도 조언 해주시면 감사하겠습니다! 1. DTO @Getter @Setterpublic class UpdateBookDto { private String name; private int price; private int stockQuantity; private String author; private String isbn; public static UpdateBookDto updateBookAll( String name, int price, int stockQuantity, String author, String isbn) { UpdateBookDto bookDto = new UpdateBookDto(); bookDto.name = name; bookDto.price = price; bookDto.stockQuantity = stockQuantity; bookDto.author = author; bookDto.isbn = isbn; return bookDto; }} 2. Controller public class ItemController { @PostMapping("/{itemId}/edit") public String updateItem(@PathVariable String itemId, @ModelAttribute("form") BookForm form) { UpdateBookDto bookDto = UpdateBookDto.updateBookAll( form.getName(), form.getPrice(), form.getStockQuantity(), form.getAuthor(), form.getIsbn() ); itemService.updateItem(form.getId(), bookDto); return "redirect:/items"; }} 3. Service public class ItemService { @Transactional public void updateItem(Long itemId, UpdateBookDto dto) { Book findBook = (Book) itemRepository.findOne(itemId); findBook.changeBook( dto.getName(), dto.getPrice(), dto.getStockQuantity(), dto.getAuthor(), dto.getIsbn() ); }} 4. Book public class Book extends Item { public void changeBook(String name, int price, int stockQuantity, String author, String isbn) { super.changeItem(name, price, stockQuantity); this.author = author; this.isbn = isbn; }}
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
19:30 즈음에 나온 ref에 대한 질문입니다.
해당 함수를 보다 이해가 안돼서 질문합니다. Interlocked.Increment(ref int location);과 같이 참조해서 값을 사용하고 원자성을 보장해야한다는 이야기를 하시다가 ref 없이 쓰면 안된다고 말 하시는데 애초에 Interlocked의 메소드에서 받는 매개변수 중에서 실질적으로 값에 변화를 줘야하는 매개변수인 location들(대부분의 함수에서 ref T location 혹은 ref T location1, ref T location2 처럼 정의돼있었습니다.) 중에서 참조형으로 넘겨주지 않는 메소드가 존재할 수 있나요?
-
미해결배달앱 클론코딩 [with React Native]
DismissKeyboardView.tsx!!
DismissKeyboardView.tsx 파일에서 children < 이게 에러 : TS2339: Property 'children' does not exist on type 라는 에러가 뜨더라고요 children을 지우고 써보면 잘 작동은 합니다...
-
미해결Three.js 3D 인터랙티브 바로 시작하기
모바일에서, pc에서 처럼 움직이게 하려면 어떻게 해야 할까요?
선생님 좋은 강의 감사합니다!!! ^^강의 듣다가 아래 내용이 궁금해서 질문드립니다. 질문1.모바일에서 터치 되었을 때...?pc에서 얼굴이 마우스 따라 다니는 것 처럼,움직이게 하려면 어떻게 해야 할까요?질문2.일정 시간 간격으로, 1시방향, 3시방향, 6시방향, 9시방향, 12시방향을 볼 수 있게 하려면, 어떻게 해야 할까요? 질문3.3D 파일을 불러와서 적용하려면, 어떻게 해야 할까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
왜 AOP사용시에 프록시 객체를 사용하는건가요?
왜죠?
-
미해결스프링부트 시큐리티 & JWT 강의
스프링 시큐리티 Websecurityconfigureradapter deprecated 문제 해결!! 최신 코드 반영 해두었습니다
스프링시큐리티 Websecurityconfigureradapter deprecated 문제로 코드 수정해서 새로운 브랜치에 올려두었습니다. https://github.com/codingspecialist/Springboot-Security-JWT-Easy/tree/version2
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ThreadPool에서의 Join
Thread를 만들어서 사용하는 것 처럼 ThreadPool이나 Task에 어떠한 일들을 던져두고 이후 Main이나 다른 쓰레드에서 해당 일이 끝났는지, 어떤 상황인지 알 수 있는 쉬운 방법(혹은 많이 쓰이는 방법)이 있을까요?
-
미해결배달앱 클론코딩 [with React Native]
useCallback((text...
const onChangeEmail = useCallback(text => { setEmail(text.trim()); }, []); 현제 이런식으로 코딩을하면 ...(text => 부분에서 text TS7006: Parameter 'text' implicitly has an 'any' type. 라는 에러가 나더군요. 그래서 ... text: string ... 을 주니 에러가 없어졌습니다. : string을 없이 빨간줄이 있어도 앱 실행되는데는 아무문제 없더군요
-
미해결초보를 위한 도커 안내서
fastify 실행시 node 버전 관련
안녕하세요 강의 잘 듣고 있습니다. 올려주신 dockerfile 기준 ubuntu:20.04 이미지에서 nodejs를 설치하면 10.19 버전인데요. 여기서 app.js를 실행하면 아래 오류가 나옵니다. /node_modules/fastify/lib/server.js:38 const hostPath = listenOptions.path ? [listenOptions.path] : [listenOptions.port ?? 0, listenOptions.host ?? 'localhost'] ^ SyntaxError: Unexpected token ? 확인해보니 12 이하에선 안되는 것 같고 14부터 최신까지는 동작하네요. RUN DEBIAN_FRONTEND=noninteractive apt-get install -y curl RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - RUN DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs 저는 이렇게 node 14버전 설치해주는 것으로 해결했습니다. 관련 내용이 있으면 더 좋을 것 같아서 글 남깁니다!