묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 시큐리티 OAuth2
Authorization Code 궁금증이 있습니다.
안녕하세요 선생님 강의 잘 듣고 있습니다 Authorization Code 요청하기 강의를 듣고 궁금한점이 생겨서 질문 올립니다 이번 강의의 핵심은 임시코드 발급하기 였습니다 클라이언트가 keyCloak 와 연동해서 어떻게 redirect uri 를 만들고 어떻게 요청을 하고 인증이 완료 되는것도 같이 해보았습니다 다만 저는 좀 궁금한게 선생님이 총 2개의 로그인 방식을 보여주셨다고 생각합니다 이 링크를 클릭했을때의 방식 다른 방식은 세션을 완전히 제거한 이 화면에서 로그인 하는 방식을 보여주셨습니다 여기선 궁금한건 이번강의 주제는 임시코드를 발급받는 Filter 에 대해서 공부중인데첫번째 스크린샷에서는 선생님이 말씀하신 대로 OAuth2AuthorizationRequestRedirectFilter 에서 잘 요청이 들어옵니다requset 가 "/oauth2/authorization"; 들어오기 떄문인데 두번쨰 스크린샷에서는 전혀 이 필터를 태우지 않습니다 저는 임시코드 발급이라고 하길래 지금 할려는 스크린샷 1 , 2 두 행동 모두가 임시코드를 발급받기 위한 행동으로 알고 있습니다 그런데 첫번째 스크린샷은 OAuth2AuthorizationRequestRedirectFilter 필터를 태우고 두번째 스크린샷은 OAuth2LoginAuthenticationFilter 이 필터를 태우고 있습니다 이 앞의 configure 강의에서도 요청 순서 말씀하시면서 OAuth2AuthorizationRequestRedirectFilter 가 먼저 요청을 받아서 임시코드를 받아오고 그 다음 OAuth2LoginAuthenticationFilter 가 진행된다 라고 하셔서 제가 지금 혼동이 오는거 같습니다. 앞의 부분에서 제가 놓친 부분이 있을까요 선생님?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
MYSQL DB NAME : 한글 데이터 삽입 오류
안녕하세요.웹페이지 혹은 INSERT로 NAME 컬럼에한글 텍스트를 입력하면에러가 발생합니다.(영문, 숫자 텍스트는 정상)이유를 알 수 있을까요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
서버 실행 오류 질문
안녕하세요.서버 실행 후, 이러한 에러 메시지가 발생하는데해결책을 알 수 있을까요?코드상 문제는 없어보이는데... 난해하네요.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
리눅스 mysql systemctl status 오류
sudo systemctl status mysqldUnit mysqld.service could not be found. 계속 시도해보는데 여기서 막히네요ㅠ
-
미해결실전! 스프링 데이터 JPA
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. @Entity 의 역할을 영속성 컨텍스트에 Entity 넣기, @PersistenceContextContext 의 역할은 영속성 컨텍스트 데이터를 DB 에 넣기로 이해하면 될까요?2. return em.find(Member.class,id); 에서 id 값을 기준으로 해당되는 member 객체가 반환되는 걸로 이해했는데 맞을까요?3. update 는 구현이 따로 필요 없다고 하셨는데, public Member save(Member member) 에서 이 update 기능을 사용할 수 있어서 그런건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
em.persist의 예외처리는 어디서 처리해야하나요?
회원가입시 em.persist(member)를 실행하게 되면, 바로 DB에 SQL문이 날아가는게 아니라 2차 쓰기 지연때문에, 트랜잭션이 커밋될때 sql문이 날아가기 때문에, 메소드가 끝나는 시점에 db에 반영되는걸로 아는데, 그렇다면 만약 중복 ID가 이미 등록되어 있는 경우의 exception을 처리해주기 위해서 공통예외처리를 만들어주었다고 한다면, repository에서 exception을 던지는게 맞는지 아니면 service에서 exception을 던지는게 맞는지 궁금합니다.대신, 동시성 처리 문제현상때문에 validateDuplicateMember를 모두 통과했다는 가정하에 질문드립니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
실전예제 4 - 상속관계 매핑 11:05
안녕하세요.실전예제 4 - 상속관계 매핑 11:05 부분에서 'json으로 말아넣는다'는 의미가 어떻게 넣는다는 의미인가요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
컨트롤러가 맵핑이 안 됩니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]java version: 17mavenspring.io에서 다운 받고 실행 했는데 컨트롤러가 인식이 안 됩니다.패키지 계층구조도 맞췄는데, /demo/controller로 들어가도 인식이 안 됩니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
큐 사용시 add(), remove()
Queue에 add() 메서드와 remove() 메서드를 사용할 수 있던데, 이걸 사용해도 되는지 궁금합니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
서비스 운영 중에 @MappedSuperclass 확장 가능 여부
안녕하세요.@MappedSuperclass 어노테이션을 사용하는 BaseEntity 클래스는 아래와 같은 필드를 갖고 있습니다.CREATEDBY CREATEDDATE LASTMODIFIEDBY LASTMODIFIEDDATE여기서 궁금한 점이 하나 생겼는데요.만약 처음에 100개의 클래스 중 100개 클래스 모두가 BaseEntity 클래스를 상속받아서 공통 필드를 사용하고 있습니다.그런데 운영중에 100개 중 50개의 클래스에서만 사용하는 공통 필드가 추가되면 이런 경우에는 어떻게 처리하면 좋을까요?자바에서 상속은 1개만 할 수 있어서 고민이 됩니다.50개의 클래스에 노가다로 필드를 입력해야 좋을지,,
-
미해결실전! 스프링 데이터 JPA
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]갑자기 궁금한 부분이 생겼는데, 배달의 민족은 웹이 아니라 앱으로 동작하잖아요. 그럼 api 개발을 위주로 하시는 거라고 생각이 되는데 스프링 웹이던 아니면 앱을 이용하는 개발이던 개발하는 부분에 관해서는 큰 차이가 없는 건가요? 스프링으로 개발만 할 줄 알면 필요한 곳에 그대로 쓰기만 하면 되는 건가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
lombok 적용 오류
[질문 내용]안녕하세요. 강의 초반에 롬복 설치하고 테스트하는 과정에서 오류가 발생해 문의 드립니다. 강의에서 설명해주신대로 롬복 활성화 후, annotation enable 설정도 다 해봤는데도 setter,getter가 적용이 되지 않습니다.혹시 해결 방법이 있을까요?구글링해서 캐시도 삭제해보고 인텔리제이 재설치도 해봤는데도 안돼서 문의드립니다. 혹시 몰라서 사진 첨부합니다.감사합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
뒤집은 소수 / 런타임 에러 + 궁금증
안녕하세요 강사님예시 문제는 합격하는데 다른 4개의 테스트 케이스는 통과하지 못하고 있습니다.문제는 런타임에러가 뜨는데 왜 뜨는지 정확한 이유를 아무리 보아도 모르겠습니다...많이 더러운 코드지만 무엇이 문제인지 확인 한번 부탁 드리겠습니다...import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public String solution(String str) { String answer = ""; String[] arr = new StringBuilder(str).reverse().toString().split(" "); List<Integer> list = new ArrayList<>(); for (String s : arr) { int target = Integer.parseInt(s); if (target != 2 && target % 2 == 0) continue; if (target == 1) continue; boolean check = true; for (int j = 3; j <= Math.sqrt(target); j+=2) { if (target % j == 0) { check = false; break; } } if (check) list.add(target); } for (int i =list.size()-1; i >= 0; i--) { answer += list.get(i) + " "; } return answer; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int input1 = in.nextInt(); in.nextLine(); String str = in.nextLine(); Main main = new Main(); System.out.println(main.solution(str)); return; } }알아낸점저와 비슷한 사례를 겪는 분들을 질문창에서 발견하고 강사님이 적어두신 2번 케이스의 문제를 복사해서 적어보았는데 통과하였습니다.저는 split() 메서드를 이용해서 입력받은 문자열을 배열로 변경하는데 이때 문자열 맨 뒤에 공백이 존재하게 되면 런타임 에러가 발생 하는것을 확인했습니다. 아무래도 그부분 때문인것 같은데 맞다면 확인 한번 부탁드리겠습니다.변경코드를 수정하였습니다.import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public String solution(String[] arr) { String answer = ""; for (int i = 0; i < arr.length; i++) { String s = new StringBuilder(arr[i]).reverse().toString(); int target = Integer.parseInt(s); if (target != 2 && target % 2 == 0) continue; if (target == 1) continue; boolean check = isPrime(target); if (check) answer += target + " "; } return answer; } private boolean isPrime(int target) { for (int j = 3; j <= Math.sqrt(target); j+=2) { if (target % j == 0) { return false; } } return true; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int input1 = in.nextInt(); String[] arr = new String[input1]; for (int i = 0; i < input1; i++) { arr[i] = in.next(); } Main main = new Main(); System.out.println(main.solution(arr)); return; } } 이렇게 하니 해결되었습니다. 궁금증혹시 실제 코딩테스트 볼때도 split을 사용할때 요청값끝부분에 있는 공백의 존재 가능성도 염두해두고 사용을 해야하나요? 아니면 단순 이 사이트의 실수였을까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]패치 조인을 한다는 것은 "영속성 컨텍스트를 사용한다." 라고 이해해도 되나요?
-
미해결Java TPC (생각하고, 표현하고, 코딩하고)
static 멤버 사용
static 멤버를 수업 설명과 같이 객체 생성없이 클래스 이름으로 접근한다는것은 강사님 설명 덕분에 잘알았습니다!!그렇다면 static 멤버를 사용하는 이유는 객체 생성없이 클래스이름으로 바로 접근가능하다는 것인데, 객체 생성없이 메소드를 접근하게되면 어떤점이 좋은가요???객체 생성이 필요없으니 코드를 줄일 수 있는것이 장점일까요?이유를 알아야 잘 활용할 수 있을거 같아 질문남깁니다!
-
미해결실전! Querydsl
스프링 부트 3.0 + Querydsl 설정 관련
안녕하세요! 강의 잘 듣고 있습니다 감사합니다.강의를 따라가다가 잘 안되는 부분이 있어서 질문글 하나 남겨봅니다.Gradle -> Tasks -> build -> cleanGradle -> Tasks -> other -> compileQuerydsl실행 시에 정상적으로 Q타입 클래스가 생성이 됩니다.그런데 이후에 테스트 코드를 돌려보면이런 오류가 뜹니다.이것저것 해보다가 build파일이 없는 상태에서(삭제 후에) 테스트를 돌리면 돌아가긴 합니다.정상적으로 빌드해서 돌려보고 싶은데 설정을 어떻게 바꿔야 할까요?https://drive.google.com/file/d/1H7Sz9Z994odDceIhuTp9S4bpfvhDjxAr/view?usp=sharing구글 드라이브 링크입니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
controller에서 service단을 안 거치고 바로 repository로 향하는 이유가 있나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요, 강의를 듣다가 의문점이 생겨서 질문 남깁니다.JPA 1 수업을 들을 때는 controller에서 service를 거쳐 repository로 이동하는 걸 배웠고제가 실무에서도 controller에서 작업하지 말고 db와 커넥션은 꼭 service단에서 하라고 알려주셨습니다이번 예제에서 controller에서 바로 repository로 간 이유가 있는지 궁금합니다단순 예제 코드를 줄이기 위함인지, 이유가 있는 건지행여나 제가 수업에서 언급하셨는데 놓친건지.. 답변 부탁드립니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입을 불변 객체로 만드는 것과 변경 감지랑은 관련 없는 걸까요?
안녕하세요, 값 타입을 불변 객체를 만들 때 궁금한 점이 생겨 질문드립니다. 상황을 가정해서 질문드리겠습니다.상황값 타입을 불변 객체로 만들어서 값을 수정하기 위해, 새로운 불변 객체를 만들어 엔티티의 필드값을 변경합니다.질문위 상황에서 "JPA 관점에서는 어쨌든 컬럼값이 변경되어야 하니까 변경 감지는 계속 일어나고 있다." 처럼 이해해도 괜찮을까요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컬렉션 컬럼으로 검색
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요.Order 검색 시에 OrderItems의 컬럼을 where절로 검색하고 싶으면 어떻게 해야 하나요??일단 Order를 조회하고 OrderItems를 default_batch_fetch_size 지연로딩으로 조회한 다음에 loop돌려서 직접 찾아야 하는지아니면 querydsl을 배우면 방법이 있나요?감사합니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
orphanRemoval = true 로 했을 때, delete 쿼리가 나가지 않는 문제
문제 상황안녕하세요, orphanRemoval = true 로 했을 때, delete 쿼리가 나가지 않는 오류가 있어 질문드리게 되었습니다. 실습에 사용한 코드는 아래와 같습니다. (import 문은 제거하였습니다.)@Entity public class Parent { @Id @GeneratedValue @Column(name = "PARENT_ID") private Long id; private String name; @OneToMany(mappedBy = "parent", orphanRemoval = true) private List<Child> childList = new ArrayList<>(); public void addChild(Child child) { this.childList.add(child); child.setParent(this); } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Child> getChildList() { return childList; } } @Entity public class Child { @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn(name = "PARENT_ID") private Parent parent; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Parent getParent() { return parent; } public void setParent(Parent parent) { this.parent = parent; } } public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.persist(child1); em.persist(child2); em.flush(); em.clear(); Parent findParent = em.find(Parent.class, parent.getId()); findParent.getChildList().remove(0); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } }위의 JpaMain.main() 을 실행했을 때, 아래와 같은 로그가 나옵니다. (DDL 옵션은 create 입니다.)/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=57639:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/charsets.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/cldrdata.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/dnsns.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/jaccess.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/jfxrt.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/localedata.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/nashorn.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/sunec.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/zipfs.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/jce.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/jfr.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/jfxswt.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/jsse.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/management-agent.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/resources.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/rt.jar:/Users/preferkim/IdeaProjects/inflearn-spring/hello-jpa/target/classes:/Users/preferkim/.m2/repository/org/hibernate/hibernate-entitymanager/5.3.10.Final/hibernate-entitymanager-5.3.10.Final.jar:/Users/preferkim/.m2/repository/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final.jar:/Users/preferkim/.m2/repository/org/hibernate/hibernate-core/5.3.10.Final/hibernate-core-5.3.10.Final.jar:/Users/preferkim/.m2/repository/org/javassist/javassist/3.23.2-GA/javassist-3.23.2-GA.jar:/Users/preferkim/.m2/repository/antlr/antlr/2.7.7/antlr-2.7.7.jar:/Users/preferkim/.m2/repository/org/jboss/jandex/2.0.5.Final/jandex-2.0.5.Final.jar:/Users/preferkim/.m2/repository/com/fasterxml/classmate/1.3.4/classmate-1.3.4.jar:/Users/preferkim/.m2/repository/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar:/Users/preferkim/.m2/repository/org/dom4j/dom4j/2.1.1/dom4j-2.1.1.jar:/Users/preferkim/.m2/repository/org/hibernate/common/hibernate-commons-annotations/5.0.4.Final/hibernate-commons-annotations-5.0.4.Final.jar:/Users/preferkim/.m2/repository/javax/persistence/javax.persistence-api/2.2/javax.persistence-api-2.2.jar:/Users/preferkim/.m2/repository/net/bytebuddy/byte-buddy/1.9.5/byte-buddy-1.9.5.jar:/Users/preferkim/.m2/repository/org/jboss/spec/javax/transaction/jboss-transaction-api_1.2_spec/1.1.1.Final/jboss-transaction-api_1.2_spec-1.1.1.Final.jar:/Users/preferkim/.m2/repository/com/h2database/h2/1.4.199/h2-1.4.199.jar hellojpa.JpaMain Feb 10, 2023 12:19:21 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation INFO: HHH000204: Processing PersistenceUnitInfo [ name: hello ...] Feb 10, 2023 12:19:21 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.3.10.Final} Feb 10, 2023 12:19:21 PM org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found Feb 10, 2023 12:19:21 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> INFO: HCANN000001: Hibernate Commons Annotations {5.0.4.Final} Feb 10, 2023 12:19:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!) Feb 10, 2023 12:19:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/test] Feb 10, 2023 12:19:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001001: Connection properties: {user=sa} Feb 10, 2023 12:19:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001003: Autocommit mode: false Feb 10, 2023 12:19:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init> INFO: HHH000115: Hibernate connection pool size: 20 (min=1) Feb 10, 2023 12:19:21 PM org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect Feb 10, 2023 12:19:22 PM org.hibernate.cfg.AnnotationBinder processJoinedDiscriminatorProperties WARN: HHH000457: Joined inheritance hierarchy [hellojpa.domain.item.Item] defined explicit @DiscriminatorColumn. Legacy Hibernate behavior was to ignore the @DiscriminatorColumn. However, as part of issue HHH-6911 we now apply the explicit @DiscriminatorColumn. If you would prefer the legacy behavior, enable the `hibernate.discriminator.ignore_explicit_for_joined` setting (hibernate.discriminator.ignore_explicit_for_joined=true) Hibernate: drop table Album if exists Hibernate: drop table Book if exists Hibernate: drop table Child if exists Hibernate: drop table Item if exists Hibernate: drop table Locker if exists Hibernate: drop table Member if exists Hibernate: drop table Movie if exists Hibernate: drop table Parent if exists Hibernate: drop table Team if exists Hibernate: drop sequence if exists hibernate_sequence Hibernate: create sequence hibernate_sequence start with 1 increment by 1 Hibernate: create table Album ( artist varchar(255), ITEM_ID bigint not null, primary key (ITEM_ID) ) Hibernate: create table Book ( author varchar(255), isbn varchar(255), ITEM_ID bigint not null, primary key (ITEM_ID) ) Hibernate: create table Child ( id bigint not null, name varchar(255), PARENT_ID bigint, primary key (id) ) Hibernate: create table Item ( DTYPE varchar(31) not null, ITEM_ID bigint not null, name varchar(255), price integer not null, primary key (ITEM_ID) ) Hibernate: create table Locker ( LOCKER_ID bigint not null, name varchar(255), primary key (LOCKER_ID) ) Hibernate: create table Member ( MEMBER_ID bigint not null, createdBy varchar(255), createdDate timestamp, lastModifiedBy varchar(255), lastModifiedDate timestamp, USERNAME varchar(255), LOCKER_ID bigint, TEAM_ID bigint, primary key (MEMBER_ID) ) Hibernate: create table Movie ( actor varchar(255), director varchar(255), ITEM_ID bigint not null, primary key (ITEM_ID) ) Hibernate: create table Parent ( PARENT_ID bigint not null, name varchar(255), primary key (PARENT_ID) ) Hibernate: create table Team ( TEAM_ID bigint not null, createdBy varchar(255), createdDate timestamp, lastModifiedBy varchar(255), lastModifiedDate timestamp, name varchar(255), primary key (TEAM_ID) ) Hibernate: alter table Member add constraint UK_336xr48t7ci4jeiq7lt6xm2f4 unique (LOCKER_ID) Hibernate: alter table Album add constraint FK75mrpprv8oigh00y92tibw7id foreign key (ITEM_ID) references Item Hibernate: alter table Book add constraint FK2srbe8wjbanr4vtkrsb8atq7o foreign key (ITEM_ID) references Item Hibernate: alter table Child add constraint FKqtrfkxtu92rllepi09f1mwvls foreign key (PARENT_ID) references Parent Hibernate: alter table Member add constraint FK332130jlg9s5hyeuk7gfgi052 foreign key (LOCKER_ID) references Locker Feb 10, 2023 12:19:22 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@55caeb35] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. Feb 10, 2023 12:19:22 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@3af37506] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. Hibernate: alter table Member add constraint FKl7wsny760hjy6x19kqnduasbm foreign key (TEAM_ID) references Team Hibernate: alter table Movie add constraint FKqqwswm36y8uqoh9emtoruoxcv foreign key (ITEM_ID) references Item Feb 10, 2023 12:19:22 PM org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources INFO: HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@36a7abe1' Hibernate: call next value for hibernate_sequence Hibernate: call next value for hibernate_sequence Hibernate: call next value for hibernate_sequence Hibernate: /* insert hellojpa.domain.cascade.Parent */ insert into Parent (name, PARENT_ID) values (?, ?) Hibernate: /* insert hellojpa.domain.cascade.Child */ insert into Child (name, PARENT_ID, id) values (?, ?, ?) Hibernate: /* insert hellojpa.domain.cascade.Child */ insert into Child (name, PARENT_ID, id) values (?, ?, ?) Hibernate: select parent0_.PARENT_ID as PARENT_I1_7_0_, parent0_.name as name2_7_0_ from Parent parent0_ where parent0_.PARENT_ID=? Hibernate: select childlist0_.PARENT_ID as PARENT_I3_2_0_, childlist0_.id as id1_2_0_, childlist0_.id as id1_2_1_, childlist0_.name as name2_2_1_, childlist0_.PARENT_ID as PARENT_I3_2_1_ from Child childlist0_ where childlist0_.PARENT_ID=? Feb 10, 2023 12:19:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop INFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test] Process finished with exit code 0 질문Q. 저는 Parent 에 orphanRemoval=true 로 설정되어있고, JpaMain.main() 에서 '부모 엔티티의 컬렉션에서 자식 엔티티의 참조를 제거' 하고 있으므로 당연히 DELETE 문이 나가야 하지 않나라고 생각했지만, 실제로는 DELETE 문이 나가지 않더라고요. 혹시 제가 잘못이해하고 있는 걸까요?Q. Parent 에 cascade = CascadeType.ALL 옵션을 추가하고 나면 DELETE 문이 정상적으로 나가는 것을 확인할 수 있었습니다. orphanRemoval=true 를 설정해주기만 DELETE 문이 나가야할 것 같은데, cascade = CascadeType.ALL 까지 추가해야 DELETE 문이 나가는 이유가 무엇인지 궁금합니다.영한님과 서포터님들께 항상 감사드립니다.🙇♂️