묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨spring boot actuator 파헤치기
다음 강의를 준비하신다면 음질좀 높여주실 수 있으신가요..?ㅠㅠㅠ
강의 내용에 대해 질문해 주세요에러가 날 경우 본인 코드가 있는 git 주소를 알려주거나 최대한 상세히 적어주세요
-
해결됨실전! 스프링 데이터 JPA
양방향 @OneToMany 에서의 단순 delete(Instance) 에 대해 질문있습니다.
안녕하세요! 정말 오랜만에 질문 올립니다. 다름이 아니라 아래와 같이 Parent, Child 가 있고 이 둘을 양방향으로 맺었을때@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Parent { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) private final Set<Child> children = new HashSet<>(); public Parent(String name) { this.name = name; } public void addChild(Child... childs) { for (Child c : childs) { c.addParent(this); children.add(c); } } } @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Child { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parent_id", nullable = false) private Parent parent; public Child(String name) { this.name = name; } public void addParent(Parent parent) { this.parent = parent; } }아래와 같이 테스트코드를 짜면@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) @DataJpaTest(showSql = false) class ParentRepositoryTest { @Autowired ParentRepository parentRepository; @Autowired ChildRepository childRepository; @Rollback(false) @Test @DisplayName("delete, deleteAll, deleteAllInBatch 를 비교한다.") public void differenceBetweenDeleteAllAndDeleteAllInBatch2() { Parent parent1 = new Parent("부모 1"); Child child1 = new Child("자식 1"); Child child2 = new Child("자식 2"); Child child3 = new Child("자식 3"); parent1.addChild(child1, child2, child3); parentRepository.save(parent1); Parent parent = parentRepository.findAllWithChildren("부모 1").get(); parent.getChildren().remove(child1); childRepository.delete(child1); } }parent.getChildren().remove(child1); 의 존재 여부에 따라 delete 쿼리가 나갈지 말지 결정되더라구요.이거에 대해서 고민을 해봤습니다. 제가 내린 결론은"하나의 tx 에서 Parent 가 속한 Child 들 중 하나를 childRepository.delete(Child) 혹은 deleteAll() 을 통해 지우려할때, Parent 의 Child 의 컬렉션에서 지울 Child 를 먼저 remove 하여 부모 자식간의 연결관계를 끊어주는 작업이 선행되어야 한다. 그 이유는 삭제할 Child 를 repository 에서 지우기만 하면 Parent 에 남아있는 컬렉션에는 지워진 데이터가 카컬렉션에 남아있어 로직에 문제가 발생할 수 있기 때문이다. 그래서 Parent 에서 지울 Child 를 먼저 remove 를 사용하지 않으면 delete 쿼리가 나가지 않는 것이고, 먼저 remove 를 하면 delete 쿼리가 나가는 것이다"라고 결정지었습니다. 아무래도 JPA 에서 최고 권위자인 김영한강사님의 조언이 필요합니다. 감사합니다.(고아객체 제거인 orphanRemoval 은 일부러 사용하지 않았습니다. 순수 delete 에서만 그 원리를 알고싶습니다. 항상 무지성으로 querydsl 혹은 in 절로 지우기만해서 근본을 까먹은거같네요 ㅠㅠ)
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
csrf Post 요청 시 에러
안녕하세요.csrf.http 파일로 /csrf post 방식에 헤더에 값을 넣어서 테스트 중인데요.강사님이 말씀해주신 방법으로 해도 테스트가 진행이 안되서 질문드립니다.login 페이지에 생성된 토큰 값을 요청 시에 같이 전달했는데 왜작동이 되지 않을까요??### GET request with a header GET http://localhost:8080 Content-Type: application/json ### POST request with a header POST http://localhost:8080/csrf Content-Type: application/json ### POST request with a header POST http://localhost:8080/csrf Content-Type: application/x-www-form-urlencoded _csrf = GQUnQECQsPrRDBd53iPaRAYfoKozqh0dZfg91MeDiOKw3OOtKjUQcHb00578aiNN6A7ufTEpjZMAyXswV85b4KSyutqB7IeY ### Send GET request with json body GET http://localhost:8080/csrfToken Content-Type: application/json위는 csrf.http 파일입니다.강사님은 요청이 성공적으로 되는데 저는 똑같이 로그인 페이지가 계속 나오더라구요..
-
미해결스프링 핵심 원리 - 기본편
수동 빈 등록에서의 의존관계 주입
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 해당 강의에서 컴포넌트 스캔으로 빈을 등록할 때 의존 관계를 주입하는 방법 중 생성자 주입, setter 주입, 필드 주입, 일반 메소드 주입을 배웠습니다. 그렇다면, 아래 코드와 같은 수동 빈 등록에서//AppConfig.java //memberRepository 빈은 등록되어 있다고 가정 @Configuration public class AppConfig { //1. 이렇게 하면 생성자 주입 @Bean public MemberService memberService1(){ return new MemberServiceImpl(memberRepository()); } //2. 이렇게 하면 setter 주입 public MemberService memberService2(){ MemberServiceImpl memberService = new MemberServiceImpl(); memberService.setMemberRepository(memberRepository()); return memberService; } //3. 필드 주입은 어차피 setter가 필요하므로 생략 //4. 이렇게 하면 일반 메소드 주입 public MemberService memberService3(){ MemberServiceImpl memberService = new MemberServiceImpl(); memberService.init(memberRepository()); return memberService; } }각 번호대로 작성하면 되나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
기본 생성자
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.Item 클래스의 기본 생성자를 만드는 이유가 무엇인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Failed to load ApplicationContext 오류
[질문 내용]h2 db랑 연결이 되지 않는 것 같은데어제 gradle에서 TRUE 설정을 뺐을 때는 작동이 잘 됐는데 오늘 다시 작동시켜보려 하니 작동이 안됩니다..MemberRepositoryTest 에서 run을 돌렸을 때 다음과 같은 오류가 발생합니다. 오류는 사진과 같고zip파일 드라이브에 첨부하겠습니다.https://drive.google.com/file/d/126dOVMwaCPYOSqD4f7XOC0BkCUqtONAK/view그리고 제가 노트북을 2대를 사용해서 깃으로 관리하고 있는데 그건 큰 관계 없겠죠..?답변 기다리겠습니다. 감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Web server failed to start. Port 8080 was already in use.
이게 뭘까요? 사이트엔 Unauthorized 글자만 나타납니다인터넷에서 검색해서 포트종료도 시켜봤는데그게 안됩니다.. 도와주세요 ㅠㅠㅠ
-
해결됨스프링 시큐리티 완전 정복 [6.x 개정판]
SecurityContextRepository / SecurityContextHolderFilter - 2 강의 질문 있습니다
13분 40초에 세션에서 Context 객체가 있는지 확인하고세션에 없어서 request 를 확인한다고 하셨는데, request 확인하는 부분을 건너뛰고 바로 AnonymousAuthenticationToken 을 만드는 부분으로 넘어가셨네요인증이 없는 상태에서 요청하면 SecurityContext를 찾을 때, reuqest는 확인하지 않고 세션만 확인하는걸까요 ?
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
헥사고날 아키텍처에서 Entity 내의 from과 to 메서드도 분리하고 싶다면?
강의 열심히 들으며 실습하고 있습니다!헥사고날 아키텍처를 학습하며 적용해 보니 다양한 어려움이 생기더라구요 ㅠㅠ혹시 entity 내의 from과 to 메서드조차 분리하고자 할 때 궁금한 점이 생겼습니다.Entity 내의 from과 to 메서드로 domain ↔ entity를 변환하는 것을 Converter 클래스를 통해 관심사를 분리하는 것이 괜찮은지?만일 분리한다면, Converter interface의 위치는 domain 하위 port package일지, infrastructure 하위 port를 만들어 사용할지? (Impl 구현체는 따로 패키지를 생성할 예정입니다)강의 열심히 듣고 보내주신 책도 잘 받아 열심히 공부하고 있습니다 ㅎㅎ책에 껴주신 Thankyou.java 파일 잘 받았습니다! 감사합니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ServletApplication 실행 안됨
잘 실행되면 서버가 갑자기 위와 같은 에러가 뜨면서 실행이 안됩니다.https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.owcsqc19zslv여기 나와있는대로 해보았지만 해결이 계속 안돼서 해결방법을 알려주시면 감사하겠습니다스프링 기본 강의에서 했던 core 프로젝트는 잘 동작이 됩니다.
-
미해결쥬쥬와 함께 하루만에 끝내는 스프링 테스트
Model 의존 java.lang, jakarta
좋은 강의 잘 듣고 있습니다.<의존성 검증: Controller는 Entity를 사용하고 있을까?> 강의에서요.11:40초 쯤에서 에러 로그들이 의미하는 것이 궁금합니다.Class <com.jyujyu.dayonetest.model.StudentFail> is annotated with <jakarta.persistence.Entity> Class <com.jyujyu.dayonetest.model.StudentPass> extends class <java.lang.Object>..위 같은 에러는 해당 모델들(StudentFail, StudentPass) 이 @Entity 로 정의되었으므로 jakarta.persistence.Entity, jakarta.persistence.Table> 에서 사용된 것은 알겠는데java.lang.Object 로 사용된 것은 어떻게 봐야 하나요?단순 Object 라면, 모든 클래스는 Object 를 의존하는 것 아닌가요?미리 답변 감사합니다!
-
미해결스프링 핵심 원리 - 기본편
bean 주입관련 로그 출력이 안됩니다...
[질문 내용]‘스프링 핵심 원리 - 기본편’커리큘럼의 섹션3 ->스프링으로 전환하기 강의에서, 4분 56초쯤 보시면 런타임 후에 bean등록하는 내용을 설명해주시는데요.저는 해당 로그가 출력이 안됩니다 ㅠ참고로 JDK17버전, springframework.boot는 3.3.1버전으로 프로젝트를 생성했습니다…그리고 혹시 Preferences의 build, run설정이 IntelliJ IDEA로 해놔서 그런가? 해서 gradle로 바꿔서 Refresh하고 재런타임해봤는데도 동일했고요…또 챗지피티로 검색해서나온 제가 올린 이미지의 3번내용 vm option를 부여해봐도 안됩니다…물론 기존 비슷한 질문에 대해 해결책으로 낮은 버전으로 하면 된다고 되어 있는데 어차피 버전 상관없이 로그출력될수있도록 설정이 맞춰져있다면 출력이 되어야 하는거잖아요..? 그래서 지금 진행하는 버전으로 시도해보고 싶어서요... 어떻게 해야 해결이 될까요..?https://drive.google.com/file/d/1XNU4xQnzjefJlXhUMkGRNKzQ_aT02-yJ/view?usp=drive_link해당 프로젝트의 공유파일링크입니다. 접근권한에 대해 docs내용에 해당 공유부여자의 이메일이 안나와있어 공유대상자를 추가하진 못했습니다. 댓글로 말씀주시면 바로 접근권한 부여드리도록 하겠습니다.
-
미해결스프링 핵심 원리 - 기본편
싱글톤 패턴 문제점에서 구체클래스 의존해서 DIP위반한다고 하셨는데 이건 싱
싱글톤 패턴 문제점에서 구체클래스 의존해서 DIP위반한다고 하셨는데 이건 싱글톤 아니여도 마찬가지 아닌가요?밑에 처럼 싱글톤을 안써도 , MemberServiceImple이라는 구체구현 클래스가 드러납니다..public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); }
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ResponseBody를 쓰더라도 어댑터가 ModelAndView를 반환하나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]@ResponseBody나 HttpEntity를 사용하면 뷰 리졸버를 사용하지 않는다고 기억하고 있습니다. 그러면 핸들러 어댑터에서 반환하는 건 ModelAndView가 아닌 건가요?저는 아래 DispatcherServlet의 doDispatch() 코드를 보고mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); if (asyncManager.isConcurrentHandlingStarted()) { return; }(mv 타입은 ModelAndView)핸들러 어댑터는 항상 ModelAndView를 반환한다고 이해했던 거로 기억합니다. 일단 ModelAndView를 반환하지만, 뷰 리졸버까지 가진 않는다고 생각했었습니다.그런데 HttpMessageConverter를 배울 때 뷰 리졸버를 사용하지 않는다고는 배웠지만 ModelAndView에 대한 언급이 없었던 거 같아서 확신이 안 듭니다.@ResponseBody를 사용할 경우 아래 그림은 어떤 식으로 바뀌는 걸까요? 핸들러 어댑터가 ModelAndView를 반환하고, 뷰 리졸버나 뷰 render() 호출 없이 DispatcherServlet에서 바로 응답을 보낸다. 이렇게 생각하면 될까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
실행된 결과에 ?라고 뜨는 이유가 무엇일까요??
html로 하던 포스트맨으로 하던 결과 출력이 문자형태가 안나오고 ? 로 다 뜨는데 이유가 무엇일까요?html 파일내에는 utf-8 로 되어있습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Failed to load ApplicationContext 오류
[질문 내용]h2 db랑 연결이 되지 않는 것 같은데어제 gradle에서 TRUE 설정을 뺐을 때는 작동이 잘 됐는데 오늘 다시 작동시켜보려 하니 작동이 안됩니다.. 오류는10000자가 넘어가서 사진으로 첨부합니다.. zip파일 드라이브에 첨부하겠습니다.https://drive.google.com/file/d/126dOVMwaCPYOSqD4f7XOC0BkCUqtONAK/view
-
미해결스프링 핵심 원리 - 기본편
[질문] > Task :compileJava FAILED 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]항상 고생이 많으십니다. > Task :compileJava FAILED 오류에 대해서 여쭤보고자 합니다.구글링 결과는 java 버전이 맞지 않아서 나오는 문제라고 했는데,다 찾아본 결과 JAVA 17버전으로 맞추고 했는데도 계속 오류가 나는 문제가 있습니다. 현재 윈도우 환경에서 공부하고 있습니다.오류 내용 - 사진 오류 내용 - 코드오류 내용Starting Gradle Daemon... Gradle Daemon started in 2 s 802 ms > Task :compileJava C:\Users\woon7\OneDrive\���� ȭ��\Spring �ٽ� ���� - �⺻��\core\src\main\java\hello\core\AutoAppConfig.java:19: error: illegal start of type <<<<<<< HEAD ^ C:\Users\woon7\OneDrive\���� ȭ��\Spring �ٽ� ���� - �⺻��\core\src\main\java\hello\core\AutoAppConfig.java:19: error: > expected <<<<<<< HEAD ^ C:\Users\woon7\OneDrive\���� ȭ��\Spring �ٽ� ���� - �⺻��\core\src\main\java\hello\core\AutoAppConfig.java:24: error: illegal start of type ======= ^ C:\Users\woon7\OneDrive\���� ȭ��\Spring �ٽ� ���� - �⺻��\core\src\main\java\hello\core\AutoAppConfig.java:29: error: illegal start of type >>>>>>> origin/master ^ C:\Users\woon7\OneDrive\���� ȭ��\Spring �ٽ� ���� - �⺻��\core\src\main\java\hello\core\AutoAppConfig.java:29: error: <identifier> expected >>>>>>> origin/master ^ C:\Users\woon7\OneDrive\���� ȭ��\Spring �ٽ� ���� - �⺻��\core\src\main\java\hello\core\AutoAppConfig.java:29: error: <identifier> expected >>>>>>> origin/master ^ 6 errors > Task :compileJava FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileJava'. > Compilation failed; see the compiler error output for details. * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. See https://docs.gradle.org/7.6/userguide/command_line_interface.html#sec:command_line_warnings BUILD FAILED in 12s 1 actionable task: 1 executed ``` project Structure - Project placform settings - SDKs 시스템 환경변수 설정 자바 버전 Settings - Gradle 버전 Settings - Java Compier 버전build.gradleplugins { id 'org.springframework.boot' version '2.3.3.RELEASE' id 'io.spring.dependency-management' version '1.0.9.RELEASE' id 'java' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' //lombok 설정 추가 시작 configurations { compileOnly { extendsFrom annotationProcessor } } //lombok 설정 추가 끝 repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' //lombok 라이브러리 추가 시작 implementation 'org.projectlombok:lombok' annotationProcessor ("org.projectlombok:lombok:1.18.20") testImplementation ("org.projectlombok:lombok:1.18.20") testAnnotationProcessor ("org.projectlombok:lombok:1.18.20") //lombok 라이브러리 추가 끝 testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } } test { useJUnitPlatform() } ``` 다 찾아서 이렇게 설정해보았지만.. 테스트 코드를 돌려도 갑자기 컴파일이 되지 않는 문제가 있습니다..
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
재고시스템 동시성 문제 해결에 redis incr을 사용해도 되나요?
재고 시스템 강의 듣고 난 이후에 쿠폰시스템 강의 들었는데요,재고시스템 강의에서 사용한 lock 방식은 성능에 영향이 있으니 쿠폰발급 강의에서 사용했던 redis incr 명령과 set을 사용해서 재고시스템 문제도 해결할 수 있지 않을까 생각이 드는데요. 가능한 방법인가요?
-
미해결3. 웹개발 코스 [스프링 프레임워크+전자정부 표준프레임워크]
EA + egovframe 신규 강의 무료쿠폰 메일
EA + egovframe 신규 강의 무료쿠폰 메일 드렸는데. 답변이 없어서 글 남겨 봅니다.
-
미해결스프링 핵심 원리 - 기본편
의존성 주입과 빈의 관계
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 수동으로 빈을 등록 할 때 빈이 등록되는 순서는 개발자가 작성한 순서대로 보장되지 않음을 수동 빈 등록 강의에서 배웠습니다. 그렇다면, 자동으로 빈을 등록할 때는 빈의 등록 순서가 어떻게 되나요? 만약 컴포넌트 스캔의 basePackages가 hello.core라면, 해당 패키지부터 하위로 차례대로 내려가면서 등록하나요?만약 생성자로 의존 관계를 주입할 때, 주입해야 하는 빈이 등록되어 있지 않으면 어떡하나요? 빈을 찾는데 없다면, 생성자를 호출하고 있는 동시에 빈을 등록하나요? 예를 들어, OrderServiceImpl 빈 등록을 위해 생성자 호출 -> 생성자를 통해 의존 관계 주입 시도 -> 그런데 MemberRepository 빈이 없음 -> MemberRepository 빈 등록. 이런 방식인건가요?