묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
OrderQueryRepository 에러
OrderItemQueryDto와 OrderQueryDto를 생성한 후, OrderQueryRepository를 생성하여 학습하고 있는데 강의 내용과는 다르게 진행중입니다. (밑에 질문 글에 한번 올렸었습니다.) 스프링데이터JPA로 진행하다보니 @Query를 작성하여 연습하는 중 java.lang.IllegalStateException: Cannot instantiate class 'jaein.crudpractice.repository.order.query.OrderItemQueryDto' (it has no constructor with signature [java.lang.Long, java.lang.String, java.time.LocalDateTime, java.time.LocalDateTime], and not every argument has an alias) 자꾸 생성자쪽에서 문제가 발생합니다. OrderItemQueryDtopackage jaein.crudpractice.repository.order.query; import com.fasterxml.jackson.annotation.JsonIgnore; import jaein.crudpractice.domain.OrderItem; import lombok.Data; @Data public class OrderItemQueryDto { @JsonIgnore private Long orderId; private String itemName; private int count; public OrderItemQueryDto(Long orderId, String itemName, int count) { this.orderId = orderId; this.itemName = itemName; this.count = count; } } OrderQueryDtopackage jaein.crudpractice.repository.order.query; import jaein.crudpractice.domain.Order; import jaein.crudpractice.domain.OrderItem; import jaein.crudpractice.domain.OrderStatus; import lombok.Data; import lombok.EqualsAndHashCode; import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @Data @EqualsAndHashCode(of = "orderId") public class OrderQueryDto { private Long orderId; private String name; private LocalDateTime loanDate; private LocalDateTime returnDate; private List<OrderItemQueryDto> orderItems; public OrderQueryDto(Long orderId, String name, LocalDateTime loanDate, LocalDateTime returnDate, List<OrderItemQueryDto> orderItems) { this.orderId = orderId; this.name = name; this.loanDate = loanDate; this.returnDate = returnDate; this.orderItems = orderItems; } } OrderQueryRepositorypackage jaein.crudpractice.repository.order.query; import jaein.crudpractice.domain.Order; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface OrderQueryRepository extends JpaRepository<Order, Long> { @Query("select distinct new jaein.crudpractice.repository.order.query.OrderQueryDto(" + "o.id, s.name, o.loanDate, o.returnDate, oi) " + "from Order o " + "join o.student s " + "join o.orderItems oi") List<OrderQueryDto> findOrderQueryDtos(Pageable pageable); @Query("select distinct new jaein.crudpractice.repository.order.query.OrderItemQueryDto(" + "oi.order.id, i.name, oi.count)" + " from OrderItem oi " + " join oi.item i " + " where oi.order.id = :orderId") List<OrderItemQueryDto> findOrderItems(@Param("orderId") Long orderId); } 생성자도 다 맞게 작성했는데 어느부분이 잘못됐는지 모르겠습니다.강의대로 EntityManager를 사용하여 해보아도 같은 에러가 발생합니다.도메인에서 연관관계 매핑에서 문제가 있는걸까요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
애플리케이션을 실행 시킬 때 마다 초기화
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]해당 영상에서는 member를 두번 persist 하고 나면 DB에 JPA 어플리케이션을 다시 실행 시키더라도 해당 member 데이터가 2개 남아있는데, 저는 실행시킬 때 마다 해당 데이터들이 모두 사라지네요package hellojpa;import jakarta.persistence.*;public class JpaMain {public static void main(String[] args) {EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try {/* Member member = new Member(); member.setId(1L); member.setName("HelloA"); em.persist(member); */ Member findMember = em.find(Member.class, 1L); System.out.println("findMember.getId() = " + findMember.getId()); System.out.println("findMember.getName() = " + findMember.getName()); findMember.setName("HelloJPA"); tx.commit(); } catch (Exception e) {tx.rollback(); } finally {em.close(); }emf.close(); }}주석 처리한 부분을 먼저 실행 시키고, 이후에 저 부분을 주석처리하고 findMember를 하면 해당 멤버를 가져와야 하는데 그게 안되고 매번 DB가 초기화가 됩니다. 왜 그럴까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka producer/consumer test
해당 예제를 통해 주키퍼를 먼저 실행을 해볼려하지만 계속해서 해당 classpath를 찾지 못하고 있습니다. 비슷한 상황을 겪은 사람들의 경우 바이너리 파일이 아닌 소스 파일을 다운 받아 해당 문제를 겪었다고 했지만 저의 경우 알맞은 파일을 설치하여 압축을 해제하였는데 어떤게 원인일까요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
~/jpashop.mv.db 파일을 못찾겠습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이 과정에서 jdbc:h2:~/jpashop까지 입력을 완료하고 데이터베이스가 잘 생성이 되었는데 ~/jpashop.mv.db이 어디에 생성된건지 모르겠습니다. ~/jpashop.mv.db
-
미해결Practical Testing: 실용적인 테스트 가이드
환경변수 관련되서 여쭤볼게 있습니다~
mock 테스트 중에환경변수(@Value)를 가져와야하는데,@SpringBootTest가 아니라서 환경변수를 못가져오고 있습니다.그래서 환경변수를 담은 변수가 null이 나오기 때문에 테스트를 못하고 있는데, 이럴 경우 어떻게 하시나요??일단 환경변수 대신, 생성자를 통해 해당 변수들을 받는 형태로 리펙토링했는데, 프로덕션 코드들을 테스트에 맞추는 거 같아서 약간 딜레마가 오고있어요.선생님께서는 이런 경우 어떻게 하시나요?1. 환경변수 이슈2. 프로덕션 코드를 테스트코드에 맞추는 리펙토링(2번은 수업에 있네요 ㅎㅎ)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
gradle build 실패, intelij 빌드 성공 왜그런걸까요?
안녕하세요 스프링부트 3.0 이상 버전을 사용하고 있는 사람입니다.원래는 gradle로 잘 빌드하다가 오늘 갑자기 gradle빌드가 실패하네요그래서 혹시나 해서 build를 intelij로 바꿔보니깐 실행이 잘됩니다. 3.0이상버전부터는 gradle빌드로 해야한다고 하시는데 이렇게 하면 문제가 생길까요?왜그런걸까요?
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
화면 이동 시 css 적용 안 되는 문제
부트스트랩 파일을 그대로 사용하고 있는데 index화면은 css가 잘 적용되어 있으나 resume와 projects 로 페이지가 넘어갈 때 css 적용이 안 됩니다. <!DOCTYPE html> <html lang="ko" xmlns:th="http://www.thymeleaf.org"> <div th:replace="~{/presentation/fragments/fragment-head :: head}"></div> <body class="d-flex flex-column h-100"> <main class="flex-shrink-0"> <!-- 타임리프가 해당 경로에 있는 :: 뒤 이름을 찾아서 이자리에 교체해줌 --> <div th:replace="~{/presentation/fragments/fragment-navigation :: navigation}"></div> <header class="py-5"> <div class="container px-5 pb-5"> <div class="row gx-5 align-items-center"> <div class="col-xxl-5"> <!-- Header text content--> <div class="text-center text-xxl-start"> <div class="badge bg-gradient-primary-to-secondary text-white mb-4"><div class="text-uppercase">Kotlin · Spring · SQL</div></div> <div class="fs-3 fw-light text-muted">캐치프레이즈 넣어보기 </div> <h1 class="display-3 fw-bolder mb-5"><span class="text-gradient d-inline">자기소개 넣기</span></h1> <div class="d-grid gap-3 d-sm-flex justify-content-sm-center justify-content-xxl-start mb-3"> <a class="btn btn-primary btn-lg px-5 py-3 me-sm-3 fs-6 fw-bolder" href="../../../../../../../Downloads/startbootstrap-personal-gh-pages/startbootstrap-personal-gh-pages/resume.html">Resume</a> <a class="btn btn-outline-dark btn-lg px-5 py-3 fs-6 fw-bolder" href="../../../../../../../Downloads/startbootstrap-personal-gh-pages/startbootstrap-personal-gh-pages/projects.html">Projects</a> </div> </div> </div> <div class="col-xxl-7"> <!-- Header profile picture--> <div class="d-flex justify-content-center mt-5 mt-xxl-0"> <div class="profile bg-gradient-primary-to-secondary"> <!-- TIP: For best results, use a photo with a transparent background like the demo example below--> <!-- Watch a tutorial on how to do this on YouTube (link)--> <img class="profile-img" src="assets/profile.png" alt="..." /> <div th:replace="~{/presentation/fragments/fragment-dots :: dots1}"></div> <div th:replace="~{/presentation/fragments/fragment-dots :: dots2}"></div> <div th:replace="~{/presentation/fragments/fragment-dots :: dots3}"></div> <div th:replace="~{/presentation/fragments/fragment-dots :: dots4}"></div> </div> </div> </div> </div> </div> </div> </header> <!-- About Section--> <section class="bg-light py-5"> <div class="container px-5"> <div class="row gx-5 justify-content-center"> <div class="col-xxl-8"> <div class="text-center my-5"> <h2 class="display-5 fw-bolder"><span class="text-gradient d-inline">About Me</span></h2> <p class="lead fw-light mb-4"></p> <p class="text-muted" th:each = "introduction : ${introductions}"th:text ="${introduction.content}">Lorem ipsum dolor sit amet</p> <div class="d-flex justify-content-center fs-2 gap-4"> <a class="text-gradient" href="#!" th:each = "link : ${links}"th:href ="${link.content}"><i class="bi bi-github" th:class ="|bi bi-${link.name}|"></i></a> </div> </div> </div> </div> </div> </section> </main> <!-- Footer--> <div th:replace="~{/presentation/fragments/fragment-footer :: fooer}"></div> <!-- Bootstrap core JS--> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script> <!-- Core theme JS--> <script src="../../../../../../../Downloads/startbootstrap-personal-gh-pages/startbootstrap-personal-gh-pages/js/scripts.js"></script> </body> </html> css 파일 건드리지 않고 그대로 두었는데 무엇이 문제인지 궁금해 질문드립니다. 참고로 resume 화면상에서 href 설정을 <link th:href="@{/css/styles.css}" rel="stylesheet" /> 이와 같이 추가해주니 변경이 잘 되었습니다. 그렇다면 기존의 <link href="../../../../../../../Downloads/startbootstrap-personal-gh-pages/startbootstrap-personal-gh-pages/css/styles.css" rel="stylesheet" /> 이렇게 적용한 코드와 차이는 무엇인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 객체의 setter사용
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요?예[질문 내용]여기에 질문 내용을 남겨주세요.강의 12분에서 Member 객체를 만들고 setter를 사용하셨는데 엔티티의 setter는 지양해야되는 것으로 알고있습니다.createMember 와같은 정적팩토리 메서드 로 객체생성하는게 더 낫지않나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@Transactional 업데이트 쿼리
엔티티 컬럼의 값을 수정할 때 save()를 안써도 JPA의 더티체킹 때문에 트랜잭션 커밋 시점에 업데이트 쿼리가 나간다고 알고 있습니다. @Transactional public void updateDeleteFlag(Long fileId) { File file = fileRepository.findById(fileId) .orElseThrow(() -> new EntityNotFoundException("해당 파일을 찾을 수 없습니다.")); file.changeDeleted(true); }위 코드에서 @Transactional 어노테이션을 제거하면 update 쿼리가 나가지 않아서 수정이 안되더라고요. 이건 트랜잭션 커밋 시점에 업데이트 쿼리가 나가는데 @Transcational 어노테이션을 달지 않으면 트랜잭션을 시작하지 않아 커밋도 없기 때문에 그런건가요? 1번의 내용이 맞을 때, @Transactional 어노테이션이 업데이트 메서드에 없다면, update 쿼리가 언제 나가는지 궁금합니다. update 쿼리가 나가지 않고 있다가 (JPA SQL저장소에 계속 머물다가) 다른 트랜잭션 (가령, 게시물 조회) 이 실행되고 커밋되는 시점. 이때 update 쿼리가 나가게 되는건가요?
-
해결됨Practical Testing: 실용적인 테스트 가이드
TestFixture에 질문이 있습니다.
테스트에서 사용하는 빌더 매서드를 한 곳에 모아놓으면 오히려 유지보수가 어렵고 매번 새롭게 만들게 된다고 하셨습니다. 그리고 매서드를 만들때 테스트 검증이나 테스트에 필요한 인수만 외부로 들어내서 테스트의 목적을 명확하게 들어내는게 좋다고 하셨는데 만약 테스트 케이스마다 외부로 들어내는게 제각각 다른 경우에 하나의 테스트 클래스에 다양한 빌더 매서드들이 생기게 된다면 그것도 관리하는데 어려움이 발생할 거라 생각합니다. 이런 경우에는 하나의 빌더 매서드만 생성해서 사용하시나요 ?아니면 그렇게 많이 발생할 일이 없기 때문에 매번 테스트에 필요한 빌더 매서드들을 만드시나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
변경감지 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]변경 감지 코드로 수정 메서드를 작성하던 중 setter를 없애고 ItemService의 updateItem() 안의 setter들을 대체하기 위해public void updateItem(String name, int price, int stockQuantity){ this.name = name; this.price = price; this.stockQuantity = stockQuantity; }이 코드로 Item클래스 안에 작성했습니다.@Transactional public void updateItem(Long id, String name, int price, int stockQuantity) { Item item = itemRepository.findOne(id); item.updateItem(name, price, stockQuantity); // item.setName(name); // item.setPrice(price); // item.setStockQuantity(stockQuantity); }이렇게 사용하기 위해서 입니다.하지만 이것도 결국은 setter인데 이렇게 작성하는 게 올바른 방법일까요? 더 좋은 코딩 방법이 있는 지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
TransactionContext 관련 문의
[질문 내용]안녕하세요.@Rollback(false) 어노테이션을 달기 전에도 TransactionContext 로그가 뜨지 않는 것은 어떤 문제인가요?? 어노테이션 대신에 autowired한 엔티티매니저 flush를 해도 로그는 나타나지 않습니다.감사합니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
15:45 쯤에 "%"사용하는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]findByItemNameLike("%"+itemName +"%")여기에서 "%"를 넣어서 오류를 해결했는데 이게 잘 이해가 안됩니다.어디 부분에서 다시 공부할 수 있을까요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
name = "", mappedby ="" 등에서 자동완성
강의영상을 보다 보면 제목에 적어 놓은 name = "" 의 " " 영역에 ctrl+space로 자동완성을 띄우셔서 클래스 같은 걸 바로 작성하도록 하시는데 혹시 어떻게 세팅을 해야 가능할까요? 다른 건 자동완성이 뜨는데 해당 " " 부분들은 자동완성이 되지 않아서요. JPA FACET 설정도 해놨습니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
@Transactional의 유무에 따른 프록시 생성이 궁금합니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]7:20 쯤에 @Repository 제거 시에도 프록시가 적용되는데영한님께서는 @Transactional때문에 프록시가 동일하다고 하셨는데 트랙잭션 커밋이 된 상황이라서 그렇게 말씀하신 건가요?@Transactional의 유무와 프록시 생성에 연관관계가 궁금해요
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
안녕하세요 싱크 커넥터로 DB에 적용이 안되어 질문드리게 되었습니다.
좋은강의 잘듣고있습니다! 다름아니라 현재 싱크 커넥터등록후 DB에 데이터가 등록되지 않고 있습니다.먼저 아래사진처럼 post요청을 통해 커넥터 등록을 하였습니다.토픽은 예제를 똑같이 따라하였을 때도 안되었어서 my-topic-orders로 새로 바꿔서 등록하였습니다.이에 맞게 테이블도 아래 사진처럼 생성하였습니다. post요청을 한 후 주문이 해당 토픽으로 전달했음에도 아래 사진처럼 DB에 적용이 되지않아 어디가 문제일지 커뮤니티를 뒤져도 잘모르겠어서 질문드립니다 ㅠㅠ (토픽도 "my_topic_orders"로 지정하였습니다.)현재 커넥터 등록상태입니다.추가로 kafka confluent에서 발생한 로그입니다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값타입과 @MappedSuperclass의 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]값타입 @MappedSuperclass의 차이가 무엇인가요?BaseEntity를 @MappedSuperclass로 놓고 상속받아서 여러 속성을 한꺼번에 갖는것과 값타입 클래스를 @Embeddable로 설정해서 위임하는 것의 차이가 궁금합니다. 둘다 여러 속성들을 동시에 관리해서 다른 테이블의 속성으로 사용하기 위한 목적이라면 하나만 있으면 될 것 같은데, 왜 굳이 2개 모두 필요한가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
섹션 1-5, 동작확인 실습시 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 섹션1-5강 JPA와 DB설정 동작확인 강의에서 MemberRepositoryTest.java를 실행하면 검증 실패가 떠서 문의드립니다. 제가 STS에서 실습중이라 왜 오류가 뜨는건지 모르겠는데... 오류라고 뜨긴 뜨는데 강의 내용처럼 DB에 memberA가 잘 insert 되서 들어가긴 합니다. 근데 빨간색 오류가 떠요. 왜그런건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
GenerationType.IDENTITY Null값 허용 안 되는 에러
안녕하세요. 기본 키 맵핑에서 GenerationType.IDENTITY 관련 부분 질문드립니다.GenerationType.IDENTITY는 PK를 입력하지 않아도 auto increment라고 해서 저절로 생성되는 거 아닌가요?그런데 이런 에러가 떴습니다.ERROR: NULL not allowed for column "ID"; SQL statement:답변 부탁드리겠습니다. 감사합니다!package hellojpa; import javax.persistence.*; @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String username; public Member() { // 기본 생성자가 하나 있어야 함 } 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; } }package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import javax.transaction.Transaction; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // EntityManagerFactory는 application 로딩 시점에 딱 하나만 만들어놔야 한다. // Transaction 단위로 EntityManager를 만든다. EntityManager em = emf.createEntityManager(); // 쉽게 생각하면 데이터베이스 connection을 하나 받았다고 생각할 수 있음. EntityTransaction tx = em.getTransaction(); tx.begin(); try{ Member member = new Member(); member.setUsername("Opeahchsdf"); em.persist(member); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); // 끝나면 반드시 닫아줘야 함 } emf.close(); } }<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="hello"> <properties> <!-- 필수 속성 --> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- 옵션 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> </persistence-unit> </persistence>
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
ReviewDto 객체 사용 이유
리뷰 목록 페이지를 조회할 때 마지막에 ReviewDto 객체로 변환해서 반환을 하는데 이렇게 하는 이유가 무엇인지 궁금합니다