묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
fetch join 에 대해서 질문드립니다.
엔티티 A, B, C 가 있습니다.A 와 B 일대다 관계, B 와 C 일대다 관계를 가지고 있습니다.fetch join 은 XtoOne 관계에서는 얼마든지 해도 괜찮고 컬렉션과의 fetch join 은 1개만 해야한다고 들었습니다.만약 B 를 기준으로 본다면 A 와 XtoOne 관계이고, C 와 XtoMany 관계이니 A, C 모두 fetch join 으로 묶어와도 괜찮나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
인텔리제이에서 메이븐 사용 방법
메이븐 명령어로 프로젝트 실행시 인식을 못하는데..메이븐 버전도 나오지 않구요인텔리제이 버튼실행말고.. 명령어로 실행할때.. 인텔리제이에 내장된것으로 사용방법없나요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
특정 칼럼에 대한 조회시 TypedQuery 사용에 대하여
안녕하세요, 예전에 수업들은 이후 한창 현업 중에 잘못 사용한 Case 이지만, 왜 그럴까 디버깅도 좀 해보고 생각을 많이 해보다가 해결을 못하고 질문을 남기게 되었습니다. 그나마 관련이 있는 부분을 찾아서 남기게 되었습니다. 앱에는 Foo 라는 엔티티가 있고, 우선 다음과 같은 JPQL 쿼리를 발생시켰습니다. String jpql = "SELECT f.id FROM Foo f " + "WHERE f.name = :name " + "ORDER BY f.createdAt DESC" // id 라는 특정 칼럼 조회이므로 Type 을 명시하지 않고 Query 를 써야 하는게 맞지만, 잘못 사용해서 TypedQuery 를 사용함 List<Foo> fooList = em.createQuery(jpql, Foo.class).setParameter("name", name).getResultList(); 일단 예외가 나지 않고 fooList 라는 List 가 반환된다는 것도 신기했습니다. 정확한 이해를 하지는 못했지만 디버깅 해본 결과, CgLibAopProxy 클래스들을 타는걸보면, Lazy 로딩과 유사하게 CustomFoo extends Foo 와 같은 상속객체를 만들어서, id 만 채워준 후 List 에 넣어서 반환해주기 때문에 문법적으로 fooList 를 만들 때 오류가 발생하는게 아니구나 판단했습니다. (아닐 수도 있습니다.. 제 생각) 이후 fooList.get(index) 를 시도하면서 바로 Casting 예외가 발생하였습니다. (Long 객체를 Foo 객체로 Casting 할 수 없다) 신기해서 IntelliJ 에서 디버깅 하면서 확인했을 때, fooList 라는 List 안에 Foo 객체들이 들어 있지 않고, Long 객체들이 들어 있는 모습을 확인했습니다. 이거는 좀 매우 이상한게, 어쨌든 Foo 라는 Type 이 들어가게끔 선언된 List 에 어떻게 Long 객체들만 들어가 있을 수 있는지가 이해가 되지 않았습니다. createQuery() 함수와 getResultList() 함수간 복잡한 제네릭 관계들을 이해하기가 어려워서 이 부분을 이해하지 못한 것 같기도 합니다. 물론 TypedQuery 를 사용하지 않고 Query 를 사용하거나 DTO 를 통해 매핑해주는 것이 맞지만, 지금 상황 기준으로 어떠한 이유로 List 형성 중 에러가 나지 않은 것인지 또 어떻게 List<Foo> 안에 인텔리제이 디버깅 기준으로 Long 객체들이 들어가 있을 수 있는 것인지 궁금합니다_-----------------------------추가로 나중에 subQuery 안에서도 동일하게 사용이 되었는데, 이런 경우는 쿼리 결과를 반환해주지 않고 그냥 쿼리문을 만들 때만 사용되어서 그런지 아무 에러가 발생하지 않았습니다. SELECT SUM(~~.~~) from Bar bar WHERE bar.foo.id in ( SELECT f.id FROM Foo f ~~ )
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
스프링부트에서 yml로 JPA 설정
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]스프링 부트를 사용한다면 yml로 환경설정하길 추천한다고 하셨는데요.yml에서 persistence unit name을 설정하려면 매우 복잡하기 때문에 스프링부트 도움 없이 em을 띄우려면 xml 파일을 쓰는 편이 좋다고 답변하신 걸 봤는데요. 그렇다면 yml로 설정 시 테스트 환경에서는 em을 어떻게 실행할 수 있나요?repository에서 정의한 api를 테스트 파일에서 사용하는 거라서 테스트 환경에서 em을 사용할 일이 없나? 싶다가도 그러면 em.flush() 이런 기능을 테스트 환경에서 쓸 수 없게 되잖아요? 애초에 테스트 환경에서 flush, clear는 쓰는 게 아닌건가요?
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
강사님 Swagger에 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. springfox 버전의 스웨거는 2020년 이후로 업데이트가 종료된 후로 springdoc의 스웨거를 사용하는데 (업데이트 지속) 어떤걸 의존성 추가해야하는게 맞는것일지 고민이 됩니다.
-
미해결[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기
Next Lv 강의에 대해서 계획중이신게 있을까요?
LDAP나 OAuth2는 다른거하고 연동하는거니까 패스하고.. Method Security(PreAuthorize, PostFilter, etc...)Role HierarchyLow Level Security(privileges) - Read, Write, Update, Delete등등 이런 고급 시큐리티쪽이요!
-
미해결Practical Testing: 실용적인 테스트 가이드
사용되는 아키텍처에 대해
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 선생님 강의 잘보고 있습니다. 질문드리고 싶은 부분은 강의에서 사용되는 아키텍처에 대한 것입니다. 레이어드 아키텍처라는것은 이해했지만, 패키지 구조가 생소해서 어떻게 구성되는지는 이해하기 어려운것 같습니다. 제가 아는 방식은 컨트롤러, 서비스, 리파짓토리, 도메인 패키지로 단순하게 작성하는 방법인데, 여기서 사용된 패키지 구성방식과 관련된 키워드나 레퍼런스를 얻을 수 있을가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@ManyToOne 매핑 질문입니다.
게시글과 댓글을 매핑 하려고 하는데 게시글에 어떤 댓글이 달렸는지 조회 하기 위해 게시글 -> 댓글 OneToMany 단방향 매핑을 하려고 했더니, @OneToMany는 지양하라고 해서 댓글에 @ManyToOne 매핑을 하려고 했는데요. 이러면 댓글->게시글 단방향이 되는 것 아닌가요? 게시글에 어떤 댓글이 있는지 확인을 하고 싶을 뿐인데 ManyToOne을 지양하는 이럴 땐 어떻게 해야하는지 궁금합니다 .. 매핑이 아니라 차라리 int communitySeq 를 멤버 변수로 갖도록 하고 jpql에서 join문을 통해 데이터를 가져오는 것이 맞을까요??
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
1대 다 fetch join 에 대해서 질문이 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]요새 너무 질문을 많이 하는 것 같네욤 ㅠㅠ1대다 fetch join 에서 @OneToMany 밑에다가 @BatchSize를 설정해서 성능을 최적화하는 강의 를 이해했습니다. 그런데 궁금한게 생겼습니다. 예를 들어 A, B , C 가 1대 다 , 다대 1 이라고 치면 (C는 중간 테이블 ) A에서 C의 데이터를 가지고 오는데 이 경우에는 @BatchSize를 이용해서 성능을 최적화하는게 좋은 방식인가요?예를 들면 A 에서 A.getBList().getC.Name() 이렇게 할 때 A에서 B에 대한 쿼리는 Batch Size 를 통해서 줄일 수 있어도 getC 를 통해서 또 쿼리가 나가는데 ....어떻게 보면 걍 B 의 리포지토리에서 @Query("select b from B join fetch C where b.a,id=:id) 이런 식으로 하는게 더 나아보이기도 하고요.. 어떤 식으로 하는 것이 더 효율적이라고 생각하시는게 궁금합니다!!!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OpenJDK 64-bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended경고가 뜹니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)A. 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)A. 아니요3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)A. 네[질문 내용]테스트 코드 실행을 하면OpenJDK 64-bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended이 경고가 계속 뜹니다.https://www.inflearn.com/questions/917150/openjdk-64-bit-server-vm-warning찾아보면서 이 답변을 따라해도 로그가 뜨지 않고 경고가 뜨는데 어떻게 해야하나요?
-
해결됨실전! 스프링 데이터 JPA
페치조인과 new 프로젝션
Member Entity@Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor @ToString(of = {"id", "username", "age"}) @NamedQuery( name = "Member.findByAgeGreaterThanAndUsername", query = "select m from Member m where m.age > :age and m.username = :username" ) public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "member_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") private Team team; private String username; private int age; /** * 연관관계 편의 메서드 */ public void changeTeam(Team team) { this.team = team; team.getMembers().add(this); } } Team Entity@Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor @ToString(of = {"id", "name"}) public class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "team_id") private Long id; @OneToMany(mappedBy = "team", fetch = FetchType.LAZY) @Builder.Default private List<Member> members = new ArrayList<>(); private String name; } MemberRepositorypublic interface MemberSpringJpaRepository extends JpaRepository<Member, Long> { List<Member> findByUsernameAndAgeGreaterThan(String username, int age); @Query(name = "Member.findByAgeGreaterThanAndUsername") List<Member> findByAgeGreaterThanAndUsername(@Param("age") int age, @Param("username") String username); @Query(value = "select m from Member m") List<Member> findUsers(); @Query(value = "select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) from Member m join m.team t") List<MemberDto> findMemberDtoWithJoin(); /** * fetch join -> new 프로젝션 예외 터짐 */ // @Query(value = "select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) from Member m join fetch m.team t") // List<MemberDto> findMemberDtoWithFetchJoin(); @Query(value = "select m from Member m join m.team t") List<Member> findMemberJoinWithTeam(); } 질문 /** * join -> new 프로젝션 정상 수행 */ @Query(value = "select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) from Member m join m.team t") List<MemberDto> findMemberDtoWithJoin(); /** * fetch join -> new 프로젝션 예외 터짐 */ // @Query(value = "select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) from Member m join fetch m.team t") // List<MemberDto> findMemberDtoWithFetchJoin();@Query 애너테이션에서 쿼리문을 작성할 때, new 연산자를 사용하여 dto로 변환하여 반환하려고 합니다. Member-Team을 join 후 new 연산자를 사용하여 dto는 정상적으로 반환이 됩니다. 근데 페치조인을 사용 후 new 연산자를 사용하면 아래 예외가 터집니다.fetch join으로는 new 연산자 사용이 안 되는 이유를 알고싶습니다. 발생하는 예외java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3d1b6816 testClass = study.datajpa.repository.springjpa.MemberSpringJpaRepositoryTest, locations = [], classes = [study.datajpa.DataJpaApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@1255b1d1, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@47da3952, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@28a0fd6c, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5fb97279, org.springframework.boot.test.context.SpringBootTestAnnotation@3f26d230], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
localhost로 접속 확인했는데도 쿼리가 안나갑니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.persistence.xml 도 jpashop 으로 수정했는데도 메인이 안돌아갑니다.
-
미해결
JPA에 준영속 상태인 엔티티를 매핑해서 저장해도 잘 작동하는 이유
안녕하세요. JPA를 사용하다 질문이 생겼습니다.다음과 같은 예시를 들어보겠습니다. @Entity @Setter @Getter public class A { @Id @GeneratedValue private Long id; @OnetoOne @JoinColumn(생략) private B b; } @Entity @Setter @Getter public class B { @Id @GeneratedValue private Long id; }위와 같이 엔티티가 존재한다고 해보겠습니다.새로 DB에 A 객체를 저장하고자 합니다.이 때, A a = new A(); 와 a.setB(b); 를 통해 b 객체를 매핑했다고 가정하겠습니다.그런데, 이 때 매핑한 b 객체가 준영속 상태더라도 매핑이 잘 되어서 a객체가 db에 저장되는것을 확인했습니다 (b 객체는 이미 DB에 존재합니다. )이게 원래 잘 되는게 맞는지 조금 헷갈리는데, 준영속 상태더라도 b의 PK를 가져오는 것이기 때문에 문제가 없는것일까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
2024 최신버전으로 프로젝트 설정하기 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의자의 로드맵대로 따라 강의를 순차적으로 진행하고있습니다. 로드맵에서 추천해주신대로 실전!스프링 부트와 JPA 활용1 을 선 수강하고 이번 기본편을 수강하려고 하는데 이전 강의인 활용1편에서 H2 DB와 intellij를 최신버전으로 설치해두어 그대로 사용하려고 하는데 오류가 발생해서 문의 드립니다.프로젝트의 내용은 학습자료인 2024 최신버전으로 프로젝트 생성하기의 소스코드를 open project 하여 진행하였으며 h2 데이터베이스의 설정도 프로젝트 생성 설명에 나와있는대로 진행하였습니다. 2월 05, 2024 6:14:22 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [name: hello]2월 05, 2024 6:14:22 오후 org.hibernate.Version logVersionINFO: HHH000412: Hibernate ORM core version 6.4.2.Final2월 05, 2024 6:14:22 오후 org.hibernate.cache.internal.RegionFactoryInitiator initiateServiceINFO: HHH000026: Second-level cache disabled2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configureWARN: HHH10001002: Using built-in connection pool (not intended for production use)2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001005: Loaded JDBC driver class: org.h2.Driver2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001012: Connecting with JDBC URL [jdbc:h2:tcp://localhost/~/test]2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001001: Connection properties: {password=****, user=sa}2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001003: Autocommit mode: false2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>INFO: HHH10001115: Connection pool size: 20 (min=1)2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl constructDialectWARN: HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)2월 05, 2024 6:14:23 오후 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateServiceINFO: HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stopINFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test]오류 메세지입니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO내에 정적 팩토리 메서드를 생성해도 되는걸까요?
말그대로 컨트롤러 층에서 인스턴스 생성 코드를 작성하는 게 아니라Member 인스턴스 생성 메서드를 DTO내부에 만들어서 반환해도 될까요?
-
미해결1시간만에 끝내는 spring boot rest api 서비스 개발
mybatis의 hashmap 데이터 호출시 대문자로 불러와야 되나요?
강의 내용에 대해 질문해 주세요에러가 날 경우 본인 코드가 있는 git 주소를 알려주거나 최대한 상세히 적어주세요 소문자로하면 null로만 나옵니다...
-
미해결실전! Querydsl
테이블이 자동 삭제됩니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.현재 테스트 코드를 실행하면 실행은 정상적으로 작동되는데 항상 drop sequence ~~가 뜨면서 테이블에 있는 값들이 전부 삭제되는데 왜그런걸까요? ddl-auto: create상태고 @Commit에노테이션은 붙여놓은 상태입니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
Override Methods가 존재하지 않는다고 뜨는데...
저번에 한번 질문을 드렸을 때, 해주신 답 덕분에 인텔리제이는 유료(정확힌 학생 버전으로)로 바꾸어서 해결했었는데...이번에는 여기서 안되는데... 이유가 뭘까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
DTO 관련 질문있습니다.
안녕하세요 ~자바 개발자 경력자인데요.먼저 그냥 코딩을 이때까지 해왔지만 이렇게 기초부터 차근차근 비유해주시면서 설명해주시니 다시 개념확립이 되는것같아 감사드립니다.일단 제가 궁금한점이 SI 이나 이떄까지 회사 프로젝트를 다녀본결과 .. 예를들어 쿼리결과를 저장하고 , API 사용시 (요청 /결과)모두 이때까지 VO 라는 클래스를 만들어 사용하고 보았는데요.이전부터 DTO , VO 두개의 차이점의 개념은 알고 공부하고 알고는 있었느나 , 항상 이때까지 모든 프로젝트에서는 모든 클래스를 뒤에 UserVO , DetailVO ... 이렇게 사용하곤했는데요.아직까지도 아직경험을 못해서그런지 VO vs DTO 개념이 확립이안되네요;앞으로 프로젝트참여시 VO 를 DTO 라고 명칭만 바꿔서 사용하면될까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
gateway 예외처리
안녕하세요!강사님 강의를 듣고 msa 적용하는 프로젝트를 진행중인데, 프로젝트 controller단 전역에서 발생하는 예외를 처리하고 싶어 @@RestControllerAdvice를 활용하려고 생각중입니다.msa에서 예외를 전역으로 처리하려면 gateway에서 @RestControllerAdvice를 활용해야 될까요? 아니면 각각의 마이크로서비스마다 @RestControllerAdvice를 활용해야 될까요?둘중 어떤 설계가 더 효율적일지 답변주시면 감사하겠습니다🙏🙏