학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. 파일전송기능을 공부하면서, restAPI에 적용하다보니 두가지 지식에 충돌이 있어서 질문드려봅니다. RestAPI의 관점에서 Post시에 payload를 json으로 변환해서 보내는것으로 이해하고있는데 파일전송시에는 Post요청이라 하더라도 multipart/form-data로 보내는 것이 일반적인가요? 보통 파일첨부기능이 있는 게시판 API를 만든다고할때 글작성을 Post요청하면, 파일이 없을때는 application/json으로 보내고, 파일이 존재하는 경우면 multipart/form-data로 보내는 것인지 아니면, 일관되게 multipart/form-data로만, 아니면 json으로 base64인코딩을 하는 등으로 일관되게 정해서 보내는지 궁금합니다. 일관되지 않게 각각에 경우에 맞춰서 보내준다면, 요청데이터를 받아오는 방식이 ModelAttribute와 RequestBody로 달라지게 될텐데 별도의 핸들러를 구현하는식으로 가는것인지, 궁금합니다. 검색은 열심히 해보았는데 잘 못찾겠어서 혹시 너무 일반적인 질문이라면 키워드라도 알려주시면 감사하겠습니다.
@EntityGraph(attributePaths = "team") List<Member> findEntityGraphByUsername(@Param("username")String username); 이번 강의를 복습하다 보니까 강사님께서 @Param을 사용하셨더라구요.(강의 20:59) findByAge(), findOptionalByUsername()과 같은 메소드는 @Param 애노테이션 없이도 잘 동작 했는데 따로 특별한 이유가 있는 것일까요?
List<Member> result = queryFactory .selectFrom(member) .join(member.team, team) .where(team.name.eq("teamA")) .fetch(); 위의 QueryDSL문을 sql문으로 번역하면 select * from member as m join team as t on m.team _id = t.team _id where t.name ='teamA' 가 맞나요? 관계형DB를 객체 다루듯이 사용하기 위해 Member안에는 Team 클래스가 있고, Team 클래스 안에는 Member 클래스가 있지만 실제로는 .join(member.team, team) 와 같은 코드를 작성하면 내부적으론 DB의 테이블에 가서 외래키와 기본키를 비교해서 값을 가져오는 건가요 ?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 테스트 범위 관련해서 궁금한 점이 있습니다. 영한님 강의 들어보면, 보통 controller-service-repository 구조인데, , 보통 service만 하시나요? controller, repository 다하시나요?
안녕하세요. 강의를 보고 있는 학생입니다. 현재 강의를 보고 간단한 앱을 만들고 있는데, 테스트 코드를 작성하면서 궁금한 점이 생겨서 질문을 남깁니다. 질문 given에서 테스트 데이터들을 준비할 때, sql문으로 준비하는 것이 맞는 건가요? (멤버를 db에 insert하거나 게시글을 insert 하는 것들) 아니면 test코드 내에서 엔티티를 만들어서 repository로 save하는 방식으로 하는 것이 맞는 건가요? 현재 약간 복잡한 서비스 클래스를 테스트 하느라 여러 테이블에 데이터를 많이 넣고 시작해야 하는데, 어떤 방식이 맞는 지 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 [질문 내용] HTTP 요청 데이터 - POST HTML Form에서의 질문입니다. webapp에 html form을 만들어서 /requestParam이 처리하도록 정보를 보내는데 htmlform은 /requestParam을 처리하는 basic request RequestParamServlet의 위치를 몰라도 처리가능한건가요?? 어떤로직으로 돌아가는지 궁금합니다!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] - HomeController를 보면 MemberRepository를 사용하는데, Controler - Service - Repository 구조를 생각하면, LoginService를 사용해야 할 것 같은데, MemberRepository를 사용되는 이유가 궁금합니다. 혹시, 강의 편의상인가요? @Slf4j @Controller @RequiredArgsConstructor public class HomeController { private final MemberRepository memberRepository; // @GetMapping("/") public String home() { return "home"; } @GetMapping("/") public String homeLogin(@CookieValue(name = "memberId", required = false) Long memberId, Model model) { if (memberId == null) { return "home"; } //로그인 Member loginMember = memberRepository.findById(memberId); if (loginMember == null) { return "home"; } model.addAttribute("member", loginMember); return "loginHome"; } }
아래 화면으로 오류가 뜨는데 java 버전이 잘못돼서 그런걸까요? 인텔리제이를 실행하려면 설정해야하는 환경들이 어떻게 되는지 알 수 있을까요? - Variant 'javadocElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.0.5 declares a runtime of a component, and its dependencies declared externally: - Incompatible because this component declares documentation and the consumer needed a library - Other compatible attributes: - Doesn't say anything about its target Java version (required compatibility with Java 11) - Doesn't say anything about its elements (required them packaged as a jar) - Doesn't say anything about org.gradle.plugin.api-version (required '7.6.1') - Variant 'mavenOptionalApiElements' capability org.springframework.boot:spring-boot-gradle-plugin-maven-optional:3.0.5 declares a library, packaged as a jar, and its dependencies declared externally: - Incompatible because this component declares an API of a component compatible with Java 17 and the consumer needed a runtime of a component compatible with Java 11 - Other compatible attribute: - Doesn't say anything about org.gradle.plugin.api-version (required '7.6.1')
QueryDSL까지 강의를 다 듣고 난 이후에 게시판이나 쇼핑몰 같은 포트폴리오를 만들기전에 자그맣게 배운걸 써보고 싶은데 html,css,js를 모르다보니 view쪽을 처리할 수가 없더라구요. 그래서 혹시 활용1편에 제공되는 HelloShop view단 파일을 사용해도 될지 궁금합니다. 깃허브에 올리려고 하고 백엔드단 코드는 전부 스스로 짤 생각입니다.!
즉시로딩을 사용하면 Member 객체를 불러 올 때 1+N문제가 발생하고 Lazy로딩을 사용하면 Team 객체를 사용할 때 쿼리문이 나가서 즉시로딩이든 지연로딩이든 결국 1+N 문제가 생기는 게 맞나요 ? 이 1+N 문제의 해결방법으로 fetchJoin이 나온 것 같은데 지연 로딩, 즉시 로딩보다 무조건 fetchJoin이 이점이 있는 것 아닌가요? 왜 디폴트값으로 지연로딩으로 설정하고 fetchJoin을 선택해서 사용하는지 궁금합니다. 기본적으로 fetchJoin을 사용하고 연관관계에 있는 객체를 사용하지 않을 것 같은 경우에만 지연로딩을 선택적으로 사용하는게 더 편하지 않나요? 사용하지 않는 객체를 가져오는 fetchJoin의 쿼리문 몇 줄이 성능에 그렇게 큰 영향을 미치나요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] MemberRespository를 domain 폴더에서 관리되는 이유가 궁금합니다. 인터페이스라면, domain 폴더에 있어도 될 것 같은데, 구현가 domain 폴더에 있는게 의문이 들었습니다. 또한, LoginForm 이 domain 폴더에 있어야 할 것 같은데, web 폴더에 있는 이유가 LoginController의 DTO라서 그런건가요?
Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); teamRepository.save(teamA); teamRepository.save(teamB); memberRepository.save(new Member("member1", 10, teamA)); memberRepository.save(new Member("member2", 10, teamB)); 강의에서 이렇게 한번에 하려다가 Member를 생성해주고 따로 save를 해주던데 한번에 하면 안되는 이유가 있을까요 ?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 윈도우 cmd에서 gradlew와 gradlew.bat 둘다 해도 똑같이 권한이 없다고 나옵니다.
PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Direction.DESC, "username")); int age = 10; //when Page<Member> page = memberRepository.findByAge(age, pageRequest); PageRequest.of 코드에서 첫 번째 파라미터가 무엇을 의미하는지 헷갈립니다. PageRequest.of 의 2번째 파라미터는 한 페이지의 element 개수이고(limit), 3번째 파라미터는 정렬 조건이 맞나요? List<Member> content = page.getContent(); assertThat(content.size()).isEqualTo(3); assertThat(page.getTotalElements()).isEqualTo(5); assertThat(page.getNumber()).isEqualTo(0); assertThat(page.getTotalPages()).isEqualTo(2); assertThat(page.isFirst()).isTrue(); assertThat(page.hasNext()).isTrue(); page.getContent()는 현재 페이지의 데이터를 가져오는 메소드인가요? page.getNumber()는 현재 페이지를 가져오는 메소드인가요? Page는 책처럼 0,1,2,3 ... 이렇게 페이지가 있는 거고 Content는 그 Page안에 있는 데이터를 의미하는 건가요? List<List<data>> 와 같은 구조로 되어 있는 것일까요? Page와 Content의 자료 구조가 어떻게 되어있는지가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 윈도우 콘솔 창에 h2.bat을 입력해도 연결이 되지 않습니다. 참고로 h2.bat 파일을 실행해도 실행되었다가 바로 꺼집니다. 참고로 제 자바 jdk의 버전은 11이고 jre버전은 8입니다. 환경변수까지 11로 설정한 상태입니다. 윈도우 installer와 플랫폼 버전 모두 다운 받아서 시도했는데 안됐습니다.
An error occurred at line: [11] in the jsp file: [/WEB-INF/views/save-result.jsp] Member cannot be resolved to a type 8: <ul> 9: <li>id=<%=((Member)request.getAttribute("member")).getId()%></li> 10: <li>username=<%=((Member)request.getAttribute("member")).getUsername()%></li> 11: <li>age=<%=((Member)request.getAttribute("member")).getAge()%></li> 12: </ul> 13: <a href="/index.html">메인</a> 14: </body> 이렇게 에러가 나타납니다...