묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
제꺼는 return ret 뒤에 조금 다르게 나옵니다
(포인터 실습. 14분 38초) 비주얼 스튜디오 2022, x86에서 디스어셈블리 확인했습니다 ret.hp = 100;000A245E 8B 45 08 mov eax,dword ptr [ret]000A2461 C7 00 64 00 00 00 mov dword ptr [eax],64h ret.attack = 10;000A2467 8B 45 08 mov eax,dword ptr [ret]000A246A C7 40 04 0A 00 00 00 mov dword ptr [eax+4],0Ah ret.defence = 2;000A2471 8B 45 08 mov eax,dword ptr [ret]000A2474 C7 40 08 02 00 00 00 mov dword ptr [eax+8],2 return ret;000A247B 8B 45 08 mov eax,dword ptr [ret]}000A247E 52 push edx000A247F 8B CD mov ecx,ebp000A2481 50 push eax000A2482 8D 15 A4 24 0A 00 lea edx,ds:[0A24A4h]000A2488 E8 A3 ED FF FF call @_RTC_CheckStackVars@8 (0A1230h)000A248D 58 pop eax000A248E 5A pop edx000A248F 5F pop edi000A2490 5E pop esi000A2491 5B pop ebx000A2492 81 C4 D4 00 00 00 add esp,0D4h000A2498 3B EC cmp ebp,esp000A249A E8 F5 ED FF FF call __RTC_CheckEsp (0A1294h)000A249F 8B E5 mov esp,ebp000A24A1 5D pop ebp000A24A2 C3 ret return ret;000A247B 8B 45 08 mov eax,dword ptr [ret]ret 뒤에 이렇게 한줄 나오고 없어요어떻게 해석해야할까요??
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Java 알고리즘 문제 풀이 02-08 컴파일 에러 문의
안녕하세요!IntelliJ로 실행해봤을 때는 이상 없는데채점사이트로 실행 시 컴파일 에러로 잡혀서 어느 부분이 문제인지 알려주시면 정말 감사합니다! import java.util.*; class Main{ public int[] solution(int n, int[] arr) { HashMap<Integer, Integer> rankMap = new HashMap<>(); ArrayList<Integer> sortList = new ArrayList<>(){{ for(int i = 0; i < n; i++) add(arr[i]); }}; int[] answer = new int[n]; sortList.sort(Collections.reverseOrder()); for (int i = 0; i < n; i++) { if (i == 0) rankMap.put(sortList.get(i), 1); else if (sortList.get(i-1).equals(sortList.get(i))) continue; else rankMap.put(sortList.get(i), i+1); } for (int i = 0; i < n; i++){ answer[i] = rankMap.get(arr[i]); } return answer; } public static void main(String[] args) { // 실행 시간 측정 // long beforeTime = System.currentTimeMillis(); // 측정 코드 시작 Main T = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; for(int i = 0; i < n; i++) arr[i] = sc.nextInt(); for(int i : T.solution(n, arr)) System.out.print(i + " "); sc.close(); // 측정 코드 끝 // long afterTime = System.currentTimeMillis(); // long diffTime = afterTime-beforeTime; // System.out.println("실행시간(ms) " + diffTime); } }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
meberRepository 질문
위 MemberServiceTest 클래스에서 memberRepository참조변수를 beforeEach메서드에서 초기화한게 아니고 필드에서 memberRepository를 한 번 초기화 하였는데 왜 BeforeEach 실행시 이렇게 모두 다른 memberRepository 주소값이 출력되는 지 잘 모르겠습니다. 필드에서 한번만 초기화 하였고 memberRepository의 값의 변화도 없는데 모두 같은 주소값이 출력되야 하는 거 아닌가요?
-
미해결선형대수학개론
1-3 span{u,v} 시각화 질문
span{u,v}에서 u는 ㅣ v는 ㅡ 로 가는데 어떻게 합쳐져서 저런평면 형태가 나오는 거죠??
-
미해결실전! 스프링 데이터 JPA
멤버, 팀 테스트 코드 NullPointerException 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]선생님과 소스는 조금씩 다르지만 문제는 없다고 보는데 도대체 왜 널포인터익셉션이 발생하는지 모르겠습니다... 테스트 코드 작성 시 teamA,teamB 저장 및 콘솔로 출력확인, db 저장도 확인[test.java]@SpringBootTest@Transactional@Rollback(false)public class MemberTest {@PersistenceContextEntityManager em;@Testpublic void testEntity(){Team teamA = Team.builder().name("teamA").build();Team teamB = Team.builder().name("teamB").build();em.persist(teamA);em.persist(teamB);System.out.println("teamA = " + teamA);System.out.println("teamB = " + teamB);Member member1 = new Member("member1", 10, teamA); // 여기서 에러 발생=========================teamA,B 객체 모두 정상 출력=>teamA = Team(id=1, name=teamA) =>teamB = Team(id=2, name=teamB)[team.java]@Entity@AllArgsConstructor@NoArgsConstructor(access = AccessLevel.PROTECTED)@Data@Builder@ToString(of = {"id", "name"})public class Team {@Id@GeneratedValue@Column(name = "team_id")private Long id;private String name;@OneToMany(mappedBy = "team")private List<Member> members = new ArrayList<>();}3.[Member.java]@Entity@Getter@AllArgsConstructor@NoArgsConstructor(access = AccessLevel.PROTECTED)@Builder@ToString(of = {"id", "username", "age"})public class Member {@Id@GeneratedValue@Column(name = "member_id")private Long id;private String username;private int age;@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "team_id")private Team team;public Member(String username, int age, Team team) {this.username = username;this.age = age;if (team != null) {changeTeam(team);}}// 멤버는 팀을 변경할 수 있음// 멤버에서 변경되면 팀에 있는 멤버리스트도 변경되어야 함public void changeTeam(Team team) {this.team = team;team.getMembers().add(this);}}생성자에서 team !=null 이 아닐 때 changeTeam(team)을 호출해야 하는데 에러 로그 상 changeTeam 메소드 호출 시 "team.getMembers().add(this);" 에서 널포인터가 발생합니다...확인 부탁드립니다![에러 메세지] java.lang.NullPointerExceptionat study.datajpa.entity.Member.changeTeam(Member.java:40)at study.datajpa.entity.Member.<init>(Member.java:32)at study.datajpa.entity.MemberTest.testEntity(MemberTest.java:38)
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
Vuex 관련 질문
안녕하세요~ 캡틴 판교님 수업을 잘 듣고 실무에서도 잘 사용 중입니다. 다만, 사용하다보다가 발생한 궁금증이 있습니다.Vuex의 장점들은 어디서나 쉽게 찾아볼 수 있는데, 단점이라 하면 무엇들이 있을까요? 저희가 props와 event로 component간 데이터를 주고 받는데, component의 depth가 깊어지면 단순 데이터를 내리고 올림에 있어서 복잡도도 증가하고번거로움도 생기잖아요? 그래서 eventbus가 있는데, 이 녀석은 naming rule을 아무리 잘 정해도 많이 사용하다보면서로 호출하는 곳들이 얽히고 나중엔 어디서 사용하는지 모르는 경우가 태반이라 사실상저희는 암묵적으로 금지하고 있는 상황입니다.(사실 얘도 언제 사용해야 가장 powerful하게 사용할 수 있는지 궁금하네요.) 그래서 vuex를 많이 사용하는데, vuex 사용에 있어서도 내부적으로 갑론을박이 있습니다.vuex도 eventbus 처럼 아무데서나 import만 하면 접근할 수 있어서 중구난방으로 접근이 되어서결국 관리가 복잡해진다.(실제도 redux도 처음에 적용했다가 다 걷어내는 프로젝트들이 주변에 점점 생겨나고 있어서요.) 그런데, 검색해보면 vuex는 단점이라고 설명이 되어 있는 것을 찾기가 힘듭니다.또한, 어느정도 선에서 vuex를 적용해야하는지가 애매한데, 기준을 어떤식으로 잡아야 할까요?vuex를 사용하면 .vue 파일 내부 코드나 로직들을 store쪽으로 뺄 수 있어서 많이 간략해지고 깔끔해지는 것으로 한눈에 component 구조들을 파악하기가 쉽긴 한데요.그렇다면 모든 computed나 data에서 관리하는 것들을 다 vuex로 항상 빼는 것이 정답일지알아서 적당히 구분해서 할지... 정말 필요한것만 vuex로 빼야할지 그런것들이 참 어려운 것 같습니다.마치 component를 어느정도 수준으로 세분화해서 설계할지와 같은 고민 같습니다. 제가 front 개발에 대한 지식의 깊이가 미진해서 그런지 관련해서 이야기를 한번 듣고 싶은데,제 주변에서는 마땅하지가 않아서 질문을 남깁니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 Controller 패키지가 정상 작동 안 합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오): 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오): 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오): 예[질문 내용]여기에 질문 내용을 남겨주세요.Sptring boot가 controller 패키지를 인식안하고converter패키지를 controller로 인식하고있습니다.그래서 HelloController 클래스를 converter 패키지에 구현하고 진행중 입니다..
-
해결됨MAYA 3D animation Season 1
채널창에 있는 옵션을 단축키로 삭제하는 방법이 궁금합니다.
기초5에서 7분 40초부터 나오는 부분부터 단축키로 지정해서 옵션을 삭제하셨는데 어떻게 하는지 방법을 모르겠어서 질문을 올립니다.
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
질문 있어요!
안녕하세요.for 문 구구단 내용중에서print('{:4d}'.format(i *j)'{:4d}' 가 4자리 정수를 출력 한다라고 하셨는데4자리 정수를 출력 해야 하는 이유가 있을까요?해당 {:4d} 를 삭제 하고 출력 해보니2 4 6 810121416183 6 91215182124274 8121620242832365101520253035404561218243036424854714212835424956638162432404856647291827364554637281 위 처럼 출력이 되는 것 같네요이건 뭔가 라인 정렬을 위해 사용 하는 것일까요?그리고 {:4} 로 바꿔서 해봐도 {:4d} 와 결과가 동일한 것 같은데 차이점이 있을까요?
-
해결됨입문자를 위한 Docker 및 Dockerizing 마스터하기
강의 별개의 질문이지만 기초적인 질문드립니다.
아래와 같은 양식으로 질문을 남겨주세요 🙂수업을 들으시면 이해하기 어려운 부분이 있으면 상세히 질문을 남겨주세요.서로 Tone and Manner 를 지키며, 즐거운 수업 시간을 만들어보아요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요. 이번 강의를 들으며 리눅스 환경에 익숙하지 않아 리눅스 환경에 좀 익숙해지려 하는데요혹시 강사님께서는 어느정도의 리눅스 지식이 필요한지 이에 적응하기 위해 추천하시는 레퍼런스(책, 인강)는 어떤것이 있는지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
fail() 에 빨간줄이 그어집니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]fail(); 여기서 오류가 나는데 이유를 모르겠어요 package hello.hellospring.service;import hello.hellospring.domain.Member;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.Test;import static org.assertj.core.api.Assertions.*;class MemberServiceTest {//테스트는 한글메서드로 바꿔도 좋다.MemberService service = new MemberService();@Testvoid 회원가입() {//givenMember member = new Member();member.setName("hello");//whenLong saveId = service.join(member);//thenMember findeMember = service.findOne(saveId).get();Assertions.assertThat(member.getName()).isEqualTo(findeMember.getName());}@Testvoid 중복회원예외() {//givenMember member1= new Member();member1.setName("spring");Member member2= new Member();member2.setName("spring");//whenservice.join(member1);try{service.join(member2); //validate에서 걸려서 예외가 터져야 한다. fail(); 여기가 오류가 나요 }catch (IllegalStateException e){//성공assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");}//then}@Testvoid 회원조회() {}}
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
basic/items.html 입력시에만 화이트 라베 오류가 발생합니다. 제발 도와주세요 ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.items.html 수정 전 코드 입력시에는 웹 페이지가 잘 작동하는데<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"> <link href="../css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"> <style> .container { max-width: 560px; } </style> </head> <body> <div class="container"> <div class="py-5 text-center"> <h2>상품 상세</h2> </div> <div> <label for="itemId">상품 ID</label> <input type="text" id="itemId" name="itemId" class="form-control" value="1" th:value="${item.id}" readonly> </div> <div> <label for="itemName">상품명</label> <input type="text" id="itemName" name="itemName" class="form-control" value="상품A" th:value="${item.itemName}" readonly> </div> <div> <label for="price">가격</label> <input type="text" id="price" name="price" class="form-control" value="10000" th:value="${item.price}" readonly> </div> <div> <label for="quantity">수량</label> <input type="text" id="quantity" name="quantity" class="form-control" value="10" th:value="${item.quantity}" readonly> </div> <hr class="my-4"> <div class="row"> <div class="col"> <button class="w-100 btn btn-primary btn-lg" onclick="location.href='editForm.html'" th:onclick="|location.href='@{/basic/items/{itemId}/ edit(itemId=${item.id})}'|" type="button">상품 수정</button> </div> <div class="col"> <button class="w-100 btn btn-secondary btn-lg" onclick="location.href='items.html'" th:onclick="|location.href='@{/basic/items}'|" type="button">목록으로</button> </div> </div> </div> <!-- /container --> </body> </html> 수정 후 코드를 복붙 후에 웹 페이지에 입력하면 화이트 라벨 페이지가 응답합니다...뭐가 문제인지 모르겠습니다.. 도와주세요
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
구글 이미지 주소 추출 - 오류(고양이)
*. 질문 : 큰 이미지 주소추출에서 문제가 발생하는 듯 합니다. 해결점을 못 찾겠습니다. "고양이" from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import os import urllib.request import pyautogui # keyword = pyautogui.prompt("검색어를 입력하세요") if not os.path.exists("고양이"): os.mkdir("고양이") # 크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager import time import pyautogui import pyperclip # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 불필요한 에러 메시지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) service = Service(executable_path=ChromeDriverManager().install()) browser = webdriver.Chrome(service=service, options=chrome_options) # 웹페이지 해당 주소 이동 browser.implicitly_wait(10) # 웹페이지 로딩 될때가지 5초는 기다림 browser.maximize_window() #browser = webdriver.Chrome() browser.get("https://www.google.co.kr/search?q=%EA%B3%A0%EC%96%91%EC%9D%B4&tbm=isch&ved=2ahUKEwioo8HqscOBAxUM_WEKHdO9CDwQ2-cCegQIABAA&oq=%EA%B3%A0%EC%96%91%EC%9D%B4&gs_lcp=CgNpbWcQAzIECCMQJzIICAAQgAQQsQMyCAgAEIAEELEDMggIABCABBCxAzIICAAQgAQQsQMyCAgAEIAEELEDMggIABCABBCxAzIFCAAQgAQyCAgAEIAEELEDMgUIABCABDoLCAAQgAQQsQMQgwFQ9hJYiRlg7hpoAXAAeACAAY8BiAGMB5IBAzEuN5gBAKABAaoBC2d3cy13aXotaW1nwAEB&sclient=img&ei=eT4QZeiCOoz6hwPT-6LgAw&bih=933&biw=1680") before_h = browser.execute_script("return window.scrollY") # 무한 스크롤 while True: browser.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END) time.sleep(1) after_h = browser.execute_script("return window.scrollY") if after_h == before_h: break before_h = after_h # 썸네일 이미지 태크 추출 imgs = browser.find_elements(By.CSS_SELECTOR,".rg_i.Q4LuWd") for i, img in enumerate(imgs,1): # 각 이미지를 클릭해서 큰 사이즈를 찾음 img.click() time.sleep(2) # 큰 이미지 추출 target = browser.find_element("img.r48jcc.pT0Scc.iPVvYb") img_src = target.get_attribute("src") # 이미지 다운로드 # 크롤링 하다보면 http error 403: forbidden 에러가 납니다. opener = urllib.request.build_opener() opener.addheaders = [("User-Agent","Mozila/5.0")] urllib.request.install_opener(opener) urllib.request.urlretrieve(img_src,f"고양이{i}.jpg") # 이미지 저장
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
RestaurantDetail 캐싱
Restaurant 와 RestaurantDetail 가 서로 연결될 수 있게 설계를 했기 때문에, detail 캐싱이 가능한걸까요?현업에서 강의와 다르게 설계가 되어 있다면 별도의 상태를 하나 더 만들어야 할까요?==== 억지 가정 ====현업에서Restaurant 의 이미지는 thumbUrl 로, RestaurantDetail 의 이미지는 detailThumbUrl 로 설계가 되어 있다는 가정
-
해결됨ProtoPie Master Courses (프로토파이 마스터 클래스)
수업자료 문의드려요
수업자료 다운받아서 import해서 넣는데 "File doesn’t exist or you don’t have permission to view it" 라는 알람이 뜨면서 피그마 파일이 열리지않습니다.수업자료 피그마 파일 링크 url 새롭게 전달해주시면 복사해서 가져가도 될까요..?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Test 오류 발생 원인이 무엇인지 잘 모르겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]package hello.jdbc.service; import hello.jdbc.domain.Member; import hello.jdbc.repository.MemberRepositoryV3; import lombok.extern.slf4j.Slf4j; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.TransactionTemplate; import java.sql.SQLException; /** * 트랙잭션 - @Transactional AOP */ @Slf4j //final이 붙거나 @NotNull 이 붙은 필드의 생성자를 자동 생성해주는 롬복 어노테이션 public class MemberServiceV3_3 { private final MemberRepositoryV3 memberRepository; public MemberServiceV3_3( MemberRepositoryV3 memberRepository) { this.memberRepository = memberRepository; } @Transactional //이 메소드를 호출할 때, 트랙잭션을 걸고 시작하겠다는 의미. // 성공하면 커밋 실패하면 롤백을 한다. public void accountTransfer(String fromId, String toId, int money) throws SQLException { bizLogic(fromId, toId, money); } private void bizLogic(String fromId, String toId, int money) throws SQLException { Member fromMember = memberRepository.findById(fromId); Member toMember = memberRepository.findById(toId); memberRepository.update(fromId,fromMember.getMoney()- money); validation(toMember); memberRepository.update(toId,toMember.getMoney()+ money); } private static void validation(Member toMember) { if(toMember.getMemberId().equals("ex")){ throw new IllegalStateException("이제 중 예외 발생. 테스트 위해 만듦"); } } }이것이 원본 코드이고 package hello.jdbc.service; import hello.jdbc.domain.Member; import hello.jdbc.repository.MemberRepositoryV3; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; import java.sql.SQLException; import static hello.jdbc.connection.ConnectionConst.*; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * 트랜잭션 - @Transactional AOP */ @Slf4j @SpringBootTest //스프링테스트 어노테이션이 있으면 이 테스트에서 //스프링부트가 이 테스트에서 스프링 컨테이너를 만들고 필요한 스프링 빈을 전부 등록하고 스프링 빈에 대한 의존관계 주입도 받을 수 있게 된다 class MemberServiceV3_3Test { public static final String MEMBER_A = "memberA"; public static final String MEMBER_B = "memberB"; public static final String MEMBER_EX = "ex"; @Autowired // 의존관계 주입을 받아서 사용한다. private MemberRepositoryV3 memberRepository; @Autowired private MemberServiceV3_3 memberService; @TestConfiguration static class TestConfig{ @Bean DataSource dataSource(){ return new DriverManagerDataSource(URL,USERNAME,PASSWORD); } @Bean PlatformTransactionManager transactionManager(){ return new DataSourceTransactionManager(dataSource()); } @Bean MemberRepositoryV3 memberRepositoryV3(){ return new MemberRepositoryV3(dataSource()); } @Bean MemberServiceV3_3 memberServiceV3_3(){ return new MemberServiceV3_3(memberRepositoryV3()); } } @AfterEach void after() throws SQLException { memberRepository.delete(MEMBER_A); memberRepository.delete(MEMBER_B); memberRepository.delete(MEMBER_EX); } @Test @DisplayName("정상 이체") void accountTransfer() throws SQLException { //given Member memberA = new Member(MEMBER_A, 10000); Member memberB = new Member(MEMBER_B, 10000); memberRepository.save(memberA); memberRepository.save(memberB); //when memberService.accountTransfer(memberA.getMemberId(), memberB.getMemberId(), 2000); //then Member findMemberA = memberRepository.findById(memberA.getMemberId()); Member findMemberB = memberRepository.findById(memberB.getMemberId()); assertThat(findMemberA.getMoney()).isEqualTo(8000); assertThat(findMemberB.getMoney()).isEqualTo(12000); } @Test @DisplayName("이체중 예외 발생") void accountTransferEx() throws SQLException { //given Member memberA = new Member(MEMBER_A, 10000); Member memberEx = new Member(MEMBER_EX, 10000); memberRepository.save(memberA); memberRepository.save(memberEx); //when assertThatThrownBy(() -> memberService.accountTransfer(memberA.getMemberId(), memberEx.getMemberId(), 2000)) .isInstanceOf(IllegalStateException.class); //then Member findMemberA = memberRepository.findById(memberA.getMemberId()); Member findMemberEx = memberRepository.findById(memberEx.getMemberId()); //memberA의 돈이 롤백 되어야함 assertThat(findMemberA.getMoney()).isEqualTo(10000); assertThat(findMemberEx.getMoney()).isEqualTo(10000); } }이것이 테스트 코드입니다.원본 코드는 따로 수정하지 않았고 테스트 코드만 가져와서 사용했는데 왜 오류가 발생하는지 잘 이해가 안됩니다 설명 부탁드립니다. 오류는 다음과 같이 나옵니다Execution failed for task ':test'.> No tests found for given includes: [hello.jdbc.service.MemberServiceV3_3Test.AopCheck](--tests filter)* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.> Get more help at https://help.gradle.org.Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.For more on this, please refer to https://docs.gradle.org/8.2.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 577ms4 actionable tasks: 1 executed, 3 up-to-date 설명 부탁드립니다
-
미해결
(BONUS) 셀레니움 ver 4.0 가이드 + 크롬 드라이버 자동으로 다운 받는 법 -> 처음 예시부터 막혔습니다. 실행 오류 발생되요.
안녕하세요. 완전 초반 코드부터 막혔는데요 도움이 필요합니다. ㅠ,ㅠ======================================from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options #크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) service = Service(executable_path=ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=chrome_options) #주소 이동 driver.get("https://www.naver.com") ===================================<실행결과>jiyounglee@PM-Haven-Lee ~ % /usr/local/bin/python3 /Users/jiyounglee/python_automation/셀레니움_기본설정.py[WDM] - ====== WebDriver manager ======[WDM] - Current google-chrome version is 116.0.5845[WDM] - Get LATEST chromedriver version for 116.0.5845 google-chromeTraceback (most recent call last): File "/Users/jiyounglee/python_automation/셀레니움_기본설정.py", line 12, in <module> service = Service(executable_path=ChromeDriverManager().install()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/webdriver_manager/chrome.py", line 37, in install driver_path = self._get_driver_path(self.driver) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/webdriver_manager/core/manager.py", line 29, in getdriver_path binary_path = self.driver_cache.find_driver(driver) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/webdriver_manager/core/driver_cache.py", line 95, in find_driver driver_version = driver.get_version() ^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/webdriver_manager/core/driver.py", line 43, in get_version self.get_latest_release_version() File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/webdriver_manager/drivers/chrome.py", line 44, in get_latest_release_version resp = self._http_client.get(url=latest_release_url) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/webdriver_manager/core/http.py", line 32, in get self.validate_response(resp) File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/webdriver_manager/core/http.py", line 15, in validate_response raise ValueError(f"There is no such driver by url {resp.url}")ValueError: There is no such driver by url https://chromedriver.storage.googleapis.com/LATEST_RELEASE_116.0.5845
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
MemberServiceV3_3 테스트 코드 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]위는 MemberServiceV3_3 코드의 @Transactional를 사용하는 메소드 부분이고 아래는 MemberServiceV3_3Test 코드입니다.package hello.jdbc.service; import hello.jdbc.domain.Member; import hello.jdbc.repository.MemberRepositoryV3; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; import java.sql.SQLException; import static hello.jdbc.connection.ConnectionConst.*; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * 트랜잭션 - @Transactional AOP */ @Slf4j @SpringBootTest //스프링테스트 어노테이션이 있으면 이 테스트에서 //스프링부트가 이 테스트에서 스프링 컨테이너를 만들고 필요한 스프링 빈을 전부 등록하고 스프링 빈에 대한 의존관계 주입도 받을 수 있게 된다 class MemberServiceV3_3Test { public static final String MEMBER_A = "memberA"; public static final String MEMBER_B = "memberB"; public static final String MEMBER_EX = "ex"; @Autowired // 의존관계 주입을 받아서 사용한다. private MemberRepositoryV3 memberRepository; @Autowired private MemberServiceV3_3 memberService; @TestConfiguration static class TestConfig{ @Bean DataSource dataSource(){ return new DriverManagerDataSource(URL,USERNAME,PASSWORD); } @Bean PlatformTransactionManager transactionManager(){ return new DataSourceTransactionManager(dataSource()); } @Bean MemberRepositoryV3 memberRepositoryV3(){ return new MemberRepositoryV3(dataSource()); } @Bean MemberServiceV3_3 memberServiceV3_3(){ return new MemberServiceV3_3(memberRepositoryV3()); } } @AfterEach void after() throws SQLException { memberRepository.delete(MEMBER_A); memberRepository.delete(MEMBER_B); memberRepository.delete(MEMBER_EX); } @Test @DisplayName("정상 이체") void accountTransfer() throws SQLException { //given Member memberA = new Member(MEMBER_A, 10000); Member memberB = new Member(MEMBER_B, 10000); memberRepository.save(memberA); memberRepository.save(memberB); //when memberService.accountTransfer(memberA.getMemberId(), memberB.getMemberId(), 2000); //then Member findMemberA = memberRepository.findById(memberA.getMemberId()); Member findMemberB = memberRepository.findById(memberB.getMemberId()); assertThat(findMemberA.getMoney()).isEqualTo(8000); assertThat(findMemberB.getMoney()).isEqualTo(12000); } @Test @DisplayName("이체중 예외 발생") void accountTransferEx() throws SQLException { //given Member memberA = new Member(MEMBER_A, 10000); Member memberEx = new Member(MEMBER_EX, 10000); memberRepository.save(memberA); memberRepository.save(memberEx); //when assertThatThrownBy(() -> memberService.accountTransfer(memberA.getMemberId(), memberEx.getMemberId(), 2000)) .isInstanceOf(IllegalStateException.class); //then Member findMemberA = memberRepository.findById(memberA.getMemberId()); Member findMemberEx = memberRepository.findById(memberEx.getMemberId()); //memberA의 돈이 롤백 되어야함 assertThat(findMemberA.getMoney()).isEqualTo(10000); assertThat(findMemberEx.getMoney()).isEqualTo(10000); } }저는 지금까지는 원본 코드와 테스트 코드가 따로 따로라고 생각했습니다. 근데 강의에서 원본 코드의 @Transactional을 사용 했을 때와, @Transactional을 주석 처리해 원본 코드를 수정했을 때. 테스트 코드의 결과가 다르게 변하더라구요. 이런 결과가 왜 발생하는건가요?테스트 코드는 원본 코드에 영향을 받는건가요?만약, 영향을 받는다면 어떤 범위까지 영향을 받는건가요? 설명 부탁드립니다!
-
미해결비트코인 선물거래 자동매매 시스템(저자직강)
ec2 사용하려고하는데 사이즈
안녕하세요 강사님!해당 프로그램 ec2 인스턴스로 돌리고 싶은데사이즈는 어느정도가 좋을까요?백테스트나 다른 것들은 로컬에서 돌릴예정이고실제 트레이딩 봇만 구동하려고합니다
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
[쉬어가기 2장]
[쉬어가기 2장] 7:15 자막 -> FPGA가 임베디드 시장에 잘 어울리지 않는 것 같아요 (군사, 의료장비 외에)실제로 방산업체의 직무기술서에서 FPGA 활용 능력을 요구하는 것을 본 적이 있는데요, FPGA가 특별히 군사장비에서 유용한 이유눈 무엇인가요??쉬어가기 다시 보다가 궁금해져서 질문 남겨봅니다!