묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원목록 white label error (500) java.lang.NullPointerException
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 회원목록 조회시Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as a fallback.Wed May 31 00:06:03 KST 2023There was an unexpected error (type=Internal Server Error, status=500).No message availablejava.lang.NullPointerException at hello.hellospring.controller.MemberController.list(MemberController.java:40) 라고 뜨며 아래는 MemberController 코드입니다 package hello.hellospring.controller; import hello.hellospring.domain.Member; import hello.hellospring.service.MemberService; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @Controller public class MemberController { private final MemberService memberService; @Autowired public MemberController(MemberService memberService) { this.memberService = memberService; } @GetMapping("/members/new") public String createForm() { return "members/createMemberForm"; } @PostMapping("/members/new") public String create(MemberForm form) { Member member = new Member(); member.setName(form.getName()); memberService.join(member); return "redirect:/"; } @GetMapping("/members") private String list(Model model) { List<Member> members = memberService.findMembers(); model.addAttribute("members", members); return "members/memberList"; } }
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
실무에서는 그럼 spring.jpa.open-in-view: false 로 설정하는 경우가 많은가요 ?
실무에서spring.jpa.open-in-view: false로 설정하는 경우가 많은가요 ? 또한 사이드 프로젝트 정도로 규모가 작을 경우그냥 기본 설정대로 true로 사용해도 되나요 ?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@Transactional
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]트랜잭셔널 어노테이션을 레포지토리나 컨트롤러가 아니라 서비스에 붙이는 이유가 있나요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
배치처리를 하려면 어떻게 해야하나요?
스프링이 제공하는 기능이 아니라 제가 직접해줘야하는건가요? 영속성 컨텍스트가 일정이상 차면 비워주는 작업을 어떻게 할 수 있을까요?코드가 나와있긴하지만 그 코드는 너무 로우 레벨아닌가요?? SPRING DATA JPA사용하면서 em을 직접적으로 사용하진 않잖아요..자동으로 해주는건가요...?
-
미해결스프링 배치
JobInstance 생성 및 실행에 대해서 질문이 있습니다.
안녕하세요. 7:32초 쯤에부터 말씀을 해주신 내용에 질문이 있습니다. 다음 강의인 JobParameter의 내용까지 모두 수강하고 해당 질문을 드리게 되었는데요."이전과 동일한 Job, 그 다음에 똑같은 JobParameter의 값으로 실행이 되면 이미 존재하는 JobInstance를 리턴하고, 결국엔 수행이 실패합니다""똑같은 Job과 똑같은 JobParameter의 내용으로 다시 수행할 필요가 없는거죠. 그럼 내용까지 똑같아 지니까"위와 같이 말씀을 해주셨는데 해당 말씀을 듣고, 똑같은 Parameter의 "값"을 가진다고 해도 Job이 수행이 되어야하는게 아닌가? 왜 실패처리를 하게 Spring Batch에서 구현을 해놓은거지?라는 의문이 들었습니다. 그리고 이러한 의문을 가졌을때는 JobParameter에 대한 실습을 진행하지 않았던 상태여서 JobParameter를 넘기지 않는것을 토대로 Job을 실행시켜보았는데 강사님의 말씀대로 최초 한번만 실행되고 그 이후로는 Job이 실행되지 않고 Database에 이미 완료되었다는 Error Message와 함께 데이터가 쌓이더군요.그래서 아 정말 그렇구나 JobParameter가 같으면("JobParameter가 없다"라는게 같음, 동일한 Job + Empty JobParameter) 실패처리를 하는구나라고 생각을 하고 강의 수강을 이어갔습니다.그리고 다음 강의에서 JobParameter에 총 4개의 Parameter를 가지고 Job을 실행하시는 것을 보여주셨습니다.name=user1seq=2date=2021/01/01age=16.5JobInstance 강의에서 배운 내용을 가진채로, 저는 해당 Parameter의 값으로 여러번 실행하면 에러가 날줄 알았는데 예상과는 다르게 저의 처음 예상(똑같은 Parameter의 "값"을 가진다고 해도 수행이 되어야하는게 아닌가?)대로 정상적으로 모두 실행이 되었습니다. 또한 JobParameter 강의에서 강사님께서도 같은 Parameter를 가지고 여러번 수행했을때(jar, InteliJ Configuration으로 실행 방법은 달랐지만 넘기는 Parameter는 같은) 정상적으로 해당 Job이 성공을 하는 Flow가 강의에 담겨있었습니다.배운것과 조금 다른것 같아서 아래 코드를 다시 살펴보았고, 동일한 Job + JobParameter의 "값"의 동일함이 아닌,동일한 Job + JobParameter "객체"의 동일 여부를 가지고 JobInstance의 생성 및 실행을 구분하는것이 아닌가라는 결론을 내게 되었습니다.@Override public void run(ApplicationArguments args) throws Exception { JobParameters jobParameters = new JobParametersBuilder() .addString("name", "user1") .addLong("seq", 2L) .addDate("date", new Date()) .addDouble("age", 16.5) .toJobParameters(); jobLauncher.run(job, jobParameters);위의 제 결론에 확신을 더 얻고자, 말도 안되는 코드인것 같지만 아래와 같이 수행을 해봤을때 IllegalStateException: Failed to execute ApplicationRunner 에러가 발생하였습니다.아래 코드의 의도는 동일한 jobParameters라는 객체를 가지고 같은 Job을 실행시켰을때 오류가 날것이다라는 가정이였고, 오류가 났으니 제 가정이 맞는것 같습니다.@Override public void run(ApplicationArguments args) throws Exception { JobParameters jobParameters = new JobParametersBuilder() .addString("name", "user1") .addLong("seq", 2L) .addDate("date", new Date()) .addDouble("age", 16.5) .toJobParameters(); jobLauncher.run(job, jobParameters); // 같은 jobParameters 객체를 가지고 한번 더 실행 jobLauncher.run(job, jobParameters);정리하자면, 동일한 Job + JobParameter의 "값"의 동일함이 아닌,동일한 Job + JobParameter "객체"의 동일 여부를 가지고 JobInstance의 생성 및 실행을 구분하는것이 맞는것 같다인데, 혹시 제 생각이 맞을까요? 실제로 BATCH_JOB_EXECUTION_PARAMS 테이블에서 Parameter값들은 계속 같은게 들어오지만 BATCH_JOB_INSTANCE 테이블의 JOB_KEY값은 계속 다르게 저장이되네요.
-
미해결스프링 시큐리티
userDetailService
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.userDetailService를 강의에서 만들지도 않았는데 의존주입하는건 처음보네요; 깃허브 소스에도 없구요. 어떻게 구현하라는 뜻인가요.진짜 환불하고싶습니다. 내용도 너무 어렵게 설명하구요.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
프록시 벗기기가 언제 필요하나요?
어떤 상황에서 하이버네이트가 제공하는 프록시벗기기가 필요한가요?(프록시 객체에서 원본객체를 가져오는 메서드가 필요한 상황)
-
미해결스프링 시큐리티
UserDetailService
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. UserDetailService를 해당강의에서 만드신적도 없는데 의존주입을 하시네요? 깃허브 소스에도 없고;; 도대체 어떻게 이해하란 말씀이십니까.. 그리고 내용도 너무 어려워서 환불하고 싶어죽겠네요 하아 강의자료를 왜 다운받아서.. 여튼 라이브코딩도 아니고 참.. UserDetailService를 보여주셔야할것같네요;
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 코드 작성할때 주문수량 8에서 10
주문기능테스트 8분 59초 보면8개로 했다가 10개로 바꾸면 에러 나는데 h2 db에 해당 데이터를 확인할 수 가 없어서요해당 테스트 한 데이터 값 남게하려면 어떤 어노테이션을 사용했는데 그게 뭘까요 ?그리고 제가 알기론 테스트는 한번실행하고 나서 다시 초기화 시켜주는 걸로 알고 있는데 어떻게 8개 했다가 10으로 바꿨다고 에러가 나는 건가요 ? 강의를 아무래도 병행하다 보니 드문드문 띄게 되네요 이런게 강의자료에도 잘 설명이 되면 더 좋을텐데 스프링 문법이 안써있어서 너무 아쉬워요 책을 사야 할까요 ?
-
미해결스프링 시큐리티
userDetailService를 작성한 적이 없는데;
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님.. 너무 강의 못하시는거아닙니까.. userDetailService를 만든적도 없고 깃허브관련 소스들어가니까 있지도않은데;; 진짜 환불하고싶습니다.. 따라가기에 너무 어렵구요;;
-
미해결스프링 부트 - 핵심 원리와 활용
Actuator , gradle-git-properties plugin remote build 문의.
안녕하세요aws code pipeline를 통해서remote build를(code build) 통해 docker image를 배포하여 사용중인데요.로컬에서는 .git폴더를 도커 카피 파일에 추가하여 정상적으로 이미지 푸시가 완료되는것까지확인하였는데, 원격지에서는 .git 폴더가 없으니 인식이 안되는것 같은데이런 경우 원격지에서 com.gorylenko.gradle-git-properties plugin을 사용하여actuator 내에 git 정보를 포함시키고 싶은 경우 어떻게 해야하나요??저장소는 git hub private repository를 사용중입니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
osiv관련 질문
osiv가 뷰에서도 지연로딩이 가능하게 하려고 도입한거잖아요 (뷰에서 필요한값들을 지연로딩으로 가져오려고)근데 지연로딩을 하면 결국 필요없는 쿼리가 추가로 나가게될텐데..애초에 필요한 데이터만 jpql사용해서 뽑아서 주면 문제가 해결되는거아닌가요? 왜osiv를 사용하는거죠?? 뷰와 리파지토리가 너무 연관되어서 그런가요..? 그게 그렇게 큰 단점인가요..?뭔가 osiv의 장점이 엄청많아보이는데 제가 다른 분들 프로젝트를 봤을때는 osiv를 거의 적용안했던것같거든요... 왜 잘 안쓰이는걸까요...
-
미해결스프링 시큐리티
오류 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.이런 오류가 뜨는데,, 어떻게 해결해야하나요..?
-
미해결스프링 배치
H2 데이터베이스 설정과 기본 Spring Batch 설정에 대해서 질문이 있습니다.
H2 데이터베이스 설정과, 배치 실행을 위한 Schema와 Table을 생성하는 설정은 생략하고 이번 수업을 진행하신걸까요?H2에 대한 의존성을 설치하기위해 pom.xml에 작성하신것을 언급해주시긴 했지만, 그 후에 application.yml 혹은 application.properties에 아래의 기본적인 설정이 필요합니다.spring.datasource.url=jdbc:h2:tcp://localhost/~/testspring.datasource.driver-class-name=org.h2.Driverspring.datasource.username=saspring.datasource.password=사실 이것은 너무 기본적인것이기 때문에 생략을 해도 크게 문제가 되지 않을것 같다는 생각이 듭니다.하지만, Spring Batch를 처음 접해보는 수강생으로서 아래의 설정은 언급을 한번 해주셨다면 좋지 않았을까 아쉬움이 듭니다.spring.batch.jdbc.initialize-schema=always해당 설정은 바로 다음 수업에서 다뤄주시던데, 혹시 이번 수업은 그냥 그럼 눈으로만 보고 넘어가는 수업으로 의도하신걸까요?버전이 다르거나 다른 변수들이 너무 많기때문에 수강하는 사람도 수업내용을 그대로 해보고 안된다고 바로 질문을 하기보다는 어느정도의 Googling을 통해서 해결할 수 있는 문제는 스스로 해결해야한다고 생각합니다. 그러는 과정속에서 성장도 할 수 있으니 이 과정은 필요하다고 생각합니다.하지만, 해당 수업은 수업에 전적으로 의존하는것과 수강생이 직접 Googling을 하는것의 그 중간점을 설정하기가 참 어려운것 같습니다.위의 배치 관련된 설정은 알고나니 너무 그 방법이 쉽고, 기본적인것이지만 저것을 몰랐던 상황에서는 오류가 왜 나는지에 대해서 많이 혼란스러웠던것 같습니다.해당 강의의 Github의 코드도 참고하기 위해 Part2.1과 2.2로 브랜치를 Checkout해서 확인해 보았는데도, 설정관련된 코드는 어디에도 없었습니다.강사님이 생각하시는 "수강생이 직접 해봐야하는것"의 기준은 어느정도로 생각하고 계신건가요??
-
미해결스프링 배치
Break Point와 Debugging시 단축키
안녕하세요 강의를 보다가 몇가지 질문이 생겨서 글을 남기게 됬습니다. 27분정도의 강의를 모두 직접 해봤는데도 의문이 풀리지 않아서 질문드립니다.조금 중간중간 생략이 되어있는것 같아서, 앞으로의 강의도 수강시에 이렇게 생략된것들은 저희가 그냥 할 줄안다고 혹은 했다고 가정하고 진행을 하시는건지 여쭤보고 싶습니다. 그게 맞다면 참고해서 강의를 수강할 예정입니다. 23:28초쯤에 main메소드 디버그 모드로 실행시, 갑자기 아래의 프록시를 만드는 createLazyProxy 메소드 4개에 Break Point가 찍혀있는데, 이거는 강의 내에서 혹시 언제 찍힌건가요? 아무리 찾아봐도 없는것 같아서 질문 드립니다. 그냥 저희가 SimpleBatchConfiguration.java에 가서 직접 포인트를 찍고 Debugging을 실행시킨다라는걸 가정하신걸까요? 아니면 이번 강의에서는 그냥 눈으로만 보고 넘기는걸까요?return createLazyProxy(jobExplorer, JobExplorer.class); 24:43초 쯔음에, createLazyProxy관련 Break Point 4개를 왔다갔다 하실때 단축키를 사용하시는것 같은데 혹시 어떤 단축키를 쓰신건가요? 혹은 단축키가 각각 개발자 마다 다르니, Step Over, Step Into와 같은 Debugging의 기본 Feature들 중에서 어떠한 것을 사용하신건가요? 혹시 위의 제가 말씀드린 것들중에 없다면 사용하신 Feature의 이름을 말씀해주시면 좋을것 같습니다.관련해서 강사님의 앞으로의 강의 계획을 제가 다른 질문에서 본적이 있습니다. 너무 기대가 되는데, 강사님도 앞으로의 강의에 강의중에 사용하신 단축키를 화면의 중앙 하단에 표시해주는 App을 사용하셔서 수강생들에게 어떠한 단축키를 사용하셨는지 실시간으로 알려줄 수 있게 강의를 녹화해보시는건 어떨까요? 이게 수강생들에게 상당히 도움이 많이됩니다.24:49초쯤에, BatchConfigurerConfiguration.java에서도 두개의 Break Point가 찍혀져 있는데요, 이것도 1번과 마찬가지로 그냥 저희가 해당 파일에 직접 들어가서 Break Point를 찍고 보라는걸 의도하셔서 생략하신건지 여쭤보고 싶습니다. 그리고 JPA관련된 의존성을 애초에 Initializer 단계에서 받지 않았기때문에 해당 Break Point의 코드에는 도달할 수 없을것 같습니다. 하지만 강의에서는 2번 질문처럼 어떤 단축키를 통해서? 왔다갔다 되더니 해당 2개의 Break Point에 도달을 한것 같습니다. 밑에 Debug관련된 Stack창에 Stack이라도 찍혀있다면 그거 보고서라도 할텐데 그것도 없어서 어떻게 저 코드에 도달하신걸까 여쭤보고 싶습니다. 저는 1,2번 질문에 있는 총 6개의 Break Point를 모두 찍고 Debugging을 진행했었는데 도달을 하지는 않았던것 같습니다.JpaBatchConfigurer(properties, batchDataSource.getIfAvailable(() -> dataSource) 위에 제가 질문 드린것들을 저는 아 그냥 수강생들이 충분히 할 수 있다고 생각을 하셔서 생략을 하셨구나라고 생각을 해서 강의에 있는 모든 내용을 직접 찾아보면서 해보았습니다. 꼭 강사님의 강의가 아니더라도 다른 분들의 강의를 들을때도 마찬가지로 저는 이렇게 직접 확인해보면서 학습을 하는데요, 이러한 것들이 있다면 Break Point를 미리 찍어놨다던지 라는, 딱 한번만이라도 언급만이라도 해주시면 좋을것 같습니다. Context를 갑자기 잃어버리는 느낌이여서 강사님의 의도를 전혀 파악하지 못하는것 같습니다.현재 23.5.30 기준으로 Spring의 Version도 오르고, Spring Batch 버전이 5버전으로 오른것 같습니다. 관련해서 Deprecated된게 조금 있던데 우선 강의에 나온 버전으로 듣고나면 5버전에서 어떤게 어떻게 바뀐건지 왜 Deprecated된건지 스스로 학습할수 있을것 같다고 생각이 드는데 맞을까요?사실 관련되서 질문이 하나도 없어서, 이게 지금 다른분들은 수월하게 하실 수 있는데 저만 이러는건지도 의문이 듭니다. 답변 주시면 잘 참고해서 나머지 강의도 열심히 수강하겠습니다 감사합니다 :D
-
미해결실전! 스프링 데이터 JPA
페이지를 유지하면서 엔티티를 DTO로 변환관련하여 질문
스프링 데이터 JPA 페이징과 정렬 강의 부분에서페이지를 유지하면서 엔티티를 DTO로 변환하기Page<Member> page = memberRepository.findByAge(10, pageRequest); Page<MemberDto> dtoPage = page.map(m -> new MemberDto());페이지를 유지하면서 엔티티를 DTO로 변환하는 예제가 있습니다.만약에 아래와 같이 Page<Member> page = memberRepository.findByAge(10, pageRequest); List<Member> dtoPage = faqListPage.stream().map(MemberDto::new) .toList();List<> 로 반환하여 페이징 처리를 하였는데 페이지를 유지한 첫번째 방식 차이점이 있을까요??실무에서는 어떤 방식을 사용하나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@BeforeAll 오류로 테스트가 무시되는 결과가 나옵니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강의를 다 수강하고 테스트를 해보니 이런 오류가 뜨고 테스트가 다 무시되었습니다.어떻게 해결해야 할까요?코드도 함께 올립니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
[13강] application.yml 파일 설정에서 문제가 있습니다.
강사님이 설명 해 주시는 대로 정말 다 따라했는데 안돼요.. 사용자 정보가 db에 등록이 안되어서 뭐가 문제인지 살펴봤는데아래 driver-class-name 경로가 인식이 안됩니다..강사님은 ctrl 누르고 클릭하면 파일 경로로 이동이 되시던데 전 안되네요.. 나름대로 구글링 해서 해결책을 찾아봐서 몇 개 시도해 봤습니다. mysql connector 파일 따로 다운받아서 java 11 버전 lib 파일에 옮기고외부 라이브러리 추가 해 줬습니다. build.gradle 파일에 의존성 코드도 추가해줬습니다. 그런데 해결이 안되네요...뭘 잘못했나 싶어서 파일 새로 다운받고 강의도 처음부터 다시 들으면서 따라했는데 소용없고 mysql도 원래 깔려있었어서 지우고 다시 깔았습니다.서버 run 하면 오류 안 뜨고 잘 돌아가고 웹 사이트도 접속이 잘 되는데 db 저장만 안 됩니다.. 런 로그입니다..오후 6:26:28: Executing ':LibraryAppApplication.main()'...> Task :compileJava UP-TO-DATE> Task :processResources UP-TO-DATE> Task :classes UP-TO-DATE> Task :LibraryAppApplication.main(). ____ _/\\ / ___'_ __ (_)_ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.7.6)2023-05-30 18:26:34.455 INFO 268 --- [ main] c.g.libraryapp.LibraryAppApplication : Starting LibraryAppApplication using Java 11.0.17 on DESKTOP-A2F7K18 with PID 268 (C:\Users\djxka\Desktop\library-app\build\classes\java\main started by djxka in C:\Users\djxka\Desktop\library-app)2023-05-30 18:26:34.460 INFO 268 --- [ main] c.g.libraryapp.LibraryAppApplication : No active profile set, falling back to 1 default profile: "default"2023-05-30 18:26:35.842 INFO 268 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.2023-05-30 18:26:35.884 INFO 268 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 18 ms. Found 0 JPA repository interfaces.2023-05-30 18:26:37.789 INFO 268 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)2023-05-30 18:26:37.808 INFO 268 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]2023-05-30 18:26:37.809 INFO 268 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.69]2023-05-30 18:26:38.079 INFO 268 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext2023-05-30 18:26:38.080 INFO 268 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3479 ms2023-05-30 18:26:38.455 INFO 268 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...2023-05-30 18:26:39.011 INFO 268 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.2023-05-30 18:26:39.095 INFO 268 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]2023-05-30 18:26:39.259 INFO 268 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.6.14.Final2023-05-30 18:26:39.640 INFO 268 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}2023-05-30 18:26:39.960 INFO 268 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect2023-05-30 18:26:40.429 INFO 268 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]2023-05-30 18:26:40.451 INFO 268 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'2023-05-30 18:26:40.540 WARN 268 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning2023-05-30 18:26:41.279 INFO 268 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''2023-05-30 18:26:41.300 INFO 268 --- [ main] c.g.libraryapp.LibraryAppApplication : Started LibraryAppApplication in 8.059 seconds (JVM running for 9.476)2023-05-30 18:26:49.558 INFO 268 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'2023-05-30 18:26:49.559 INFO 268 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'2023-05-30 18:26:49.561 INFO 268 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms 도와주세요ㅠㅜㅠㅜ
-
미해결실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD
ProductService의 updateProduct 로직 질문입니다.
updateProduct 로직을 보면, 맨 첫줄에productPort.getProduct로 조회를 해온 뒤 product.update(~~~)로 변경을 하면, 변경 감지가 일어날텐데굳이 save를 호출하신 이유가 뭐에용??
-
미해결스프링 시큐리티
spring boot 2.7버전에서 customUserDetailsServce 등록에 관해 질문드립니다
안녕하세요 선생님, 강의에서는 customUserDetailsServce를 configure메서드를 오버라이드 해서 적용하고 있는데요, 새로운 버전에서는 어떻게 적용을 명시적으로 하는지 잘 모르겠고 지정을 하지 않아도 잘 동작하더라구요.제가 찾아봤을 때는 @Bean CustomUserDetailsService customUserDetailsService() { return new CustomUserDetailsService(); }이런식으로 Bean으로 등록하면 된다는데, https://docs.spring.io/spring-security/reference/servlet/authentication/passwords/user-details-service.htmlSecurityconfig파일에서 Bean으로 등록하지 않아도 자동으로 customUserDetailsService가 동작하더라구요 그래서 제가 나름대로 결론 내린 것은 userDetailsService를 구현하는, 빈으로 등록된 커스텀 userDetailsService가 있다면 폼 로그인 방식에서 자동으로 커스텀 userDetailsService를 사용한다. userDetailsService를 구현하는 여러 커스텀 userDetailsService가 잇으면 configuration에서 명시적으로 지정해주어야 한다. 라고 이해했는데, 혹시 제가 잘못 생각한 부분이 있다면 알려주시면 감사하겠습니다.