아래와 같이 간단한 entity를 생성한다고 했을때, 테스트코드에서는 한번에 조회가 되지만 실제 webcontroller에서 호출했을때는 member를 조회하고 team을 한번더 조회하게 됩니다. testcode에서 비슷하게 하려고 member객체를 json으로 출력하게 했는데도 똑똑하게 알아서 채워주고있는데요. 아래 코드를 보면 public class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) Long id; String name; @ManyToOne @JoinColumn Team team; } public class Team { @Id @GeneratedValue(strategy = GenerationType.AUTO) Long id; String name; } @Test public void select() throws JsonProcessingException { Team team = new Team(); team.setName("팀1"); Team saveTeam = teamRepo.save(team); Member member = new Member(); member.setName("학생1"); member.setTeam(saveTeam); memberRepo.save(member); Member member1 = new Member(); member1.setName("학생2"); member1.setTeam(saveTeam); memberRepo.save(member1); List<Member> all = memberRepo.findAll(); ObjectMapper mapper = new ObjectMapper(); String jsonInString = mapper.writeValueAsString(all); System.out.println(jsonInString); } wecontroller에서 List<Member>로 데이터 리턴시 n+1조회문제가 발생하는데요 ------- Hibernate: select member0_.id as id1_0_, member0_.name as name2_0_, member0_.team_id as team_id3_0_ from member member0_ Hibernate: select team0_.id as id1_1 0 , team0_.name as name2_1 0 from team team0 where team0 .id=? unittest에서는 Hibernate: select member0_.id as id1 0 , member0_.name as name2 0 , member0_.team_id as team_id3 0 from member member0_ [{"id":3,"name":"학생1","team":{"id":1,"name":"팀1"}},{"id":4,"name":"학생2","team":{"id":2,"name":"팀2"}}] team_name이 조회쿼리에도 없는데도 알아서 데이터를 불러와서 결과를 넣어주는 모습을 보이는데 @DataJpaTest에서 webcontroller 호출하는 것과 동일한 결과를 얻어보려면 어떤식으로 테스트를 해야할까요?.. controller test코드를 작성해야할까요?..
예전에 투표dapp에 관련하여 질문을 한 수강생입니다. 투표dapp을 구현하면서 이 강의와 마찬가지로 메타마스크와 가나슈를 사용하여 가나슈의 한계정이 각 후보자들에게 한표식 투표를 할수있게 만들어보았습니다. 여기서 문제는 저는 로그인기능을 만들어 회원가입을 하게되면 투표자들이 가나슈에 미리 10개의 계정에 에더가 담겨있는 것처럼 투표자들에게 에더를 투표할때 소비되는 에더만큼만 주어 소비하게하여 투표를 진행하게끔 하려고 해보았습니다. 하지만 제가 블록체인에 관하여 개념이 약간 부족한 탓인지 가나슈와 메타마스크를 이용해서 어떻게 로그인 기능을 만들어 블록체인을 활용한 투표기능을 만들어야 할지 감이 잡히지 않아 문의드립니다.. ㅠㅠ ㅠㅠ 투표자들이 다 메타마스크를 깔아야 하는것인가요??? ㅜ 조금이라도 도움을 주신다면 감사하겠습니다 ..
기존에 이클립스 workspace 에다가 강의실 에 잇는 프로젝트 파일을 복사 해놓고 import 해 보면 서블릿 파일이 에러 문법 다수 라고 나오는데용.. 신규로 project 만들어서 서블릿파일, html 파일 붙여넣으면 이상없구요. 아무래도 컴파일 경로가 잘못된거 같기도 하고 혹시 아세요? 첫 import 패키지 부터 에러 인거로 봐선 경로를 못찾음 인거 같아요
궁금한게 printf 는 그냥 쓰는데 왜 scanf는 scanf_s를 쓰는건가요? 그리고 double d랑 char c, char str[256] 이런것들은 double a가능하고 char a 가능하고 char a[256] 이런게 가능한건가요? a이런건 어차피 변수이니깐 정해져있는지 않은거죠? int age , int add도요
안녕하세요 스엥님 intellij 얼티밋으로 강의 잘 따라하고 있습니다. 지금 부트 2.1.3 버전을 사용 하고 있는데 빈을 재정의 했을 때 따로 설정을 안해줘도 재정의한 빈 값으로 출력이 잘 됩니다. resources/META-INF/spring.factories 파일도 잘 만들어두었습니다.
'''# - - coding: utf-8 - - def main(): print("본 프로그램은 섭씨를 화씨로로 변환해주는 프로그램입니다") print("============================") ===Modify codes below================= def input_celsius_value(): print("변환하고 싶은 섭씨 온도를 입력해 주세요: ") celsius_value=float(input(("변환하고 싶은 섭씨 온도를 입력해 주세요: "))) return celsius_value def convert_celcius_fahrenheit(celsius_value): fahrenheit_value=((9/5)*celsius_value)+32 return fahrenheit_value def print_fahrenheit_value(celsius_value,fahrenheit_value): print("섭씨온도:", celsius_value) print("화씨온도", fahrenheit_value) ====================================== print("===========================") print("프로그램이 종료 되었습니다.") if name == ' main ': main() celsius_value=input_celsius_value() fahrenheit_value=convert_celcius_fahrenheit(celsius_value) print_fahrenheit_value(celsius_value, fahrenheit_value) 이렇게 해서 똑같은 결과를 얻었는데, 과제를 제출하면 2개 실패로 나와요. 아무리 봐도 문제를 못 찾겠어요. ''' C:\Users\Sue\workspace\python_mooc\lab_4>python fahrenheit_converter.py 본 프로그램은 섭씨를 화씨로로 변환해주는 프로그램입니다 변환하고 싶은 섭씨 온도를 입력해 주세요: 32.2 섭씨온도: 32.2 화씨온도 89.96000000000001 프로그램이 종료 되었습니다. C:UsersSueworkspacepython_mooclab_4>submit.bat adpl136472 ∙ Session token prefix: fbb58830aa ∙ In the legacy mode, all cases will run serially! ✔ [0] Session 0 is ready. Uploading files: 100%|████████████████| 6.90k/6.90k [00:00<00:00, 33.2kbytes/s, file=unit_test_fahrenheit_converter.py] ✔ [0] Uploading done. python-kernel: skipping build phase due to missing "setup.py" file ✔ Build finished. (exit code = 0) Generating result sheet... Test Case | Passed? | Feedback test_convert_celsius_fahrenheit | FAILED | Failed test_input_celsius_value | PASSED | Good Job test_main | FAILED | Failed test_print_fahrenheit_value | PASSED | Good Job Reading source file... Transferring results to server... Transfer completed. ✔ Execution finished. (exit code = 0) ✔ [0] Execution finished.
안녕하세요. 이번 숙제는 간단한것 같았는데 생각만큼 잘 안되서 한참 헤맸습니다. 이전 강의를 여러번 복습해서 겨우 숙제대로 코드를 짰는데요, 마음에 안드는 것이 있어서 질문글 남깁니다. 숫자 입력값 받고, 연산자 입력값 받고(연산자는 +,-,*,/) 다시 숫자 입력값을 받아서 값을 계산하는 프로그램을 짜는 것인데, 아래의 코드로는 실행이 됩니다만, 연산자 입력때 ++ 혹은 +-, -+ 등 연산자를 두개 이상 입력할 경우 먼저 입력한 연산자로 실행이 됩니다. 원래는 Invalid input, please try again 이 뜰꺼라고 생각했는데 나오지 않아서 당황했습니다. switch case로 만들어 보라고 하셔서 아래대로 했는데 뭔가 깔끔하지 않은 느낌도 들고 코딩은 했는데 찝찝한 느낌이 가시질 않네요. enum class도 사용해보고 싶었는데 잘 안되서 벽에 막힌 기분입니다. 어떻게 고칠 수 있을까요? #include <iostream> using namespace std; int getInt() { while (1) { cout << "Enter an integer number : "; int x; cin >> x; cin.ignore(32767, '\n'); if (cin.fail()) { cin.clear(); cout << "Invalid Number, please try again." << endl; } else { return x; } } } char getOperator() { while (1) { cout << "Enter an operator :"; char ch; cin >> ch; cin.ignore(32767, '\n'); switch (ch) { case '+': return ch; break; case '-': return ch; break; case '*': return ch; break; case '/': return ch; break; default: cout << "Invalid input, please try again" << endl; } } } void printCalc(int a, int b, char c) { switch (c) { case '+': cout << (a + b); break; case '-': cout << (a - b); break; case '*': cout << (a * b); break; case '/': cout << (a / b); break; } cout << endl; } int main() { int x = getInt(); char op = getOperator(); int y = getInt(); printCalc(x, y, op); return 0; }
안녕하세요 교수님. 항상 유익한 강의 감사합니다. 다름이 아니라 Conditional Operator의 결합성이 Right-to-Left 이던데 20분:55초 쯤에 나오는 예제를 보면 cout << ((t % 2 == 0) ? "even" : "odd") << endl; 저기서 어떻게 Right-to-Left가 가능한건지 잘 모르겠습니다. 저의 생각으론 (t%2==0)의 Condition을 먼저 검사한 다음 Condition이 true면 "even"을 false면 "odd"를 출력하는 것이라고 생각하는데 그러면 결합성이 Left-to-Right가 되어야 하지 않나요?? 어째서 Right-to-Left인 건가요?
from bs4 import BeautifulSoup import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8') sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8') fp = open('food-list.html', encoding='utf-8') soup = BeautifulSoup(fp, 'html.parser') li = soup.select_one('li:nth-of-type(8)') print(li.string) 로 정확히 코딩 했는데도 none type 에러가 납니다. nth-of-type(5)로 했을 때 '동동주'가 나오는 것으로 봐서 전체 리스트 중 5번째가 아니라 두 번째(id가 ac-list)리스트에서 5번째를 가지고 오는 것 같습니다. 그래서 8번째에는 none이라고 뜨는게 아닐까요? 확인 부탁드립니다. 감사합니다.