묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
한 애플리케이션에서 OSIV를 어떻게 나누어 관리하나요?!?!
마지막 참고에서는 트래픽이 많은 API는 OSIV를 끄고, 많은 트래픽이 없어 커넥션을 유지해도 되는 상태인 ADMIN같은 경우는 OSIV를 켜두는 것이 좋다고 하셨습니다!!! 여기서 궁금한 점이 spring.jpa.open-in-view는 글로벌 설정인데 한 애플리케이션에서는 화면 의존적인 서비스가 있을 수도 있고 아닐 수도 있다고 생각합니다. (여러 서비스가 있을 수도 있다고 생각합니다.) 그렇다면 개별적으로 osiv를 설정하는 방법이 있는건가요? (항상 좋은 강의 감사합니다.)
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 서비스 테스트코드
안녕하세요 선생님! 혼자 복습하다가 문득 호기심이 생겨, 상품 서비스의 테스트를 진행해보다 . @SpringBootTestclass ItemServiceTest { @Autowired private ItemService itemService; @Test void 상품_등록() { Book book = new Book(); book.setName("jpa"); book.setPrice(10000); Long itemId = itemService.saveItem(book); Assertions.assertThat(book).isEqualTo(itemService.findOne(itemId)); }} 이렇게 되면 테스트가 실패하는데 그 이유가 객체 타입이 달라서 그런건가요? 테스트 코드의 객체는 Book이고 service 계층에서의 반환형은 Item이라 생각하여 Repository 계층과 Service 계층의 반환형을 모두 Book으로 해도 테스트가 실패합니다. 혹시 이유를 알 수 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
TDD 관련 질문
안녕하세요 영한님 드디어 야생형 코스가 끝났습니다! 스프링 MVC도 이제 곧 구매 대기 중입니다ㅎㅎ 다름이 아니라 TDD 관련 질문입니다. 질문을 어디다 해야될지 모르겠어서 여기 다 질문합니다.. 1. 보통 Spring에서 각 계층별로 TDD를 진행하나요? 예를 들어, entity -> repository -> service -> controller 순으로 수업을 진행하셨는데 실무에서는 entity 개발 후에 entity 로직에 대한 tdd, respository tdd, service tdd, controller tdd 이런 식으로 다하나요? 2. 각 계층별로 단위 테스트와 통합 테스트를 전부 다 하는 건가요? 현재 프로젝트를 진행하는 데 계층별로 단위 테스트와 통합 테스트를 다 해야되는 건지 궁금했는데 구글링해도 자료가 잘 없네요ㅠㅠ
-
미해결실전! 스프링 데이터 JPA
벌크성 수정 쿼리 질문
안녕하세요 영한님 벌크성 수정 쿼리 강의해주실 때 em.flush() em.clear() 를해야한다(영속성 컨텍스트에 있는 캐시정보들을 DB에 반영하기 위해)고 말씀해주셨는데 만약 어떤 user들의 age가 20이 넘는 사람의 인원수가 5명이라고 가정하고 이들의 나이를 1씩 올렸다고 가정했을때 캐시에는 반영이 안되고 바로 DB에만 반영이 되는데 이때 제가 궁금했던것은 em.flush를 하면 1치캐시에 있는것을 db에 반영시키는것(더티체킹을 포함하여) 이라고 생각해서 이 경우에는 1차캐시가 반영되면 안되는것 아닌가요? 캐시 DB -> 벌크성수정쿼리-> 캐시 DB -> em.flush() -> 캐시 DB 40 40 40 41 40 40
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
join fetch 와 그냥 join 이 동일한 결과를 가지고 오나요?
안녕하세요. 강의 재밌게 잘 보고 있습니다. jpql 예제에서 V3 에는 join fetch 를 사용하고, V4 에서는 join 만 사용하셨는데 동일한 inner join 쿼리가 생성된 것 같습니다. 두 개의 사용 유형이 같은 방식으로 동작하는 것인지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
강의와 별개로 궁금한 점이 있어 질문드립니다.
안녕하세요. 궁금한 점이 있어 질문을 드리는데 강의의 내용이 아니라 답변을 안달아주셔서 됩니다. Controller에서 rest api 호출 시 함수 인자 값으로 HttpServletRequest를 받고 있습니다. 공통적으로 AOP or Interceptor에서 HttpServletRequest의 parameter 값을 변경 및 추가를 하고 싶은데 방법이 있을지 궁금합니다. 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
assertThrows로인한 중복회원예외 test 오류
안녕하세요. 너무 유익하게 강의를 수강하고 있습니다. 지난 test 강의에서도 이해가 되지 않아 넘겼던 부분인데, 중복회원예외 함수에서 assertThrows에 오류가 발생합니다. org.opentest4j.AssertionFailedError: Expected java.lang.IllegalStateException to be thrown, but nothing was thrown. 위는 오류 메시지이고, 소스 코드는 강의 내용과 동일하게 작성하여 작성 중 발생한 오류는 없습니다. 답변주시면 감사하겠습니다. 오늘도 좋은 하루 보내시고 열심히 마지막 강의까지 수강해보도록 하겠습니다:)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO를 만드는 레이어에 관한 질문
안녕하세요! - 서비스에서 DTO를 만들어서 컨트롤러에게 리턴하는 방식 - 서비스에서는 엔티티를 리턴하고 컨트롤러에서 최종적으로 응답을 내보낼 때 DTO로 감싸서 내보내는 방식 두가지의 방법중에서 어떠한것이 더 좋은 선택일까 고민하고 있습니다. 인터넷을 찾아봐도 많은 논쟁들이 있었지만 무엇이 더 나은 방법이라고 확실하게 답변해주는 건 없는 것 같아요. 개인적으로 서비스에서 DTO를 반환하는게 핵심 비즈니스 로직을 감출 수 있고 의존성을 낮출 수 있다고 생각합니다. 그런데 여기서 문제점이 생기는데, 예를 들어 UserService에 아래와 같은 메소드 2개가 있다고 가정할게요. - findByUserId(Long id) - 내부에서 repo호출하여 유저 엔티티를 가져온 후 DTO로 반환 - updateUser(Long id, ...) `updateUser()`에서는 `findByUserId()`를 호출하여 유저를 가져오고 특정 로직에 따라 업데이트하는 구문을 수행하는 목적입니다. 그런데 `findByUserId()`에서 엔티티를 반환했기때문에 엔티티를 가져오기 위해 다시 한번 repo를 호출하여 실제 엔티티를 가져온 후 정보를 변경하는 로직을 수행해야합니다. 따라서 추가적인 쿼리가 발생하는 문제가 생깁니다. 사실 위 예제는 조금 극단적인 예제이긴 합니다만, 실무에서 개발하다보니 서비스에서 서비스를 호출하는 경우가 빈번하게 발생하더라구요. 하지만 엔티티 자체를 컨트롤러까지 노출하는건 뭔가 꺼려집니다. 질문을 요약하자면, DTO를 서비스에서 리턴하는 방식과 서비스는 엔티티를 리턴하고 컨트롤러에서 DTO로 조합하여 최종 응답을 내보내는 방식 중 어떠한 것이 더 좋다고 생각하시는지 알고 싶습니다. (또는 실무에서 자주 사용하는 방식) 감사합니다 :)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Repository 관련 질문 드립니다!
안녕하세요 김영한 선생님! 강의 항상 잘 듣고 있습니다ㅎㅎ MVC 패턴 그림을 보다가 문득 궁금한 점이 생겼는데요, 아직 많은 곳에서 (제가 다니는 회사 포함) DB에 직접 접근하여 데이터를 처리하는 객체를 DAO 라는 용어로 사용하고 있는데, 이게 특정 시점부터 Repository 라는 용어를 사용하는 것으로 권장이 된건지, 아니면 ORM을 어떤걸 사용하느냐에 따라 달라지는건지 궁금합니다!
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
private final을 사용하신 이유가 있으신가요?
안녕하세요 영한님! 좋은 강의 잘 듣고 있습니다. 지금까지는 FrontController에서 private final 을 사용하지 않으셨는데 v5에서부터는 private final Map<String, Object> handlerMappingMap = new HashMap<>(); private final List<MyHandlerAdapter> handlerAdapters = new ArrayList<>(); 위와 같이 private final을 사용하신것을 볼 수 있었습니다. 이유가 무엇인지 알려주시면 감사하겠습니다!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Spring Security 관련 질문입니다.
안녕하세요! 로드맵대로 강의를 마치고 이제 실제로 토이 프로젝트를 구현해보고 있습니다. Authorization 헤더에 JWT토큰을 태워서 보내는 형태로 인증을 구현하려고 하는데요. 보통 Spring Security를 사용한다고 나와있어서 해당 라이브러리를 같이 설치한다음 작업하고 있습니다. 관련해서 검색하면서 살펴보고 있는데 제공하는 기능들이 너무나도 많아서 실무에서는 어떤걸 많이 사용하는지 정말 헷갈리네요. 찾아보니 @Secured, @PreAuthorize, @RolesAllowed 라는 3가지의 방법이 존재하는 것 같은데, 실무에서는 어떠한 방법을 사용하나요? (물론 요구사항에 따라 다르겠지만 일반적으로 사용하는걸 알려주시면 제가 검색해서 찾아보겠습니다ㅎㅎ개인적으로는 @PreAuthorize를 사용해서 엔드포인트마다 권한을 세분화하는게 좋다고 생각합니다.)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Batch fetch size 의 원리
Batch fetch size 가 어떻게 적용되는지 블랙박스인 느낌이 드네요. 관련된 원리를 알 수 있을까요? stream().map 을 통해서 루프를 돌면서 Lazy Loading을 할 텐데 각 루프를 실행 할 때 쿼리를 날리지않고 다돌고난후 알아서 in 절에 채워넣어주는건 Hibernate가 알아서 해주는 건가요? 어떻게 가능한지 감이 안오네요
-
미해결스프링 핵심 원리 - 기본편
이전 강의부터 궁금했던것 질문입니다.
뒤로가면 나오겠지 하고 계속넘어갔는데 나오지 않아서 추가 질문합니다. 설계와 구현에 나뉘어 인터페이스 / 구현체인 클래스로 나누고 실제 클라이언트 코드에서 코드 수정 없이 AppConfig파일만 바꾸면 코드의 교체를 할 수 있도록 예제가 구성이 되었는데요. 예를들어서 자동차 라는 인터페이스가 있고 전기차 , 석유차 라는 클래스가 있다고 했을 경우 스프링 코드를 사용하지 않고 자바로 했을때 자동차 car = new 석유차(); -> 자동차 car = new 전기차(); 이렇게 하면 코드가 바뀌게 되잖아요? 근데 타입이 자식클래스가 아닌 부모 인터페이스 일 경우 자동차 (부모) 인터페이스에 공통으로 있는 기능을 사용 할 수 있지만 전기차(자식) 클래스에만 있는 기능은 "car"를 통해 사용하지 못하는 것 아닌가요? 그럼에도 불구하고 자료형을 부모타입으로 하는 이유가 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Controller DTO리턴 질문
안녕하세요. 영한님의 강좌에서는 컨트롤러에서 DTO를 리턴하는 방식을 사용하고 있더라구요. 그런데 인터넷을 찾아보니 ResponseEntity로 한번 감싸서 리턴하는 방식도 종종 사용하는 것 같습니다. (ResponseEntity를 사용하면 응답코드, 헤더등과 함께 좀 더 세밀하게 리턴값을 조절할 수 있기 때문인 것 같네요) 실무에서는 DTO를 그대로 반환하는 방식과 ResponseEntity로 감싸서 반환하는 방식 중 어떤 방식을 사용하나요? 감사합니다 :)
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO의 위치에 관하여
Version 4 까지의 최적화를 하면서 Dto의 위치가 repository 까지 갔는데 DTO의 위치는 상황에 맞게 자유롭게 두는게 괜찮을까요?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
메이븐말고 그래들로 만들어서하고싶은데
그래들로 만들어서 뷰를 그대로 넣고 따라하며 듣고있는데, 화면이 깨집니다. 기본 html은 나와서 사용이 가능한데, 흰화면에 html 밖에 안나오는데 해결방법이 없을까요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
13:09 store.clear() 에서 store에 빨간줄이 뜹니다 왜이런가요?
13:09 store.clear() 에서 store에 빨간줄이 뜹니다 왜이런가요? java: cannot find symbol symbol: method clearStore() location: variable repository of type hello.hellospring.repository.MemoryMemberRepository
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
validateDuplicatedName() 관련 질문 드립니다. - 자답 추가!!
회원가입 시 이름 중복 확인하는 메소드 안에서 IllegalAccessException 을 try/catch 문 쓰지 않고 작성을 하셨는데 하신 것을 보고 따라서 try/catch문 쓰지 않고 throw new IllegalAccessException을 하니 error: unreported exception IllegalAccessException; must be caught or declared to be thrown 이라는 에러가 발생합니다. 혹시 어떠한 원인인지 아실까요? 자바 버전은 오라클에서 다운받은 11입니다. ----------------------------------- 자답 추가합니다 ㅠㅠ IllegalAccessException 가 아니고 IllegalStateException으로 적었어야 했네요 ㅠㅠ 하.... 덕분에 강의안을 처음부터 천천히 복습하고 좋았습니다 ^^ ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ 다들 화이팅!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Unit Test가 더 좋다고했는데...
강의 중 통합 테스트도 좋지만 단위테스트가 더좋다고 하셨는데 Service에 대한 테스트 케이스를 작성할 때, 의존성이 있는 각각의 Repository 도 MockRepository를 생성해서 Service 자체만 테스트 하는게 더 좋은 방향일까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
요청에 응답이 오래걸려서 그 사이에 새로고침을 하면 어떻게 될까요?
안녕하세요. PRG 패턴에 대해 듣다가 생긴 의문점인데, PRG 패턴으로 POST 재요청을 막을수 있다는 점에 대해서는 이해를 햇는데 POST요청자체가 응답이 늦어져서 기다리는 상황에서 새로고침을 반복하면서 POST 요청이 반복해서 가는것은 PRG 패턴으로 해결이 안 될 것 같은데 방법이 있을까요?