묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
어노테이션 관련 질문드립니다.
7분 즘에 MemberRepository 클래스르 만들고 @PersistenceContext 어노테이션을 private EntityManager em; 에 붙였는데 원래 정석대로라면 팩토리를 만들고 그걸로 엔티티매니저를 반환받는거였는데 이 어노테이션으로 그 과정을 스킵한다고 봐도 되나요? 팩토리 만들 때 마다 비용이 많이 소모된다고 알고있는데 이 어노테이션도 똑같이 팩토리를 한번만 만들고 그 팩토리로 엔티티매니저를 반환하나요? 그렇다면 이 과정을 알고 있다는 전제 하에 그냥 간단하게 @Autowired 같은 거라고 보면 될까요 ㅎㅎ...
-
미해결파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)
공이 안없어집니다..
공(고양이)가 안없어집니다.. 이미지를 바꾸면서 ball을 cat으로, to_remove를 _rm으로 바꾼 것 양해부탁드립니다. # 1. 모든 공을 없애면 게임 종료, 성공 # 2. 강아지가 고양이에 닿으면 게임 종료, 실패 # 3. 시간 제한 99초 초과 시 게임 종료, 실패 import pygame, os pygame.init() # 초기화 필수 # 게임 화면 크기 설정 screen_width = 640 # 가로 크기 screen_height = 480 # 세로 크기 screen = pygame.display.set_mode((screen_width, screen_height)) # 화면 타이틀 설정 pygame.display.set_caption('강아지가 츄르주는 게임') # 게임 이름 # FPS clock = pygame.time.Clock() # 1. 사용자 게임 초기화 # 이미지 불러오기 current_path = os.path.dirname(__file__) # 현재 파일 위치 반환 image_path = os.path.join(current_path, "images") # 배경 이미지 background = pygame.image.load(os.path.join(image_path, "background.png")) # 스테이지 stage = pygame.image.load(os.path.join(image_path, "stage.png")) stage_size= stage.get_rect().size stage_height = stage_size[1] # 스테이지 높이 # 캐릭터 만들기 character = pygame.image.load(os.path.join(image_path, "puppy.png")) # 70*70 캐릭터 불러오기 character_size = character.get_rect().size # 캐릭터 이미지의 가로 세로 크기를 가져옴 character_width = character_size[0] # 캐릭터의 가로 크기 character_height = character_size[1] # 캐릭터의 세로 크기 character_pos_x = (screen_width - character_width) / 2 # x position = 화면 가로의 절반에 위치 하도록 (캐릭터의 x 좌표) character_pos_y = screen_height - stage_height - character_height + 10 # 이동할 좌표 chracter_to_x = 0 # 이동 속도 character_speed = 0.4 # 무기 만들기 weapon = pygame.image.load(os.path.join(image_path, "weapon.png")) # 무기 이미지 불러오기 weapon_size = weapon.get_rect().size weapon_width = weapon_size[0] # 무기 동작: 무기는 한 번에 여러 발 발사 가능 weapons = [] # 무기 이동 속도 weapon_speed = 10 # target cat_images = [ pygame.image.load(os.path.join(image_path, "cat0.png")), pygame.image.load(os.path.join(image_path, "cat1.png")), pygame.image.load(os.path.join(image_path, "cat2.png")), pygame.image.load(os.path.join(image_path, "cat3.png")) ] # 타겟 크기에 따른 최초 스피드 cat_speed_y = [-18, -15, -12, -9] # index 0 1 2 3 - cat 1 2 3 4 # 타겟들 cats = [] # 최초 발생하는 큰 고양이 추가 cats.append({ "pos_x" : 50, # 고양이의 x 좌표 "pos_y" : 50, # 고양이의 y 좌표 "img_idx" : 0, # 고양이의 이미지 인덱스 "to_x" : 3, # 고양이의 x축 이동 방향, -3이면 왼쪽으로 3이면 오른쪽ㅇfh "to_y" : -6, # y축 이동 방향 "init_spd_y" : cat_speed_y[0] # y축 최초 속도 }) # 사라질 츄르, 고양이 정보 저장 변수 weapon_rm = -1 cat_rm = -1 # 폰트 정의 game_font = pygame.font.Font(None, 40) # 폰트 객체 생성 (폰트, 크기) # 게임 총 시간 total_time= 100 # 시작 시간 계산 start_ticks = pygame.time.get_ticks() # 현재 tick 정보를 받아옴 # Game Over, TIME OVER, Mission Complete game_result = "GAME OVER" # event loop running = True # 게임이 진행 중인가? while running: dt = clock.tick(30) # delta = clock. FPS 설정 for event in pygame.event.get(): # 키보드에 맞는 이벤트 실행되면 if event.type == pygame.QUIT: # 창 끄기 이벤트 발생 시 running = False if event.type == pygame.KEYDOWN: # 키가 눌러졌는데 확인 if event.key == pygame.K_RIGHT: chracter_to_x += character_speed elif event.key == pygame.K_LEFT: chracter_to_x -= character_speed elif event.key == pygame.K_SPACE: # 스페이스바 누르면 무기 발사 weapon_pos_x = character_pos_x + (character_width / 2) - (weapon_width / 2) weapon_pos_y = character_pos_y weapons.append([weapon_pos_x, weapon_pos_y]) elif event.key == pygame.K_UP: pass elif event.key == pygame.K_DOWN: pass if event.type == pygame.KEYUP: # 방향키를 뗐을 때 if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT: chracter_to_x = 0 elif event.key == pygame.K_UP or event.key == pygame.K_DOWN: pass # 캐릭터 움직이기 character_pos_x += chracter_to_x * dt # FPS에 따라 속도가 변하지 않게 delta 값을 곱해주어 고정해줌 # 캐릭터 가로 경계값 처리 if character_pos_x < 0: character_pos_x = 0 elif character_pos_x > screen_width - character_width: character_pos_x = screen_width - character_width # 무기 위치 조정 weapons = [[w[0], w[1] - weapon_speed] for w in weapons] # 무기가 천장에 닿으면 없애기 # weapons = [[w[0], w[1]] for w in wea pons if w[1] > 0] # 타겟 위치 정의 for cat_idx, cat_val in enumerate(cats): cat_pos_x = cat_val["pos_x"] cat_pos_y = cat_val["pos_y"] cat_img_idx = cat_val["img_idx"] cat_size = cat_images[cat_img_idx].get_rect().size cat_width = cat_size[0] cat_height = cat_size[1] # 가로 경계값: 타겟의 경계값 처리 -> 경계값이 닿으면 반대 쪽으로 튕김 if cat_pos_x < 0 or cat_pos_x > (screen_width - cat_width): cat_val["to_x"] *= -1 # 세로 경계값: 스테이지에 튕겨서 올라감 if cat_pos_y >= (screen_height - stage_height - cat_height): cat_val["to_y"] = cat_val["init_spd_y"] else: # 그 외 모든 경우에는 to_y를 증가 cat_val["to_y"] += 0.5 cat_val["pos_x"] += cat_val["to_x"] cat_val["pos_y"] += cat_val["to_y"] # 충돌 처리를 위한 rect 정보 update character_rect = character.get_rect() character_rect.left = character_pos_x character_rect.top = character_pos_y for cat_idx, cat_val in enumerate(cats): cat_pos_x = cat_val["pos_x"] cat_pos_y = cat_val["pos_y"] cat_img_idx = cat_val["img_idx"] # cat rect 정보 업뎃 cat_rect = cat_images[cat_img_idx].get_rect() cat_rect.left = cat_pos_x cat_rect.top = cat_pos_y # cat과 puppy 충돌 처리 if character_rect.colliderect(cat_rect): running = False break # cat과 츄르 충돌 처리 for weapon_idx, weapon_val in enumerate(weapons): weapon_pos_x = weapon_val[0] weapon_pos_y = weapon_val[1] # 츄르 rect 정보 업뎃 weapon_rect = weapon.get_rect() weapon_rect.left = weapon_pos_x weapon_rect.top = weapon_pos_y # 충돌 체크 if weapon_rect.colliderect(cat_rect): weapon_rm = weapon_idx # 해당 츄르 없애기 위한 값 설정 cat_rm = cat_idx # 해당 고양이 없애기 위한 값 설정 if cat_img_idx < 3: # 0 1 2 -> 가장 작은 공이 아니라면 # 현재 고양이 크기 정보 cat_width = cat_rect.size[0] cat_height = cat_rect.size[1] #나눠질 고양이 정보 small_cat_rect = cat_images[cat_img_idx + 1].get_rect() small_cat_width = small_cat_rect.size[0] small_cat_heigth = small_cat_rect.size[1] # 왼쪽으로 튕겨나가는 작은 고양이 cats.append({ "pos_x" : cat_pos_x + (cat_width / 2) - (small_cat_width / 2), "pos_y" : cat_pos_y + (cat_height / 2) - (small_cat_heigth / 2), # 고양이의 y 좌표 "img_idx" : cat_img_idx + 1, "to_x" : -3, # 고양이의 x축 이동 방향, -3이면 왼쪽으로 3이면 오른쪽ㅇfh "to_y" : -6, # y축 이동 방향 "init_spd_y" : cat_speed_y[cat_img_idx + 1] # y축 최초 속도 }) # 오른쪽으로 튕겨나가는 작은 고양이 cats.append({ "pos_x" : cat_pos_x + (cat_width / 2) - (small_cat_width / 2), "pos_y" : cat_pos_y + (cat_height / 2) - (small_cat_heigth / 2), # 고양이의 y 좌표 "img_idx" : cat_img_idx + 1, "to_x" : +3, # 고양이의 x축 이동 방향, -3이면 왼쪽으로 3이면 오른쪽ㅇfh "to_y" : -6, # y축 이동 방향 "init_spd_y" : cat_speed_y[cat_img_idx + 1] # y축 최초 속도 }) break else: continue # 충돌된 cat or 무기 없애기 if cat_rm > -1: del cats[cat_rm] cat_rm = -1 if weapon_rm > -1: del weapons[weapon_rm] weapon_rm = -1 # 모든 cat이 없어졌을 때 if(len(cats)==0): game_result = "MISSION COMPLETE" running = False # screen.fill((r, g, b)) # rgb 값으로 배경색 채울 수도 있음 screen.blit(background, (0, 0)) # 배경 이미지를 어디서부터 나타내줄건지. 0, 0 -> 왼쪽 맨 위부터 for weapon_pos_x, weapon_pos_y in weapons: screen.blit(weapon, (weapon_pos_x, weapon_pos_y)) for idx, val in enumerate(cats): cat_pos_x = val["pos_x"] cat_pos_y = val["pos_y"] cat_img_idx = val["img_idx"] screen.blit(cat_images[cat_img_idx], (cat_pos_x, cat_pos_y)) screen.blit(stage, (0, screen_height - stage_height)) screen.blit(character, (character_pos_x, character_pos_y)) # 캐릭터 그리기 # 타이머, 경과 시간 계산 elapsed_time = (pygame.time.get_ticks() - start_ticks) / 1000 # 초단위로 표시 timer = game_font.render("Time: {}".format(int(total_time - elapsed_time)), True, (255, 0, 0)) screen.blit(timer, (10, 10)) # 시간이 0 이하면 game over if(total_time - elapsed_time <= 0): game_result = "TIME OVER" running = False pygame.display.update() # 게임 화면 다시 그리기 # 잠시 대기 pygame.time.delay(1000) # 2초 대기 # 게임 오버 메세지 msg = game_font.render(game_result, True, (255,0,0)) msg_rect = msg.get_rect(center=(int(screen_width / 2), int(screen_height / 2))) screen.blit(msg, msg_rect) pygame.display.update() pygame.time.delay(2000) # pygame 종료 pygame.quit()
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 선생님 backlog : 최대 대기수 에 대해서 질문 드립니다.
class Listener { Socket _listenSocket; Action<Socket> _onAcceptHandler; public void Init(IPEndPoint endPoint, Action<Socket> onAcceptHandler) { // 문지기 생성 : 첫번째 인자에 네트워크 주소를 넣어줌 _listenSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); _onAcceptHandler += onAcceptHandler; // 연결 // 문지기 교육을 시킴 : 식당 주소와 포트번호를 기입 _listenSocket.Bind(endPoint); // 영업 시작 : 리슨 소켓을 리슨 상태로 둔다. // backlog : 최대 대기수 _listenSocket.Listen(10); // *** 초기화를 하는 시점에 등록을 해줄 것 // 이 상태에서 클라가 connect 요청이 왔다고 한다면 // 콜백 방식으로 OnAcceptCompletd 함수 호출 된다. // 비동기 방식으로 예약만 하는 것 // 낚시대를 10개를 꼽아 놓는다. 물고기가 많으면 ... // 문지기 10개 버젼 for(int i = 0; i<10; i++) { // 문지기 1 버젼 SocketAsyncEventArgs args = new SocketAsyncEventArgs(); args.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted); RegisterAccept(args); } } 수업 예제 코드 중에 Listen 클래스 를 작성하실 때 리슨 소켓 하나 만들어주고 그놈을 서버 컴퓨터에 바인딩을 시켜준다음 리슨 함수를 호출해 주고, 이상태에서 클라쪽에서 신호가 오면 그 다음 처리를 해주는 코드 설명이셨는데 여기서 리슨 함수 인자를 10으로 놓고 for문을 10번 반복 하셔서 문지기를 10개를 생성하셨습니다. 질문 : 최대대기수가 10이라는 얘기는 클라이언트가 10명이 접속 한다는 얘기 인가요? 그래서 문지기를 10개를 생성 해주셨는지 이게 맞다면 클라이언트 접속이 대략 1000명을 예상한다면 리슨 함수 인자로 1000을 넣어줘야 하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
질문은 아닙니다만 devtools 동작이 안되는 경우
아무리 devtools 를 적용시켜봐도 리컴파일을 하고 새로고침을 해도 페이지 변하지 않길래 구글님에게 수소문 해본 결과 https://lejewk.github.io/springboot-devtool/ 이거대로 해보니 되네요. 혹시나 devtools 동작 안하시는 분들 참고하시라고 공유차원에서 올려봤습니다~
-
해결됨프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
vscode로 학습중인데 왜 문제가 발생한건지 모르겠어요
클래스에서 self 보면서 코드 작성하고 실행하는데 이부분에서 문제가 발생한다고 하는데 왜 발생을 한건가요? 선생님 강의중에서는 오류 발생한걸로 안보이는데
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Util Class의 GetOrAddComponent<T>(GameObject go) 함수에서...
항상 좋은 강의와 빠른 답변 감사드립니다! 제가 Util Class의 GetOrAddComponent<T>(GameObject go) 함수에서 where T : UnityEngine.Component 작성하시는 부분에서요!(5:07) GetComponent<T> 함수는 오류가 안뜨지만 AddComponent<T> 함수는 오류가 뜨길래 F12로 확인해봤더니 GetComponent는 Object클래스에 정의되어 있지만 AddComponent는 GameObject 클래스에 정의되어 있는것 까지는 확인을 하였습니다.. 하지만 왜 T를 부모클래스인 Object로 한정하면 안되고Component로만 한정해야 AddComponent를 쓸 수 있는건지는 와 닿지가 않아 질문드립니다.. 설명 부탁드립니다...!🙏
-
해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
7장 실습 질문
7장 실습을 하면서 안되는게 있어서 질문을 드립니다. 사용자를 등록하고 코멘트를 등록했습니다. 코멘트를 등록하고 수정을 했을 때 수정된 내용으로 바로 반영이 되어야 하는데 그렇지 않습니다. 책에 있는 소스대로 치니까 getComment()를 부르는데 axios 통신하고나서 이 함수를 호출을 안하네요 왜 그런가요? ㅠㅠ const edit = document.createElement('button'); edit.textContent = '수정'; edit.addEventListener('click', async () => { const newComment = prompt('바꿀 내용을 입력하세요.'); if (!newComment) { return alert('내용을 반드시 입력하셔야 합니다.'); } try { await axios.patch(`/comments/${comment.id}`, { comment : newComment }); getComment(id); } catch (err) { console.error(err); } });
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
extension함수로 교체할 때
영상의 2분 경에 GetOrAddComponent()를 extension method로 추가하고 UI_Inven에서 item. GetOrAddComponent<UI_Inven_ Item>() 이렇게 호출 하잖아요? 함수 정의에서는 인자로 GameObject가 들어가있는데 이건 item이라는 GameObject인스턴스를 통해서, 그리고 함수의 적용 대상이 item이라서 인자를 안넣어도 되는 건가요?
-
미해결Objective-C 강좌 - 12개 앱 만들면서 배우는 iOS 아이폰 앱 개발
Received Actions 버튼이 안보이네요
Received Actions 버튼이 안보이네요
-
해결됨모던 자바스크립트(ES6+) 기본
디버깅 맨 처음부터 Script에 globalLet이 설정되어있습니다.
콘솔은 강의대로 찍혀있지만, 소스 디버깅 처음부터 Script 에 globalLet이 떠있습니다. 강의에서는 ( 16. let globalLet; ) 변수 선언이 실행되어야 Script에 설정되는 것처럼 나오는데 제 브라우저에서는 그 문장 실행 이전부터도 Script에 globalLet이 설정되어 있어서 혼란스럽습니다. 이것 역시 실행하기 전에 엔진이 한 번 훑었다고 생각하면 될까요...?
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
이미지 소스 주소
이미지 소스의 주소가 https://로 시작해서 .jpg로 끝이 나는데 혹시 인터넷에 돌아다니는 사진의 경우 그 이미지 소스 주소((?)를 어떻게 따나요??? 예를들어 구글에 있는 어떤 이미지를 불러오고 싶은데 그 이미지의 소스 주소를 알아내는 방법이 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
DataSourceUtils import가 안 됩니다..
private void close(Connection conn) throws SQLException{ DataSourceUtils.releaseConnection(conn, dataSource);} 2.4.2 버전을 사용하고 있습니다. JdbcMemberRepository 클래스에서 DataSourceUtils에 관한 import가 되질 않아 진행이 안되는데요. Alt + Enter를 눌러도 추천하는 내용에는 import 내용이 없습니다. 어떻게 해결해야 하나요?
-
미해결실전 HTML & CSS 강좌
13강. CSS속성 4 번째 마지막 표 만드는 부분..li태그가 중앙정렬이 안되네요?
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <style> *{ margin:0px; padding:0px; } #wrap{ width:1000px; border:2px solid gray; margin:0 auto; } #header{ width:980px; border:1px solid gray; margin:0 auto; text-align: center; height:90px; line-height: 90px; margin-bottom: 5px; margin-top:5px; } #nav{ width:980px; margin:0 auto; border:1px solid gray; text-align:center; height:90px; overflow: hidden; margin-bottom: 5px; text-align: center; line-height: 45px; } #nav ul li{ float:left; width:180px; border:1px solid gray; list-style: none; height: 30px; line-height: 30px; text-align: center; } #content{ width:980px; border:1px solid gray; overflow: hidden; height:270px; margin:0 auto; } .main{ float:left; width:630px; border:1px solid gray; height: 250px; margin-right: 5px; margin-top:5px; text-align: center; margin-left: 5px; } .ban{ width:330px; height:250px; border:1px solid gray; float:left; margin-top:5px; text-align: center; } #footer{ width:980px; height: 90px; border:1px solid gray; margin:0 auto; text-align: center; line-height: 90px; margin-bottom: 5px; margin-top:5px; } </style> <body> <div id ="wrap"> <div id = "header"> <h1>HEADER</h1> </div> <div id = "nav"> NAVIGATION <ul> <li>menu1</li> <li>menu2</li> <li>menu3</li> <li>menu4</li> <li>menu5</li> </ul> </div> <div id="content"> <div class="main">CONTENT</div> <div class="ban">BANNER</div> </div> <div id="footer"> <p>FOOTER</p> </div> </div> </body> </html>
-
미해결리액트로 나만의 블로그 만들기(MERN Stack)
Infinite Scroll 문제
안녕하세요 강사님 강의 잘 보고있습니다. 가장 최초 게시물 페이지에 진입하면 오류가 뜨지 않는데 다른 페이지로 들어갔다가 PostCardList 페이지로 들어가면 다음과 같은 오류가 발생하면서 기존에 있었던 게시물들이 반복해서 뜨는데요ㅠㅠ 어느 부분이 문제일까요?ㅠㅠ https://github.com/HyunYuJin/me_blog 제 깃 주소도 올려드려요!!ㅠㅠ 감사합니당
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
수업자료 사이트 아예 주소가 잘못되었다고 뜨는데 어떻게 해결할 수 있을까요?
수업자료 사이트 아예 주소가 잘못되었다고 뜨는데 어떻게 해결할 수 있을까요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
input
뭐가 오류인지 모르겠습니다
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
400대 오류관련
안녕하세요 강사님 강의 잘 보고 있습니다. 한가지 궁금한 점이 있어서 질문드립니다. 보통 구글에서 뭘 검색해서 관련된 페이지를 클릭해서 들어가면 간혹 404 not found가 뜨는 경우가 있는데 이 경우는 리소스가 있는데 숨기는 건가요? 감사합니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
saga로 데이터를 넘겨주는거에 대해 질문 있습니다.
긴가민가해서 질문 올려요 ㅠㅠ 백앤드 노드 서버 구축하기 - 게시글 좋아요 영상 보고 있는데요, postCard.js의 const onLike = useCallback( () => { dispatch({ type: LIKE_POST_REQUEST, data: post.id }) // true는 false로 / false는 true로 // setLiked( (prev) => true) }, []) 여기서 data의 post.id를 saga로 보내주는데 그럼 sagas/post.js의 이 부분에서 function likePostAPI(data) { return axios.patch(`/post/${data}/like`) } post.id는 likePostAPI함수의 매개변수(data)로 입력되고요, 그러면 routes/post.js의 router.patch('/:postId/like', async (req, res, next) => { try { const post = await Post.findOne({where: {id: req.params.postId}}) if (!post) { return res.status(403).send('게시글이 존재하지 않습니다.') } await post.addLikers(req.user.id) res.json({ PostId: post.id, UserId: req.user.id }) } catch (error) { console.error(error) next(error) } }) 이 부분이 실행되는건데 처음 dispatch의 data로 post.id를 보내주면 post와 id를 합쳐서 저절로 router.patch('/:postId/like', async (req, res, next) => { 이 코드의 postId로 들어가는게 맞는건가요? postId를 예를 들어 postEd로 수정하니깐 당연히 에러가 발생하기는 한데... 처음이라 긴가민가하네요ㅠㅠ 만약 data로 post.me라고 보내면 router.patch('/:postMe/like', async (req, res, next) => { 로 수정하는게 맞는건가요? 감사합니다!!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
수업자료가 다운로드가 안 되네요
수업자료가 다운이 안 됩니다.... 자료를 받아볼 수 있는 사이트가 별도로 있나요?
-
Git과 GitHub 시작하기
브랜치를 만들어서 커밋을 해줬을 때 그래프상에 가지가 생기질 않아요
삭제된 글입니다