묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
DispatcherServlet에서 핸들러와 핸들러 매핑의 동작 방식
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이전에 MVC 프레임워크 v5를 직접 만들었을 땐, 스프링이 실행됨과 동시에 다음 코드처럼 프론트 컨트롤러의 handlerMappingMap에 핸들러들이 자동으로 등록되었었습니다. 즉, 클라이언트로부터 요청이 오기도 전에 '핸들러 매핑 맵'에 저장되는 거로 이해했습니다. private void initHandlerMappingMap() { handlerMappingMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members/save", new MemberSaveControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members", new MemberListControllerV3()); handlerMappingMap.put("/front-controller/v5/v4/members/new-form", new MemberFormControllerV4()); handlerMappingMap.put("/front-controller/v5/v4/members/save", new MemberSaveControllerV4()); handlerMappingMap.put("/front-controller/v5/v4/members", new MemberListControllerV4()); } 그러면 실제 DispatcherServlet에서도 위와 비슷한지, 다른지, 정확히 어떻게 동작하는지 궁금합니다. 스프링 부트가 실행되자마자 '핸들러 매핑'들은 스프링 빈으로 등록된다고 이해했습니다. 다만 '핸들러'가 어떤지는 헷갈립니다. 스프링 부트가 실행됨과 동시에 '핸들러(컨트롤러)'들이 각각에 해당되는 '핸들러 매핑' 내부에 저장되는 건지, 아니면'핸들러'들이 '핸들러 매핑'에 처음부터 저장되는 게 아니라, 클라이언트로부터 요청이 오면 그때 '핸들러 매핑'이 스프링 컨테이너에서 핸들러를 '찾아 주는' 건지.아니면'핸들러 매핑' 인터페이스마다 방식이 다른 건지 궁금합니다. +) 한 가지 더 궁금한 점이 있습니다.애노테이션 기반의 컨트롤러들은 반드시 스프링 빈으로 등록되어야 한다고 이해했습니다.그런데 Controller 인터페이스를 구현한 컨트롤러나 HttpRequestHandler 컨트롤러들은 강의에선 BeanNameUrlHandlerMapping을 이용하기 위해 스프링 빈으로 등록되기는 했지만, BeanNameUrlHandlerMapping를 이용하지 않는다면 꼭 스프링 빈으로 등록할 필요는 없는 건가요? 컨트롤러들이 모두 스프링 빈일 필요는 없는 건지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MVC, SSR, CSR
안녕하세요 아직 강의를 절반도 채 수강하지 않았으나제 얕은 지식과 현재 배우고 있는 내용이 머릿속에서 혼란을 일으켜 여쭙습니다 entity : DB에 저장,조회 등 직접적인 데이터로 이용하기 위해 만든 객체dto : 웹을 통해 주고 받을 때, entity를 바로 쓰기에는 위험하므로 또는 entity의 필요한 부분만을 이용하기 위해 만든 객체repository layer : DB와 관련된 로직을 수행하는 계층service layer : repository를 이용하여 비즈니스 로직을 수행하는 계층controller layer : HTTP 요청을 받고 service를 이용하여 로직을 수행 후 응답을 보내주는 계층 으로 알고있습니다. 현재 김영한님 강의에서 배우는 MVC패턴을 이용한 SSR(서버사이드랜더링)에서 ,controller : (현재 Servlet을 이용) service/repository 를 이용해 로직을 수행하고 필요한 데이터를 model에 담아 view로 전달model : HttpServletRequest 객체 이용, request 내부에 데이터 저장view : (현재 JSP를 이용) model을 통해 html페이지를 동적으로 만들고, 브라우저에 랜더링 위와 같이 동작하는 것으로 이해하였는데, CSR로 바뀐다면, model : JSON형태(dto객체를 JSON으로 변환시킨)의 payload를 가진 HTTP 프로토콜 view : 클라이언트서버(브라우저와 직접 통신하여 화면을 랜더링해주는) -> 커다란 MVC패턴이라고 봐야하는건가요? 아니면 MVC패턴이 깨지고, 그냥 클라이언트단과 서버단이 API를 통해 통신한다고만 이해하면 되는 건가요? 제가 이해하고 있는 용어나 흐름 등에 잘못된 정보가 있다면 고쳐주실 수 있나요? 긴 글 읽어주셔서 감사합니다강의 너무나 잘 보고 있습니다~!
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
pdf에 업데이트된 내용의 위치가 잘못된 건가 싶어서 제보합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 5. 스프링 MVC - 구조 이해.pdf의 15~16페이지 부분에서'컴포넌트 스캔 없이 스프링 빈으로 직접 등록해도 된다'는 걸 보여 주는 내용 사이에 '주의 - 스프링 3.0 이상'에 해당하는 내용이 껴 있습니다. 위치가 잘못된 건지 의도된 건지 모르겠지만 혹시 몰라서 일단 제보합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
content-Type이 text/html;charset=UTF-8 입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.1. 컨텐트타입이 application/x-www-form-urlencoded가 아닌데, 어떻게 바꿔야 하나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
override 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]override오류로 test 작동이 안됩니다ㅠ
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
토이프로젝트를 해보고 있는데 게시판을 여러개 만들 때 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 실무에서는 게시판을 여러개 만들면 각 게시판에 있는 게시글을 게시판을 구분하여 여러 repository에 저장하나요? 아니면 한 곳에 저장해서 웹에서 보여줄 때는 필터링을 하나요?커리큘럼의 다음 강의들을 듣다보면 해소가 되는 것인가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
start.spring.io 프로젝트 생성
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]start.spring.io 에서 프로젝트를 생성할 때각 항목이 무엇을 의미하는지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
./build디렉토리에 libs 폴더가 없습니다ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]gradlew 빌드successful 했는데도 lib 폴더가 없습니다 ㅠㅠ윈도우 유저이고 자바 입문, 기본편만 수강한 상황이라 강의 따라가기가 쉽지 않네요 ㅠㅠ
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
강사님이 사용하시는 그림 툴 알고싶습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 저도 강사님 자료처럼 그림으로 이해한 내용을 정리하고 싶은데강사님이 사용하시는 그림 툴 알 수 있을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Modelattribute가 react랑 연계해도 작동하는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 수업 너무 잘 듣고 있습니다.다름이아니고 앞의 검증과 관련된 질문입니다. @modelattribute가 form 에서 잘못 입력했을 경우에 사용자로인해 입력된 그 값을 그대로 유지할수 있도록 사용되게 하고싶을때, react와 연계하여 서버를 띄운다고 했을때 json body로 넘겨주지 않고 이 modelattribute를 사용해도 되나요? 강의에서는 클라이언트도 저희가 만들어서 괜찮지만 프론트측을 리액트로 만든다고 했을때 궁금해서 여쭤봤습니다
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HelloSpringApplication 실행시 오류 (빌드 실패)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Java 17 버전, spring Boot 3.xx인것 확인 후 강의 영상 그래도 Run HelloSpringApplication 를 하였는데 실행 시간이 너무 오버되어 임의로 중지하였더니 해당 문구가 뜹니다. 해결 방안을 알 수 있을까요 ? 실행하기 전,cannot access java.lang.object해당 오류가 떴는 데 무시하고 실행하였더니 이렇게 된것 같아 이 문구가 원인인 것 같긴 합니다..
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
paramet vs response body
안녕하세요. 수업 너무 잘 듣고있습니다.다름이 아니고 특정 url에서 값을 요청하거나 응답한다고 할 떄, 값을 언제 http paramter로 받아야하는지와 http body로 받아야하는지에 대한 차이를 알고싶습니다. 파라미터는 값이 객체가 아니고 단순히 변수일 때 혹은 받아야하는 개수가 적을 때 라고 생각이 되는데, 혹시 이 이유도 맞는지, 그리고 또 다른 이유들이 어떤 것이 있는지가 궁금합니다. 감사합니다 ㅎㅎ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
list와 arraylist
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]public List<Member> findAll() { return new ArrayList<Member>(store.values());}에서 method의 return type을 ArrayList의 상위 인터페이스인 List로 지정한 이유가 궁금합니다. MemeberRepository interface가 재사용될 때, list를 implement하는 다른 class들도 반환 type으로 사용할 수 있게 하기 위한 이유인가요? 특별한 이유가 있는 것인지 궁금합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
핸들러 매핑과 핸들러 어댑터들도 모두 스프링 빈으로 등록되나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]스프링 부트를 사용하면 자동으로 핸들러 매핑과 핸들러 어댑터, 뷰 리졸버 등 여러 가지를 등록해 준다고 하셨는데 저는 처음에 '등록'이라는 의미를 DispatcherServlet에 있는private List<HandlerMapping> handlerMappings;private List<HandlerAdapter> handlerAdapters;private List<ViewResolver> viewResolvers; 이 List에 저장한다는 의미로만 생각했었습니다.그런데 강의가 진행되면서 설명해 주신 내용 중, 다음 코드처럼 스프링 부트에서 InternalResourceViewResolver를 스프링 빈으로 등록해 주듯이 @Bean ViewResolver internalResourceViewResolver() { return new InternalResourceViewResolver("/WEB-INF/views/", ".jsp"); } } 핸들러 매핑과 핸들러 어댑터들도 스프링 빈으로도 등록되는 건가요? 즉,핸들러 매핑, 핸들러 어댑터, 뷰 리졸버들은 스프링 빈으로 등록되고뷰는 기본적으로 스프링 빈으로 등록되지 않지만(https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1&unitId=71204&tab=community&q=782881&category=questionDetail) 원한다면 따로 스프링 빈으로 등록할 수도 있다.(BeanNameViewResolver를 사용할 때) 이렇게 생각해도 되는지 궁금합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
th:action 질문드립니다
상품 등록 버튼을 눌렀을 때, items/add로 이동하는 걸th:action 대신th:onclick="|location.href='@{/basic/addForm.html}'|"로 적어도 되나요? 단순히 url 이동이 아니라, 상품 등록 버튼을 눌렀을 때, 상품을 실제로 저장하는 액션이 있기 때문에 th:action을 사용해야 하는 것인가요? 상품 등록 버튼을 눌렀을 때의 결과를 작업하는 것인데,<button class="w-100 btn btn-primary btn-lg" type="submit">상품 등록 </button>여기가 아닌, <h4 class="mb-3">상품 입력</h4> <form action="item.html" th:action method="post">여기서 처리하는지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원 웹 기능 - 홈 화면 추가 강의 초반에
회원 가입 란을 누르면 회원이름 작성란이 떠야 하는데 다른게 뜨네요.. 나머지는 동일하게 작성한 듯 한데 뭐가 문제인지 모르겠네요ㅜ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradle 오류입니다
지원 중단된 기능이 있는거같은데 이거 어떻게 해야할까요...?gradlew clean build 해도 안되고 build 폴더만 지우고 해도 안됩니다... 버전을 바꿔야할까요(두 번째 사진은 --warning-mode all 를 사용해 deprecated된 기능을 확인한 것입니다)=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
open build.gradle을 해야하는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 프로젝트 생성하다가 궁금증이 생겼습니다github에 studySpring 이라는 레포를 생성해서 그 안에 hello-spring을 넣으려고 인텔리제이에서 studySpring을 clone하고 그 안에 hello-spring을 넣었습니다. 그리고 jdk 21ver을 설치해주었는데 이상태에선 HelloSpringApplication.java가 실행이 되지 않았습니다.여기서 open -> hello-spring ->build.gradle을 열어야 HelloSpringApplication.java가 실행되던데 이유가 궁금합니다 !!+) studySpring 폴더안에서 hello-spring -> HelloSpringApplication.java 를 실행하는 방법은 없나요? 현재는 hello-spring의 build.gradle을 열어야만 실행됩니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
maven 빌드에러가 계속 납니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]해당 maven 빌드에러가 계속 나서 ./gradlew.clean도 해보고 의존도 업데이트도 터미널에서 해봤는데, 계속 동일 오류가 납니다
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
DELETE문 테스트 하는 부분 질문드립니다.
항상 강의 잘 듣고 있습니다 🙂다름이 아니라 이번 강의에서는 이전에 배웠던 assertThrows를 사용하시지 않고 assertThatThrownBy를 사용하셨는데 이 둘은 결국 하는 일이 같은 것이 아닌가 해서 질문드립니다. 강사님께서 강의 중 작성하신 코드와 제가 작성한 기존의 assertThrows를 이용한 코드가 정확히 같은 것이 맞는가해서 질문드립니다.// 강사님 (assertThatThrownBy) assertThatThrownBy(() -> repository.findById(member.getMemberId())).isInstanceOf(NoSuchElementException.class); // AssertThrows (내 버전) assertThrows(NoSuchElementException.class, () -> repository.findById(member.getMemberId()));