묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
계속 persistence unit name 못 찾는다는 오류가 생기는 분들
pom.xmjpa 하이버네이트 디펜던시 옵션 중에서<type>pom</type>을 제거해보시기 바랍니다. <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>6.4.2.Final</version> </dependency> <dependency>
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
api에 대해서
지난 강의 JPA 활용 1편을 듣고왔는데요,API를 개발하는 이유와 의미가 무엇인가요?
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
Jpa 데이터베이스 매칭 관련 질문입니다.
안녕하세요 강사님.인프런 스터디 과제 7일차 문제 1번 jpa 코드로 변환하던 중 warehousingDate 컬럼 부분에서 문제가 발생하였습니다.Fruits의 테이블 컬럼 이름은 warehousingDate 입니다. { "name":"바나나", "warehousingDate":"2024-02-25", "price":7000 }jpa 코드로 바꾼 후 위에처럼 post 하였더니 아래와 같은 결과가 나왔습니다.Unknown column warehousing_date in field list라고 에러가 뜹니다. 처음에는 @Column(name="warehousing_date") 을 붙이지 않아서 에러가 나는 줄 알고 @Column(name="warehousing_date") 을 붙이고도 진행하였더니 똑같은 에러가 발생하였습니다.그래서 Fruits 앤티티 warehousingDate 변수명을 warehousing_date로도 변경을 해봤더니 똑같은 에러가 발생하였습니다. Fruits 엔티티는 아래와 같습니다.@Entity public class Fruits { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @Column(name="warehousing_date") private LocalDate warehousingDate; private long price; @Column(nullable = true) private boolean sales; public Fruits() { } public Fruits(String name, LocalDate warehousingDate, long price, boolean sales) { this.name = name; this.warehousingDate = warehousingDate; this.price = price; this.sales = sales; } public String getName() { return name; } public void setName(String name) { this.name = name; } public LocalDate getWarehousingDate() { return warehousingDate; } public void setWarehousingDate(LocalDate warehousingDate) { this.warehousingDate = warehousingDate; } public long getPrice() { return price; } public void setPrice(long price) { this.price = price; } public boolean isSales() { return sales; } public void setSales(boolean sales) { this.sales = sales; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } }컨트롤러 코드는 아래와 같습니다.@PostMapping("/api/v1/fruit") public void fruitInformation(@RequestBody FruitCreateRequest information){ fruitService.saveInformation(information); }서비스 코드는 아래와 같습니다.private final FruitJpaRepository fruitRepository; public FruitService(FruitJpaRepository fruitRepository) { this.fruitRepository = fruitRepository; } public void saveInformation(FruitCreateRequest request){ fruitRepository.save(new Fruits(request.getName(),request.getWarehousingDate(), request.getPrice(), request.getSales())); }RequestDto 코드는 아래와 같습니다.public class FruitCreateRequest { private String name; private LocalDate warehousingDate; private long price; private boolean sales; @JsonIgnore private Long id; public String getName() { return name; } public void setName(String name) { this.name = name; } public LocalDate getWarehousingDate() { return warehousingDate; } public void setWarehousingDate(LocalDate warehousingDate) { this.warehousingDate = warehousingDate; } public long getPrice() { return price; } public void setPrice(long price) { this.price = price; } public void setSales(boolean sales) { this.sales = sales; } public void setId(Long id) { this.id = id; } public Long getId() { return id; } public void setId(long id) { this.id = id; } public boolean getSales(){ return sales; } } 혹여나 제가 놓친 부분이 없는 지 확인해 주시면 감사하겠습니다. 그리고 fruits 컬럼명은 warehousingDate 라 적었는 데 hibernate는 warehousing_date과 매칭할려는지 알고싶습니다.질문이 서투른 점 양해바랍니다..
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
Xss 에서 WebConfig 오류 발생됩니다.
WebConfig 에 필터 등록 하는 부분에서 오류? 가 생깁니다.현재 스프링 부트 3.2.2 버전입니다. 혹시 버전으로 인한 문제일까요?해결방법 부탁드리겠습니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
[h2] id 및 name 값 대치 문제
안녕하세요, 우선 학습하던 부분은 다음과 같습니다. 강의 : 자바 ORM 표준 JPA 프로그래밍 - 기본편섹션 : 2 - JPA 시작하기 -> 애플리케이션 개발먼저 강의에서 영한님께서 설명하신 것처럼 id(1L)와 name("helloA")을 생성하는 코드를 작성한 후, h2에 성공적으로 row가 삽입된 것을 확인하였습니다.그리고, 이어서 또 다른 id(2L)와 name("helloB")를 생성 후, 성공적으로 쿼리가 날려진 것을 목격한 후, h2에서 확인을 진행하였으나 값이 대치가 되어버린 문제 상황을 마주했습니다. 강의에서 영한님께서는 기존 값뿐만 아니라 새로 생성한 값까지 포함해서 총 2개의 row가 존재하는 반면, 저는 기존 row를 새 값이 대치해버림에 따라 row가 하나만 존재하는 상황에 대해서 원인과 해결 방법을 여쭙고자 합니다. 감사합니다.
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
ZIPKIN에서 오류 나시는분들
Spring 3버전대에서 zipkin 설정이 바뀌면서 # zipkin: # base-url: http://13.124.192.188:9411 # enabled: true이 부분을 주석처리하고management: tracing: sampling: probability: 1.0 propagation: type: b3 zipkin: tracing: endpoint: "http://localhost:9411/api/v2/spans"위와 같이 설정하였다면 docker run 할때 문제가 생길 수 있습니다! 해당 내용을 토대로 환경변수를 주고 실행을 시켜야 합니다(저도 깜빡하고 왜 오류나지 고민만 했는데.. 설정을 바꿨었더라구요!)user-service docker rundocker run -d --network ecommerce-network \ --name user-service \ -e "spring.cloud.config.uri=http://config-server:8888" \ -e "spring.rabbitmq.host=rabbitmq" \ -e "management.zipkin.tracing.endpoint=http://zipkin:9411/api/v2/spans" \ -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" \ -e "logging.file=/api-logs/users-ws.log" \ kimtaeheon/user-service:1.0order-service docker rundocker run -d --network ecommerce-network \ --name order-service \ -e "spring.cloud.config.uri=http://config-server:8888" \ -e "spring.rabbitmq.host=rabbitmq" \ -e "management.zipkin.tracing.endpoint=http://zipkin:9411/api/v2/spans" \ -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" \ -e "spring.datasource.url=jdbc:mariadb://mariadb:3306/mydb" \ -e "logging.file=/api-logs/orders-ws.log" \ kimtaeheon/order-service:1.0
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
need more stock
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]상품주문 test에서 코드를 똑같이 따라 쳤는데 need more stock exception이 나요그리고 그 아래 상품주문_재고수량초과 테스트를 적을 때 @Test 에 expected를 적는데 expected라는 메소드를 해결할 수 없다고 빨간줄이 떠요링크 공유합니다https://drive.google.com/file/d/1Yr0w6SZWSH3Usqd8Gbx8bhQTcfRmmWHz/view?usp=sharing
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
mariadb 접속 관련해서 질문 있습니다.
강의에서 권한을 주는 부분을 보기 전에 작성해주신 아래와 같은 Dockerfile을 사용하였을 경우 실행이 되지 않았습니다.1번FROM mariadb ENV MYSQL_ROOT_PASSWORD rlaxogjs8312 ENV MYSQL_DATABASE mydb COPY ./mysql_data/mysql /var/lib/mysql EXPOSE 3306그래서 저는 복사하는 폴더가 문제인가 해서 COPY부분을 아래와 같이 바꿔서 mydb만을 복사하도록 하였습니다.2번FROM mariadb ENV MYSQL_ROOT_PASSWORD rlaxogjs8312 ENV MYSQL_DATABASE mydb COPY ./mysql_data/mysql/mydb /var/lib/mysql EXPOSE 3306이렇게 하였더니 db가 제대로 복사가 되지는 않았지만 로컬에서 접속이 가능하였습니다.그래서 왜 복사가 안되는거지.. 고민하다가 나머지 강의를 듣고 다시 1번으로 빌드 후 실행한 뒤에는 복사도 잘 되었음을 확인하였습니다.궁금한 점은 다음과 같습니다.왜 2번 Dockerfile의 경우 복사는 제대로 되지 않았는데 로컬호스트에서 DB에 접속이 가능했었던 건지 궁금합니다.만약 COPY가 아니라 VOLUME을 적용해서 한 과거 기억을 되살려보면 권한은 문제가 없었던 것 같은데 권한은 해당 Docker Container에 어떤 이유때문에 적용해야하는 것인지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품수정 바꿀 사항은 적고 수정했는데 원래값도 존재
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.가격과 재고수량을 바꾸고 submit을 했는데 원래값도 그대로 있어요
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
외래키 중복 관련 질문
import com.example.banking.domain.user.User import com.example.banking.support.BaseEntity import jakarta.persistence.Entity import jakarta.persistence.FetchType import jakarta.persistence.JoinColumn import jakarta.persistence.ManyToOne @Entity class Account( var balance: Double, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") val user: User, id: Long = 0 ) : BaseEntity(id) { fun addAccount(user: User) { user.accounts.add(this) } fun addBalance(amount: Double) { balance += amount } fun subtractBalance(amount: Double) { balance -= amount } }import com.example.banking.domain.account.Account import com.example.banking.support.BaseEntity import jakarta.persistence.* @Entity class Transaction( val amount: Double, @Enumerated(EnumType.STRING) val type: TransactionType, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn val sender: Account, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn val recipient: Account?, id: Long = 0L ) : BaseEntity(id) { constructor(amount: Double, type: TransactionType, sender: Account) : this(amount, type, sender, null) } import com.example.banking.domain.account.Account import com.example.banking.domain.user.User import com.example.banking.domain.user.UserInfo import com.example.banking.repository.account.AccountRepository import com.example.banking.repository.transaction.TransactionRepository import com.example.banking.repository.user.UserRepository import jakarta.persistence.EntityManager import jakarta.transaction.Transactional import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.annotation.Rollback @SpringBootTest @Transactional @Rollback(value = false) class TransactionTest( @Autowired private val em: EntityManager, @Autowired private val transactionRepository: TransactionRepository, @Autowired private val userRepository: UserRepository, @Autowired private val accountRepository: AccountRepository ) { @Test fun testTransaction() { val user1 = User(UserInfo("b", "Seoul", "123", "123")) val user2 = User(UserInfo("b2", "Seoul", "123", "123")) userRepository.save(user1) userRepository.save(user2) em.flush() em.clear() val account1 = Account(100.0, user1) val account2 = Account(100.0, user2) account1.addAccount(user1) account2.addAccount(user2) accountRepository.save(account1) accountRepository.save(account2) em.flush() em.clear() val sender = accountRepository.findById(account1.id).get() val recipient = accountRepository.findById(account2.id).get() val transaction = Transaction(50.0, TransactionType.TRANSFER, sender, recipient) transactionRepository.save(transaction) em.flush() em.clear() val transaction2 = Transaction(50.0, TransactionType.DEPOSIT, sender) transactionRepository.save(transaction2) // assertThat(sender.balance).isEqualTo(50.0) // assertThat(recipient.balance).isEqualTo(150.0) } } 위와같이 Transaction 엔티티와 Account 엔티티가 ManyToOne 으로 매핑되었을때, 테스트코드를 위와같이 작성시,transactionRepository.save(transaction2) 이 라인에서 Duplicate entry '97' for key 'transaction.UK_96vb4d846be64bta5qbxiicb1' 에러가 발생합니다.제가 알기론 외래키의 경우 중복된 값을 가지는것이 가능한것으로 알고 있는데, 같은 account id로 새로운 Transaction 을 생성할 시에 키가 중복이라는 에러가 발생하는데 왜 그런지 알고싶습니다. 코틀린으로 코드 작성한 점 양해부탁드립니다..
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
회원조회 API 버전1 포스트맨에서 could not get response
아래의 코드대로 회원 조회 API를 버전1 과 버전2를 수행하는데, 버전2의 경우는 응답이 잘 받아지는데 버전1은 error: abort 가 뜹니다. /* * 회원 조회 * */ @GetMapping("/api/v1/members") public List<Member> membersV1(){ return memberService.findMembers(); } @GetMapping("/api/v2/members") public Result membersV2(){ List<Member> findMembers = memberService.findMembers(); List<MemberDto> collect = findMembers.stream() .map(m -> new MemberDto(m.getName())) .collect(Collectors.toList()); // 스트림의 처리 결과를 리스트 형태로 수집 return new Result(collect); // Result 클래스를 통해 List<MemberDto>를 반환 }
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
persistence.xml 의 필요성
스프링 DB 2편 강의에서는 jpa를 사용할 때 프로젝트에 따로 persistence.xml을 설정해주지 않았는데 이번 강의에서는 persistence.xml이 없으면 jpa가 제대로 동작하지 않는다고 하셔서 그 이유가 궁금합니다.이전 강의에서는 전부 설정을 gradle로 했는데 이번 강의에서는 maven을 사용해서 그런건가요, 아니면 강의 초반에 스프링이 개입되지 않은 순수 자바로만 jpa 프로젝트를 진행한다고 하신 그 이유 때문인가요? 항상 강의 강의 잘 듣고있습니다. 감사합니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
[MacOS] iterm h2 접속 오류
안녕하세요, 첨부한 사진과 같이 iterm에서 ./h2.sh 명령어를 통해 h2에 접속하려고 할 경우 다음과 같은 문구가 뜨며 h2에 접속이 되지 않습니다.검색해보니 macOS 관련 문제인 것 같긴 한데, 구글 및 커뮤니티에서 h2 접속 관련 질문을 찾아보았을 때 저처럼 h2 접속 오류 문제를 겪고 계신 분은 없으신 것 같아 어떻게 진행해야 할지 질문드립니다.(동일한 버전 - 2.2.224으로 일단 삭제 후, 재설치는 진행해본 상황입니다.)
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
entity 객체에 기본생성자를 넣어주는 이유
안녕하세요User객체에 기본생성자를 넣어야 작동하는 이유가 궁금합니다혹시 필드에 아무값도 넣지않을때를 대비해서 기본생성자를 사용하는건가요?
-
미해결실전! 스프링 데이터 JPA
쿼리 메서드 @Query시 limit
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 강의 듣는 도중 궁금증이 생겨 질문드립니다.만약 쿼리 메서드를 사용하여 특정 조건에 의해 게시물 10개만 가져오고 싶을 때List<Board> findTop10ByWriteDatetimeGreaterThanOrderByCommentCountDescViewCountDescWriteDatetimeDesc(String writeDatetime);과 같이 지저분하게 코드를 작성할 수 있었는데 메서드 이름이 너무 길어져 @Query를 사용해서 코드 양을 줄이고 싶었습니다. 하지만, jpql에 limit를 사용할 수 없는데 이 경우 어떻게 jpql을 작성해야 하는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 수정이 되지 않는데 이유를 모르겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]상품 수정페이지 에서 상품에 대한 값 변경 시 데이터베이스에 반영이 되지 않는데 이유를 모르겠습니다. 다음은 코드입니다.ItemController.javapackage jpabook.jpashop.Contorller; import jpabook.jpashop.domain.item.Book; import jpabook.jpashop.domain.item.Item; import jpabook.jpashop.service.ItemService; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import java.util.List; @Controller @RequiredArgsConstructor public class ItemController { private final ItemService itemService; @GetMapping("/items/new") public String createForm(Model model) { model.addAttribute("form", new BookForm()); return "items/createItemForm"; } @PostMapping("/items/new") public String create(BookForm form) { Book book = new Book(); //set안쓰고 Book생성자의 파라미터로 넣는게 더 좋은 설계임 book.setName(form.getName()); book.setPrice(form.getPrice()); book.setStockQuantity(form.getStockQuantity()); book.setAuthor(form.getAuthor()); book.setIsbn(form.getIsbn()); itemService.saveItem(book); return "redirect:/"; } @GetMapping("/items") public String list(Model model) { List<Item> items = itemService.findItems(); model.addAttribute("items", items); return "items/itemList"; } @GetMapping("items/{itemId}/edit") public String updateItemForm(@PathVariable("itemId") Long itemId, Model model) { Book item = (Book) itemService.findById(itemId); // 캐스팅이 별로 좋진 않음 BookForm form = new BookForm(); form.setId(item.getId()); form.setName(item.getName()); form.setPrice(item.getPrice()); form.setStockQuantity(item.getStockQuantity()); form.setAuthor(item.getAuthor()); form.setIsbn(item.getIsbn()); model.addAttribute("form", form); return "items/updateItemForm"; } @PostMapping("items/{itemId}/edit") public String updateItem(@PathVariable("itemId") Long itemId, @ModelAttribute("form") BookForm form) { // Book book = new Book(); 컨트롤러에서 어설프게 엔티티 생성하지 말기 // book.setId(form.getId()); // book.setName(form.getName()); // book.setPrice(form.getPrice()); // book.setStockQuantity(form.getStockQuantity()); // book.setAuthor(form.getAuthor()); // book.setIsbn(form.getIsbn()); // // itemService.saveItem(book); itemService.updateItem(itemId, form.getPrice(), form.getName(), form.getStockQuantity()); return "redirect:/items"; } }ItemService.javapackage jpabook.jpashop.service; import jpabook.jpashop.domain.item.Item; import jpabook.jpashop.repository.ItemRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @Transactional(readOnly = true) @RequiredArgsConstructor public class ItemService { private final ItemRepository itemRepository; @Transactional public void saveItem(Item item) { itemRepository.save(item); } public List<Item> findItems() { return itemRepository.findAll(); } public Item findById(Long itemId) { return itemRepository.findOne(itemId); } public void updateItem(Long itemId, int price, String name, int stockQuantity) { Item findItem = itemRepository.findOne(itemId); findItem.setPrice(price); findItem.setName(name); findItem.setStockQuantity(stockQuantity); } } HTML파일은 모두 복사붙여넣기 하였습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL JOIN강의 수강 중 에러 발생
package jpql; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import java.util.ArrayList; import java.util.List; @Entity public class Team { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "team") private List<Member> members = new ArrayList<>(); private Member member; public List<Member> getMembers() { return members; } public void setMembers(List<Member> members) { this.members = members; } public Member getMember() { return member; } public void setMember(Member member) { this.member = member; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } JPQL 조인 강의를 따라하고 있는데 이런 에러가 납니다.'Basic' attribute type should not be 'Persistence Entity' package jpql; import javax.persistence.*; @Entity @Table(name = "MEMBER") public class Member { @Id @GeneratedValue private Long id; private String username; private int age; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; public void changeTeam(Team team){ this.team = team; team.getMembers().add(this); } public Team getTeam() { return team; } public void setTeam(Team team) { this.team = team; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Member{" + "id=" + id + ", username='" + username + '\'' + ", age=" + age + ", age=" + age + '}'; } }어떻게 해결하면 좋을지 알 수 있을까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
의존성 주입
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 듣다가 순간 애매해서 질문드립니다. V2config에서 해당 코드를@Bean public ItemService itemService() { return new ItemServiceV2(itemRepositoryV2, itemQueryRepositoryV2()); } @Bean public ItemQueryRepositoryV2 itemQueryRepositoryV2(){ return new ItemQueryRepositoryV2(em); }@Bean public ItemService itemService() { return new ItemServiceV2(itemRepositoryV2, new ItemQueryRepositoryV2(em)); } /** @Bean public ItemQueryRepositoryV2 itemQueryRepositoryV2(){ return new ItemQueryRepositoryV2(em); } **/ 처럼 ItemQueryRepositoryV2부분은 주석처리 해서 @Bean으로 등록을 하지 않으면 작동이 안돼야 할까요?? 변경하고 작동해봤는데 문제가 없어서 질문드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
여전히 에러가 발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. @Test void 상품주문_재고수량초과() throws Exception { //give Member member = createMember(); Item item = createBook("베렌과 루시엔", 39000, 10); int orderCount = 11; //when orderService.order(member.getId(), item.getId(), orderCount); //then assertThrows(NotEnoughStockException.class, () -> {orderService.order(member.getId(), item.getId(), orderCount);}, "재고 수량 예외가 발생해야 한다."); }JUNIT5 환경에서 이런식으로 해보았는데, 테스트 통과가 안되고 여전히 jpabook.jpashop2.exception.NotEnoughStockException: need more stock 에러가 발생하네요 ㅠㅠㅠ 구글링도 해보고 커뮤니티글도 다 찾아보았는데,여전히 해결되지 않아 글 남깁니다. 다른 분들이랑 똑같이 코드 작성한거 같은데 뭐가 문제일까요..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JUNIT5, assertj활용한 테스트 코드입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.junit4로 해보려고 해도 org.junit.Assert 가 import 불가능하여 따로 테스트 코드를 짜보았습니다. @Test void 상품주문() throws Exception { //give Member member = new Member(); member.setName("jung"); member.setAddress(new Address("서울", "한강로", "12452")); em.persist(member); Book book = new Book(); book.setName("베렌과 루시엔"); book.setPrice(39000); book.setStockQuantity(10); em.persist(book); int orderCount = 3; //when Long orderId = orderService.order(member.getId(), book.getId(), orderCount); //then Order getOrder = orderRepository.findOne(orderId); assertThat(OrderStatus.ORDER).as("상품 주문시 상태는 ORDER.").isEqualTo(getOrder.getStatus()); assertThat(getOrder.getOrderItems().size()).as("주문한 상품 종류 수가 정확해야 한다.").isEqualTo(1); assertThat(getOrder.getTotalPrice()).as("주문 가격은 가격 * 수량이다.").isEqualTo(39000 * orderCount); assertThat(book.getStockQuantity()).as("주문 수량만큼 재고가 줄어야 한다.").isEqualTo(7); }이런식으로 최대한 강사님의 코드와 비슷한 결과가 나오게 해보았는데, 혹시 차이가 있을까요??