묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
스프링부트 부분은 리뉴얼되진 않은건가요?
안녕하세요. 강의가 리뉴얼 되었다고 해서 다시 보고있습니다. 리뉴얼 해주셔서 감사합니다. 혹시 리액트 부분만 리뉴얼 되고 스프링부트 부분은 리뉴얼 된 부분이 없는건가요? 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderServiceTest에서 assertTrhwos 질문이 있습니다~
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요.Junit5로 assertThrows테스트를 하고 있습니다.원래는 다른 분들처럼 assertThrows만 작성했습니다. (리턴 없는 형태)테스트는 성공하는데 에러 로그가 전~혀 하나도 뜨지 않습니다.고민하다가 에러 내용을 받아서 soutv로 뿌려줘서 확인했습니다. assertEquals로 비교하는게 맞나요?아니면 제가 모르는 Junit5 사용법이 따로 있는건지요?gpt, 구글 등등 다 검색해봐도 답을 알 수 없어서 고민하다가 질문 올립니다.조언 부탁드립니다 감사합니다~
-
미해결실전! 스프링 데이터 JPA
RESTful 강의는 안하시는 건지 궁금합니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]안녕하세요 강사님.혹시 RESTful 내용에 대해서는 강의를 안하시는지 궁금합니다.제가 지식이 정말 얕고 좁지만 대학 프로젝트를 스프링부트로 진행하다 보면, 정말 어렵고 헷갈리고 갈팡질팡하게 되는 것이 RESTful 내용인 것 같습니다. 방금도 ResponseDTO를 어떻게 설정해야 할지 정답이 없으니 더 머리 아프고 어떻게 하는 것이 좋을까 고민하다가 금방 지쳐버리고 오는 길입니다.강사님이 RESTful에 대해 강의해주신다면 좋을 것 같아 질문글 남깁니다.메뉴얼은 안읽어봤습니다 죄송합니다.감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@ManyToMany는 조인 테이블에 다른 데이터를 추가 관련
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@ManyToMany는 조인 테이블에 단순히 연결 정보 외 다른 데이터를 추가하기 어렵다고 하셨는데 왜 어려운지... 궁금합니다.
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
강의 듣다가 도커 이미지 생성시 각각도 가능하나 그렇게 사용하는데가 많은지 모르겠다라는 말을 듣고 남김니다
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.현업에서 도커를 사용해 개발해오지는 않았어서 강의를 듣다가 의문이 들어서 문의 남김니다다른 강의를 봤을때는 nginx, db, jar를 각각 만들어서 이미지들을 각각 격리하여 사용하고 상황에 따라 추가 생성하여 사용한다고 본거 같은데요 그렇게 사용하는데는 각각의 영역을 독립적으로 관리하기 위해서 한다고 봤구요하나의 서버에서 직접 nginx+mysql+jar 설정등을 직접 하다가 도커 설정을 따로 이미지 만들어서 작업한다고 봤을때는 생소하기도 했습니다근런데 강사님은 한꺼번에 한다고 말씀하시니 좀 헷갈리긴 하네요 현업에서는 주로 어떻게 쓰는건가요 ?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대일: 대상 테이블에 외래키 단방향
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이 경우 Locker를 주테이블로 삶아서Member에 있는 Locker locker;를 삭제하고Locker에 Member member;를 추가하면 해결 되는게 맞을까요?!많이 헷갈리네요... 개념이 헷갈리지 않기 위해서는 몇 챕터를 다시 보면 좋을까요?!
-
미해결실전! 스프링 데이터 JPA
동적 테이블에 대한 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.궁금한게 있어서 질문 드립니다.테이블을 년도별로 나누어야 하는 경우예) person2025, person2026파티션 테이블도 있겠지만 장기적으로는 나눠야 한다면,이 경우 하나의 Entity로 테이블을 동적으로 변경 해서 사용하는 방법이 있는지 아니면 Native Query 쿼리로 하는지 실무에서는 어떻게 하는지 궁금합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
@Transactional connection 얻는 시점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링에서 기본적인 설정으로 @Transactional 적용된 메서드를 실행했을 때 connection을 바로 풀에서 가져오나요 아니면 실제 DB상 쿼리를 날리기 전에 connection을 얻어와서 처리하나요??
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
update에서 Repository.save
dbEntity와 도메인으로 따로 분리하면 Jpa의 기능을 쓰지 못하기에 update부분에서 더티체킹을 사용하지 않고 Repository.save를 이용해 merge로 update한다는건데 이렇게 했을 때 merge는 하나하나 다른 부분을 수정하는게 아니고 전부 덮어 쓰는거라 이로 인해 발생할 수 있는 문제에 대해 신경 쓰지 않아도 되나요? 아니면 따로 처리를 해야하나요?
-
미해결
Hibernate Proxy객체가 실제객체로 변환이 안돼요
먼저 Entity Code부터 보여드리겠습니다. FieldGroupMapping(부모) @Entity @Table(name = "FIELD_GROUP_MAPPING") @Getter @SuperBuilder @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class FieldGroupMapping extends CreationAuditingEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "FIELD_GRP_MPPG_ID", nullable = false) private Long id; @Column(name = "FIELD_CD", length = 50, nullable = false) private String fieldCd; @ManyToOne(fetch = FetchType.EAGER, optional = false) @JoinColumn(name = "FIELD_CD", referencedColumnName = "FIELD_CD", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) private FieldMetadata field; } FieldMetadata (자식) @Entity @Table(name = "FIELD_METADATA") @Getter @SuperBuilder @AllArgsConstructor @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "FIELD_TYPE") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class FieldMetadata extends CreationAuditingEntity { @Id @Column(name = "FIELD_CD", length = 50, nullable = false) private String fieldCd; @Column(name = "LABEL", length = 50, nullable = false) private String label; @Enumerated(EnumType.STRING) @Column(name = "DATA_TYPE", columnDefinition = "varchar(20)", nullable = false) private FieldDataType dataType; } RealFieldMetadata (상속된 자식) @Entity @Table(name = "REAL_FIELD_METADATA") @Getter @SuperBuilder @AllArgsConstructor @DiscriminatorValue(FieldDiscriminatorValues.D_REAL) @NoArgsConstructor(access = AccessLevel.PROTECTED) @PrimaryKeyJoinColumn(name = "FIELD_CD") public class RealFieldMetadata extends FieldMetadata { @Enumerated(EnumType.STRING) @Column(name = "TABLE_ALIAS", columnDefinition = "varchar(50)", nullable = false) private TableAlias tableAlias; @Column(name = "COLUMN_NAME", nullable = false, length = 50) private String columnName; @Builder.Default @Convert(converter = BooleanYNConverter.class) @Column(name = "REQUIRES_JOIN", nullable = false, columnDefinition = "char(1) default 'N'") private boolean requiresJoin = false; @Enumerated(EnumType.STRING) @Column(name = "JOIN_TABLE", columnDefinition = "varchar(50)") private TableAlias joinTable; }FieldGroupMapping 과 FieldMetadata는 1:N 관계입니다.List<String> idList = List.of("GD01", "GD02", "GD03"); // fetch join 없이 조회 List<FieldGroupMapping> fieldGroupMappings1 = fieldGroupRepository.findAllById(idList); Long gridId = 1L; // fetch join으로 조회 List<FieldGroupMapping> fieldGroupMappings2 = gridRepository.getGrid(gridId) .map(Grid::getFieldGroupMapping) .toList(); for (FieldGroupMapping mapping1 : fieldGroupMappings1) { FieldMetadata field = mapping1.getField(); // 여기서 BreakPoint로 field를 보면 Proxy 객체 } for (FieldGroupMapping mapping2 : fieldGroupMappings2) { FieldMetadata field = mapping2.getField() // 여기서 BreakPoint로 field를 보면 실제 객체 (Unproxy상태) } 위 상황에서 첫번째 fieldGroupMappings1을 조회할땐 fetch join없이 hibernate로만 조회합니다.두번째 fieldGroupMappings2를 조회할땐 Grid -> FieldGroupMapping -> field 연관관계 모두 fetch join을 써서 조회합니다. 제 지식으로는 두개 for문에서 모두 field는 Unproxy상태여야합니다. 단, fetch join이 없는 첫번째 리스트에서는 Select Query가 나가겠죠.하지만, 테스트 결과는 첫번째 리스트에서의 field는 계속 Proxy상태로 되어있어. field 내부의 필드들이 null로 되어있었습니다. 또, 제 어플리케이션의 설정으로 default batch size는 1000으로 되어있어. select문의 조건에 in절로 채워져서 쿼리가 1번 발생하였습니다. 제 지식으로는 Select쿼리가 발생하였으므로, 첫번째 리스트도 field는 실제 객체여야하는데 왜 프록시객체로 남아있을까요? FieldMetadata 엔티티가 상속Entity여서 발생하는 문제일까요?정답을 알려주세요 ㅠㅠㅠ
-
미해결실전! 스프링 데이터 JPA
영속성 전이와 연관관계
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 선생님 강의를 통해 배움을 얻고 프로젝트를 하며 성장 하고 있습니다.프로젝트를 하던중 영속성 전이와 관련하여 궁금한점이 생겨 질문 드립니다.( 영한님 JPA 강의에 질문 하는것이 맞으나 JPA는 책을 사서 여기에 질문 드립니다 ㅠㅠ ) 회원과 주소는 양방향 관계를 두고 있습니다.회원과 주소를 연관관계 매핑하여 회원을 저장하면 영속성 전이를 통해주소가 같이 저장 됩니다. 그런데 문제는 둘다 영속 상태일때 주소를 제거 하면 delete 쿼리가 나가지 않았습니다.이런 저런 실험을 해본 결과 영속성 전이 때문에 삭제 되지 않은것으로 보았습니다.영속 대상인 주소를 삭제 하려고 했으나 회원의 연관관계인 Address는 그대로 있기 때문에영속성 전이로 인해 삭제가 되지 않았다로 판단 하였습니다. 영속성 컨텍스트에 주소만 있을 경우 주석 으로된 부분을 실행하면영속성 전이를 수행할 회원이 없기 때문에 delete 쿼리가 나가게 됩니다.제가 생각한게 맞는지 궁금하여 질문 드립니다. 밑의 예시의 경우 회원이 영속 상태인 경우영속성 전이 때문에 연관관계를 끊지 않으면 영속 대상인 주소가 delete가 안되는게 맞을까요? @DisplayName("회원과 연관된 주소를 제거할때 자식인 주소를 제거 하면 delete 쿼리가 발생하지 않는다.") @Test void deleteAddress() { //given User user = new User("회원"); Address address = new Address("주소"); address.connectUser(user); //when em.persist(user); em.flush(); boolean isAddressManaged = em.contains(address); System.out.println("Address is managed? " + isAddressManaged); addressRepository.deleteById(address.getId()); em.flush(); em.clear(); //then //Address findAddress = addressRepository.findById(address.getId()).orElseThrow() //addressRepository.deleteById(findAddress.getId()); //em.flush(); } [ 회원 ]@Getter @Setter @Table(name = "users") @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToOne(mappedBy = "user", cascade = CascadeType.PERSIST) private Address address; protected User() {} private String name; public void connectAddress(Address address){ this.address = address; } }@Getter @Entity public class Address { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; private String addressName; protected Address() {} public Address(String addressName) { this.addressName = addressName; } public void connectUser(User user){ this.user = user; user.connectAddress(this); } }
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
OAUTH2 질문
로그인시도 -> Securty -> FILTER 사용자가 DB에있으면 OK -> JWT발급이 흐름이 맞는지요..? 그리고 OAUTH2는 로그인시도 -> 카카오 코드받아서 인증을 받고 -> 토큰으로 사용자 정보를 가져와서 로그인 -> 로그인 후 jwt발급근데 궁금한게 oauth2도 회원가입이 왜 필요한걸까요? 시큐리티때문이라고한다면 토큰으로 사용자정보를 가져오는걸로 db에서찾은거처럼 판단을 못하는지요제가 헷갈리는게 jwt든 oauth2든db하고 관련이 어떻게잇는건지가 헷갈립니다 jwt도 db에서 사용자정보를 가져와서 담을수도있지않나요? oauth2가 db에 사용자정보가 왜필요한지도 헷갈립니다 만약 사용자정보가 저장이 최초에 된다면 그다음부터는 그냥 oauth2로그인으로 안타는건지 그냥 security의 로그인을 타는건지 궁금합니다. 그리고 현재 강의에서는 시큐리티를 안쓰고openfeign를 쓰셔서 코드를 받고 그 코드로 요청을 보내서 토큰을 받고 그 토큰으로 사용자정보를 받는걸로 이해를 했습니다. 시큐리티에서는 해당과정이 없는걸로 알고있는데 맞는지요
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
카카오토큰관련
안녕하세요 질문이있는데요 제가 예전에는 security에서http.oauth2Login(oauth2Login -> oauth2Login.loginPage("/login").userInfoEndpoint().userService(customOAuth2UserService)); 이런식으로 oauth를 했었던거같은데 해당강의는 시큐리티를 적용안하고 바로 카카오로 회원가입을 진행시키는걸까요? 근데 궁금한게 제가 예전에 했을때는 저런 토큰을 안하고OAuth2User 이걸로 이용해서 가입을 시켜서 로그인을 했던거같은데 어떤차이가있는걸까요 해당강의에서 FeighClient를이용해서 토큰을 요청을하는게 훨씬 복잡해보이는데 어떤장점이있는지도 알려주시면감사합니다 시큐리티했을때는 그런작업이 없었던거같아서요 jwt를 이용하는거면 소셜로회원가입을 시키고 그 가입된걸 jwt를 이용하면되는거아닌가싶어서요 카카오토큰은 왜받는지 잘 모르겠습니다
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
실무에서도 패키지 구조는 학습과 같이 많이 사용하게 되나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요!패키지구조에 관련하여 문의드립니다!강의에서는controllerservice ..패키지가 이렇게 나뉘어져있는데member - controller - serviceorder - controller - service...이런 패키지구조도 있어 질문드립니다!프로젝트, 기업마다 규칙이 다르겠지만보통 보편적으로 어떤 패키지구조를 사용하게 되나요??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
orderItems[0] 은 아직 단일주문만 가능하기에 인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 강의를 듣는 도중 궁금한게 있어 질문드립니다. <td th:text="${item.orderItems[0].item.name}"></td> <td th:text="${item.orderItems[0].orderPrice}"></td> <td th:text="${item.orderItems[0].count}"></td>부분에 [0] 인건 아직 단일 주문만 가능하기에 [0] 으로 하신건가요?개인적으로 변경하여 한 번에 여러 개의 주문이 가능하게 될 경우에는 [0] 하드코딩이 아닌 타임리프 반복문의 인덱스를 넣으면 되는건가요??
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
암호화 관련 질문
실무에서 설정 파일의 내용을 어떻게 관리하시는지 궁금하여 질문 드립니다. 제 생각엔 [ '평문' -> jasypt 암호화 -> keytool 암호화 ] 이 과정으로 서버에 설정 정보를 저장하는 것이 좋을 거 같은데, 사바사 일거 같지만.... 보통 이렇게 2번 암호화를 하는지 궁금하네요.
-
해결됨Spring Boot를 활용하여 채팅 플랫폼 만들어보기
STOMP에서 메세지를 전송하는 방법에 대해
WssControllerV1에서 @SendTo 어노테이션을 통해 구독중인 클라이언트들에게 메세지를 보낸다고 이해했는데,STOMP 문서를 읽어보니 SimpMessagingTemplate를 통해 메세지를 보내는 것 같았습니다.이 둘의 차이점과 @SendTo를 사용하신 이유를 알 수 있을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입 컬렉션 대안 질문드립니다.
안녕하세요.강의에서, 값 타입 컬렉션일때는findMember.getAddressHistory().remove(new Address("old1", "street", "zipcode")); findMember.getAddressHistory().add(new Address("new1", "street", "zipcode"));이렇게 값을 삭제하고 추가하는 방식으로 값을 수정해줬었습니다. 1.AddressEntity entity = findMember.getAddressHistory().get(0); // entity.setAddress(new Address("newCity", "street", "zipcode")); addressEntity.getAddress().setCity("new1"); 엔티티로 변경하게되면 이렇게 수정해주면 될까요?그리고 위와같은 수정 방식에 대해서 entity.setAddress(new Address("newCity", "street", "zipcode")); 를 하든, addressEntity.getAddress().setCity("new1"); 를 하든 동일하게 update쿼리가 하나만 발생하는것을 확인했습니다. 근데 왜 addressEntity.getAddress().setCity("new1"); 를 해도 JPA가 변경감지를 통해 update쿼리를 발생시키는지 궁금합니다. 값 타입을 수정할때는findMember.setHomeAddress(new Address("newCity", a.getStreet(), a.getZipcode())); 이런식으로 새로운 인스턴스를 생성해서 기존 인스턴스를 교체해야한다고 하셨는데 왜 해당 부분에서는 통으로 새로운 인스턴스를 생성해서 교체하지않고 단순히 addressEntity.getAddress().setCity("new1"); 를 하면 update쿼리가 발생하는 이유가 무엇인가요? 그리고 값타입 컬렉션 대신에 이렇게 사용하는 이유가 기존 delete로 다 삭제하고 insert를 각각 해주는걸 단순히 update쿼리 하나로 해당 엔티티에 대해서만 수정하게 하기위해 인가요??감사합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
다른 예외 처리 방식
강사님께서는 데이터를 먼저 읽고 없으면 예외를 발생시켰는데, 그렇게 하지 않고 일단 업데이트(혹은 삭제)를 시키고 나서 변경된 row의 개수가 0이면 예외를 발생시키는 방법으로 예외 처리를 해도 괜찮나요? 코드는 아래와 같습니다.if(jdbcTemplate.update(sql, request.getName(), request.getId()) == 0) { throw new IllegalArgumentException(); }}
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
auditing
@EntityListeners(AuditingEntityListener.class) 저걸안쓰는이유가무엇인가요?저렇게 직접구현하는이유가