묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
생성메서드에 대한 질문입니다.
제가 강의를 듣다가Order 엔티티의 생성메서드의 파라미터에는 OrderItem의 리스트가 넘어오고,OrderItem 엔티티의 생성메서드의 파라미터에는 Item 객체가 넘어오는데 각각 Order 엔티티의 생성메서드에 OrderItem 리스트가 넘어오는 이유는 주문상품이 있어야 주문이 있기 때문이고, OrderItem 엔티티의 생성메서드에 Item 객체가 넘어오는 이유는 상품이 있어야 주문상품이 있기 때문이라고 이해하면 될까요??
-
해결됨Spring Boot를 활용하여 채팅 플랫폼 만들어보기
강의 들으면서 블로그에 올려도 될까요?
안녕하세요! 제목처럼 강의 내용 들으면서 블로그에 정리하려고 하는데 괜찮을까요? :)
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
환경변수 설정을 yml 아니라 properties로 해도 상관 없나요?
yml과 properties의 차이가 계층구조 표현의 차이만 있는거 같은데 properties로 적용해서 강의를 진행하여도 상관이 없나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
스프링 클라우드가 아닌 다른 방식의 msa 개발 강의문의
이후에 스프링클라우드를 이용하는것이 아나라 쿠버네티스를 이용한 msa 개발 강의를 해주실 의향없나요.
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
CertificationServiceTest에서 MailSender 인터페이스가 아닌 FakeMailSender를 이용하는 것
현재 CertificationServiceTest를 할 때 MailSender를 주입받는 것이 아닌 FakeMailSender를 주입받아서 테스트를 진행하는데MailSender를 만든 이유가 의존성을 역전시키기 위해서 만든 것인데 FakeMailSender를 사용하게 되면 의존성 역전 원칙이 적용된 것이 아니지 않나요???FakeMailSender는 mock으로 사용하고 있지만 구현체이니까 MailSender를 사용해야 되는 것이 아닌가요??그냥 테스트 목적으로 필드 값들이 잘 전달되는지 확인하기 위해서 사용하기 때문에 상관이 없는 건지 궁금합니다. MailSender 인터페이스를 이용한다면 검증 부분에서 다운 캐스팅을 해줘야 하기 때문에 사용하지 않은 건가요???
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
H2 DB에선 컬럼 순서를 임의로 바꿀 순 없겠죠...?
강의 영상에선 깔끔하게 DTYPE 먼저 나오고 ID 순서로 나오는데 실제 실습을 하면 뒤죽박죽이네요...
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
LAZY가 default가 아닌 이유
자바는 왜 XtoOne에 대해서는 EAGER를 기본적용하고, OneToX에는 LAZY를 기본 적용하는 지 알고싶습니다.EAGER로 설정되어있는 경우는 아마 항상 같이 딸려와야 하는 연관관계로 해석하는 듯 한데 지연 로딩을 디폴트로 하는 것이 더 많은 사람들이 원하는 바가 아닐까요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
일대일 관계에서 N+1 문제
안녕하세요 강사님 강의 보면서 많이 배우고 적용해보고있습니다.테스트를 해보던중 이해할수 없는 추가적인 쿼리가 발생해서 질문드립니다.먼저 예약과 리뷰 엔티티 클래스입니다.@Entity @Getter public class Reservation extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "reservation_id") private Long id; ... @OneToOne(mappedBy = "reservation") private Review review; } @Entity @Getter @Table(name = "rental_home_review") public class Review extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "rental_home_review_id") private Long id; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "reservation_id", nullable = false) private Reservation reservation; private int score; private String content; @Enumerated(EnumType.STRING) private WritingStatus status; } @PersistenceUnit EntityManagerFactory emf; @Test public void 조인_jpql() { String query = "select rh from RentalHome rh join rh.reservations where rh.id = 6486L"; RentalHome rentalHome = em.createQuery(query, RentalHome.class).getSingleResult(); boolean rentalHomeLoaded = emf.getPersistenceUnitUtil().isLoaded(rentalHome); boolean reservationsLoaded = emf.getPersistenceUnitUtil().isLoaded(rentalHome.getReservations()); assertThat(rentalHomeLoaded).isTrue(); assertThat(reservationsLoaded).isFalse(); } @Test public void 패치조인_jpql() { String query = "select rh from RentalHome rh join fetch rh.reservations where rh.id = 6486L"; RentalHome rentalHome = em.createQuery(query, RentalHome.class).getSingleResult(); boolean rentalHomeLoaded = emf.getPersistenceUnitUtil().isLoaded(rentalHome); boolean reservationsLoaded = emf.getPersistenceUnitUtil().isLoaded(rentalHome.getReservations()); assertThat(rentalHomeLoaded).isTrue(); assertThat(reservationsLoaded).isTrue(); }위의 테스트 메서드에서 조인_jpql 쿼리는 의도한대로 테스트 통과가 맞고패치조인_jpql에서도 테스트는 통과하지만 추가적인 쿼리가 발생합니다.Reservation과 Review의 관계를 Lazy로 설정했고Reivew 객체는 사용하지도 않았는데 추가적인 쿼리가 왜 발생했는지 모르겠어서 질문 올립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
설계에 대한 질문입니다.
강의를 듣고 간단한 게시판을 만들고 있습니다.구현을 하다가 이런식으로 양방향 편의메서드를 작성했습니다.Post(게시글)을 생성할 때 setBoard()를 사용해서 Board.posts 리스트에 생성된 Post 객체를 넣도록 하고 있습니다. public void setBoard(Board board) { this.board = board; if (!board.getPosts().contains(this)) { board.getPosts().add(this); } 여기서 든 고민이 있습니다. 예를 들어 한 게시판에 게시글이 100만개 혹은 엄청난 양의 게시글이 쌓여있다고 가정을 한다면 contains()를 하는 과정이 O(N) 이 걸려 성능이 안좋아질거라고 생각했습니다. 근데 논리적으로 생각했을 때 Board(게시판)에 똑같은 객체(=PK가 같은) Post(게시글) 가 들어갈 일이 있을까? 라는 생각을 해서 굳이 중복 검사하는 로직이 필요하나라는 생각이 들었습니다. 이럴 경우는 어떻게 생각하시나요?
-
해결됨생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
토큰발행시 500 INTERNAL_SERVER_ERROR
{errorCode: "500 INTERNAL_SERVER_ERROR",errorMessage: "[405 Method Not Allowed] during [POST] to [https://kauth.kakako.com/oauth/token?code=fTm_uxdiNTjsBlzeAOwQfGPMqg6kR0ouuBK8VkuKSBohWDx0skqriAAAAAQKPXObAAABkkMviG3MISgqRbFCUQ&grant_type=authorization_code&client_secret=kGuBVOPHxDwPJpEOJBDo5TtagIjOGLri&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Foauth%2Fkakao%2Fcallback&client_id=8fbba150815fc1d671141795f363410a] [KakaoTokenClient#requestKakaoToken(String,Request)]: [<html> <head><title>405 Not Allowed</title></head> <body> <center><h1>405 Not Allowed</h1></center> <hr><center>openresty</center> </body> </html> ]"} 해당 오류에 대한 원인을 찾지 못하고있습니다.
-
해결됨대기업 서버 개발자가 알려주는 Spring, AWS를 활용한 이메일 전송 시스템
OTP_ISSUER 가 2번 들어가는 이유 문의
generateQRCodeURL 에서 OTP_ISSUER 가 2번 들어가던데 특별한 이유가 있을까요?
-
미해결코드로 배우는 React with 스프링부트 API서버
안녕하세요. 공부하다가 막히는 부분이 있어서 질문드리는데 질문 내용이 ...
안녕하세요. 이 강의를 마치고 비동기 spring boot를 공부 하고 있습니다. Reactor이라고 부르던데 mvc와 크게 다른거 같지 않는거 같은데 코딩이 생각 보다 어렵네요....mvc랑 코딩 자체가 틀림 ... 솔직히 질문드리기가 너무 죄송합니다. 근데 답변 해줄 분이 안계셔서 ..여기에 질문 드리네요...... 질문 내용은 @Aspect 이딴걸 왜 하는거냐 입니다. class A아래 함수에 주석을 원래 하는거지만 주석을 제거 하려면 이걸 Aspect를 해야한다고 하네요....@GetMapping("/test/mdc") suspend fun testRequestTxid() { // withContext(MDCContext()) { logger.debug { "start MDC TxId" } delay(100) service.mdc() logger.debug { "end MDC TxId" } // } }이과정이 꽤나 복잡합니다. class B처럼요 class BMapping을 대신할 어노 테이션을 만드는거 내용이라고 생각 됩니다.classA에 @GetMapping을 하면 아래 class의 hindMdcContext를 사용하게끔 하는거 같아요...질문 드릴껀 이 과정이 왜 필요한거죠???의도가 잘 파악이 안되서요...trance id를 생성하고 class A가 완전히 처리 될때까지 블러킹 하기 위해서 그런거 같은데 이렇게 까지 해야되나 싶네요... 내용은 아직도 파악 중입니다. ^^ 현제 ProceedingJoinPoint가 뭔지 파악 중에 있고요 ... @Aspect class AspectConfig { @Around(""" @annotation(org.springframework.web.bind.annotation.GetMapping) """) fun hindMdcContext(jp: ProceedingJoinPoint): Any? { return if(jp.hasSuspendFunction) { val continuation = jp.args.last() as Continuation<*> val newContext = continuation.context + MDCContext() val newContinuation = Continuation(newContext) { continuation.resumeWith(it)} val newArgs = jp.args.dropLast(1) + newContinuation jp.proceed(newArgs.toTypedArray()) } else { jp.proceed() } } private val ProceedingJoinPoint.hasSuspendFunction: Boolean get() { val method = (this.signature as MethodSignature).method return KotlinDetector.isSuspendingFunction(method) } }빨리 비동기 강의좀 내주세요 ㅠ.ㅠ 수없는 인강을 들었지만 강사님 만큼 강의 잘하는 강의 못봤어요 ㅠ.ㅠ
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
homebrew로 mysql 설치시 오류
안녕하세요. homebrew를 이용해서 mysql을 설치하려고 했는데 다음과 같은 오류가 떠서 질문글 남깁니다. 혼자 고쳐보려고 해도 인터넷에 레퍼런스가 없네요 .. homebrew 삭제후 재설치도 해봤는데 해결되지 않습니다. 도와주세요.
-
미해결코드로 배우는 React with 스프링부트 API서버
6장 질문
6장 실습중 이미지가 안보이는 이유가 무엇일까요?빠른 답변 좀 부탁드립니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
join의 on절이 제대로 작동하지 않는 것 같습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]team5에 해당하는 member들만 출력이 되어야 할 것 같은데 모든 멤버들 (100개) 가 출력됩니다. 왜일까요..CascadeType.ALL 옵션 사용하였습니다
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
로그인 하고 나서 GET요청으로 메인페이지 요청
### 로그인 POST http://localhost:8080/auth/login Content-Type: application/x-www-form-urlencoded username=blog&password=1111&remember=1 ### 메인 페이지 GET http://localhost:8080분명 로그인을 하고나면 메인페이지로 잘 넘어가지만localhost / SESSION ZmU5OGQ2ZDEtZjBjZS00NzhiLWI3NDktM2NiNjAxNTYwM2U1 -1 localhost / remember-me YmxvZzoxNzMwMjE1NjY2NzQ5OlNIQTI1Njo2MzBiMmU5ZmMyNzZiYTcxYTY5ZjI4NzYyMjdlODg3NzEyMWNhMmFlZTdlZmM4YTFmNjMxYmFlYjM1YzhhMTll Sun, 29-Sep-2024 16:10:58잘 발급이 된상태에서 GET을 하게되면 자꾸 메인 페이지로 안넘어가고로그인페이지로 넘어가는데 아무리 찾아봐도 잘모르겠습니다...ㅠㅠ 몇시간을 사용했는지 모르겠네요 이거땜시https://github.com/CryingPerson/blog.git깃허브 주소입니다. 도와주세요 호돌맨님 !!! ㅠㅠ
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
GitHub Collaborator 초대 관련
안녕하세요.강의 잘 보고 있습니다.깃허브 Collaborator 초대 부탁드립니다.GitHub Email: pdohyung@gmail.com
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
1분40초 부분을 수정 해줬는데 도 결과가 나타나지 않습니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
spring data jpa로 반환할 때
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@EntityGraph를 이용하여 페이징 한계를 돌파할 때 리포지토리public interface OrderRepository extends JpaRepository<Order, Long> { @EntityGraph(attributePaths = {"member", "delivery", "orderItems", "orderItems.item"}) Page<Order> findAll(Pageable pageable);}컨트롤러단@GetMapping("/api/v3.1/orders") public List<OrderDto> ordersV3_page( @RequestParam(value = "offset", defaultValue = "0") int offset, @RequestParam(value = "limit", defaultValue = "100") int limit ) { Pageable pageable = PageRequest.of(offset, limit); Page<Order> orders = orderRepository.findAll(pageable); return orders.stream() .map(OrderDto::new) .collect(Collectors.toList()); }이렇게 코드를 작성하면 orderItems 이것이 @OneToMany관계에 있어 DB의 데이터가 늘어나게 되기 때문에(orderItem개수에 따라) @EntityGraph(attributePaths = {"member", "delivery"}) 이렇게 적고 컨트롤러 단에서 동일하게 실행하게 되면 OrderDto::new 이것을 실행하게 되면서 Lazy전략으로 값을 가져오게 되어 페이징을 올바르게 처리할 수 있고, 만일 이때 값을 한번에 묶어서 가져오고 싶으면 @BatchSize를 이용하는 것으로 이해하였는데 올바르게 이해한 것인지 궁금합니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
임베디드 타입과 @MappedSuperClass
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]둘의 역할이 매우 유사하고, 임베디드 타입을 잘 활용하면 굳이 상속관계를 맺어야 하는 @MappedSuperClass가 필요 없을 것 같다는 생각이 듭니다. @MappedSuperClass를 사용하면 나중에 상속을 시키고 싶어도 못하게 되고.. 딱히 장점이 없는 것 같은데 실무에서는 둘 중 어떤 것이 더 많이쓰이고 각각 어떤 때에 주로 쓰이는 지 알수있을까요