묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
카테고리 관련 질문드립니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예 )2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 )[질문 내용]그러면 ManyToMany는 안쓴다고 하셨는데 .보통 카테고리는 실무에서 다는 알수 없겠지만 대략적으로 이해될수 있게 어떤 형식으로 entity를 구성하는지 알수있을까요보통 3뎁스 정도로 잡는다고 한다면요 ..실무에 이번에 jpa도입 할려고 하는데 카테고리는 어떤식으로 하는지 궁금합니다 .Mybatis를 주로 쓰고 관계형 테이블에서는 대충 감이 오는데 엔티티로 할려니 어떤식일까 강의 듣는 내내 .. 궁금해서요 ...id , parentid, level, name 등이 있다고 가정한다면요 ..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2에 Member 테이블이 생성되지 않아요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이렇게 컴파일 할 때 테이블이 실행되는 줄이 강의처럼 출력되지 않고 h2 에도 실제로 만들어지지 않아요.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
궁금한게 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.여기 강의에 보면 검은색 화면에 노트같은거 있는데 그건 혹시 제공이 되지 않나요 ??? erd라던가 설명 보니깐 그거 보면서 보면 괜찮을꺼 같아서요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
setter 을 사용하지 않는다면 어떻게 해야 할까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예강의에서는 setter를 사용하지 않고 하는게 바람직하다고 언급하신적이 있습니다. public static OrderItem createOrderItem(Item item,int orderPrice,int count){ OrderItem orderItem=new OrderItem(); orderItem.setItem(item); orderItem.setOrderPrice(orderPrice); orderItem.setCount(count); item.removeStock(count); return orderItem; }이것은 영한님 강의의 OrderItem이라는 중간테이블을 생성해주는 것이였습니다. 위에서 set,set,set 이 많이 나오는데 이게 아마 builer패턴? 으로 위 코드에서 setter를 지워주는것 맞져?? 그러면 Order의 연관관계 편의 메서드인 아래 코드는 또 어떻게 바꿔야 할까 public void addOrderItem(OrderItem orderItem){ orderItem.setOrder(this); this.orderItems.add(orderItem); }이거는 또 어떻게 바꿔야 할까요?? 실무에서는 이런 것까지도 set을 안쓰나요? 아니면 뭐set 대신 이름만 inItOrder로 바꿔야 하는 것인가요? 질문 2) 솔직히 set을 왜 안써야 하는지 감이 안옵니다. 다른 개발자가 무작정 set을 호출할수 있다는게 단점이라고 하신 것 같은데 그러면 뭐 cancelOrder 이런 메서드로 바꾸면 다른 개발자가 이걸 호출할수도 있지 않나요?? 질문 3) 가끔 보면 이런 코드가 있습니다. public void initPost(Post post) { if(this.post == null) this.post = post; }이것은 init 이기때문에 단순히 null 인지 체크해주는 것인가요??가끔 이렇게 매개변수들어온게 null 인지 체크하는 로직이 들어있는게 있더라고요!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
영한님 죄송합니다. 답변을 제대로 이해하지 못했습니다 ㅠ
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (페치 조인 질문있습니다! - 인프런 | 질문 & 답변 (inflearn.com) 이것을 작성했었던 글쓴이인데 아직 이해가 덜되어서 질문합니다! 제 질문과 영한님의 답변을 요약하면제 질문은 1대 다 에서는 fetch join을 고려하고 다대1에서 batch size를 이용해서 최적화하는게 좋았는데 다대1에서 그러면 역으로 1대다기준으로 fetch join 쓰면 안되냐는게 질문이였고 그에 대한 영한님의 답변은 다쪽(위에 질문에서는 중간테이블) 을 기준으로 조회하기 어려운 경우가 있는데 그 경우는 1쪽기준으로 페이징을 한다면 다쪽에서 페이징이 모호하다. 라는 것이였습니다.(제가 제대로 이해한 것 맞겠죠?)@Query("select pc from Person_Club pc join fetch pc.club where pc.person.id=:personId ORDER BY pc.club.name DESC") List<Person_Club> findTop5ByPersonIdOrderByClubName(@Param("personId") Long personId,Pageable pageable);위 코드는 정확히 기억이 안나는데 Person_Club은 person과 Club의 다대다 중간테이블로 만들었고 where 절 로 persinID를 받아서 범위를 제한하고 페이징을 했던걸로 기억하는데 이런 경우는 1쪽기준으로 페이징을 한다면(where 절로 범위 제한) 다쪽에서 페이징이 모호해지지 않지 않나요?? 부족한 설명죄송합니다
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
jpql 엔티티 인지 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]일단은 해결 했습니다.findAllString 이용하는데 Order를 얘가 모르는 거 같아서..String jpql = "select o From jpabook.jpashop.domain.Order o join o.member m";이렇게 패키지경로까지 다 명시해줬더니 인지를 하더라구요..안 그러면 org.hibernate.query.sqm.UnknownEntityException: Could not resolve root entity 'Order' at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitRootEntity(SemanticQueryBuilder.java:1960) ~[hibernate-core-6.2.13.Final.jar:6.2.13.Final] at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitRootEntity(SemanticQueryBuilder.java:253) ~[hibernate-core-6.2.13.Final.jar:6.2.13.Final] ...............얘가 이렇게 Order 인지 못한다고 오류가 뜹니다..원래 엔티티는 그냥 @Entity 등록 하면 알아서 인지 되는걸로 알고 있었는데..왜 이런 걸까요?package jpabook.jpashop.domain; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @Entity(name = "orders") @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "delivery_id") private Delivery delivery; private LocalDateTime orderDate; @Enumerated(EnumType.STRING) private OrderStatus status; public void changeMember(Member member){ this.member = member; member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem){ orderItems.add(orderItem); orderItem.setOrder(this); } private void setOrderDate(LocalDateTime orderDate) { this.orderDate = orderDate; } public void changeDelivery(Delivery delivery){ this.delivery = delivery; delivery.setOrder(this); } private void setStatus(OrderStatus status) { this.status = status; } public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems){ Order order = new Order(); order.changeMember(member); order.changeDelivery(delivery); for (OrderItem orderItem : orderItems) { order.addOrderItem(orderItem); } order.setStatus(OrderStatus.ORDER); order.setOrderDate(LocalDateTime.now()); return order; } public void cancel(){ if(delivery.getStatus() == DeliveryStatus.COMP){ throw new IllegalStateException("이미 배송완료된 상품은 취소가 불가능합니다."); } this.setStatus(OrderStatus.CANCEL); for (OrderItem orderItem : orderItems) { // orderItem.getItem().removeStock(orderItem.getCount()); orderItem.cancel(); } } public int getTotalPrice(){ int totalPrice = 0; for( OrderItem orderItem : orderItems){ totalPrice += orderItem.getTotalPrice(); } return totalPrice; } }
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
준영속 상태란 것은 추상적인 개념인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]영속상태라는 것은 영속성 컨텍스트에 들어가는 것으로 명확한데, 준영속 상태는 뭐 그런 꼬리표 같은게 붙는 건가요?아니면 엔티티긴 한데 생성되고 영속성 컨텍스트에 없는 상태를 그냥 추상적으로 준영속상태라고 부르는 건가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@NotEmpty, starter-validation 문제
NotEmpty 어노테이션 인식이 안됩니다(valid도 마찬가지). 질문 게시판 보고 스프링 부트 2.3부터는 직접 build.gradle에 implementation 'org.springframework.boot:spring-boot-starter-validation' 추가하고 refresh를 해주어도 아래처럼 에러가 발생합니다제 build.gradle 입니다plugins { id 'java' id 'org.springframework.boot' version '2.7.17' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'jpabook' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' // 캐시도 삭제해주고 하는 등 해서 hot reload 처럼 쓰이는것 같음 implementation 'org.springframework.boot:spring-boot-devtools' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' implementation 'org.springframework.boot:spring-boot-starter-validation' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() }
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
현업에서 곱하기 연산 처리하기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)아니오 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)아니오 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요. getTotalPrice 부분에서 가격과 개수를 이용해 곱하기를 해 종합 가격을 반환해주는데 만약 가격이 정수가 아닌 실수인 경우 소수점이 나올 텐데 이런거는 어떻게 처리하나요? 단순히 반올림하거나 잘라버리지는 않을거 같은데
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
화면에 관한 메소드는 엔티티에 넣지 말라고 하셨는데
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]BookForm을 인자로 받는 생성자를 넣는 건 별로인가요? 하긴 그러면 또 RestAPI맞는 생성자, 등 지저분해 지긴 할 거 같은데..
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberForm은 이미 모델에 들어가 있는거죠?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]검증오류가 날 시 BindingResult에 의해 들어가는 게 아니라,저렇게 인자로 받는 건 이미 모델에 들어가 주는거죠?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
getOrder 안되는 이유,member 테이블 정보
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 오류가 나는데 왜 안되는건가요..? member 클래스 안에 있는 컬렉션객체를 가지고 오는 거 아닌가요?그리고 멤버 테이블에 address 임베디드 한 값이 안떠요.. 해결방법 알려주시면 감사하겠습니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트에서 @Transactional 을 붙히지 않으면 왜 일차캐시가 작동하지 않을까요?
@Service @RequiredArgsConstructor public class MemberService { private final MemberRepository memberRepository; @Transactional public void signUp(Member member){ memberRepository.save(member); } public Member findOne(Long id){ return memberRepository.findById(id).orElseThrow(); } } @Test void signUp() { Member member1 = Member.builder() .userId("user1") .birthDay(LocalDate.now()) .password("pass") .email("aa@bb.cc") .build(); memberService.signUp(member1); Member member2 = memberService.findOne(member1.getId()); assertThat(member1).isEqualTo(member2); } 트랙잰션이 Memberservice에서 signUp을 완료 하고 트랜잭션이 끝난다고 영속성 컨텍스트가 비워지지 않다고 이해 했는데 왜 같은 id 값으로 다시 찾을 때 동일성을 보장하지 않는걸까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
order의 orderItem
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이게 주문아이템이 한번에 여러 개 일 수 있으니까,public Long order(Long memberId, List<OrderItemDto> orderItemsDto){ List<OrderItem> orderItems = new ArrayList<>(); for( OrderItemDto orderItemDto : orderItemsDto){ Item item = itemRepository.findOne(orderItemDto.itemId); int orderPrice = orderItemDto.price; int count = orderItemDto.count; OrderItem orderItem = OrderItem.createOrderItem(item, orderPrice, count); orderItems.push(orderItem); } }이런 식으로 하는 것도 괜찮죠?제가 아직 Dto를 잘 몰라서Data to Object 인 거 같은데 그러면OrderItem을 만들어서 Dto에 넣어야 하나 생각했더니 그건 왠지 아닌 것 같고.. 컨트롤러 단계에서 엔티티를 꺼내서 써야 하게 될테니..그냥 Dto를 데이터를 모아 사용하기 편한 오브젝트로 만들어주는 그런 느낌으로.. 여튼 저런 식으로 하면 잘한건가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
createOrderItem의 setter 사용
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]그 지금은 예제라 그런거고,실무에서는 저렇게 많은 setter들이 밖으로 표출되지는 않죠?보통 저런 건setter를 private 등으로 한 다음에OrderItem에 비즈니스 메소드를 추가하는 게 맞는거죠?예를들어orderItem.initOrderItem(item, orderPrice, count)해서요.메소드 명은 적절한게 생각이 안나서.. 저는 setter는 가급적 쓰지 말고,연관관계 메소드 구현할 때 처럼 부득이 하게 필요할 경우만 public으로 하게끔 하는 걸로 이해하고 있어요.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MEMBER테이블 생성안됨
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요, 다른 MEMBER테이블이 생성되지 않는다는 게시글을 읽고, H2경로 설정에 대한 글 전체 다 읽었지만 여전히 testMember()메서드는 통과하지만 MEMBER테이블이 생성되지 않습니다.... 참고로 로그에 CREATE TABLE( ... )은 정상적으로 나오네요. application.yaml은 다른 강의듣는 분 자료 검색해 참고해서 그대로 복붙했습니다(띄어쓰기 문제ㄴㄴ) jpashop의 경로는 C:에 있습니다..... 추가) 내pc>다운로드 의 경로에 있는 jpashop.trace, jpashop.mv파일을 삭제 후 이렇게 연결했더니 성공했지만 testMember()메서드가 통과하지 못하네요..... 오류메세지는 이렇게 납니다.org.h2.jdbc.JdbcSQLNonTransientConnectionException: Unsupported database file version or invalid file header in file "C:/Users/User/jpashop.mv.db" [90048-214] 제가 궁금한 점은왜 h2.bat실행시 바로 꺼지는가application.yaml과 h2 console의 경로만 맞춰주면 강의를 따라하지 않아도 된다고 하는데 맞는가jpashop의 경로와 h2의 경로를 맞춰야하는가...??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
p6spy 사용시 log 두번 출력
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]p6Spy를 사용하는 중 로그가 두번 찍히는 경우가 생겼습니다.현재 mariaDB를 사용중이며,jpa: properties: hibernate: show-sql: 'false' format_sql: 'true'설정은 이렇게 해줬습니다. 혹시 왜 두번찍히는 건지 알 수 있을까?gradle에 p6spy 추가해주었습니다.implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원가입 테스트 select 문이 나가는 이유.
@Test public void 회원가입(){ Member member = new Member(); member.setName("memberA"); Long savedMemberId = memberService.join(member); Member findMember = memberService.findOne(savedMemberId); assertThat(member).isEqualTo(findMember); }근데제가 em.find() 동작이 먼저 영속성 컨텍스트에서 찾아보고 있으면 그걸 return.없으면 DB에 쿼리 날려서 가져온 다음에 return.(쓰기지연은 잠깐 생각 안하고)로 알고 있는데, 그렇다면 코드상멤버 생성하고,join해서 쿼리가 쌓이고,그 다음 findOne해서 가져오는데, 저게 결국은 em.find() 잖아요. 그러면 이미 영속성 컨텍스트에 id가 같은 게 있기 때문에 그걸 반환하잖아요. 그래야 할 것 같은데 select m1_0.member_id, m1_0.city, m1_0.street, m1_0.zipcode, m1_0.name from member m1_0 where m1_0.name=?이렇게 로그로 나가요.그래서 아, isEqualTo니까 혹시 막 이름같은 거 참조해서 가져오는 건가? 했는데isSameAs 해봐도 똑같아요.왜 하필 name으로 조회하는지도 모르겠어요.em.find()쪽이 실행된 것은 분명해요.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
양방관계 편의 메소드 이름
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]set~~~ 말고 다른 이름이 좋지 않나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
SpringPhysicalNamingStrategy 바뀐건가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]찾아도 안나오는데 CamelCaseToUnderscoresNamingStrategy 이걸로 바뀐 것 같네요.