묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의에 언급된 개념 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)너무 사소한 질문이지만 작은 부분에서 혼동이 와 구글링 후 질문드립니다.강의시간 7:25 @PostMapping해당 강의에서 구성하신 로직은 API가 아니라고 이해가 됩니다. '다음으로'에서도 API와 분리된 개념으로 말씀하신 것 같습니다. 제가 알기로는 해당 로직도 API의 종류라고 알고 있습니다.강사님이 말씀하신 API는 JSON이나 XML로 응답코드를 얻는 RESTful API를 설명하신 것일까요,,? API 개념에 대한 혼동이 옵니다. 강의시간 11:45 '앞 단이든 서비스 계층이든 id에 대한 권한 여부 체크하는 것을 서버에 로직을 추가'하라고 하셨습니다. 앞 단이든 서비스 계층이든 상관없다고 하셨으니 여기서 말씀하신 서버는 백 단만 말씀하시는게 아닌 것으로 이해하면 되나요? [질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결실전! 스프링 데이터 JPA
db에서 데이터 확인이 안됩니다..
안녕하세요, 강의 수강 중에 궁금한 점이 있어 질문드립니다! 섹션4의 벌크성 수정 쿼리 부분을 실습하고 있는데요, 테스트 코드 실행 후 db에서 변경된 내용을 확인하려고 했는데 데이터가 없다고 나옵니다..테스트 클래스에 @Rollback(false)은 설정했는데 어떤 부분이 문제인 걸까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
OSIV 관련하여 질문드립니다!
User user = userQueryService.findById(userId); postService.createPost(user)OSIV를 끈채로 특정 유저가 게시글을 작성하는 로직을 Command와 Query를 분리하여 위와 같이 컨트롤러에 작성하고자 합니다.OSIV가 꺼져있기에 user는 준영속상태로, createPost 트랜잭션 안에서 user를 변경하지 않고 post 생성에만 사용한다면 위와 같이 사용하는게 맞는지 궁금합니다!만약 createPost에서 user를 변경하는 상황이 발생한다면, 예외가 발생하는지도 궁금합니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
초반 println 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.무슨 오류인 걸까요...??현재 h2 DB는 실행 중 입니다.....😥
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
객체와 프록시를 비교했을 때 결과 값이 안 나와요!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.영상에선 참거짓이 나오는데 제건 이럭게만 뜨네요 ㅜㅜ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
오타발견해서 적어봅니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.31페이지정리하면대다대매핑을일대다, 다대일매핑으로풀어내서사용하자.대다대매핑->다대다매핑
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
delete 쿼리 수
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. cascade = CascadeType.REMOVE, orphanRemoval = true 둘 다N + 1로 삭제 쿼리가 나가는거 같은데 크게 문제될 일 없나요?? 감사합니다.
-
미해결실전! Querydsl
generated 파일
Q 가 생성이 안되네요 제 gradle 소스 코드입니다.plugins { id 'java' id 'org.springframework.boot' version '2.7.9' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'study' version = '0.0.1-SNAPSHOT' 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-web' compileOnly 'org.projectlombok:lombok' // queryDSL 설정 implementation "com.querydsl:querydsl-jpa" implementation "com.querydsl:querydsl-core" implementation "com.querydsl:querydsl-collections" annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" // querydsl JPAAnnotationProcessor 사용 지정 annotationProcessor "jakarta.annotation:jakarta.annotation-api" // java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응 코드 annotationProcessor "jakarta.persistence:jakarta.persistence-api" // java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응 코드 runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } // Querydsl 설정부 def generated = 'src/main/generated' // querydsl QClass 파일 생성 위치를 지정 tasks.withType(JavaCompile) { options.getGeneratedSourceOutputDirectory().set(file(generated)) } // java source set 에 querydsl QClass 위치 추가 sourceSets { main.java.srcDirs += [ generated ] } // gradle clean 시에 QClass 디렉토리 삭제 clean { delete file(generated) }
-
미해결실전! 스프링 데이터 JPA
Unknown entity 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]선생님 안녕하세요 현재 스프링 데이터 JPA와 DB 설정, 동작확인 15:43 부분 강의 수강중입니다.코딩은 다음과 같이 진행 하였는데요 Unknown entity 오류가 나오고 있습니다 ㅠㅠ 어떻게 처리하면 될까요 ? ㅠnknown entity: com.sun.proxy.$Proxy100; nested exception is java.lang.IllegalArgumentException: Unknown entity: com.sun.proxy.$Proxy100org.springframework.dao.InvalidDataAccessApiUsageException: Unknown entity: com.sun.proxy.$Proxy100; nested exception is java.lang.IllegalArgumentException: Unknown entity: com.sun.proxy.$Proxy100
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
인증요청시 문의드립니다.
강의진행중 궁금한게 있어서 문의드렸습니다!강의중에 토큰이 탈취될수도 있다고하셔서 String jws = Jwts.builder() .setSubject(String.valueOf(userId)) .signWith(key) .setIssuedAt(new Date()) .compact();코드를 넣어주셨습니다. 매번 다른 accessToken값이 나올수 있도록이요! 그 결과 로그인 시마다 매번 다른 토큰값이 나오는데, 로그인을 하고나서 기존의 토큰값으로 /foo 메소드를 호출하여도 인증이 되는데 왜 그런걸까요??1. 로그인시 abc토큰이 나와서 abc토큰으로 /foo 컨트롤러를 호출함 인증됨2. 또 한번 로그인시 abcd토큰이 나옴. 그런데 이전 로그인 토큰이였떤 abc토큰으로 /foo 컨트롤러를 호출하여도 인증 성공됨.왜 그런지 궁금합니다!
-
해결됨
Querydsl을 멀티쓰레드 환경에서 사용할 때 발생하는 문제에 대해
안녕하세요. Querydsl강의를 수강하고 혼자 개발을 진행하다가 다음과 같은 문제가 발생해서 질문을 남기게 되었습니다. 제 상황은 A엔티티와 B엔티티를 가지고 있고, 둘은 OneToOne관계로 B가 연관관계의 주인인 상황입니다. Repository에는 A와 B의 데이터를 호출하는 Querydsl코드가 각각 존재하며, 이를 Service Layer에서 그대로 Return값으로 받고 있습니다.이들을 멀티쓰레드 환경에서 호출했을 때 B데이터를 호출하는 코드에 Connection leak이 존재한다는 에러가 발생하는 상황입니다. (.yml파일에서 hikari의 leak-detection-threshold을 설정한 상황입니다.)Domain@NoArgsConstructor @AllArgsConstructor @Entity public class A { @Id private Long id; @OneToOne(mappedBy = "a") private B b; private int var1; }@NoArgsConstructor @AllArgsConstructor @Entity public class B { @Id private Long id; @OneToOne @JoinColumn(name = "b_id") private A a; private int var1; }Repositorypublic interface Repository extends JpaRepository<A,Long>, RepositoryCustom { }public interface RepositoryCustom { Dto queryOne(); Dto queryTwo(); Dto queryThree(); }public class RepositoryCustomImpl implements RepositoryCustom { private final JPAQueryFactory queryFactory; public RepositoryCustomImpl(EntityManager em) { this.queryFactory = new JPAQueryFactory(em); } @Override public Dto queryOne() { return queryFactory .select(Projections.constructor(Dto.class, a.id, a.var1 )) .from(a) .fetchFirst(); } @Override public Dto queryTwo(){ return queryFactory .select(Projections.constructor(Dto.class, b.id, b.var1 )) .from(b) .fetchFirst(); } @Override public Dto queryThree(){ System.out.println("a.getClass() = " + a.getClass()); System.out.println("b.getClass() = " + b.getClass()); return queryFactory .select(Projections.constructor(Dto.class, b.id, b.var1 )) .from(b) .fetchFirst(); } }queryThree는 queryTwo와 Querydsl코드는 동일합니다. 다만 쿼리를 실행하기 전에 Qtype의 a와 b를 순서대로 한번 호출했다는 부분이 queryTwo와 다릅니다.DTOpublic class Dto { private Long id; private int var1; } Service@org.springframework.stereotype.Service @RequiredArgsConstructor public class Service { private final Repository repo; @Transactional public Dto logicOne(){ return repo.queryOne(); } @Transactional public Dto logicTwo(){ return repo.queryTwo(); } @Transactional public Dto logicThree(){ return repo.queryThree(); } }테스트코드@SpringBootTest @Slf4j public class SimpleTest { @Autowired Service service; @Test void connection_leak_detected(){ Runnable userA = () -> { Dto dto = service.logicOne(); log.info("[Thread A: {}]",dto); }; Thread threadA = new Thread(userA); threadA.start(); Runnable userB = () -> { Dto dto = service.logicTwo(); log.info("[Thread B: {}]",dto); }; Thread threadB = new Thread(userB); threadB.start(); sleep(6000); } @Test void leak_not_detected(){ Runnable userA = () -> { Dto dto = service.logicOne(); log.info("[Thread A: {}]",dto); }; Thread threadA = new Thread(userA); threadA.start(); Runnable userB = () -> { Dto dto = service.logicThree(); log.info("[Thread B: {}]",dto); }; Thread threadB = new Thread(userB); threadB.start(); sleep(6000); } @Test @Transactional void connection_leak_detected_otherCase(){ Runnable userA = () -> { Dto dto = service.logicOne(); log.info("[Thread A: {}]",dto); }; Thread threadA = new Thread(userA); threadA.start(); Runnable userB = () -> { Dto dto = service.logicThree(); log.info("[Thread B: {}]",dto); }; Thread threadB = new Thread(userB); threadB.start(); sleep(6000); } private void sleep(int millis){ try{ Thread.sleep(millis); } catch (InterruptedException e){ e.printStackTrace(); } } }connection_leak_detected를 테스트하면 Connection leak이 발생했다는 에러가 발생합니다.leak_not_detected를 테스트하면 Connection leak 로그가 출력되지 않습니다.leak_not_detected와 동일한 테스트코드에 Transactional을 선언한 connection_leak_detected_otherCase은 Connection leak 로그가 출력됩니다.어떤 이유로 이러한 Connection leak이 발생하는지, 그리고 어떻게하면 이러한 문제를 해결할 수 있는지 궁금합니다..!
-
미해결실전! Querydsl
querydsl에서 oneToMany 관계인데 Many쪽 검색이 필요할 때 어떻게 해야하나요?
예를 들어 Order와 OrderItem이 있는데 Order의 검색을 동적쿼리로 검색해야해서 querydsl을 사용하고 있는 상황입니다. 그 중 검색조건이 OrderItem의 이름으로 검색해서 Order의 목록을 가져와야하는데 Order와 OrderItem을 조인하고 where절에 OrderItem의 이름으로 조회하는 방법 말고는 없을까요? 그럴 경우 distinct를 쓰거나 따로 중복 제거 로직을 넣어야해서ㅜ 혹시 다른 방법이 있나 문의드립니다.이런 경우에는 양방향 연관관계를 맺어주고 해결해도 될까요?
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
시즌3 예정에 열렬한 환호를 보냅니다.
시즌3 예정에 열렬한 환호를 보냅니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 회원정보 저장 오류
회원가입과 돌아오는 페이지는 정상으로 작동은 하나 h2에 저장 되지도 않고 강의 내용처럼 insert 문이 나오지 않습니다https://drive.google.com/file/d/1Mnh-hxiK1AQlaSlFOuuQrzRgAT0lEI9t/view?usp=sharing
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
상속관계 데이터처리
13분 8초 질문입니다!데이터를 가져올 때, Album과 Item에 있는 것을 join해서 가져와야 된다고 하셨는데Album 이 Item을 상속 받은건데 Item까지 접촉해서 데이터를 가져와야 하는 이유가 뭘까요??
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
OSIV false로 설정할 때
궁금증이 생겨 한가지 질문할게요.만약 Service 계층에서 validate(), update()라는 메소드가 있을 때 두 메소드 모두 로직 시작부분에 엔티티를 조회한다고 하면 두 메소드에서 모두 select 쿼리가 나갑니다. OSIV 설정을 true로 하면 Controller 영역까지 트랜잭션이 유지 되기 때문에 컨트롤러 안에 xxxService.validate();xxxService.update();이렇게 해도 같은 트랜잭션 안에 있었기 때문에 select 쿼리는 한번만 나갑니다. 하지만 OSIV 설정을 false로 하면 Controller 영역까지 트랜잭션이 유지 되지 않기 때문에 위와 같이 작성하면 select 쿼리가 두번 나갑니다. 이를 해결하기 위해 두가지 메소드를 하나로 합쳐 Controller 영역에서 사용할 수 있습니다.xxxService.updateSet();하지만 이때는 입력 받아야 하는 인자 수가 많을 경우 3, 4개 넘게 받는 경우가 생겨 질문드립니다...쿼리 성능으로는 합치는게 맞지만 구조적으로 이러한 설계가 맞는지 궁금합니다. 감사합니다~!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
this 질문
OrderItem에서 전체가격 조회 메소드입니다.여기서 getOrderPrice()대신 this.OrderPrice를 해도 되는지 궁금합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Member Item id 차이
MemberService에서는 member.getId를 해서 id값을 가져와서 확인하는데ItemRepository에서는 item.getId가 null입니다memberService 는 memberRepository에서 저장되고 db에 있는 id를 가져오는게 아니지 않나요?
-
미해결실전! 스프링 데이터 JPA
application.yml에서 format_sql 적용이 안됩니다.
안녕하세요! 강의 수강 중 궁금한 부분이 있어 질문 남깁니다.테스트 코드 실행 시 콘솔 창의 쿼리가 여러 줄로 format된 형태가 아닌 한 줄로 나옵니다.application.yml 에서 hibernate.format_sql: true를 추가했는데도 적용이 안 되는데 이유를 잘 모르겠습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Domain별 패키지 분리에 대한 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요.항상 좋은 강의 감사드립니다.현업에서 업무를 하다보면 package를 도메인별로 분리하고 도메인에 controller, repository, service, entity, dta, dao등 패키지를 구분하고 있습니다.이는 하나의 모든 controller, repository에 담게 되면 유지보수성이 떨어지기 때문인데요.강의에 강사님께서 하나의 패키지에 넣으셔서 질문을 드립니다.MSA구조로 작게 분리한다고 해도 유지보수가 용의하기 위해서는 패키지를 분리하는게 좋다고 생각되는데요.DTA를 controller에 넣는다던지 entity를 모두 하나에 넣고 있어서...현업에서도 이렇게 쓰는게 더 좋은건지,,,아니면 강의에서만 분리하지 않는 것인지 궁금합니다.혹, 강의에서만 분리하지 않는 구조라면sample로 효율적인 패키지 구성을 제공해 주실 수 있나요??