묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 데이터 JPA
AttributeConverter에 대해 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네[질문 내용]안녕하세요 AttributeConverter 관련 질문이 있습니다. attribute와 dbDate를 암호화 & 복호화하는 사용자 정의 컨버터를 구현했는데 실제 query를 이용하여 조회했을 때 정상적으로 암호화된 데이터가 적재된 것을 확인했습니다.다만 애플리케이션에서는 converter가 동작하니 실제로 암호화 된 데이터가 적재되었는지를 애플리케이션 레벨에서 할 수 없는데 이를 위한 테스트 작성을 어떻게 해야하는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest 에서 Failed to load ApplicationContext 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.MemberRepositoryTest 실행시 Failed to load ApplicationContext 오류가 계속 뜨는데 이유가 뭔지 모르겠습니다 h2 초기설정때 비밀번호를 따로 만든것도 오류가 되나요??파일 전체 구글 드라이브 링크 걸어놓겠습니다https://drive.google.com/file/d/1ZyqJeogpUjXBKjLMjbY6Ne-IEC5tfhHQ/view?usp=sharing
-
해결됨Practical Testing: 실용적인 테스트 가이드
안녕하세요 재고 테이블에 대해서 질문 있습니다.!
안녕하세요 멘토님 강의 잘듣고 있습니다!제가 테이블을 언제 만들어야 하고 합쳐야 되는지에 대해서 잘 모르겠습니다. 혹시 검색 키워드와 상품테이블에서 재고를 관리하지 않고 따로 테이블을 만든 이유가 있을까요 ?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
단방향 연관관계 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요, 단/양방향 연관관계에 대해서 질문드립니다.강사님께서 초반 설계시에는 단방향으로 연관관계 매핑을 최대한 끝내야 한다고 하셨습니다. 그리고, 비즈니스 로직상 양방향 매핑이 필요할 때에는 양방향을 추가하면 된다고 하셨는데요, 설계할 때 그러한 기준에 대해 강의 내용만으로는 아직 감이 잘 안잡히는 것 같습니다. 저같은 경우 연관된 객체 조회가 간편하다는 이유로 생각없이 양방향부터 걸어두었는데, 성능 이슈나 객체 탐색의 편의성간 트레이드 오프에 대해서 생각을 하지 못했던 것이 큰 것 같습니다.혹시 단방향 -> 양방향으로 갈 때 고려해야 할 나름의 기준에 대해서 인사이트를 주실 수 있는지요 ??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 주문후 디비에 저장은 되지만 웹 페이지에서 조회가 되지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]상품 주문 후 주문은 디비에 들어가 있지만 주문 목록을 조회해 보면 주문이 조회되지 않습니다. 또한 검색 창에서 회원 이름과 주문 상태를 선택해서 검색을 하면 white label error page가 나옵니다.해당 화면 첨부해서 질문 드려요 어디가 잘못 된 걸까요 ㅠ?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberServiceTest 오류
첨부한 사진과 같이 코드를 작성 했는데 아래와 같은 오류가 떴습니다...혹시 어떻게 해야되는지 여쭤봐도 될까요 ============================CONDITIONS EVALUATION REPORT============================Positive matches:----------------- NoneNegative matches:----------------- NoneExclusions:----------- NoneUnconditional classes:---------------------- None
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
환경설정 MemberRepositoryTest에서 계속 해서 에러가 생깁니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]내용을 다 똑같이 하고 버전 확인도 했는데 테스트에서만 에러가 계속 발생합니다. 그런데 PC에서는 에러가 생기고 노트북으로 했을 때는 정상적으로 작동합니다. 무슨 이유때문인지 몰라서 힘듭니다...아래는 에러 내용입니다.아래는 에러 내용 전문 링크입니다https://local-toothpaste-73c.notion.site/MemberRepositoryTest-b52cdd4980a34d0796b43797cf0be01a?pvs=4노트북에서 실행한 에러없는 프로젝트를 깃헙으로 클론해와도 PC에서는 에러가 생기네요. 무슨 문제일까요..?
-
해결됨실전! 스프링 데이터 JPA
UserForm(실전 1편에서 사용한)도 DTO 조회 쿼리문처럼 사용하면 될까요?
실전 1편에서 영한샘 회원 가입이나 주문 Order를 Form을 사용하셧는데요.... 단순한 save를 쓰더라도 UserForm을 사용시에는 DTO 조회 쿼리 작성 예시처럼 인터페이스 MemberRepository에 저렇게 사용해야하는지 궁금합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
PK를 외부로 노출하지 않고 게시물 수정/삭제?
는 어떻게 하는 것이 좋은 건가요? PK이자 글 번호인 boardSeq를 가지고 와서 수정과 삭제를 진행하고 있었는데, PK는 최대한 외부로 노출하지 않는 것이 좋다고 하여서 문득 생각이 들었습니다. PK Seq를 따로 두고 UniqueKey로 똑같이 AutoIncrement해서 생성하게 된다면 결국 무슨 차이인가 싶어서 아닌 거 같기도 하고... 어떤 식으로 처리 해야 되는지 궁금하여 질문 남기게 되었습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
다대다 양방향관계를 풀어낼 때
회원 A테이블과 팀C 테이블의 다대다 양방향 관계를 풀기 위해 중간 테이블을 도입하여 A, B(중간테이블), C 와 같이 일대다/다대일 관계로 풀어낼 때 A와 C 양 쪽 모두 addTemMember와 같은 메소드를 만들어주고, 회원이 팀에 들어갈 때 A.addTeamMember와 C.addTeamMember()둘 다 호출해줘야 하는 게 맞나요? 다대다 양방향 관계를 풀 때 중간 테이블을 설정하는데 이것은 따로 외부에 노출할 필요 없이, 내부적으로 회원 A가 어떤 팀에 속해있는지, 팀C에 어떤 회원이 속해있는지 확인할 때만 사용하는 것이 맞나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DB PK 를 화면에 직접 노출 시켰을 때 문제점
강의 내용을 보면 상품 목록 화면에서 item.id 값을 뿌려주고 있습니다.이건 DB 에 저장된 item 테이블의 PK 값 일텐데, 문득 이런 생각이 들었습니다.DB 데이터 관리를 위한 PK 를 클라이언트 단에 노출시켜도 되나요? (가급적 엔티티 객체를 클라이언트 단에 직접 노출시키지 말라고 하셔서, 이것도 비슷한 맥락으로 숨겨야되지 않을까 해서요)
-
해결됨실전! 스프링 데이터 JPA
Repository를 구현하는 클래스는 JpaRepository 기능 구현 안해도 되나요?
제가 인터페이스 편 공부할 떄...예를들어 A인터페이스와 B인터페이스가 있고A가 B를 상속하고 클래스인 C가 A를 implement하게 되면 C는 부모인 A인터페이스의 기능은 물론이고 A가 상속 중인 B의 기능까지도 다 구현해야한다고 배웠는데.. 그냥 JpaRepository는 특별한 놈이라 그럴 필요 없다라고 암기하면 될까요?..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
org.junit does not exist오류가 발생합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]위와 같은 오류가 발생해서 인터넷을 찾던 중 아래와 같이 설정을 했는데도 같은 오류가 발생합니다. 혹시 이건 어떤 문제인가요?감사합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
13강 질문입니다.
application.yml 작성시driver-class-name : 에서사용할 sql불러오는 코드com.mysql.cj.jdbc.Driver라는 걸쓰는데 아무것도 불러와지질않네요다른분들은 오류라도 뜨는데 저는 오류도안떠서 다음 진행이 안되고있는데 어떻게 해야 할까요? 다른분께 말씀하신 gradle에 들어가서 의존성도 확인하고 새로고침도 확인 했습니다.
-
미해결실전! 스프링 데이터 JPA
강사님은 member_id가 3부터 시작했는데
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]저는 member_id가 1 부터 시작했는데 혹시 이유를 알 수 있을까요? 그리고 왜 member_id 가3 부터 시작하는 이유가 궁금합니다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
수업 질문사항입니다
질문1중간테이블을 사용하는 이유가 상품 가격이나 다른 속성이추가될 경우 추가 정보를 저장할 곳이 없어 양쪽에 추가해야 하는경우도 생길수 있어서 사용 하는 걸로 이해하면 될까요?질문2OrderItem 클래스는 주문과 상품 간의 관계를 나타내며, 각각의 주문 상품 항목이 어떤 상품에 속하고 어떤 주문에 속하는지를 기록하고 있는지 하나의 주문에 여러 상품이 들어갈 수 있고, 각 상품이 여러 주문에 속할 수 있게 되는 걸로 이해하면 되는 건가요??질문3같은 엔티티에서 부모-자식 관계를 나타내는 이유를 정확히 알고 싶습니다.이해가 잘안되요 ㅠㅠ
-
미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
2-3 진행 중 에러 발생
2-3 강의 중 12분 쯤에 Send를 누르면 200 OK가 떠야한다고 하셨는데 저는 500 에러가 발생합니다!package com.jyujyu.review.api; import com.jyujyu.review.service.TestService; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @AllArgsConstructor @RestController public class TestEntityApi { private final TestService testService; @PostMapping("/test/entity/create") public void createTestEntity( @RequestBody CreateTestEntityRequest request ) { testService.create(request.getName(), request.getAge()); } @AllArgsConstructor @Getter public static class CreateTestEntityRequest { private final String name; private final Integer age; } } package com.jyujyu.review.api; import com.jyujyu.review.service.TestService; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @AllArgsConstructor @RestController public class TestEntityApi { private final TestService testService; @PostMapping("/test/entity/create") public void createTestEntity( @RequestBody CreateTestEntityRequest request ) { testService.create(request.getName(), request.getAge()); } @AllArgsConstructor @Getter public static class CreateTestEntityRequest { private final String name; private final Integer age; } } package com.jyujyu.review.repository; import com.jyujyu.review.model.TestEntity; import org.springframework.data.jpa.repository.JpaRepository; public interface TestRepository extends JpaRepository<TestEntity, Long> { // Long -> TestEntity에 @Id가 있는 필드의 자료형을 작성한다. } package com.jyujyu.review.model; import jakarta.persistence.*; import lombok.Getter; @Getter @Table(name = "test") @Entity public class TestEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; public TestEntity(String name, Integer age) { this.name = name; this.age = age; } public TestEntity() { } public void changeNameAndAge(String name, Integer age) { this.name = name; this.age = age; } }plugins { id 'java' id 'org.springframework.boot' version '3.2.2' id 'io.spring.dependency-management' version '1.1.4' } group = 'com.jyujyu' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } repositories { mavenCentral() } configurations { compileOnly { extendsFrom annotationProcessor } } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' } tasks.named('test') { useJUnitPlatform() } server.port=8081 spring.h2.console.enabled=true spring.h2.console.path=/h2-console spring.h2.console.settings.web-allow-others=true spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:rss spring.datasource.username=sa spring.jpa.hibernate.ddl-auto=create spring.jpa.show-sql=true알려주신대로 코드를 작성하고 포스트맨에서 Send를 눌러도 500 Internal Server:Error 라고 뜨네요 ㅠ 원인을 찾아봐도 안보여서 여쭙습니다..! 참고로 포트는 8081이 맞습니다혹시 파일 필요하실까봐 링크 첨부했습니다https://drive.google.com/file/d/1W65YQNY5rOGjWuqr-ntff7_QuTWz4eDw/view?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
도메인에 정의된 메서드를 클라이언트 단에서 직접 접근할 경우 어떤 문제가 있나요?
분명 강의중에 설명해주셨던 내용같은데,,, 넓은 범위를 복습하다보니 내용을 찾기가 어려워서 잘문 남깁니다. 강의 내용에서는 주문을 생성할 때, orderService 계층의 order() 메서드를 호출하여 orderItem 을 생성하고, 이는 내부적으로 createOrder 를 다시 호출해서 디비에 저장되는 식으로 코드를 짰습니다. 그런데 문득 클라이언트 단에서(예를 들어 controller 계층에서) order.createOrder 를 직접 접근하면 어떤 문제들이 있을지가 궁금해졌습니다.예릃 들어 아래 제 테스트 코드 처럼요.이런 설계가 안좋아보이긴 하나, 마땅히 생각나는 문제가 없어서 질문드립니다.@Test @DisplayName("Direct access thru Order Domain") @Transactional @Rollback(value = false) public void directAccess(){ Item bread = new Bread( "red bean", 100, 2000, "a", BreadSize.LARGE ); itemService.createItem(bread); Order order = new Order(); orderService.createOrder(order); OrderItem orderItem = OrderItem.createOrderItem1(bread, bread.getItemPrice(), 20); order.addOrderItem1(orderItem); }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 보호
//== 연관관계 메서드 ==// private void setMember(Member member){ this.member = member; member.getOrders().add(this); } private void setDelivery(Delivery delivery){ this.delivery=delivery; delivery.orderRelation(this); } private void addOrderItem(OrderItem orderItem){ orderItems.add(orderItem); orderItem.setOrder(this); } @Builder public Order(Member member,Delivery delivery,OrderItem... orderItems){ setMember(member); setDelivery(delivery); this.status=OrderStatus.ORDER; this.orderDate=LocalDateTime.now(); for (OrderItem orderItem:orderItems){ addOrderItem(orderItem); } }강의를 다 듣고 간단하게 리펙토링 작업을하면서 복습하는중입니다.현재 하고있는 작업은 기본생성자로 무분별한 객체 생성 없애기 ..? +setter 하고있는데 연관관계 메서드를 private로 사용하여 생성자에서 호출하게끔 작성하였습니다.또한, 다른 entity에서도 접근을 private,proteted 처럼 제한적으로 사용하여 필요한 경우 setter를 일부 사용하게끔 하였습니다. entity 일관성 + 데이타 보호 목적이라는 큰 기준을 잡고 여러 방법들과 나름대로의 기준? 을 생각하며 작성중인데 감이 잘 안잡히네요 ㅠㅠ.. 그냥 경험으로 상황에따라 유연하게 작성해야 하는걸까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
join 질문입니다.
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 { Team team = new Team(); team.setName("팀A"); em.persist(team); Member member = new Member(); member.setUsername("member1"); member.setAge(50); em.persist(member); em.flush(); em.clear(); System.out.println("f??"); String query = "select m From Team t join t.members m"; List<Team> result = em.createQuery(query, Team.class) .getResultList(); System.out.println("result.size() = " + result.size()); System.out.println("뭐고"); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); }위 코드에서 String query가 select m 혹은 select m,t 때는 아예 콘솔에 select가 뜨지않습니다. select t일때만 정상적으로 콘솔에 select쿼리가 나옵니다. 왜그런걸까요?=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.