묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 질문있습니다~~!
안녕하세요 강사님. 테스트를 따라하다가 궁금한게 생겨서 질문드립니다! 저는 JUnit5를 통해서 테스트를 작성했고. 우선 코드를 첨부하겠습니다! package jpa.boot.jpaboot.service;import jpa.boot.jpaboot.domain.Member;import jpa.boot.jpaboot.repository.MemberRepository;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.DisplayName;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 static org.assertj.core.api.Assertions.*;@SpringBootTest@Transactionalclass MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test void 회원가입() { // given Member member = new Member(); member.setName("Kim"); // when Long saveId = memberService.join(member); // then assertThat(memberRepository.findOne(saveId)).isEqualTo(member); }} 여기서 테스트는 정상적으로 통과되는데, 클래스 레벨에 @Transactional을 지우니까 테스트가 실패했습니다. 실패 메세지는 다음과 같습니다 Expecting: <jpa.boot.jpaboot.domain.Member@9bf63d2> to be equal to: <jpa.boot.jpaboot.domain.Member@22ff1372> but was not. isSameAs로 실행해도 마찬가지더라고요. 1차 캐시에서 가져와서 비교하기 때문에 테스트가 통과한다는 건 알겠지만, Transactional을 지우면 어떤 원리로 테스트가 실패하는지 모르겠습니다.
-
해결됨더 자바, 코드를 조작하는 다양한 방법
안녕하세요 바이트버디 관련해서 질문드립니다.
안녕하세요 바이트버디 관련해서 질문드립니다. 바이트버디 코드와 System.out.println(new Moja().pullOut()); 이 코드를 동시에 쓸 수 없다는게,, Masulsa를 실행하면 Masulsa.class, Moja.class로 컴파일되고 그 클래스 파일들이 로딩되고 실행되기 때문에, 그 이후에 바이트버디를 통해서 class 파일을 조작해도 이미 로딩된 클래스 정보 (메소드 영역에 있는) 를 보고 있기 때문에 적용이 안된다는 의미인거죠? 강의는 이전에 다 봤는데,, 혼자 좀 복습하다가 갑자기 좀 혼동이 되서 질문드립니다 ㅎㅎ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderService테스트 질문
안녕하세요 OrderService 테스트 시 회원을 createMember()직접 만들어서 사용했는데 회원가입 기능인 join을 사용하게 되면 해당 테스트에 필요없는 join 기능이 들어가게 되므로 createMember()처럼 하는게 좋은 것 같은데 맞을까요? 즉, 의미없는 의존은 하지 않는게 좋은 테스트 같거든요. 통합테스트 보다 단위테스트가 중요하다고 하신 것도 필요없는 의존성을 제외하기 위함도 있는 것 같구요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@Transactional
@Transactional은 기본편에서 나오는 엔티티 매니저의 tx.begin() -> tx.commit의 역할과 같은 건가요?즉, 필수로 @Transactional이 있어야만 하나요? 없어도 되는걸로 알고 있어서요
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
ID가 없는 엔티티 만들 수 있나요?
JPA에서는 기본키를 무조건 가져야 한다는 전제 조건이 달려있더라고요. 스택 오버 플로에서도https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#No_Primary_Key이곳을 참조하라고 알려줍니다. 만약 로그를 쌓는 테이블이 밑의 형식이라면 스프링에서는 어떻게 구현해야 할까요?String Engine;int Tempeture;Date checkTime; 디비쪽 컬럼을 추가 할 수 없다면 어떻게 모델을 설계하면 될지 잘 모르겠습니다.마지막으로 이런 고민(디비 중심적 모델 설계?)을 현업에서도 많이 하시나요? 너무 부질 없는 고집 부리는거 아닌가 하는 생각이 많이 듭니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
SpringCofing 클래스 질문이요!
자바코드로 빈을 등록할 때 SpringConfig 클래스에 작성을 하는거면 SpringConfig 파일이 스프링 컨테이너의 역할을 하는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Order와 OrderItem의 관계
Order와 OrderItem의 연관관계 메서드를 Many인 OrderItem에 해야 하는거 아닌가요? 이유가 따로 있을까요? 이렇게 하는걸 추천하셨는데 궁금합니다!!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
트랜잭션 조회전용 코드 질문
안녕하세요~ 궁금해서 질문드립니다. 만약에 em.find(xxx.class, id) 또는 em.createQuery("select ...") 와 같이 조회 전용으로만 사용할 꺼라도 트랜잭션(tx.begin ~ tx.commit)안 에서만 해당 코드를 사용해야 하나요? (트랜잭션 코드 없이 그냥 조회해도 데이터는 조회가 되긴하던데...) 왠지 모든 JPA관련 코드는 트랜잭션안에서 실행을 해야 할꺼 같은 생각이 들어서 질문드립니다. 감사합니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
하이버네이트 프록시 참조 가능
https://www.inflearn.com/questions/53733 우선 위의 글을 읽고 왔습니다. 트랜잭션을 종료하지 않은 상태에서 em을 닫았기 때문에 아직 트랜잭션이 살아있어서 값이 잘 불러와진다고 하셨습니다. 제 build.gradle의 하이버네이트 버전은 다음과 같이 설정되어있습니다. 그리고 제가 다음과 같이 코드를 작성했습니다. 그런데도 여전히 값이 잘 불러와집니다. 이 부분은 어떻게 이해해야 하나요?(하이버네이트 버전을 5.4.0으로 해도 값이 잘 참조가 되더라구요.)
-
미해결실전! Querydsl
db에 날리는 쿼리는 최대한 간단하게 하라는 의미
안녕하세요, 영한님. 저는 jpa기초부터 지금까지 쭉 잘 듣고있는 수강생입니다. 지금 이 강의는 아니고, 이전? 강의에서 흘러가는 말로, 보통 query로 데이터를 갖고 올 때는, 가능한 한, 단순한 쿼리로 raw 데이터 위주로 갖고오고, 비즈니스로직은 애플리케이션 단에서 코드로 처리한다고 하셨는데,(설령 avg, sum 등 db 에서 연산 가능한 부분이더라도요..) 혹시 그렇게 했을 때 이점이 어떤게 있어서 그런건가요? 예전에, raw data만 sql로 갖고와서, sum, avg 를 컨트롤러 단에서 구현한 적이 있었는데, 당시 사수는 db 에서 가능한 한 연산을 많이 해서 갖고오라고 말씀해주셨는데, 견해가 또 다르신거같아서 여쭤봅니다. 당시에는 유저별 랭킹 시스템을 합산하기 위한 개발이었습니다.(24시간 배치로 돌아가는 프로그램이었죠.)
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
Jpql질문
Jpql, querydsl 을 사용하면 좋다고 하셨는데 운영시에나 개발시에나 모든 상황에 결국 데이터가 안맞는 것은 대부분이 쿼리가 잘못돼서 그렇더라구요 이때 마이바티스 같이 네이티브 쿼리로 작성된 쿼리를 보고 뭐가 문제인지 판단해야 하는데 오히려 네이티브 쿼리 보는게 jpql, querydsl 보는 것 보다 쉽지 않나요? ----- 조금이라도 복잡한 쿼리라면 결국 네이티브 sql을 직접 작성하면서 데이터를 맞춰가면서개발하게 되는데 jpa를 사용하면 네이티브 쿼리로 테스트 하면서 작성된 쿼리를 다시 jpql이나 querydsl로 바꾸는 과정이 필요할 것 같아서 불편해 보이는데 어떤가요? --- 즉 jpa보다 마니바티스가 좋다고 생각되는 부분은 1.마이바티스를 사용하면 쿼리를 보자마 판단하기 쉽다. 쿼리를 돌려보려면 결국 애플이케이션을 실행해야 jpql이나 querydsl의 쿼리결과를 볼 수가 있다는거죠 2. 테스트하며 쿼리 작성 후 jpql 맟 querydsl로 변환이 필요없고 바로 파라미터 문법만 바꿔서 복붙하면 된다 Jpa가 객체지향을 위한 건 알지만 실무에서 저런 단점들이 유지보수에 엄청 안좋을 것 같은데 어떻게 생각하시는지 궁금합니다 Jpql을 보니 문득 의문이 들었어요 감사합니다!
-
미해결정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)
안녕하세요. 코테 준비 관련 문의드립니다.
강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요.• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요.• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다. - 그리디 알고리즘 (50문제)- 탐색 알고리즘 (완전탐색 / BFS /DFS) ===> 50문제- 기본 동적 프로그래밍(50문제) 안녕하세요. 코테 문의드립니다. 유투브에서 나동빈님 영상 중 가장 조회수가 많은 영상 중에 하나에서 그리디, 탐색, 기본동적프로그래밍만 잘해도 코테 통과한다고 하던데 지금 강의 문제들의 분류는 어떻게 되는 건가요? 이거 들으면서 복습하고, 그리디알고리즘을 백준에서 따로 또 푸는 게 좋을까요? 아니면 일단 이 강의 다 연습하고, 복습하고나서 그리디 알고리즘을 따로 푸는 게 좋을까요? 시간이 많지 않은 상황이라서 고견 여쭤봅니다...!!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 ! Fetch = LAZY 에 관해서 질문남깁니다.
안녕하세요~ LAZY 관련 질문이 있어서 글을 남깁니다! LAZY 로드를 디폴트로 설정하기 위해서 propertis or yml 파일에 "spring.datasource.jpa.hibernate.enable_lazy_load_no_trans"=true 구문을 추가 하였습니다. 적용한 자바 config 파일 입니다. properties.setProperty("hibernate.enable_lazy_load_no_trans", env.getProperty("spring.datasource.jpa.hibernate.enable_lazy_load_no_trans")); 혹시 해당 프로펄티즈 구문으로 Lazy를 디폴트로 설정해본 적이 있으신가요? 매우 간편 해보여서 프로젝트에 적용해서 쓰고 있는데 안티 패턴이여서 쓰지 말라는 글도 있더라구요. 해당 설정에 대해서 김영한 개발자님의 의견이 궁금합니다! https://vladmihalcea.com/the-hibernate-enable_lazy_load_no_trans-anti-pattern/
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
질문있습니다.
안녕하세요. 기본적인 내용이라 질문 드리긴 부끄럽지만 헷갈리는 부분이 있어서 질문드립니다.. em.find(Member.class, member.getId()) 를 할 때입니다. Identity 전략을 사용하면, member.setUsername(" ")만 해주고 em.persist(member)를 하게 되면, DB로 쿼리가 날라가서 id를 얻어온 후 1차 캐시에 member를 구분할 식별자인 id와 member 정보들이 저장되어 있는 것을 이해했습니다. 그러면 persist를 하면서 1차 캐시에 id와 member가 저장이 된 상태일 텐데, 영속 컨텍스트를 초기화하는 작업 후에 프록시 객체를 불러오는 작업을 합니다. 이 때 member의 id를 알려면 DB로 find 쿼리가 날아가야 하지 않나요? 제가 아리송했던 부분은 10분 40초쯤에, flush로 인해 쓰기지연 저장소에 담겨있던 insert 쿼리가 날아가고, em.clear로 1차캐시를 비워준 상태입니다. 이 상황에서 1차 캐시가 비어있는데 어떻게 find query 없이 database를 타지않고 Id를 바로 받을 수 있는 것인지 의문이 생겼습니다. 레퍼런스를 찾을 때는 이미 id값을 파라미터로 넣어서, 값이 있기 때문에 터치를 안하고 DB쿼리가 필요 없다고 하셨는데 현재 Identity 전략이기에 DB를 거쳐야 ID를 알 수 있는 것이 아닌가요..? 어떻게 바로 member.getId()를 알 수 있는 것인지 궁금합니다.
-
해결됨실전! Querydsl
EntityManager 관련 질문
안녕하세요 강사님~ 강의 재미있게 보고있습니다. 강의 마지막쯤 스프링에서 주입해주는 엔티티매니저는 동시성문제 없이 동작한다고 설명 해주셨는데 JPAQueryFactory를 Bean으로 등록하거나 상위 클래스 생성자에서 미리 할당하고 사용해도 문제가 없는지 궁금합니다. 또 현업에서도 예제처럼 querydsl을 사용 할 때마다 JPAQueryFactory를 할당해서 사용 하시는지도 궁금합니다.
-
해결됨실전! Querydsl
MappedBy 와 @Setter 관련 질문
안녕하세요! 강사님 강의를 듣다 궁금한게 있어서 질문 남깁니다. 1. 강의 초반 @Setter는 현업에서 가급적 사용하지 않는다고 하셨는데 그 이유에 대해서 좀 더 자세히 알 수 있을까요? 2. mappedBy = "team" 이렇게 설정 해주셨는데 연관관계 주인의 클래스명을 소문자로 적어주면 되는건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
안녕하세요 강사님이 템플릿 엔진에 대해서 질문이 있습니다.
성능 문제로 템플릿 엔진보다는 웹 프레임워크 vue.js react.js angular.js를 쓴다고 들었습니다. 여기 강의에서 thymeleaf 템플릿 엔진을 사용했는데, spring에서 템플릿 엔진을 꼭 써야하는지 아니면 간단하게 예제로써만 사용하고 나중에는 react.js vue.js angular.js같은 웹 프레임워크를 사용하는 지 궁금합니다.
-
미해결예제로 배우는 스프링 입문 (개정판)
sh터미널 ./mvnw package 에러발생..도와주세요...
[INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 15:20 min [INFO] Finished at: 2020-10-03T22:38:25+09:00 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project spring-petclinic: There are test failures. [ERROR] [ERROR] Please refer to C:\Users\ESE\IdeaProjects\spring-petclinic\target\surefire-reports for the individual test results. [ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream. [ERROR] The forked VM terminated without properly saying goodbye. VM crash or System.exit called? [ERROR] Command was cmd.exe /X /C ""C:\Program Files\Java\jdk-15\bin\java" -javaagent:C:\\Users\\ESE\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\\0.8.5\\org.jacoco.agent-0.8.5-runt ime.jar=destfile=C:\\Users\\ESE\\IdeaProjects\\spring-petclinic\\target\\jacoco.exec -jar C:\Users\ESE\AppData\Local\Temp\surefire8945284040995119689\surefirebooter10487122512194559164 .jar C:\Users\ESE\AppData\Local\Temp\surefire8945284040995119689 2020-10-03T22-38-15_705-jvmRun1 surefire8445944312646886691tmp surefire_01288502121873472979tmp" [ERROR] Error occurred in starting fork, check output in log [ERROR] Process Exit Code: 1 [ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye. VM crash or System.exit called? [ERROR] Command was cmd.exe /X /C ""C:\Program Files\Java\jdk-15\bin\java" -javaagent:C:\\Users\\ESE\\.m2\\repository\\org\\jacoco\\org.jacoco.agent\\0.8.5\\org.jacoco.agent-0.8.5-runt ime.jar=destfile=C:\\Users\\ESE\\IdeaProjects\\spring-petclinic\\target\\jacoco.exec -jar C:\Users\ESE\AppData\Local\Temp\surefire8945284040995119689\surefirebooter10487122512194559164 .jar C:\Users\ESE\AppData\Local\Temp\surefire8945284040995119689 2020-10-03T22-38-15_705-jvmRun1 surefire8445944312646886691tmp surefire_01288502121873472979tmp" [ERROR] Error occurred in starting fork, check output in log [ERROR] Process Exit Code: 1 [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:669) [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:282) [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245) [ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1183) [ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1011) [ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:857) [ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81) [ERROR] at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) [ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305) [ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192) [ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105) [ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:957) [ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:289) [ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:193) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) [ERROR] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:564) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [ERROR] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) [ERROR] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:564) [ERROR] at org.apache.maven.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:39) [ERROR] at org.apache.maven.wrapper.WrapperExecutor.execute(WrapperExecutor.java:122) [ERROR] at org.apache.maven.wrapper.MavenWrapperMain.main(MavenWrapperMain.java:61) [ERROR] [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 상기 에러 발생하는데 구글링을 해봐도 번역을해봐도 스텍오버플로우 글을 뒤져봐도 도저히 해결할수가없습니다 도와주세요 ... 답보다 해결방법을 알고싶습니다 도와주세요 고수님들 윈도우 사용자입니다....
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티매니저팩토리 cloase 질문
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");EntityManager em = emf.createEntityManager();EntityTransaction tm = em.getTransaction();tm.begin();try { Member findMember = em.find(Member.class, 1L); findMember.setName("HelloJPA"); tm.commit();} catch (Exception e) { tm.rollback();} finally { em.close();}emf.close(); 여기서 emf도 finally에 들어가도 되는거 아닌가요? 꼭 밖에 선언한 이유가 있을까요?
-
해결됨실전! Querydsl
dto
활용편에서 dto로 리턴해야 하는 중요성을 배웠었는데요. dto클래스를 꼭 요청에 필요한 필드로만 구성해야 하나요? 어떤곳은 username만, 어떤곳은 age 또는 2개다 이렇게 하나의 엔티티에서 여러개의 dto를 만들면 이름짓기도 애매할텐데 엔티티랑 똑같이 dto를 만들고 필요한것만 생성자나 set하고 나머지는 null로 응답하면 문제가 있을까요?