묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
JpaItemRepositoryV2 질문 있습니다.
JpaRepository를 상속받으면 스프링 데이터 jpa가 구현클래스를 자동으로 만들어 준다고 하였고현재ItemRepositoryV2 코드에서 SpringDataJpaItemRepository를 생성자로 주입받았는데 SpringDataJpaItemRepository는 인터페이스로 정의 되어있는데 인터페이스를 주입받아서 사용하는것이 가능한가요? SpringDataJpaItemRepository가 JpaRepository를 상속받아서 확장된 인터페이스가 되었고 자동으로 구현 클래스가 생성된것은 이해하였습니다. 그렇다면 현재ItemRepositoryV2 코드에서는 자동으로 생성된 구현클래스를 자체를 주입받아서 사용해야하는것 같은데 구현클래스가 아닌 인터페이스를 주입받아서 사용하는것에 의문이 있습니다.기본 자바문법에서는 인터페이스를 주입받아서 그 기능들을 사용하는것이 불가능한거로 알고 있었는데 어떻게 인터페이스를 주입받아서 그 기능들을 사용하는 건가요?
-
미해결실전! Querydsl
@Transactional 시 @Rollback(value = false)와 @Commit의 차이
@Test @Transactional @Rollback(value = false) void testMember() { // given Member member = new Member(); ..... }@Test @Transactional @Commit void testMember() { // given Member member = new Member(); ..... }JUnit에서 테스트 할 때 @Transactional이 붙어있으면 자동으로 롤백되기 때문에 기본 동작을 방지하기 위해(테스트 후에 persist한 데이터를 확인할 수 있도록 하기 위해) @Rollback(value = false)를 사용한다고 알고있습니다.그렇다면 @Rollback(value = false) 대신 @Commit을 사용해도 같다고 봐도 될까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
QuerryDSL은 JPA기술에서만 적용이 가능한가요? + 여러가지 질문이 있습니다.
JPA소개2 강의에서 여러 프로젝트의 DB관련 기술을 보면 QueryDSL을 사용한다고 설명해주셨는데 이전 다른 기술 강의에서도 queryDSL은 동적쿼리를 자동으로 생성해준다 라고 들었습니다. 마이바티스나 jdbc템플릿에서는 queryDSL을 사용하지 못하는건가요?+ 그리고 프로젝트를 해보려고 하는데 jpa는 내용이 많은것 같아 MyBatis를 먼저 사용해서 프로젝트를 진행하고 추후에 영한님의 다른jpa강의 로드맵을 수강하면서 프로젝트를 수정해볼려고 생각중입니다. 그것과 관련된 질문으로 섹션8부터 있는 내용들을 일단 건너뛴 후 프로젝트를 진행하고 나서 나머지 섹션을 수강하고 로드맵의 스프링 로드맵의 핵심원리 고급편과 핵심원리 활용을 수강하여도 학습에 무리가 없을까요? 아니면 섹션 8내용은 일단 건너뛴 후 핵심원리 활용과 고급편을 수강은 일단 하는게 좋은가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
'다대다' 속성 value 타입은 'Category'일 수 없습니다. 오류
안녕하세요 강의를 따라하던중 다음과 같은 오류가 발생합니다.교안과도 같은 코드이고 인텔리제이도 껐다 켰는데 왜 이런 문제가 발생하는지 모르겠습니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
장바구니 수량 변경 문의드립니다.
장바구니 수량 변경 및 커스텀 훅 강의에서 장바구니 수량 +,- 버튼 클릭하면 장바구니의 수량이 동적으로 변경되더라구요. 그런데 저는 화면에 수량이 변경되지않네요. ajax 로 정상 처리 되고 장바구니 데이터도 정상적으로 받아 와서 새로고침 하면 수량이 변경된것을 확인은 할 수 있어요. 소스코드:React CH11 에서 코드를 비교했는데 다르지 않았습니다. 확인부탁드릴게요~
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
실무에서 매핑 테이블은 어떻게 활용할 수 있을까요?
토이 프로젝트를 진행하던 중 궁금한 내용이 생겨서 질문 드립니다.과거 Mybatis와 같은 것을 활용해 진행할 때는코드 매핑 테이블에 코드값 (기본키)과 코드명 이렇게 있고특정 테이블에서는 이러한 코드 값 키를 들고 있어 서브쿼리를 활용해 코드 명을 가져오는 방식으로 활용했습니다.JPA에서 위 구조를 활용하려면 특정 엔티티에 코드 엔티티를 넣고 서로 연관관계를 걸어 준 후에 fetch join으로 select 하는게 베스트 일까요?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
Q타입 생성 확인 오류 질문입니다.
[질문 내용]pdf 파일을 보며 강의 듣기전 예습을 하고 있습니다.build.gradle 파일에 Querydsl 관련 설정을 pdf파일에 나와 있는 대로 밑에와 같이 추가했습니다.//Querydsl 추가implementation 'com.querydsl:querydsl-jpa'annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"annotationProcessor "jakarta.annotation:jakarta.annotation-api"annotationProcessor "jakarta.persistence:jakarta.persistence-api" (현재 저는 Gradle을 통해서 빌드중입니다) Gradle -> Tasks -> build -> clean실행 시에는 문제가 없는데Gradle -> Tasks -> other -> compileJava실행 시에Unable to load class 'javax.persistence.Entity'.This is an unexpected error. Please file a bug containing the idea.log file. 라는 오류가 뜹니다. 그래서 커뮤니티에 관련 질문들을 찾아 보았는데,build.gradle 파일에서 Querydsl 을 설정하는 부분을implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:$ {dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api"로 바꿔보라고 하신 내용이 있어서 바꿔보았습니다.그리고 gradle refresh를 눌렀을 때 오류가 발생했는데 지금은 되네요... pdf 파일 내용을 수정해주시면 감사하겠습니다!!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
itemservice-db 프로젝트
controller가 없는데 Front만으로도 controller처럼 처리를 할 수 있는건가요?아니면 이전에 memory에서 해서 모델에서 변환시켜줬어야 했는데, db를 이용하니까 model view controller가 다 필요없어진 건가요? items.html에서 이렇게 코드가 있는데th:onclick="|location.href='@{/items/add}'|" 이게 addForm.html로 가는 건가요?어디에서 변환이 되는건지 모르겠는데 관련 코드좀 찾아주실 수 있나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
실행 시 시퀸스 자동 생성
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.단방향 연관관계 강의 9:40에서 이전에 작성했던 시퀸스 모두 삭제하고 다시 작성해서 실행했는데 에러가 떠서 drop SEQUENCE MEMBER_SEQ;로 h2 디비에서 시퀸스를 지우고 다시 실행했습니다. 근데 왜 실행할 때 아래와 같이 각 테이블에 대한 시퀸스가 자동으로(1 increment by 50으로) 생성되는건가요? 강의에서는 1 increment by 1로 생성됩니다.
-
해결됨실전! Querydsl
서브 쿼리기 때문에 이름이 없다고 하신 이유에 대해 질문드립니다.
프로젝션과 결과 반환 - DTO 조회 강의의 15:23에서 '서브쿼리이기 때문에 이름이 없다'고 하신 부분이 이해가 가지 않아서 추가 설명해주시면 감사하겠습니다 🙂
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
주문조회 강제 초기화 질문
@GetMapping("/api/v1/orders") public List<Order> ordersV1() { List<Order> all = orderRepository.findAll(); for (Order order : all) { order.getMember().getName(); //Lazy 강제 초기화 order.getDelivery().getAddress(); //Lazy 강제 초기화 List<OrderItem> orderItems = order.getOrderItems(); orderItems.stream().forEach(o -> o.getItem().getName()); //Lazy 강제 초기화 } return all; }첫 질문Lazy방식이기에 조인되어 있는 필드를 가져오지 못하기에 member와 delivery는 One이기 때문에 get으로 초기화 하고orderItem은 Many이기 때문에 List형식으로 stream으로 초기화 하는걸로 이해해도 될까요?강제 초기화를 하는 이유는 값을 넣어주기 위해..? 인가요..? 두번째 질문orderItems.stream().forEach(o -> o.getItem().getName());이 부분 코드 제가 이해한게 맞는지 확인부탁드립니다.o(orderItems 컬렉션에서 하나하나)에서 getItem().getName()를 가져와서 반환할 것이다.근데 getName(이름 가져오기)만 하는데 Item의 모든 api값을 가져오는것 같아서 질문드립니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
섹션 2 마지막 REST컨트롤러-수정/삭제,CORS 설정 첨부파일을 요청합니다.
안녕하세요 강의를 듣는중에 섹션 2 마지막 REST컨트롤러-수정/삭제,CORS 설정 이 부분에서 PutMapping modify 메서드에 서비스 명과 파라미터명이 위에서 코딩한거랑 다르더라구요 service가 아니라 todoservice이고 파라미터는 todoDTO가 아니라 dto 던데 제가 입력한 부분이 정확히 맞는건지 확인하기가 어려워서 코드를 볼 수 있는 첨부파일을 요청합니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA에서 lombok Builder 사용
JPA에서 lombok의 Builder 어노테이션을 사용해도 문제가 없나요?엔티티 어노테이션을 붙여준 클래스에서도 가능한가 싶어 질문드립니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
gradle vs maven
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]구글 트렌드에서 검색을 했을 때 maven 사용이 gradle보다 현저히 높게 사용된다고 나오는데 gradle을 사용하는 이유가 있을까요?!또한 둘에 대해 검색하면 gradle이 스펙상 좋다고 하는데 왜 gradle이 maven보다 사용이 더 적은건가요??
-
미해결PZM기반 실무중심 백엔드 부트캠프(프리트레이닝)
root-context가 다르게 나와서 복사하려는데 깃허브 어디로 들어가야 하나요?
root-context가 다르게 나와서 복사하려는데 깃허브 어디로 들어가야 하나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
로그에 traceId, spanId 모두 잘 찍히는데 traceId로 조회가 안 됩니다.
로그에 traceId, spanId 모두 잘 찍히는데 브라우저의 zipkin에서 traceId로 조회를 하면 no trace가 뜨네요. 스프링부트 3에 맞춰서 깃허브에 올려주신 자료 참조해서 디펜던시 맞게 설정하고 yml에도 올려주신 자료대로 수정했는데 이런 문제가 생기면 어떤 부분이 잘못된 걸까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
db 컬럼 이름 형식
JPA 관련 질문 드립니다.db 테이블의 컬럼 이름을 만들 때 isSold 라는 컬럼을 케멀케이스 형식으로 만들었습니다.그런데 이러한 함수를 만들어서 사용할려고 하니 계속 에러가 떴습니다.이러한 에러가 나와서 살펴보니 is_sold라는 컬럼을 찾는 것 같은데 저는 IsSold라고 컬럼명을 지어서 오류가 나는 거라고 생각이듭니다.제가 궁금한점은1. jpa가 스네이크케이스 형식으로 컬럼명을 자동으로 찾는 것 같아 오류가 나오는 걸로 생각이 드는데 이게 맞을까요?2. 그럼 db의 컬럼 명을 처음 만들 때 컬럼명이 길 경우 스네이크케이스 형식으로 만들어야 할까요? 보편적으로 어떻게 하는지 궁금합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
o.s.b.d LoggingFailureAnalysisReporter 오류
2024-05-16T23:53:30.318+09:00 ERROR 11428 --- [library-app] [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter : ***************************APPLICATION FAILED TO START***************************Description:Parameter 0 of constructor in com.group.libraryapp.service.book.BookService required a bean of type 'com.group.libraryapp.domain.book.BookRepository' that could not be found.Action:Consider defining a bean of type 'com.group.libraryapp.domain.book.BookRepository' in your configuration.Process finished with exit code 0이런 오류가 뜨는데 bean 설정도 강의 내용그대로 한거 같은데 계속 코드를 수정하려고 해도 Error 가 떠서 해결방법을 모르겠습니다package com.group.libraryapp.service.book; import com.group.libraryapp.domain.book.Book; import com.group.libraryapp.domain.book.BookRepository; import com.group.libraryapp.domain.user.User; import com.group.libraryapp.domain.user.UserRepository; import com.group.libraryapp.domain.user.loanhistory.UserLoanHistory; import com.group.libraryapp.domain.user.loanhistory.UserLoanHistoryRepository; import com.group.libraryapp.dto.Book.request.BookCreateRequest; import com.group.libraryapp.dto.Book.request.BookLoanRequest; import com.group.libraryapp.dto.Book.request.BookReturnRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class BookService { private final BookRepository bookRepository; private final UserLoanHistoryRepository userLoanHistoryRepository; private final UserRepository userRepository; public BookService( BookRepository bookRepository, UserLoanHistoryRepository userLoanHistoryRepository, UserRepository userRepository) { this.bookRepository = bookRepository; this.userLoanHistoryRepository = userLoanHistoryRepository; this.userRepository = userRepository; } @Transactional public void saveBook(BookCreateRequest request){ bookRepository.save(new Book(request.getName())); } @Transactional public void loanBook(BookLoanRequest request){ Book book = bookRepository.findByName(request.getBookName()) .orElseThrow(IllegalArgumentException::new); if(userLoanHistoryRepository.existsByBookNameAndIsReturn (book.getName(),false)){ throw new IllegalArgumentException("이미 대출되어 있는 책 입니다"); } User user = userRepository.findByName(request.getUsername()) .orElseThrow(IllegalArgumentException::new); userLoanHistoryRepository.save(new UserLoanHistory(user, book.getName())); } @Transactional public void returnBook(BookReturnRequest request){ User user= userRepository.findByName(request.getUserName()) .orElseThrow(IllegalArgumentException::new); UserLoanHistory history = userLoanHistoryRepository.findByUserIdAndBookName(user.getId(), request.getBookName()) .orElseThrow(IllegalArgumentException::new); history.doReturn(); } } package com.group.libraryapp.domain.book; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface BookRepository extends JpaRepository<Book,Long> { Optional<Book> findByName(String bookName); }
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
DB강의 듣다 강이ppt의 외래키 부분을 보고 궁금증이 생겨 질문 남깁니다.
웹 개발을 할 때 DDL을 통해 생성되는 테이블들은 모두 서비스에서 사용되는 객체들을 보고 만드는것 같은데 (예를 들면 Member 클래스, Item클레스들을 생각했습니다)만약 어떤 회원 A가 아이템A를 등록하였으면 데이터 베이스의 회원과 아이템 사이에는 등록이라는 관계가 생성이 되고 회원 1명은 아이템을 여러개 등록이 가능하다면 Member 테이블의 PK를 Item 테이블의 FK로 등록되며 Item 테이블의 속성들은 (id, item_name, price, quantity, member_id)로 설정이 될것 같은데 이런 경우 Item 클레스의 멤버변수로Member member_id; 를 생성해주어야 할것 같은데 이런 외래키 값은 도메인을 설계할때 어떻게 처리해야 하나요?그리고 api로 통신할 때 클라이언트 에게 데이터를 넘겨줄 때 스프링 입문 강의에서 hello 객체자체를 return 하면 스프링의 잭슨라이브러리가 json포멧으로 변환해서 넘겨준다고 해주셨는데 여러개의 테이블이 조인된 결과를 json으로 반환 해주려면(예를 들어서 멤버 A가 등록한 아이템의 이름과 가격, 멤버의 이름을 요청한다면 반환되는 튜플이 item_name, price, member_name) 이것들은 하나의 객체가 아닌 Member클래스와 Item클래스의 일부 변수들을 사용한 새로운 값들인데 이럴때는 어떤 방법으로 return해주어야 하나요? 클라이언트측과 조율을 하여 검색되는 조건을 설정하여 조인검색의 제약을 설정하나요? 제약을 설정한다면 반환할 때 (item_name, price, member_name)이 3개의 속성들을 멤버변수로 사용하는 새로운 클래스를 생성하여 반환해 주어야 하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
초반 진행 시 오류
Execution failed for task ':JpashopApplication.main()'.> Process 'command 'C:\Program Files\Java\jdk-17\bin\java.exe'' finished with non-zero exit value 1 이런 오류가 계속 나고 있습니다. 최대한 똑같이 따라하고 있다 생각했는데 어디가 잘못된 걸 까요?