입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
안녕하세요. 데이터베이스 초기화에서 질문 남깁니다. 현재 Project 엔티티에서 ProjectSkill 간의 참조가 아래와 같습니다. @OneToMany(mappedBy = "project") var skills: MutableList<ProjectSkill> = mutableListOf() 위 관계는 project_skill 테이블이 연관관계의 주인이 되고, Project 엔티티는 그저 거울(mappedBy 속성에 의해)이 되는 걸로 알고 있습니다. 위 상태에서는 project.skills.addAll() 로 값을 넣어줘도 project_skill 테이블에 데이터가 들어가지 않고 projectSkill을 직접 save해줘야 insert 쿼리가 날아가는 것으로 알고 있습니다. 그러나 DataInitializer에서는 project.skills.addAll()로 넣어주고 있습니다. 그래서 실제로 데이터베이스를 확인해보면 project_skill 테이블에는 값이 들어가지 않고 있는 걸 확인할 수 있습니다. 다른 테이블에는 의도한대로 데이터베이스 들어가는 반면에 말입니다. 혹시 제가 잘못 알고 있는 거라면 바로잡아주시길 바랍니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] ============================ CONDITIONS EVALUATION REPORT ============================ Positive matches: ----------------- None Negative matches: ----------------- None Exclusions: ----------- None Unconditional classes: ---------------------- None IllegalStateException error가 발생합니다. https://drive.google.com/file/d/1Qk1diQlnWXRZlcdPBcbrTs_1Zctp2BdA/view?usp=sharing
인덱싱 ngrinder 성능테스트를 하기 위해서 findNoticesByDates에서 dates?startDate=2023-01-15%2000:00:00&endDate=2023-02-14%2023:59:59로 파라미터 값을 넘기는 과정에서 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.performancecache.mapper.NoticeReadMapper.findNoticesByDates가 발생하는데 혹시 NoticeReadMapper.xml에 따로 설정을 해줘야 하는건지 아니면은 강의를 따라가며 제가 놓친 부분이 있는건지 궁금합니다 해결방법도 같이 질문드립니다!
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] mvc 강의를 다 듣고 프로젝트를 진행중인데 계속 오류가 떠서 혹시 한번만 봐주실수있나요 ? ㅠㅠ https://drive.google.com/drive/folders/15tIzYE6utLhSHtXVeYGPBUeqcMUFxKJc?hl=ko http://localhost:8080/velog/signUp 스프링을 실행시키고 위의 url로 이동한 뒤, 값을 모두 입력하고 Sign Up 버튼을 누르면 처음 기본 화면인 http://localhost:8080/velog/login 으로 가야하는데 이동을 안하고 계속 에러가 뜨는 상황입니다 ㅠㅠ.. 혼자 해결해보려고 했는데 하루종일 잡고있어도 에러가 안풀리네요... 도와주시면 감사하겠습니다 어느부분에서 오류가 난걸까요 ?ㅠㅠㅠ
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 왜 저렇게 뜨는지 잘 모르겠습니다.. 원래 spring study는 C:\ 아래에 있었는데 cmd엔 C:\Users\지우>가 기본값이어서 저 아래에 넣어주었는데도 안 뜹니다.. 지금은 intellj 실행할 때 경로가 일치하지 않다고 오류가 떠서 다시 C:\ 아래로 옮겼습니다
controller, repository 이런걸 스프링 빈으로 등록하는 이유는 자주 사용하기 때문인가요 ?? 딱 1개만 생성이 되어서 메모리 낭비를 방지하기 위함인가요 ? 그리고 해당 컨트롤러/레포지토리 객체를 만들어서 스프링 컨테이너가 들고있을 때 해당 객체의 내용을 다 포함하고 있는 형태로 들고있나요?? 아니면 인터페이스처럼 가볍게?? 들고있는건가요 ?? 질문이 너무 추상적이네요 죄송합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] OrderServiceTest의 상품주문() 테스트에서 아래의 테스트가 에러가 뜨는데요. assertEquals(10000 * orderCount, getOrder.getTotalPrice(), "주문 가격은 가격 * 수량이다."); Expected :20000 Actual :0 실제 20000이 아닌 0으로 반환되는데, 어디를 봐야할까요? Order클래스의 getTotalPrice()메소드에서 orderItem.getOrderPrice()는 10000을 잘 반환하는데요 totalPrice는 0으로 자꾸 반환하네요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 여기에 질문 내용을 남겨주세요. https://drive.google.com/file/d/1i3bo7BW0D9boeFa4l3_EW4sBliS1sqDe/view?usp=sharing 코드는 위와 같습니다. 감사합니다.
안녕하세요 강사님 현재 스프링부트 3.2.2 버전을 사용하고 있습니다. 배운대로 개인적인 프로젝트에 적용해보고 있는데 @Around 애노테이션의 메서드 실행이 @GetMapping일 경우에는 AOP가 잘 작동하나 @PostMapping일 경우에는 작동하지 않고 @Validation 애노테이션에서 오류가 먼저 터집니다.. 무슨 문제일까요..? .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public org.springframework.http.ResponseEntity<?> com.board.www.app .board.controller.api.BoardApiController.create( com.board.www.app .board.dto.BoardDto,org.springframework.web.multipart.MultipartFile) with 2 errors: [Field error in object 'dto' on field 'content': rejected value []; codes [NotBlank.dto.content,NotBlank.content, NotBlank.java .lang.String,NotBlank]; arguments [ org.springframework.context.support .DefaultMessageSourceResolvable: codes [dto.content,content]; arguments []; default message [content]]; default message [내용을 입력해 주세요]] [Field error in object 'dto' on field 'title': rejected value []; codes [NotBlank.dto.title,NotBlank.title, NotBlank.java .lang.String,NotBlank]; arguments [ org.springframework.context.support .DefaultMessageSourceResolvable: codes [dto.title,title]; arguments []; default message [title]]; default message [제목을 입력해 주세요]] ]
두개의 Service가 통신할 때 예외처리 시나리오 A, B 서비스가 있을 때 A 서비스에서 B 서비스로 데이터를 수정 또는 생성하는 요청을 했는데 이 때 개발자가 의도해서 예외를 발생시켰던 예상치못한 예외가 발생했던 간에 예외가 발생해서 B서비스의 데이터를 수정하지 못하는 경우라면 A서비스는 어떻게 롤백시켜주나요? 1번 시나리오에서 하나의 서비스가 추가되어 3개의 Service가 통신할 때 예외처리 시나리오 A서비스에서 B 서비스를 수정 or 생성 하고 C서비스를 수정 or 생성하는 시나리오일 경우 만약에 B서비스에 요청을 했을 때는 성공을하고 C서비스에 요청을 했을 때 실패를 했다면 A서비스로 롤백시켜줘야하고 B서비스도 롤백을 시켜주어야할텐데 이 경우에는 어떻게 롤백처리를 해주나요?? 구글해보니 그냥 추상적으로 오케스트레이션 Saga패턴? 그런걸로 처리한다는데 막연하게 글로만 설명있고 어떤 소프트웨어를 설치해서 코드를 짜면된다 이런건 없어서 어떻게 처리되어야하는건지 감을 못잡겠네요ㅠㅠ. Axon 서버 뭐 이런것도 본거 같기도 하고요.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요. MemberService 클래스와 MemoryMemberRepository 클래스 간 관계가 궁금해 질문 드립니다. MemberService 클래스 내부에서 DB 접근을 위해 MemberRepository를 final로 선언하고 이를 생성자로 인스턴스를 할당 해주고 있는데, @Service, Repository로 스프링빈에 등록만 하고 따로 다른 코드를 쓰는것 같진 않은 것 같습니다. 해당 클래스들은 @AutoWired를 사용하지 않아도 자동으로 매핑(?)이 되는걸까요?
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. AOP를 학습하면서 특정 작업에 시간이 얼마나 걸리는지 측정하는 것은 학생입장에서 실무에서나 쓰이지 보통 학생들끼리 하는 프로젝트에서는 사용의미가 취약한 느낌이 드는데 혹시 실무가 아닌 상황에서도 유용하게 쓰일만한 다른 예시가 있을까요?
spring batch 5 버전이 되면서 배치 설정과 관련해서 변화가 생긴 걸로 압니다. JobBuilderFactory와 StepBuilderFactory가 더 이상 사용되지 않고, @EnableBatchProcessing을 더 이상 권장하지 않고, DefaultBatchConfiguration 상속하여 job설정을 하는 등.. 기존 예제 소스를 spirng batch 5 버전에 맞게 refactoring하거나 아니면, 최소한 spring batch 5 버전에 맞는 설정 예시와 관련해서 추가로 문서를 정리해서 제공할 계획은 없나요?
private void validateDuplicateMember(Member member) { //중복 회원 검증 List<Member> findMembers = memberRepository.findByName(member.getName()); if(!findMembers.isEmpty()){ throw new IllegalStateException("이미 존재하는 회원입니다."); } } 중복 회원 검증 메서드에서 위의 코드는 test 돌릴 때 제대로 작동하는데 아래 코드처럼 if문의 조건을 바꾸면 test가 fail합니다..! 리스트가 null일 경우 isEmpty() 호출 시 NPE가 발생하기 때문에 가급적 null인지 여부도 함께 확인하라는 글을 본적이 있어서 아래처럼 작성한 것인데, 왜 에러가 나는 건지 궁금합니다! private void validateDuplicateMember(Member member) { //중복 회원 검증 List<Member> findMembers = memberRepository.findByName(member.getName()); if(!findMembers.isEmpty() || findMembers!=null){ throw new IllegalStateException("이미 존재하는 회원입니다."); } }