아래 내용은 제가 정리한 글입니다. - 예외 처리 흐름 🧸 Spring MVC 내부에서 예외 처리: 1. 예외 발생: 컨트롤러에서 예외가 발생한다. 2. 예외 전파: 예외가 DispatcherServlet으로 전파된다. 3. HandlerExceptionResolver: DispatcherServlet은 등록된 예외 처리기를 통해 예외를 처리하려고 시도한다. 4. Custom Exception Handlers: @ControllerAdvice에 정의된 예외 처리기가 있으면 이를 사용하여 예외를 처리한다. 5. BasicErrorController: 위의 처리기들에서 예외를 처리하지 못하면, /error 경로로 요청이 전달되어 BasicErrorController가 기본적인 에러 처리를 수행한다. 6. 클라이언트 응답: BasicErrorController가 예외를 처리하고 클라이언트에게 적절한 에러 응답을 반환한다. 🧸 WAS로 예외 전파: 1. 예외 처리 실패: DispatcherServlet이나 BasicErrorController가 예외를 처리하지 못한다. 2. WAS로 전파: 예외가 WAS(톰캣)로 전파된다. 3. 에러 설정에 따른 재요청: WAS는 Spring Boot가 설정한 에러 핸들링 설정에 따라 /error 경로로 재요청을 보낸다. 4. 에러 처리: /error 경로로 재요청된 에러를 BasicErrorController가 처리한다. 5. 클라이언트 응답: BasicErrorController가 예외를 처리하고 클라이언트에게 적절한 에러 응답을 반환한다. 위의 흐름에서 알 수 있듯이, 기본적인 에러 처리 방식은 컨트롤러에서 발생한 예외를 BasicErrorController를 통해 처리하는 것이다. 예외가 WAS까지 전파되는 경우는 예외적인 상황이며, 일반적으로는 Spring MVC 내부에서 예외가 처리된다. 간단하게 얘기해서 예외 또는 에러가 WAS까지 전파되는 상황은 드물고, 주로 Spring MVC(ControllerAdvice, RestControllerAdvice, ExceptionHandler, ResponseStatus, ResponseStatusException, BasicErrorController)가 처리하여 컨트롤러단에서 예외가 처리되는 것으로 이해를 하고 정리를 하였습니다. 그런데 검색을 하다보니 아래와 같은 내용들을 발견하였습니다. Spring은 BasicErrorController를 구현해두었다. ExceptionHandler나 ControllerAdvice처럼 직접 에러를 반환하는 경우에는 BasicErrorController를 거치지 않지만, @ResponseStatus, ResponseStatusException 등과 같이 직접 에러 응답을 반환하지 않는 경우에는 최종적으로 BasicErrorController를 거쳐 에러가 처리된다. 클라이언트 입장에서는 이를 모르지만 내부에서는 2번 컨트롤러로 요청이 전달되는 과정이 진행된다. 우리가 만든 예외 클래스에 다음과 같이 @ResponseStatus로 응답 상태를 지정해줄 수 있다. @ResponseStatus(value = HttpStatus.NOT_FOUND) public class NoSuchElementFoundException extends RuntimeException { ... } // 그러면 ResponseStatusExceptionResolver가 지정해준 상태로 에러 응답이 내려가도록 처리한다. { "timestamp": "2021-12-31T03:35:44.675+00:00", "status": 404, "error": "Not Found", "path": "/product/5000" } 하지만 에러 응답에서 볼 수 있듯이 이는 BasicErrorController에 의한 응답이다. 즉, @ResponseStatus를 처리하는 ResponseStatusExceptionResolver는 WAS까지 예외를 전달시키며, 복잡한 WAS의 에러 요청 전달이 진행되는 것이다. (WAS까지 예외가 전달되고, WAS의 에러 요청 전달이 진행됨) 그렇다면 제가 정리한 내용과 위 내용은 반대되는데, 어떤 것이 맞는건지 잘 모르겠습니다. 제가 정리한 내용이 맞다면, @Responsestatus는 ExceptioNResolver, 정확하게는 ResponseStatusExceptionResolver에 의해서 처리되므로 컨트롤러단에서 예외처리가 되어야 하는것이 맞다고 생각하는데, 어떤 것이 참인가요?
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! 질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요 먼저 유사한 질문이 있었는지 검색해보세요 안녕하세요? 선생님 강의를 듣다보니 pop 함수에 대해 궁금한 점이 생겼습니다. 선생님께선 train에는 drop을 쓰시고 test에는 pop을 쓰셨는데, 혹시 test에도 drop을 써도 되나요? 강의에서pop은 대입하고 컬럼을 삭제한다고 하셨는데, test_id = test.drop('id', axis=1)하면 test 컬럼에는 id가 남아있고 test_id에만 id 컬럼이 삭제된 후 들어가니 drop을 써도 되지 않나 해서요....
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요! 좋은 강의 감사합니다. 공부하다가 궁금한 부분이 생겨서 질문 남깁니다. 지역 클래스는 지역 변수와 마찬가지로 코드(메서드) 안에 작성해야 하는데 만약 메서드(지역 클래스 밖에 있는) process의 반환 타입을 지역 클래스로는 사용할 수 없는 건가요? 혼자 코드를 작성 해봤는데 컴파일 오류가 떠서 왜 그런건지 이유가 궁금합니다. 내부 클래스는 반환 타입으로 사용이 가능한데 지역 클래스는 안되는 이유가 궁금합니다. 감사합니다
안녕하세요, 섹션 9 일원분산분석 강의 8:34 경 질문있습니다. 사후검정으로 일원분산분석시에도 어떤 집단에서 유의미한 차이가 있는지를 학습하고 이해했는데요. # Bonferroni(본페로니) mc = MultiComparison(df_melt['value'], df_melt['variable']) bon_result = mc.allpairtest(stats.ttest_ind, method='bonf') print(bon_result[0]) (질문1) 마지막줄에 bon_result[0] 왜 0이 들어가게 된 건지 설명 부탁드리겠습니다. (질문2) 혹시 가설검정 H0 채택/기각 여부 외에 이런부분까지도 출제될 수 있는건가요? (다른 강의를 듣다가 넘어왔는데, 이 부분은 완전 처음들어봤습니다..) 시간이 얼마 없어서, 다른 부분(2유형 코드짜는걸) 집중해서 암기하려고 하는데 조언 부탁드립니다.
안녕하세요. 저는 주니어 개발자 입니다. 취업을 위해 스프링 공부에만 급급하여 이해하지도 못한 채 넘어갔던 자바 기초 지식을 이제서야 강사님 강의를 통해 이해가 되는 것 같아 정말 감사드립니다. 현재 제가 있는 실무에서는 객체지향을 잘 사용하고 있지 않은 것 같고 부족하다고 생각되어 이번 강의를 계기로 객체지향 관련해서 더 공부하고 싶다는 생각이 들었습니다. 앞으로 강사님 로드맵 자바 (기초 > 중급 > 고급) -> 스프링 .. 이런식으로 차근차근 들을 예정인데 이 로드맵을 따라가면 더욱 객체지향을 이해할 수 있는지 아니면 따로 추가적으로 공부를 해야할지 궁금하여 질문드립니다. 감사합니다.
캐글 작업형 1 T1 - 20 b1와 b3 데이터를 f4 기준으로 병합하기 위해서 df = pd.merge(left = b1, right = b3, how = 'left', on = 'f4') 식을 사용하셨는데 혹시 여기서 how = 'left'의 의미는 무엇인가요?? 이 문제를 pd.concat으로도 풀 수 있는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 오라클에서 하려고 하니까 안 되는 것 같습니다 ㅠㅠ 임베디드 DB 사용 방법이 테스트 클래스에 @Transactional 넣기 test/resources/schema.sql 파일 작성 test/resouces/ application.properties 파일 작성 맞지않나요?!
선생님 캐글 작업형1 19번 문제에서 "events컬럼이 '1'인경우 80%의 Salse값만 반영함" 을 def event_sales(x): if x['Events'] == 1: x['Sales2'] = x['Sales']*0.8 else: x['Sales2'] = x['Sales'] return x df = df.apply(lambda x: event_sales(x), axis=1) #1일 경우 row, 0일 경우 컬럼 df.head() 이 풀이방식 외에 좀 더 간단한 식은 없을까요? 이해하기가 좀 어려워서요 ㅜㅜ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 타임리프로 서버사이드렌더링 하는법은 김영한님께 배워서 알지만 프론트엔드 (리액트) 와 협업하는 강의는 따로 없을까요? @responsebody로 해야하는 것 같은데.. 어떻게 협업해야하는지 모르겠습니다. 따로 찾아봐야 하는걸까요?
private final MemberRepository memberRepository; @Autowired public SpringConfig(MemberRepository memberRepository){ this.memberRepository = memberRepository; } 자동 주입을 할 수 없습니다. 'MemberRepository' 타입의 bean이 두 개 이상 있습니다. Beans: memoryMemberRepository ( MemoryMemberRepository.java ) springDataJpaMemberRepository ( SpringDataJpaMemberRepository.java ) 라는 오류가 발생합니다 어디를 고쳐야 하는 건가요
주어진 데이터는 4가지 다른 교육 방법을 적용한 대학생들의 학점 결과이다. 이 실험에서는 비슷한 실력을 가진 학생 40명을 무작위로 4개(A, B, C, D)그룹으로 나누었고, 각 그룹은 다른 교육 방법을 적용했다. 학생들의 학점 결과에는 교육 방법에 따른 차이가 있는지 유의수준 0.5하에서 검정하시오. 귀무가설(H0): 네 가지 교육 방법에 의한 학생들의 학점 평균은 동일하다. 대립가설(H1): 적어도 두 그룹의 학점 평균은 다르다. 해당 문제의 사후분석에서, stats.ttest_ind는 4개의 그룹이 독립표본이라 그런건가요? 만약 대응표본이라면 mc.allpairtest(stats.ttest_rel, method='bonf')이라고 쓰면 될까요? # Bonferroni(본페로니) mc = MultiComparison(df_melt['value'], df_melt['variable']) bon_result = mc.allpairtest(stats.ttest_ind, method='bonf') print(bon_result[0])
작업형2 평가지표 검증하면 나오는 결과값이 강의답안 결과값이랑 다른경우에도 오답이 아니라고 생각하면 될까요? 예를 들어 강의답안은 1411.223 인데, 제 답안의 경우 1399.1234 등으로 타입,소수점 등은 같은데 실제 수치가 다른 경우에요 (같은 모델을 쓴 경우에) 같은 데이터셋으로 작업해도 random_state? test_size등 개인의 설정값에 따라 지표값이 달라지는 것인지도 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 테스트시 @Transactional 을 붙이고 , 객체 A(1) - B(N)간 다대일 양방향 참조를 설정 (일쪽에 mappedby Casecade ALL, orphanRemoval = true) 한 상태에서 부모객체의 참조를 끊으면 자연스레, 자연스레 N쪽에서 데이터가 사라지는 코드를 구현했었는데, @Transactional 적용 테스트시에 변경감지나, orphanRemoval = true 같은 경우 트랜잭션이 롤백되어서 orphanRemoval = true 작동이 되지 않는 문제가 있습니다. 이럴경우 테스트는 어떻게 해야하나요?? 실제 구현은 잘동작하지만, 테스트시에 동작 X @Transactional로 인해 orphanRemoval = true가 작동 안해서 , 떼고 테스트 코드를 작성할경우 검증로직에서 N쪽에서 데이터가 잘 들어갔거나, 삭제되는걸 검증하는 경우에는, 이미 트랜잭션이 서비스로직에서 detached 된 에러로, no session 에러를 만나게 되었습니다. 이럴 경우 어떻게 테스트 하시는지 여쭙고 싶습니다. 1쪽만 테스트 해야하는지, 본 강의에서와 같이 @Commit으로 해결하나요??