묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
실습리포지토리 테스트 코드 작성 강의 오류
안녕하세요 또 이렇게 질문하게 되네요 먼저 코드는 틀린거 없이 Git 내용과 강의 내용코드 그대로 작성하였습니다. 하지만 왜 일까요?? 에러가 나네요 이부분이 에러 납니다. al experience = experienceRepository.findAll()======================@Test fun testFindAll() { println("---- findAll 테스트 시작 ----") val experience = experienceRepository.findAll() assertThat(experience).hasSize(DATA_SIZE) println("experiences.size: ${experience.size}") for (experience in experience) { assertThat(experience.details).hasSize(experience.title.toInt()) println("experience.details.size: ${experience.details.size}") } println("---- findAll 테스트 종료 ----") }==================================== 이부분도요 findAllByIsActive(true) @Test fun testFindAllByIsActive() { println("----- findAllByIsActive 테스트 시작 -----") val experiences = experienceRepository.findAllByIsActive(true) assertThat(experiences).hasSize(DATA_SIZE) println("experiences.size: ${experiences.size}") for (experience in experiences) { assertThat(experience.details).hasSize(experience.title.toInt()) println("experience.details.size: ${experience.details.size}") } println("----- findAllByIsActive 테스트 종료 -----") } 에러 코드는 기니깐 핵심 부분만 올려 드리면 Hibernate: select e1_0.experience_id,e1_0.created_date_time,e1_0.description,d1_0.experience_id,d1_0.experience_detail_id,d1_0.content,d1_0.created_date_time,d1_0.is_active,d1_0.update_date_time,e1_0.end_month,e1_0.end_year,e1_0.is_active,e1_0.start_month,e1_0.start_year,e1_0.title,e1_0.update_date_time from experience e1_0 left join experience_detail d1_0 on e1_0.experience_id=d1_0.experience_id where e1_0.is_active=?org.springframework.orm.jpa.JpaSystemException: No default constructor for entity 'com.justkim.portfolio.domain.entity.ExperienceDetail' at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:341) 이이쿠 한줄만 적는데도 기네요 ExperienceDetail.kt 코드는@Entity class ExperienceDetail(content: String, isActive: Boolean) : BaseEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "experience_detail_id") var id:Long? = null var content: String = content var isActive: Boolean = isActive fun update(content: String, isActive: Boolean) { this.content = content this.isActive = isActive } }이런데 ExperienceDetail( 가 계속 경고를 때리네요Class 'ExperienceDetail' should have [public, protected] no-arg constructor https://github.com/justkjy/portfolio-justkim 깃 주소입니다 구글에서 위 에러를 검색하니깐 인프런 오류 질문이 올라 와 있던데 봐도 모르겠네요 https://www.inflearn.com/questions/931371/test-%EC%98%A4%EB%A5%98 감사합니다.
-
미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
이너 클래스 vs 클래스 별도 생성의 차이?
[4-5 맛집 정보 가져오기 API 개발하기]맛집 정보 가져오기 API 부분 코드 작성해 주시는 부분에서 (2분 34초쯤부터)메뉴 클래스를 하나 더 만드실지 고민하시는듯 하다가 이너 클래스로 만드신 것처럼 보이는데요,이전에 request 만드실때는 메뉴 클래스를 분리하셨는데해당 부분에서는 고민하시다가 이너 클래스로 만드신 이유가 무엇인지그리고 어떤 경우에 이너 클래스를 쓰고 분리를 하는지 궁금해서 문의드립니다.
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
ExceptionHandler가 AccessDeniedHandler(Http403Handler)를 먹어버리는 현상
안녕하세요 호돌맨님 강의 항상 잘보고있습니다. 다름이 아니라 실습 중 의도치 않게 동작하는 부분이 있어 질문드립니다. 상황회원 가입 후 로그인이 때 유저의 Role 은 ADMIN메소드 시큐리티로 아래와 같이 자원의 권한 제한@RestController class HomeController { @GetMapping("/user") @PreAuthorize("hasRole('ROLE_USER')") fun user(): String { return "user 접근 가능👁" } @GetMapping("/admin") @PreAuthorize("hasRole('ROLE_ADMIN')") fun admin(): String { return "admin 접근 가능 👨💼" } }이 때ExceptionHandler로 Runtime예외를 캐치해 응답을 주고 있습니다.동시에 커스텀한 403핸들러를 HttpSecurity에 끼워 넣어주었습니다.// ControllerAdvice @ExceptionHandler(Exception::class) fun handleRuntimeException(ex: Exception): ResponseEntity<ErrorResult> { logger.error("ex", ex) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body( ErrorResult( code = "500", message = ex.message, ) ) } // SecurityConfig @Bean fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { return http // .. other config.. .exceptionHandling { e -> e.accessDeniedHandler(Http403Handler(objectMapper)) e.authenticationEntryPoint(Http401Handler(objectMapper)) } .build() } 기대하는 동작ADMIN으로 로그인한 유저가 USER 자원에 접근하면 아래와 같이 응답{ "code": "403", "message": "접근할 수 없습니다.", "validation": null }실제 동작{ "code": "500", "message": "Access Denied", "validation": null } ControllerAdvice에서 Runtime예외를 처리하지 않는다면 의도대로 403이 응답되는데, ControllerAdvice에서 예외를 포괄적으로 처리하게 되면 403이 응답되지 않습니다. 혹시 이런경우를 겪으신적이 있는지? 따로 해결방법이 있을지 궁금해 여쭙습니다.감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
수정시에 질문있습니다!!!! Editor??
[질문 내용]여기에 질문 내용을 남겨주세요. 저는 지금까지 수정을 시도할때 changeContentsAndtitle 이런 식으로 엔티티단에서 수정을 시도했는데 https://velog.io/@gundorit/Spring-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EB%90%9C-CRUD-Update 이 블로그에 따르면 그것은 별로 안좋고 Editor 를 선언해서 하면 좋다는 식으로 얘기하고 있습니다. 근데 이렇게 하면 영한님이 얘기하셨던 얘기 중에 그런 이야기가 있었습니다. DTO 는 엔티티를 참조해도 되는데 , 엔티티는 DTO 를 참조하지 말라고 하셨습니다.위 블로그에서는 Entity 에서 DTO 를 참조하지는 않는데 Entity 에서 UpdateEditor 를 선언하고 있는데 이런 부분에 문제는 없을까요?? 영한님도 이런 스타일로 하시나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JPA와 DB설정, 동작확인 강의에서 오류메세지 발
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제가 오류를 못찾는건지 자료랑 비교했을 때 별 특이사항은 없는 것 같은데 자꾸 오류가 발생합니다.MEMBER_SEQ이 대체 뭔지 모르겠네요 ㅠㅠ 젤 하단 사진 테스트코드 실행 시 오류가 발생합니다. application.yml server: port: 8081 #MVCC=TRUE를 넣어주면 여러개를 한번에 접근했을 때 좀 더 빨리 처리가 된다. spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver #ddl-auto: create -> 자동으로 테이블을 만들어주는 모드 jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true System.out.~을 통해서 출력 format_sql: true #logger를 통해 출력 #로그 레벨 #hibernate SQL로그를 디버그 모드로 쓴다는 것 #-> Hibernate가 남기는 모든 로그가 다 디버그 모드로 해서 JPA나 Hibernate가 생성하는 SQL이 다 보인다. logging: level: org.hibernate.SQL: debug Memberpackage jpabook.jpashop; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import lombok.Getter; import lombok.Setter; @Entity @Getter @Setter public class Member { @Id @GeneratedValue private long id; private String username; }MemberRepositorypackage jpabook.jpashop; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import org.springframework.stereotype.Repository; @Repository public class MemberRepository { @PersistenceContext private EntityManager em; public Long save(Member member){ em.persist(member); return member.getId(); } public Member find(Long id){ return em.find(Member.class,id); } }MemberRepositoryTestpackage jpabook.jpashop; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; import static org.assertj.core.api.Assertions.*; import static org.junit.Assert.*; @RunWith(SpringRunner.class) //junit한테 SpringBoot로 테스트 한다고 알려주는 것 @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional public void testMember(){ //given Member member=new Member(); member.setUsername("memberA"); //when Long saveID= memberRepository.save(member); Member findMember=memberRepository.find(saveID); //then assertThat(findMember.getId()).isEqualTo(member.getId()); assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); } }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
편하게 들어도 된다고 하셨는데
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이 방식이 옛날 방식이라 편하게 들어도 된다고 하셨는데 코드를 안 적어도 되나요? 아니면 나중에 최신 방식으로 알려주시나요?
-
미해결토비의 스프링 부트 - 이해와 원리
http api test
http -v 명령어가 작동이 안되는데 혹시 제가 잘못하고 있는 것이 있을까요..?
-
미해결스프링 시큐리티 OAuth2
키클락 권한 구성에 대해 조언 및 가이드 문의 입니다.
안녕하세요. 인증관련 개발 진행중입니다.저희는 사용자의 유형을 보면1차 분류로 시스템을 관리하는 관리자와 서비스를 이용하는 사용자로 구분되며사용자는 다시 같은 그룹의 사용자를 관리(생성,수정,삭제등)할 수 있는 관리사용자와 일반사용자 이렇게 나뉩니다.이런 환경일때 realm과 role, group을 어떻게 나누는게 효율적일지 궁금하여 문의 드립니다.1차 시스템 관리자와 서비스 이용 사용자는 서로 완전히 다른 유형이라 realm으로 나누는 게 좋을지 group 또는 Client나 role 등으로 나뉘어야 할지 고민입니다. 같은 서비스라서 같은 realm안에 두는게 맞을거 같기도 하고요.그리고 서비스 이용자 중 그룹과 Role를 둘다 나뉘어야 할거 같아서 이렇게 권한 분류가 가능한지 궁금합니다서비스 이용자중 그룹을 나누어 A, B, C 그룹이 있고 A그룹에 관리사용자 role, 일반사용자 roleB그룹에 관리사용자 role, 일반사용자 roleC그룹에 관리사용자 role, 일반사용자 role각 그룹별로 권한을 나누어 각그룹의 관리사용자는 각그룹만 관리가능하고 다른 그룹에는 관리권한이 없게 구성하고자 하는데 이런게 키클락 옵션만으로 가능할지 궁금합니다. 아 그리고 키클락의 REST API를 통해 UI를 이용하지 않고 사용자 관리 옵션 설정등을 하려고 하는데요. 최고 관리자인 Admin으로 API 토큰을 받아 처리하는 방법까지는 확인을 하였습니다.그런데 혹시 이 부분을 그룹 관리자에게 권한을 부여할 수 있을까요?예를 들면 A그룹에 관리사용자로 인증 토큰을 받아서 이 토큰으로 REST API를 이용해서 사용자 관리를 할 수 있는지가 궁금합니다. 질문이 정리가 안되서 의도를 이해하실지 모르겠네요. 암튼 읽어 주셔서 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
첫 gradle build부터 안됩니다 ㅜㅜ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.JDK 17로 맞추고, gradle 설정 들어가서 IntelliJ IDEA로 빌드하라고 설정을 해도 안됩니다. 처음 시작부터 막히니까 너무 막막하네요.캐쉬삭제하고 해봐도 똑같습니다. 무엇을 더 해봐야할지도 모르겠어요. 도와주세요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
public void findAll() 부분에서 맨마지막줄에 숫자를 멀넣어도 오류가 안뜨는데 왜그런가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
createMember 테스트코드
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]회원 웹 기능 - 등록 강의영상을 보다가 질문이 생겼습니다. 강의에서 get 주소에서 html 페이지로 멤버 이름을 받고 post로 이름을 넘기는 로직같은 경우, 실무에서는 어떻게 테스트 코드를 작성하나요? html까지 포함해서 동작하는 걸 확인할 수 있는 방법이 있나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[수정 요망] orderList.html 코드 문제발생
관련링크입니다.https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1&unitId=24311&tab=community&category=questionDetail&q=1109808해당 질문의 답변입니다. {T(jpabook.jpashop.domain.OrderStatus).values()}OrderStatus가 item에 담겨져 있네요{T(jpabook.jpashop.domain.item.OrderStatus).values()}로 바꿔보시죠pdf상에서 코드나 주의 표시로 해당 사항을 넣어주셨으면 좋겠습니다. 해당 오류때문에 너무 많은시간을 소비하였습니다. ㅜㅜ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Member - Order 연관관계
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Member와 Order의 연관관계에서 가급적 단방향을 사용하라고 하셨는데,1: 특정 Member의 주문목록을 확인할 때는 Member 엔티티에서 별도의 orders라는 List를 만들지 말고 Order들에서 특정 Member를 가진 객체를 찾는 방식으로 접근하는게 좋다는 말씀으로 이해해도 괜찮을까요?2: 그렇다면 order - orderItem - item 의 경우 다대다 관계를 특정 테이블을 추가로 생성해서 일대다 다대일로 연관관계를 설정했는데, 이때도 단방향으로 유지하는게 좋은걸까요?
-
해결됨인프라공방 - 그럴듯한 서비스 만들기
강의자료 다운로드가 안됩니다..
맥 os이고 m1 사용중인데 강의자료 다운이 안됩니다.다운로드시 환불 불가 팝업이 떠서 수락하려고 다운로드 를 클릭하면 창이 닫히고 무한 반복이네요혹시 강의자료 이메일로 보내주실 수 있나요... ㅠ99jiasmin@gmail.com으로 부탁드립니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
500에러가 떠요 컨트롤러 잘 작성하고 index파일로 잘 연결한거같은데
(사진)
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
주문 조회V3 에서 쿼리가 4개 나온다고 하는데, 2개만 나옵니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. @GetMapping("/api/v3/orders") public List<OrderDto> orderV3() { List<Order> orders = orderRepository.findAllWithItem(); for (Order order: orders) { System.out.println("order ref = " + order + " id = " + order.getId()); } List<OrderDto> result = orders.stream() .map(o -> new OrderDto(o)) .collect(Collectors.toList()); return result; } ... public List<Order> findAllWithItem() { return entityManager.createQuery( "select o from Order o" + " join fetch o.member m" + " join fetch o.delivery d" + " join fetch o.orderItems oi" + " join fetch oi.item i", Order.class) .getResultList(); }이렇게 한 다음 v3 에게 요청을 넣었습니다.그 결과selecto1_0.order_id,d1_0.delivery_id,d1_0.city,d1_0.street,d1_0.zipcode,d1_0.status,m1_0.member_id,m1_0.city,m1_0.street,m1_0.zipcode,m1_0.username,o1_0.order_date,oi1_0.order_id,oi1_0.order_item_id,oi1_0.count,i1_0.item_id,i1_0.dtype,i1_0.name,i1_0.price,i1_0.stock_quantity,i1_0.artist,i1_0.etc,i1_0.author,i1_0.isbn,i1_0.actor,i1_0.director,oi1_0.order_price,o1_0.statusfromorders o1_0joinmember m1_0on m1_0.member_id=o1_0.member_idjoindelivery d1_0on d1_0.delivery_id=o1_0.delivery_idjoinorder_item oi1_0on o1_0.order_id=oi1_0.order_idjoinitem i1_0on i1_0.item_id=oi1_0.item_idorder ref = jpabook.jpashop.domain.Order@801a84d id = 1order ref = jpabook.jpashop.domain.Order@7be83ead id = 2 다음과 같은 SQL 쿼리를 보냈구요.그런데 4개가 아니라 2개라서 문의를 드립니다. 그런데 H2 DB에서 해당 쿼리를 입력하면 4개가 잘나옵니다.또한 포스트맨으로 받은 요청도 2개가 출력됩니다.[ { "orderId": 1, "name": "userA", "orderDate": "2024-03-18T23:29:35.545094", "orderStatus": "ORDER", "address": { "city": "서울", "street": "1", "zipcode": "11111" }, "orderItems": [ { "itemName": "JPA1 Book", "orderPrice": 10000, "count": 1 }, { "itemName": "JPA2 Book", "orderPrice": 20000, "count": 2 } ] }, { "orderId": 2, "name": "userB", "orderDate": "2024-03-18T23:29:35.555094", "orderStatus": "ORDER", "address": { "city": "부산", "street": "2", "zipcode": "22222" }, "orderItems": [ { "itemName": "Spring1 Book", "orderPrice": 20000, "count": 3 }, { "itemName": "Spring2 Book", "orderPrice": 40000, "count": 2 } ] } ]어떠한 것이 잘못되었는지 궁금합니다.
-
미해결실전! 스프링 데이터 JPA
@Modifying 에서 무조건 테스트 데이터가 커밋되고 있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요, 영한님.좋은 강의 늘 감사합니다. 최근에 제가 공부한 내용들을 정리하면서 포트폴리오를 만들고 있는데, 특이하게도 @Modifying 을 사용하는 코드를 테스트할 때만 해당 테스트의 데이터가 롤백 되지 않고 커밋되는 기이한 현상을 발견했는데, 혹시 아시는 바가 있으신가 해서 여쭤봅니다. @Modifying 을 사용하는 코드'만' 테스트할 때는 테스트 통과하고 데이터가 롤백됩니다.당연한 이야기지만, @Modifying 코드를 제외한 테스트가 통과하고 롤백됩니다.하지만 이들을 동시에 실행하면 @Modifying 에서 update 된 데이터들이 롤백되지 않고 남아 있어서 다른 데이터에 영향을 주게 됩니다. 회사에서도 벌크성 수정 쿼리를 이미 사용을 하고 있고, 그 코드들을 테스트함에 있어서 어떠한 이슈도 발생하지 않았는데 제 포트폴리오에서만 이런 이슈가 발생을 하네요... 트랜잭션 전파와 관련된 문제, h2 와 boot 버전(3.2.1.) 문제 등등 의심 되는 부분들 여러 가지로 고쳐보고 바꿔봐도 여전합니다. boot 도 3.0.x 대로 낮춰보기도 했고. stackoverflow, spring boot github 등에도 찾아봤습니다만 저와 같은 이슈를 겪는 사람은 보지 못 했습니다. 그렇다고 해서 테스트 때문에 제품 코드를 바꾸는 건 또 주객전도가 되니 테스트에 tearDown 으로 데이터를 날리려고 합니다. 그래도 발생한 이슈에 대해 정리하고 해결은 해야 하니 여전히 알아보고 있는 중입니다. 그중에 혹시 영한 님께서는 알고 계시는 바가 있으신가 해서 여쭤봅니다. 제 소스코드 repository 와 이슈가 발생하는 코드들을 남깁니다. 참고로 제 컴퓨터에서 테스트를 실패하는 상태 그대로를 올립니다. 혹시 필요하신 정보가 더 있으시면 말씀해주세요.감사합니다. 테스트 로그 https://drive.google.com/file/d/117sWM8NZa13wIWUc-XhCpYFdZ9oeIUK4/view?usp=sharing테스트의 로그 전부를 넣었습니다. 위에서 설명해드린 것처럼 @Modifying 테스트 이후 그 데이터가 남아서 다른 테스트들에 영향을 주는 것이기 때문에 실패하는 테스트는 매번 다릅니다.github https://github.com/psam1017/sunder-backend/tree/feat/teachermain 은 테스트를 통과하도록 변경감지를 사용한 상태이고, 위처럼 feat/teacher 브랜치에 실패하는 코드를 올렸습니다. @Modifying 사용 코드 - repository https://github.com/psam1017/sunder-backend/blob/feat/teacher/src/main/java/psam/portfolio/sunder/english/domain/academy/repository/AcademyCommandRepository.java@Modifying 사용 코드 - service https://github.com/psam1017/sunder-backend/blob/feat/teacher/src/main/java/psam/portfolio/sunder/english/domain/academy/service/AcademyCommandService.java#L245@Modifying 을 테스트하는 코드 https://github.com/psam1017/sunder-backend/blob/feat/teacher/src/test/java/psam/portfolio/sunder/english/scheduler/AcademySchedulerTest.java테스트 코드 설정 관련 코드 https://github.com/psam1017/sunder-backend/blob/feat/teacher/src/test/java/psam/portfolio/sunder/english/SunderApplicationTests.java
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
default_batch_fetch_size 질문
안녕하세요 강의를 들으며, 토이 프로젝트에 jpa를 적용해보려하는데 문제가 생겨 질문을 드리게 되었습니다. default_batch_fetch_size를 사용하게 되면 @OneToMany관계를 가질 때 미리 지정된 개수만큼 join을 해서 가져오는 것으로 이해를 했습니다.여기서 페이징 처리를 하고 싶은데, default_batch_fetch_size를 이용해 얻은 값에서 원하는 값만 조회를 하고 싶습니다. 현재 문제는 user와 tag(사용자가 관심있는 태그), post가 있을 때, user와 tag가 N:M 관계,tag와 post가 N:M 관계를 갖습니다.각각을 1:N, N:1로 나타내기 위해 연결 테이블을 만들었습니다. PostRepository에서 user가 관심있는 태그에 해당하는 게시물을 페이징으로 가져오고 싶은데 default_batch_fetch_size를 이용하면 직접 접근이 불가능할 것 같은데 이런 경우에는 어떻게 해결할 수 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
SpringConfig에 직접 빈을 등록하면 생기는 오류
강의 내용은 대략 5~6분 사이입니다. SpringConfig에 @Bean으로 등록하면 ERROR 19552 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter 오류가 뜹니다. @Bean public TimeTraceAop timeTraceAop() { return new TimeTraceAop(); }이걸 주석처리하고 TimeTraceAop에 컴포넌트 어노테이션을 붙이면 아래와 같이 정상 작동하구요https://drive.google.com/file/d/1nAqwhCllXZhRAwbWIzcwlH7sEnsEGaaw/view?usp=drive_link압축파일입니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
순수 JPA 기반 리포지토리와 스프링 데이터 기반 리포지토리 비교
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.강의를 들으면서 느끼는데, 이렇게 순수 JPA기반 리포지토리로 저가 전부다 CRUD를 다 작성하고 해야하는데,JpaRepository를 그냥 상속하면 간단한 메서드로 다 구현이 가능하고 복잡한 내용은 @Query를 사용해서 쿼리를 작성하면 끝이 아닌가..? 라는 생각이 갑자기 들어서 질문을 합니다ㅜㅜ. 순수 JPA기반 리포지토리로 사용하는 이유가 뭘까요 실무에서는 어떻게 사용을 많이 하는 건가여?질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.