묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
포폴 데이터모델링, jpa설계하다가 질문 !!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요?? 김영한님 JPA강의 덕에 포폴 순항하고 있습니다. 항상 좋은 강의 감사한 마음을 가지고 있습니다. 파이팅하세요 !!궁금한점을.... 간단하게 설명하려고 노력하겠습니다 !!예를들어서 블로그 포스팅 domain을 아래와 같이 만들었습니다...id: ~~~~content: ~~~~tags: ~~~ (일대다 관계)comments: ~~~(일대다 관계)그런데 !!! 여기서 궁금한점 !!제 생각으로는...아 그냥 편하게 포스팅한번에 끌고와서(tags, comments) 응답해주고 싶은뎅...그런데 영한님께서는 이 강의에서 일대다 관계를 두번이상하면 안된다고 하셔서...ㄷㄷ;;;;그래서, 오랜 고민끝에 포스팅 (id,content,tags)를 응답해주고 comments는 다대일 방법으로 응답을 해줬거든요??.... (이게 옳은방법일까...ㄷㄷ;;)그러니까 요청을 두번 보내는거에요..포스팅 한번... 포스팅에 연관관계있는 comments 한번..저의 이러한 판단과 설계과 괜찮은 걸까요??질문드리고 싶습니다 !! (잘 이해하셨을라나...ㄷㄷ;ㅠㅠ)
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
API response에 대한 질문
안녕하세요!먼저 좋은강의 만들어주셔서 감사합니다.다름이 아니라, 강의보면서 궁금한점이 생겨 문의드립니다.지금 에러(exception)가 발생하면 공통적으로 ErrorResponse 객체를 반환하게 만들어서 에러처리를 일관성있게 할 수있게 만드신것 같습니다.그런데 혹시 성공적인 응답일 때는 이런 객체를 만들지 않아도 되나요? 예를 들면 SuccessResponse 등을 만들어서 응답으로 주는 데이터를 다시 한번 감싸서 준다던가 하는게 더 좋을지, 아니면 그냥 응답dto 객체만 넘겨주면 되는지 궁금합니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpql flush 자동 호출
jpql flush 자동 호출되는 것이 커밋까지 된다는 말씀이실까요?jpql 로 db 에서 데이터를 조회하려면 db 에 반영이 되어야할 것 같아서입니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
V4 에서 DTO로 조회시 즉시 로딩이 되는 건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]V4 에서는 fetch join을 사용하지 않으셨는데 조회 쿼리는 한번만 나가는 것을 확인했습니다. dto로 조회를 하면 Lazy로딩으로 세팅해도 즉시 로딩으로 나간다고 이해하면 될까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시 객체에 대해 질문이 잇습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 프록시 강의를 보고 궁금한게 생겨 질문드립니다. 먼저 member객체를 생성하고 member.setUserName("hello");로 이름을 설정하고 persist(member); 하시고 바로 flush를 하셨습니다. 이후에 em.getReference(Member.class, member.getId());를 하시고 getId와 getUserName을 하실때 getId는 이미 getReference를 할때 getId(이미 있는 값이라 하셨습니다)를 사용해서 db에서 조회할 일이 없었다 라고 하셨고 getUserName은 db에서 조회해야한다 라고 하셨었는데 처음에 member객체에서 setUserName으로 값을 넣어주었고 id도 generatedValue로 값이 자동으로 설정되어서 2개의 값이 flush하기 전에 세팅이 되었는데 왜 id는 조회할때 이미 있는값이라 select문이 안나가고 userName은 값이 없어 select문이 나간건지 궁금합니다(설명을 잘 못해서 죄송합니다 ㅜ... 이해가 잘 안간탓에... 답변 해주시면 감사하겠습니다)
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
JWT 기반 인증 관련 질문
안녕하세요. 좋은 강의 잘 듣고 있습니다.다름이 아니라, JWT 기반 인증으로 회원을 관리할 때 소셜로그인 외에 서비스에 자체적인 회원가입 기능이 있는 경우에는 어떤식으로 관리해야 할까요?자체 회원가입 / 로그인 기능 등을 스프링 시큐리티를 사용해서 JWT 토큰을 발급할 수 있도록 하려고 했는데, 그 경우엔 시큐리티를 이용하려면 기존에 사용하던 인터셉터 대신 필터를 사용하여 시큐리티에 등록해야 될까요?아니면 시큐리티를 사용하지 않고 그냥 로그인할 때 소셜로그인처럼 AccessToken 과 RefreshToken을 자체적으로 만들어 발급해주는 식으로 구현해도될까요?
-
미해결실전! Querydsl
BooleanExpression 모든 조건이 null 일 때
이 경우 where절이 빠짐에 따라 테이블의 모든 데이터가 나오는 건 이해했습니다. 테이블 데이터가 많을 경우 select를 많이 하느라 장애가 난다까진 알겠는데, 그렇다면 이걸 해결할 수 있는 게 페이징뿐인가요? 어떠한 사정이나 목적 때문에 페이징 적용이 되지 않은 쿼리의 경우, 이걸 방지하기 위한 방법이 있는지 궁금합니다.
-
미해결스프링 시큐리티
SecurityResourceService 에서 JPA proxy 관련 질문이 있습니다!
안녕하세요 강사님! 좋은 퀄리티의 Security 강의 제공해주셔서 감사드립니다.[실전프로젝트 - 인가 프로세스 DB 연동 웹 계층 구현]5) 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (2)수강하면서 생겼던 질문이 있습니다.// val resourcesList = resourcesRepository.findAllResources() val resourcesList = resourcesRepository.findAll()강사님께서 미리 만들어두셨던 findAllResources 메소드를 통한 JPQL로 fetch하지 않고 Spring DataJPA 기본 findAll 메소드로 resources 리스트 가져와서 Role의 roleName을 LinkedHashMap에 넣었습니다.(해당 서비스 클래스의 getResourceList 메소드에는 @Transactional 걸어둔 상태입니다.)그렇게 하니까 다음과 같은 에러가 발생했었습니다.failed to lazily initialize a collection of role: io.beaniejoy.coresecurity.domain.entity.Resources.roleSet, could not initialize proxy - no SessionResources 엔티티에 @ManyToMany로 roleSet에 fetch 모드를 LAZY로 걸어둔 상태여서 저는 lazy한 방식으로 proxy를 통해 role.getRoleName() 할 때 role_resources, role 두 테이블로 조회쿼리 날라가면서 잘 가져올 것이라 생각했었는데요. 왜 proxy를 initialize 하지 못했는지, resources를 findAll할 때 결국 fetch join으로 가져올 수 밖에 없는 것인지 궁금했습니다.(제가 JPA를 잘 알지 못하여 죄송합니다.)
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
비대칭키 jwt 인증 문제
http://localhost:8888/ecommerce/default 에서는 {name: "ecommerce",profiles: ["default"],label: null,version: "f45bf692a6cb54252ea12041f0aa92a71964a5f7",state: null,propertySources: [{name: "file:///C:\\Users\\ydj90\\Downloads\\git/file:C:\Users\ydj90\Downloads\git\ecommerce.yml",source: {token.expiration_time: 864000000,gateway.ip: "172.30.1.33",token.secret: "userToken_token"}}]}http://localhost:8888/user-service/default 에서는{name: "user-service",profiles: ["default"],label: null,version: "f45bf692a6cb54252ea12041f0aa92a71964a5f7",state: null,propertySources: [{name: "file:///C:\\Users\\ydj90\\Downloads\\git/file:C:\Users\ydj90\Downloads\git\user-service.yml",source: {spring.datasource.url: "jdbc:h2:mem:testdb",spring.datasource.driver-class-name: "org.h2.Driver",spring.datasource.generate-unique-name: false,token.expiration_time: 864000000,gateway.ip: "172.30.1.33",order_service.url: "http://ORDER-SERVICE/order-service/%s/orders",spring.datasource.username: "sa",token.secret: "userToken_token"}}]} 이와 같이 token.secret이 같은데 왜 subject가 null값이 되는지 이유를 알 수 가 없습니다. login하고 나온 header값을 가지고 bearer에 넣어 인증하는 방식이 아닙니까?이유를 잘 모르겠습니다. JWT token is not valid이게 왜 뜨는지subject = Jwts.parser().setSigningKey(env.getProperty("token.secret")) .parseClaimsJws(jwt).getBody() .getSubject(); 여기서 왜 null값으로 값을 반환하는지 이해를 할 수가 없습니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컬렉션타입이라는게...정확히 뭔가요?
컬렉션타입이 었었다 라고 하시는데혹시 컬렉션타입이라는게 @Embeded 와 관련되어 Address 이런 클래스를 일컫는말인가요?
-
미해결실전! Querydsl
q class 생성 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Querydsl 사용 시 Q class 생성 이유가 궁금합니다.
-
해결됨실전! Querydsl
Quarydsl 로 no-offset 페이지네이션이 구현가능할까요?
[질문 내용]여기에 질문 내용을 남겨주세요.김영한님 로드맵중 실전로드맵 패키지 듣고있는데,restapi설계중에 무한스크롤을 구현해야하는 시점에강의 내용에 Quarydsl로 페이지네이션 강의가 나와서 여쭤봅니다no-offset 방식으로 페이지네이션이 구현 가능할까요 ? 가능하다면 어떤식으로 구현해야할까요..
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
회원 수정 API만들떄 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]수업중에 수정관련 API는 변경 감지를 통한 변경이라고 설명을 해주셨고 Entity는 getter외 나머지는 잘 쓰지 않는다는 말씀을 해주셨습니다. 수업중에는 setter를 통한 변경을 하였는데 실무에서는 어떤 방식으로 하는지 궁금해서 질문 올립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ItemServiceTest 아이템 수정 테스트코드
@Test public void 아이템_수정() throws Exception { // 아이템을 등록하고 수정하고 조회한대로 되었는지 equal 테스트 // given Item book = new Book(); book.setName("책책"); itemService.saveItem(book); // when Item updateBook = itemService.updateItem(book.getId(), "책1", 1000, 10); Item findOne = itemService.findOne(book.getId()); // then Assertions.assertThat(findOne.getName()).isEqualTo(updateBook.getName()); } 아이템 수정 Test 코드를 작성해보았는데 이렇게 작성하는게 맞을까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
엔티티의 필드가 많을 때 업데이트 방법?
API 개발 기본 - 회원 수정 API해당 강의 시리즈를 들으며 전 강의부터 생겼던 궁금한 사항에 대해 질문을 드립니다. 예제의 경우는 최대한 간단하게 간소화시킨 엔티티를 예시로 들었지만, 필드가 많은 엔티티의 경우에는 어떤 방식으로 업데이트를 하는지 감이 잡히질 않네요. // java @RequestMapping(value = "/v1/edit/{memberId}", method = RequestMethod.PUT) public EditMemberResponse editMemberV1(@PathVariable Long memberId, @RequestBody @Valid EditMemberRequest request) { memberService.update(memberId, request.getName()); ... return new EditMemberResponse(member); }강의 내용 중 위와 같이 업데이트 파라미터에 DTO 필드를 받아 업데이트 하도록 서비스를 작성하셨는데, 단순히 이름만 있는 엔티티 클래스가 아닌 필드가 굉장히 많은 엔티티의 경우에는 어떤식으로 업데이트 처리하는 것이 효율적일지 궁금해서 질문을 드립니다. @Entity public class Temp { @Id @GeneratedValue private Long id; private String field01; private String field02; // ...무수히 많은 필드들 private String field66; private String field67; } 예를들어, 위와 같은 Temp 클래스의 경우를 업데이트 하기 위해 앞서 설명한 방식으로 업데이트 기능을 서비스계층에 구현한다면 아래와 같이 실질적으로 사용이 불가능할정도로 가독성과 생산성이 떨어졌습니다.// java tempService.update( editTempRequest.getField01(), editTempRequest.getField02(), editTempRequest.getField03(), editTempRequest.getField04(), ..., editTempRequest.getField67() ); 아래와 같이 서비스 계층에 EditTempRequest DTO 계층 클래스를 직접 넘기는 방법도 생각을 해보았습니다만, 서비스 계층에서 DTO 클래스를 이용하기 위해 컨트롤러 계층에서 이너 클래스로 선언된 DTO를 별도의 public 클래스로 선언해주어야 되므로 별도의 자바 파일과 패키지를 구성하게 되어 불필요한 복잡도가 증가하는 문제가 발생했습니다. 또한, 단순히 요청, 응답을 위해 데이터를 담는 목적으로 사용되어야 하는 DTO 클래스의 역할과 책임이 확장되는 문제도 생겼습니다.// java import com.wahhahaha.controller.dto.editTempRequest; ... tempService.update( editTempRequest ); 클라이언트 측에서 수정 API를 호출하기 전에 조회 API를 우선 호출하여 각 필드 정보를 가진 상태로 전체 필드를 이용한다면 merge 업데이트로 쉽게 해결이 가능하겠다라는 생각을 해보긴 했지만 merge는 가급적 이용하지 않는 편이 좋다는 전 강의 내용이 있어 혼란스럽네요.
-
미해결실전! Querydsl
querydsl 설정 후 테스트 코드 실행 시 QHello 에러
처음부터 그대로 따라했고 소스코드에서 에러는 안나는데 run하면 java: Attempt to recreate a file for type stury.querydsl.entity.QHello에러가 납니다. 구글링해보면 compileQuerysql 을 실행시켰을때 생성되는 폴더 삭제 후 실행하면 된다고 나와있는데 안되네요..QHello 와 test코드 경로 모두 강사님 경로와 동일합니다. package stury.querydsl.entity;제 소스코드입니다.package stury.querydsl; import com.querydsl.jpa.impl.JPAQueryFactory; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import stury.querydsl.entity.Hello; import stury.querydsl.entity.QHello; import javax.persistence.EntityManager; import static org.assertj.core.api.Assertions.*; @SpringBootTest @Transactional class QuerydslApplicationTests { @Autowired EntityManager em; @Test void contextLoads() { Hello hello = new Hello(); em.persist(hello); JPAQueryFactory query = new JPAQueryFactory(em); QHello qHello = new QHello("h"); Hello result = query .selectFrom(qHello) .fetchOne(); assertThat(result).isEqualTo(hello); assertThat(result.getId()).isEqualTo(hello.getId()); } }
-
미해결실전! Querydsl
OrderSpecifier에 관한 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링 데이터의 sort를 할때 OrderSpecifier가 있다고 설명해주셨는데 복잡해졌을 때에는 파라미터를 받아서 직접 처리하라고 하신 설명부분에서 정확히 이해를 못했는데 orderby를 사용하라는 뜻인가요?? 아니면 페이징한 데이터를 정렬하는 방법은 어떻게 해야 하는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
tipp) css 적용 안되시는분들
boot strap 사이트에서 css js 폴더 복붙했는데 안되시면 (버젼 문제일수 있다고 해요) 해결 방법은 다음과 같습니다. 방법:강의 자료에서 코드 다운 받고 아래 폴더에서css jss 폴더 찾으신다음 그대로 static 에 복붙하고reload disk 한번 해주시면 될거에요 ex)jpashop-v20210728\src\main\resources\static
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티나 임베디드 타입 개발
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 자료에 JPA 스펙상 엔티티나 임베디드타입은 자바 기본 생성자를 public 또는 protected로 설정해야 한다고 나와있습니다. 그리고 protected로 설정하는 것을 추천해주셨는데요. 쉽게 말해서 모든 엔티티나 임베디드타입을 개발할때 @NoArgumentConstructor를 넣어주면 괜찮을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
memberRepository과 itemRepository의 차이
관련질문을 봐도 이해가 안가 질문드립니다.itemRepository.getid를 하는데 어떻게 null값이 들어있을 수 있는지 궁금합니다.