묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
19강 질문
안녕하세요 선생님 늘 친절하게 답변해주셔서 감사합니다. 19강에서 궁금한 게 있는데 service와 repository를 스프링 빈으로 만들기 전에 왜 jdbctemplate에 의존할 수밖에 없는 건가요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
쿼리가 강의보다 더 나오고 있습니다.
"/api/v2/simple-orders " 이 url로 호출했을 때,(1) order테이블에서 가져오는 쿼리 1번 => (2개의 데이터)(2) member 쿼리 1번 * 2(3) delivery 쿼리 1번 * 2해서 총 5번이 나오는 걸로 알고 있습니다. 근데 현재 로그에서 총 쿼리가 7번이 나가고 있습니다. 코드를 따라쳐보면서 했는데도 왜 다르게 나가는지 원인을 짐작하기가 힘듭니다. 현재 제 쿼리는 (1) order 테이블에서 가져오는 쿼리 1번(2) member 쿼리 1번(3) delivery 쿼리 1번(4) delivery id 조건절로 order 찾는 쿼리 1번(2)~(4)번 한 번 더 반복이렇게 해서 총 7번 쿼리가 나가게 됩니다. 쿼리만 보고 어떤 부분때문에 더 나가게 됐는지 짐작할 수 있을까요? 엔티티 간의 연관관계 매핑은 강의를 보면서 했기 때문에 제가 중간에 놓쳤나 생각이 들기도 하네요ㅜ 원인을 짐작하기가 어렵습니다. select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 join member m1_0 on m1_0.member_id=o1_0.member_id fetch first ? rows only 2023-03-23T19:03:54.387+09:00 DEBUG 56506 --- [nio-8080-exec-1] org.hibernate.SQL : select m1_0.member_id, m1_0.city, m1_0.street, m1_0.zipcode, m1_0.name from member m1_0 where m1_0.member_id=? 2023-03-23T19:03:54.390+09:00 DEBUG 56506 --- [nio-8080-exec-1] org.hibernate.SQL : select d1_0.delivery_id, d1_0.city, d1_0.street, d1_0.zipcode, d1_0.status from delivery d1_0 where d1_0.delivery_id=? 2023-03-23T19:03:54.393+09:00 DEBUG 56506 --- [nio-8080-exec-1] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=? 2023-03-23T19:03:54.395+09:00 DEBUG 56506 --- [nio-8080-exec-1] org.hibernate.SQL : select m1_0.member_id, m1_0.city, m1_0.street, m1_0.zipcode, m1_0.name from member m1_0 where m1_0.member_id=? 2023-03-23T19:03:54.396+09:00 DEBUG 56506 --- [nio-8080-exec-1] org.hibernate.SQL : select d1_0.delivery_id, d1_0.city, d1_0.street, d1_0.zipcode, d1_0.status from delivery d1_0 where d1_0.delivery_id=? 2023-03-23T19:03:54.397+09:00 DEBUG 56506 --- [nio-8080-exec-1] org.hibernate.SQL : select o1_0.order_id, o1_0.delivery_id, o1_0.member_id, o1_0.order_date, o1_0.status from orders o1_0 where o1_0.delivery_id=?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
section1 막힘
main 런 하라는데 옆에 세모가 안떠요.... 다른 질문글 보고 File - Settings 에서 Java17로 세팅도 다 했는데 여기만 아무것도 안떠요. Add new 눌러봐도 말씀하시는 항목이 없어요ㅠ shift 빠르게 2번 눌러서 All 되어있는지도 확인했고 Show excluded files도 ON 되어있는거 확인했습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
thymleaf 연결
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]프로젝트를 새로 만들어도 html 파일이 절대 연결이 되지 않네요..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
clearStore에 빨간 줄 생성
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]clearStore에 왜 빨간 줄이 생기는건가요?package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemoryMemberRepository; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; import static org.junit.jupiter.api.Assertions.assertThrows; class MemberServiceTest { MemberService memberService = new MemberService(); MemoryMemberRepository memberRepository = new MemoryMemberRepository(); @AfterEach public void afterEach(){ memberRepository.clearStore(); } @Test void 회원가입() { //given Member member = new Member(); member.setName("hello"); //when Long saveId = memberService.join(member); //then Member findMember = memberService.findOne(saveId).get(); assertThat(member.getName()).isEqualTo(findMember.getName()); } @Test public void 중복_회원_예외() { // given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); // when memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2)); assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다"); /*memberService.join(member1); try{ memberService.join(member2); fail("실패"); } catch (IllegalStateException e){ assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.123123"); }*/ // then } @Test void findOne() { } @Test void testJoin() { } @Test void testFindMembers() { } @Test void testFindOne() { } }
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
JWT 토큰 유효성 검사
안녕하세요! 좋은 강의 제공해주셔서 감사합니다. 다름이 아니라, 수업에서 JWT 토큰 유효성 로직을 api gateway service에 구현했는데, user-service가 아닌 gateway service에 구현한 이유가 있을까요? api gateway에 토큰 유효성 로직을 구현하게 되면, 만료된 토큰으로 api gateway를 거치지 않고 바로 user-service에 요청하는 경우, 토큰 유효성 검사를 하지 않아서 문제가 발생할 수 있지 않나요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
실무에서는 스크립트를 다듬는다고 하셨는데 지금 예제에서는 어떤 점을 다듬어야 할까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 영한님, 강의 잘 듣고 있습니다!강의에서 JPA가 생성해준 테이블을 그대로 쓰면 안되고, JPA가 쓴 DDL을 다듬어서 쓴다고 하셨는데생각해보니 저는 토이프로젝트에서 항상 JPA가 만들어주는 그대로 썼던 것 같습니다.그렇다면 지금 예제에서는 어떤 점을 보완하는게 필요할까요?감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 @Transactional 관련해서 질문이 있어요!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 좋은 강의 잘 보고 있습니다. 감사합니다다름이 아니라 선생님 강의 jpa로드맵과 스프링 완전 정복을 완강하고 토이 프로젝트 전에 리마인드 할겸 다시 보고 있는데요~지금 선생님께서는 서비스단 클래스 영역에서 트랜잭션을 걸어주고 계시는데 그럼 그 하위에 있는 로직 전체가 같은 커넥션을 사용하고 반환하는데 지금 이 예제에서 그 이점이 있을까요!?이유가 따로 있으시다면 궁금합니다. 저는 지금 서비스 클래스에서 로직 단위별로 트랜잭션을 걸어주고 있었는데 갑작스럽게 의문점이 생겨 질문드려요!~
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
도메인 모델과 테이블 설계 시 사용한 UML도구가 뭔지 궁금합니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 자료에서 도메인 모델, 엔티티 설계, 테이블 설계 다이어그램을 어떤 도구를 통해 작성하셨는지 궁금합니다!
-
해결됨스프링 배치
트랜잭션 경계 와 트랜잭션 begin에 대한 구분
안녕하세요 정수원 선생님 질문이 2개 있습니다.1) "Chunk Process 아키텍처" 첫번째 사진 설명부분 4:26쯤에 트랜잭션 경계와 실제 트랜잭션 begin을 구분하셨는데 이것이 무슨 차이인가요?아니면 어떻게 받아들여야하는것인가요? 2) 또한 코드를 디버깅 걸어서 따라가보니 TaskletStep#doInChunkContext 에서 new TransactionTemplate.execute() 에서 매 chunk마다 트랜잭션이 시작되는것은 확인하였는데 그림에 나온것 처럼 SImpleChunkProvider 다음과정에서 Transaction 시작하는곳을 찾지 못하겠습니다...
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
에러가 나서 해결은 하긴했는데 이유가 궁금해요(서버구동시 생성자 매개변수 bean 2개주입으로 인한 에러)
안녕하세요.제가 aop를 프로젝트 다 만들고나서 서버를 구동하니 에러가 좀나더라구요.우선 상황은MemoryMemberRepository 클래스파일에 @Repository 어노테이션이 추가되어 있는 상태였으며, TimeTraceAop 클래스 생성 후 강의보면서 강사님의 코드를 입력해서 추가, 이후 서버를 구동하니 에러가 나더라구요.아래는 에러메세지 입니다.Parameter 0 of constructor in hello.hellospring.SpringConfig required a single bean, but 2 were found:- memoryMemberRepository: defined in file [(생략)\hello\hellospring\repository\MemoryMemberRepository.class]- springDataJpaMemberRepository: defined in hello.hellospring.repository.SpringDataJpaMemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration 해당 에러문을 보고 MemoryMemberRepository클래서파일에 추가되어있는 @Repository 어노테이션을 제거 후 서버를 재구동하니 에러없이 정상적으로 프로젝트가 잘 돌아갔습니다. 제 SpringConfig파일에는 @Configurationpublic class SpringConfig {/** 2. 스프링 데이터 JPA 사용후 추가한 부분*/private final MemberRepository memberRepository; public SpringConfig(MemberRepository memberRepository) {this.memberRepository = memberRepository;} @Beanpublic MemberService memberService() {return new MemberService(memberRepository);}}이렇게만 코딩되어 있는데요.여기서 궁금한게 왜 SpringConfig생성자가 호출될때 매개변수로 2개가 들어간건지가 궁금합니다.원래는 SpringDataJpaMemberRepository 하나만 들어가야 하는거 같은데 어떻게 SpringDataJpaMemberRepository와 MemoryMemberRepository가 동시에 생성자의 매개변수로 들어가려 했는지.. @Repository가 어떤 영향을 주는걸까요?이전 jpa 강의를 들을때는 MemberRepository로 사용할 매개변수를 직접설정했는데 그 코드도 주석처리가 되어있습니다. 그래서 이해가 되지 않아 게시판이 질문남깁니다
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
다대일 관계에서 일을 기준으로 페이징을 하려면 어떻게 해야하나요?
일대다 컬렉션 페치조인과 페이징은 기본적으로 양방향을 전제하고, 일을 기준으로 페이징을 하기 때문에 Batch Size 를 이용하는 것은 이해했습니다. Q. 그렇다면 컬렉션이 생기지 않는 다대일 단방향 매핑 구조에서 일 을 기준으로 페이징하려면 어떻게 해야할지 궁금합니다. 예를 들어 게시글(1) : 댓글 (N) 이고 댓글 -> 게시글 방향으로 다대일 단방향 매핑이라면, 게시글을 기준으로 페이징하고 싶을 때 어떻게 하면 될까요? 항상 영한님과 서포터님들께 감사드립니닷!!🙇♂️
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
교안의 병합사용 부분에서 merge 매개변수 item 질문
em.merge(item) 에서 item이 아니라 itemParam이어야 하는거 아닌가 생각이 드는데 교안이 잘못 작성된거 맞나요?병합은 준영속 엔티티를 영속상태로 변경시키는거니까...
-
미해결스프링 시큐리티 OAuth2
로그아웃관련하여 질문드립니다!
안녕하세요!제가 강의를 듣고 직접 구현을 해보고 있는 중에 궁금한 점이 있습니다. 저는 인가서버에다가 로그인 페이지를 구성해서 아이디와 비밀번호를 입력하면 동의화면이 나와서 SCOPE 를 부여한 뒤 리소스 서버에 접근하는 로직의 흐름으로 구현을 생각해보고 있습니다.로그아웃을 하고나면 인가서버를 통해서 동의 받은 SCOPE도 다 날려서 인가서버 로그인화면으로 리다이렉트 하고 싶습니다. 제 바람과는 달리 계속 이미 인가가 된 상태가 되어서 마지막 강의 예제 코드를 기반으로 연구하고 있는데 127.0.0.1:8081/home 에서 로그아웃을 하고난 뒤 127.0.0.1:8081 로 리다이렉트 되도록 했는데 로그인링크를 누르면 127.0.0.1:9000/login 으로 가는 것이 아니라 바로 127.0.0.1:8081 로 이동해서 access token 버튼이 있는 화면으로 넘어갑니다. 제가 질문드리고 싶은 것은 로그아웃을 하고나서 로그인 하면 인가서버에 구현된 로그인 화면으로 이동해서 다시 로그인해서 동의화면을 받도록 하려면 어떤식으로 로직을 구성해야 할까요?ㅠ 몇 주 고민하다가 방법을 모르겠어서 질문드립니다.
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
DB Table 생성, 데이터 입력 문의
테이블 구조에 관해 몇가지 문의드립니다.coffee_menu_log 쿼리문이 없어 기존 테이블을 삭제(학습하면서 테스트한다고 무작위로 들어간 데이터도 삭제할 겸)했습니다. 그런데 테이블을 작성하면서 좀 아리송한 부분이 있어 문의드립니다. cust_info 테이블의 cust_id 컬럼 구조가 유니크한 큐로 유지되는 구조가 맞나요?그리고 order_list의 외래 키의 이름이 조금 달라 문의드립니다.이러한 질문을 드리는 이유는 sql 파일에 존재하는 테이블 수정의ALTER TABLE order_listADD CONSTRAINT fk_cust_idFOREIGN KEY(cust_id)REFERENCES cust_info(cust_id)에서키가 유니크한 키가 아닌 포린키로 지정되어 있어. 문의드립니다. 유니크한 키에서 이후 포린 키로 변경해야 하나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@SpringBootApplication 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]저 @SpringBootApplication 가 문제로 뜨는데 들어가보니 저런 상태인데 뭐가 문제일까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
javax.persistence가 import되지 않습니다
jpa강의를 듣던 도중 강의내용대로 따라했는데 오류가 발생하여 질문드립니다. build.gradle 의존성에 jpa 추가한 뒤 새로고침 했는데 javax.persistence.entity가 import 되지 않습니다. jakarta.persistence.entity는 가능하길래 import하여 진행해봤는데 오류가 나타납니다. https://drive.google.com/file/d/1p2qPm_9abHOmEqKz2oariH7S8iWla_k-/view?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
라이브러리 실행이 안돼요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기 자료에 나와있는대로 했는데도 라이브러리 작동이 안되네요ㅠㅠ 매개변수가 비어있는 sql만 찍혀요! 뭐가 문제일까요?build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.0.4' id 'io.spring.dependency-management' version '1.1.0' } group = 'jpabook' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' testImplementation 'junit:junit:4.13.1' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' } tasks.named('test') { useJUnitPlatform() }application.yml콘솔창 select next value for member_seqfindMember == member: true2023-03-22T18:50:10.129+09:00 DEBUG 61227 --- [ main] org.hibernate.SQL : insert into member (username, id) values (?, ?)2023-03-22T18:50:10.157+09:00 INFO 61227 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'2023-03-22T18:50:10.157+09:00 TRACE 61227 --- [ionShutdownHook] o.h.type.spi.TypeConfiguration$Scope : Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@d3cce46] for TypeConfiguration2023-03-22T18:50:10.158+09:00 DEBUG 61227 --- [ionShutdownHook] o.h.type.spi.TypeConfiguration$Scope : Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@4462a887] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@d3cce46]2023-03-22T18:50:10.160+09:00 INFO 61227 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...2023-03-22T18:50:10.178+09:00 INFO 61227 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.Process finished with exit code 0
-
미해결스프링 시큐리티 OAuth2
사용자 관리에 대해서 문의드립니다.
강의에서는 네이버나 구글을 통해 로그인을 진행하면 access token 을 받고 이를 통해 사용자정보를 받아오면 이를 인증완료로 보는 것 같은데요.일반적으로는 받아온 사용자정보를 가지고 OAuth Client 자체 DB 에 사용자마스터를 등록하고 별도의 사용자 식별키 관리를 해야하지 않는지요? 이러한 처리가 생략되어 있는 것 같은데 이 부분이 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Order Entity Cascade 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "delivery_id") private Delivery delivery;Order Entity의 코드입니다. 현재 Order와 Delivery의 관계에서 연관관계의 주인은 Order입니다. 그렇다면 Order에서 delivery의 값을 변경하면 연관관계의 주인이기 때문에 반영이 된다고 알고 있습니다. 그래서 cascade를 굳이 써야하나 고민을 하고있었습니다. 제가 생각해낸 이유는 연관관계의 주인이여서 Order에서 delivery의 값을 변경이 가능한 것은 객체 관점(delivery에 값이 입력되기만 함 영속성 컨텍스트에 저장 X)이고 cascade는 db관점에서의 접근이므로 cascade를 작성해 줘야 묶여서 영속성 컨텍스트로 넘어간다(cascade를 작성하지 않으면 order를 persist했을 경우 delivery에 값은 있지만 영속성컨텍스트로 넘겨주지않음). 입니다. 제가 생각한 방법이 맞는지 궁금합니다.