월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
<script> 와 <script th:inline="javascript"> 에서 자바스크립트 내추럴 템플릿 인라인 사용 전, 사용후 차이 오류?
@GetMapping("/javascript") public String javascript(Model model) { model.addAttribute("user", new User("userA", 10)); addUsers(model); return "basic/javascript"; }javascript.html<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- 자바스크립트 인라인 사용 전 --> <script> var username = [[${user.username}]]; var age = [[${user.age}]]; //자바스크립트 내추럴 템플릿 var username2 = /*[[${user.username}]]*/ "test username"; //객체 var user = [[${user}]]; </script> <!-- 자바스크립트 인라인 사용 후 --> <script th:inline="javascript"> var username = [[${user.username}]]; var age = [[${user.age}]]; //자바스크립트 내추럴 템플릿 var username2 = /*[[${user.username}]]*/ "test username"; //객체 var user = [[${user}]]; </script> <!-- 자바스크립트 인라인 each --> <script th:inline="javascript"> [# th:each="user, stat : ${users}"] var user[[${stat.count}]] = [[${user}]]; [/] </script> </body> </html><script> 와 <script th:inline="javascript"> 에서 자바스크립트 내추럴 템플릿 인라인 사용 전, 사용후 차이가 이상합니다.강의에서는 인라인 사용 후에 아래와 같이 적용된다고 했는데,var username2 = "userA";제가 테스트해 본 결과, 아래와 같이 적용 됩니다.var username2 = /*"userA"*/ "test username";인라인 사용전인 var username2 = /*userA*/ "test username";`에서 /*userA*/ 부분에 "" 만 추가되었습니다..제가 뭔가 잘못한 것 일까요?제가 작성한 코드와 버젼, 이미지 첨부 드립니다.Spring Boot: 3.2.5java: 17
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
model역할에 대해 궁금한점이 있습니다.
@GetMapping("/add") public String addForm(Model model) { model.addAttribute("item", new Item()); return "validation/v1/addForm"; }위에 코드는 mvc2 강의 v1controller 코드 중 일부이고 아래는 mvc1 강의 마지막 챕터 코드 중 일부입니다.public class BasicItemController { @GetMapping("/add") public String addForm() { return "basic/addForm"; } 궁금한점이 있는데. v1controller 코드에서 mvc1처럼 코드를 입력하게 되면 add 사이트로 이동시 서버 에러가 뜹니다.Model 객체는 뷰에 전달할 데이터를 담는 컨테이너 역할을 합니다. 라고 하는데 그렇다면 mvc1에서 model없이 어떻게 작동이 되는건가요?model이 view와 controller사이에서 사다리 역할하는건가요? 데이터 저장소가 아니라요?@GetMapping("/add") public String addForm() { return "validation/v1/addForm"; }
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
검증1 - Validation-오류 코드와 메시지 처리1강의 중에 질문이잇습니다.
섹션 4. 검증1 - Validation-오류 코드와 메시지 처리1강의 중에 질문이잇습니다.아래는 해당 강의 코드 중 일부분입니다.제가 궁금한 내용은 위의 사진처럼 new가 3번 나오는데 위의 그림처럼 이해해도 되나요?즉 bindingResult 변수 안에 FieldError객체 생성하고 그 안에 new String[]1개,new Object[]1개생성되는것이 맞나요? // @PostMapping("/add") public String addItemV3(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { //검증 로직 if (!StringUtils.hasText(item.getItemName())) { bindingResult.addError(new FieldError("item", "itemName", item.getItemName(), false, new String[]{"required.item.itemName"}, null, null)); } if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { bindingResult.addError(new FieldError("item", "price", item.getPrice(), false, new String[]{"range.item.price"}, new Object[]{1000, 1000000}, null)); } if (item.getQuantity() == null || item.getQuantity() >= 9999) { bindingResult.addError(new FieldError("item", "quantity", item.getQuantity(), false, new String[]{"max.item.quantity"} ,new Object[]{9999}, null)); } //특정 필드가 아닌 복합 룰 검증 if (item.getPrice() != null && item.getQuantity() != null) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { bindingResult.addError(new ObjectError("item",new String[]{"totalPriceMin"} ,new Object[]{10000, resultPrice}, null)); } } //검증에 실패하면 다시 입력 폼으로 if (bindingResult.hasErrors()) { log.info("errors={} ", bindingResult); return "validation/v2/addForm"; } //성공 로직 Item savedItem = itemRepository.save(item); redirectAttributes.addAttribute("itemId", savedItem.getId()); redirectAttributes.addAttribute("status", true); return "redirect:/validation/v2/items/{itemId}"; }
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
BasicItemControllerV2 코드 질문있습니다.
@PostMapping("/add") public String addItem2(@ModelAttribute("item") Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model){ //검증 오류 결과를 보관 Map<String,String> errors=new HashMap<>(); //검증 로직 if (!StringUtils.hasText(item.getItemName())) { bindingResult.addError(new FieldError("item","ItemName","상품 이름은 필수입니다.")); // errors.put("itemName", "상품 이름은 필수입니다."); } if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { bindingResult.addError(new FieldError("item","Price","가격은 1,000 ~ 1,000,000 까지 허용합니다.")); // errors.put("price", "가격은 1,000 ~ 1,000,000 까지 허용합니다."); } if (item.getQuantity() == null || item.getQuantity() >= 9999) { // errors.put("quantity", "수량은 최대 9,999 까지 허용합니다."); bindingResult.addError(new FieldError("item","Quantity","수량은 최대 9,999 까지 허용합니다.")); } //특정 필드가 아닌 복합 룰 검증 if (item.getPrice() != null && item.getQuantity() != null) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { // errors.put("globalError", "가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = " + resultPrice); bindingResult.addError(new ObjectError("item","가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = + resultPrice")); } } if (bindingResult.hasErrors()){ log.info("errors={}",errors); model.addAttribute("errors",errors); return "validation/v2/addForm"; }위에 코드는 BasicItemControllerV2 중 일부 입니다.FieldError는 item class에 있는 엔티티를 찾아서오류를 출력해주는건가요?ObjectError는 item class에 엔티티가 없어서 새로 item 객체를 생성해서 가격을 검사하는건가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ERROR null로 출력되는 문제
에러페이지인 error-ex, error-page/404, error-page/500 3개를 들어갔을 때 에러들이 출력되게 했습니다. 다른 질문들에서도 비슷한 오류를 가진 분들이 있어서 한번 해봤습니다.1차적으로 javax를 jakarta로 바꿨습니다.public static final String ERROR_EXCEPTION = "jakarta.servlet.error.exception"; public static final String ERROR_EXCEPTION_TYPE = "jakarta.servlet.error.exception_type"; public static final String ERROR_MESSAGE = "jakarta.servlet.error.message"; public static final String ERROR_REQUEST_URI = "jakarta.servlet.error.request_uri"; public static final String ERROR_SERVLET_NAME = "jakarta.servlet.error.servlet_name"; public static final String ERROR_STATUS_CODE = "jakarta.servlet.error.status_code";log.info에서 해당 상수들을 출력해보려고 했더니 error-ex페이지에서는 잘 출력되지만 404와 500에서는 모든 값이 null로 출력되었습니다.2차적으로 RequestDispatcher.ERROR_EXCEPTION처럼 모든 log.info에서 상수를 이용하는것이 아닌 RequestDispatcher.**를 사용했습니다. 이렇게 바꿨음에도 error-ex 페이지는 잘 출력되었지만 404와 500에서는 모든 값이 null로 출력되었습니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
검증1부분에 html이 이상하게 조회됩니다.
화면에서 아래와 같이 이렇게 뜹니다. 뭐가 문제인지 알려줄 수 있나요? html은 건드른게 없어요.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ModelAttribute @RequestParam
안녕하세요. 강의를 듣던중 궁금한 내용이 생겼는데 구글링을 해도 명확한 답변이 나오지않아 질문드립니다ㅠㅠ 강의 내용중 컨트롤러의 파라미터에서, @ModelAttribute MultipartFile file와 @RequestParam MultipartFile file의 차이가 무엇인지 질문드립니다..!강의 자료에서는 ' @ModelAttribute에서도 MultipartFile을 동일하게 사용할수있다 ' 고 되어있지만, 어차피 file.getOriginalFilename()을 사용하는것은 @ModelAttribute나 @RequestParam이나 동일한것같은데, 어떨때 @ModelAttribute를 사용해야하고, 어떨때 @RequestParam을 사용해야하는지 모르겠습니다.. 둘중 아무거나 사용해도 되는건가요..? 바로 뒤 강의에서는 @ModelAttribute로서 MultipartFile을 받아오는거같은데 어떨때 사용하는것인지 궁금해서 질문드립니다..! 감사합니다!
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
pdf 파일에 이거 추가하면 좋을 것 같습니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의에서 messages.properties에 한글로 저장을 하게 되는데, 인텔리제이를 사용하면 한글 깨짐이 발생하더라구요 Setting - File Encodings에서 Default encoding for properties files 를 ISO-8859-1 에서 UTF-8 로 변경후 Transparent native-to-ascil conversion 체크하면 해결돼서 혹시 도움이 될까 하고 남겨봤습니다
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
검증1 - Validation 강의에서 질문이 있습니다.
mvc1편에 이어서 작업한거 이후에 강의대로 v1~v4버전을 만들었는데요. 근데 item들어가면 화이트 페이지 뜹니다.제가 생각하기에는 basic에서 validation으로 변수 다 바꿔줬는데 안되는지 이해가 안됩니다. 아래는 전체코드입니다.https://drive.google.com/file/d/1r7ntWeZ9SAKP4OSP68cbaWTPUnliJdWD/view?usp=drive_link
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
검증1 - Validation-검증 직접 처리 - 개발 질문입니다.
@PostMapping("/add") public String addItem(@ModelAttribute("item") Item item, RedirectAttributes redirectAttributes,Model model){ //검증 오류 결과를 보관 Map<String,String> errors=new HashMap<>(); //검증 로직 if (!StringUtils.hasText(item.getItemName())) { errors.put("itemName", "상품 이름은 필수입니다."); } if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { errors.put("price", "가격은 1,000 ~ 1,000,000 까지 허용합니다."); } if (item.getQuantity() == null || item.getQuantity() >= 9999) { errors.put("quantity", "수량은 최대 9,999 까지 허용합니다."); } //특정 필드가 아닌 복합 룰 검증 if (item.getPrice() != null && item.getQuantity() != null) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { errors.put("globalError", "가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = " + resultPrice); } } if (!errors.isEmpty()){ log.info("errors={}",errors); model.addAttribute("errors",errors); return "basic/addForm"; } Item savedItem = itemRepository.save(item); redirectAttributes.addAttribute("itemId",savedItem.getId());//인코딩 redirectAttributes.addAttribute("status",true); return "redirect:/basic/items/{itemId}";//위에는 포스트로 상품 추가 해주고 밑에는 다시 get으로 호출시키는 방법. }@ModelAttribute("item") Item item <-이부분이 item class의 엔티티를 의미하고 Model model은 메소드에서만 사용하는 특정 임시 객체로 이해하면 되나요?@ModelAttribute은 model.addAttribute가 자동으로 생성되는데요. 큰 기숙사 안에서 동일한 룸에 에러코드도 들어가고 아이템 모델도 들어가는건가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
특정 리소스가 없을때에 예외페이지 처리 방법 질문드립니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]예를 들어서, 게시글을 조회하는 서비스가 있다고 가정해 보겠습니다./post/158위 URL을 요청할 경우, 웹 애플리케이션에서 id = 158인 게시글을 찾아 해당 내용을 클라이언트에게 주며, 만약 전달된 아이디에 해당하는 게시글이 없을 경우 예외(NoSuchPostException)을 반환하도록 구현을 했습니다.그런데 이 때, 아무런 설정이 없으면 예외가 WAS까지 전달이 되면 무조건 500 Error가 발생이 되는 것으로 알고 있습니다.제가 궁금한 것은위와 같은 상황에서 404 에러가 아닌, 500에러를 반환하도록 구현하는 것이 맞는 지 궁금합니다. 158이라는 아이디에 해당하는 리소스가 없을 경우에는 Not Found 404 상태코드를 반환하는게 맞다고 생각을 하였는데, 실무에서는 이런 상황에서 어떠한 상태코드를 사용하는 지 궁금합니다.특정 예외(이를테면 NoSuchPostException)상황에서는 404코드를 반환하도록 하고 싶은데, 이럴 경우 스프링에서 제공하는 BasicErrorController를 사용하지 못하고, 직접 에러 컨트롤러를 만들어서 처리해야 하나요? (스프링 인터셉터와 필터를 이용한 방법 모두 해보았는데 도저히 안되겠어서 질문드립니다)
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
404예외처리..
예를들어 api 서버인데, 없는 url요청하면 404에러나자나요그 응답 데이터 json 을 변경하려는데 , 어떤코드를 변경해야 할까요?404는 url못찾아서 컨트롤러로 진입도 하기 전인데..RestControllerAdvice는 컨트롤러에서 발생하는 것만 처리해줘서..방법을 모르겠어요 ㅠ이렇게 리턴되고 있는데 저 리턴되는 key와 값들부터 모두 커스텀하고싶은데.. { "timestamp": "2024-04-25T11:17:35.705+00:00", "status": 404, "error": "Not Found", "message": "No message available", "path": "/o%E3%85%87%E3%84%B9%E3%85%87%E3%84%B9" }
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 메시지 소스 사용 시 Test 컴파일 에러 나신 분을 위해
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 질문은 아니고 @Test 시 계속 컴파일 오류가 나서 다른 분들 참고하시면 될 것 같아 글 작성합니다1.컴파일 에러 났을 때 간단히 System.out 출력 했을 때 ???일 때 상단 메뉴 바에서 Settings 클릭 > Encoding 검색해서 File Encodings 들어가서 사진 처럼 UTF-8로 바꿔주기 안되면 윈도우 시스템이 언어 설정 확인하기
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
itemValidation, @Validation
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]어노테이션으로 Validation을 진행하면 만들었던 itemValidation은 작동 안하나요??
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
국제화 기본 설정 테스트 코드 실패
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]스프링 메시지 소스 사용 강의 2분 50초 정도에 나오는 테스트 코드가 계속 실패해서 문의 드립니다.계속 hello 값을 가져오는것 같은데, 설정 값은강의에서 제시한 그대로 인데, 기본 디폴트 값이 영어로 되어 있는걸까요? 혹시나 해서 Local.KOREA(N)을 모두 적용해보았으나 역시 같은 에러가 발생합니다.코드 내용은 위와 같습니다. 원인이 뭘까요? ㅠㅠ
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
<label > id와 <input> id 맞추기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 강사님강의 10분 ~ 12분 사이에서 <label>태그와 <input> 태그의 id를 맞추기 위해서th:for="${#ids.prev('regions')}"를 사용한다고 하셨는데th: each 에서 제공하는 두 번째 파라미터를 활용해서 regionStat.index나 regionStat.Count로 id를 맞추는 방식은 어떨까요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ModelAttribute
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]ModelAttribute로 regions,itemTypes,deliveryCodes를 FormItemController가 처리가는 모든 view에 넘겨줬습니다. 그러면, item도 거의 모든 함수에서 사용되니까, item도 Modelattribute의 이런 사용법을 사용해도 되나요? 안된다면 왜 그런가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
form관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]질문이 있습니다 제가 회사에서 부트를 사용해서 타임리프 관련해서 학습하고 사용 할려고 하는데 form을 사용해서 action 을 하는게 아닌 거의다 js를 통해 ajax를 사용하는 등 거의 js를 통해 서버와 통신하는 방법을 사용하고 있습니다.이럴 때 타임리프에서 th:object 옵션을 사용할 방법이 따로 없을까요? html에서 form을 사용하지 않는 이상?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
매핑이 잘 안되는거 같아요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.영학님이 주신 걸로 하면 버전이 안맞아서 커뮤니티 글에 있는 17버전을 새로 만들어서 영학님이 주신 form에 내용을 main하고 resources를 바꿔서 실행 하는데 서버도 열리고 잘 되는데 이상하게 이런 현상이 떠서 질문을 드립니다이렇게 뜨고 상품관리 를 누루면이렇게 뜨는데 위에 basic을 form으로 바꾸면 잘 뜨고 다른 기능도 잘 됩니다.그런데 할때 마다 계속 바꿔야 하니 문제를 찾아 보고 있는데 resources에 index.html도 확인 했는데 basic이 쓰인 곳도 없고 FormController 부분에도 basic을 반환 하는 부분도 없는데 프로그램 코드안 에서도 basic을 반환 하는 부분이 어디에도 없는데 뭐 때문에 그런지 잘 모르겠습니다. 재가 미숙해서 잘 못 찾는것도 있지만.. 배운다는 생각으로 충고 주시면 잘 배우겠습니다
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
RequestMapping 이후 GetMapping
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이렇게 RequestMapping으로 /template으로 시작하는 url을 mapping하고, /fragment로 오는 get을 template()에서 처리합니다. 그런데 이런 컨트롤러 클래스 내부의 메소드를 public으로 하는 이유가 있을까요? 예외없이 private으로 해야하는 것 아닌가요? 다른곳에서 TemplateController 인스턴스를 만들어서 template() 함수를 쓰려고 해도, templateController가 @Controller니까 의미 없지 않나요? 즉,spring 차원에서 public을 막고 private으로만 메소드를 만들게 할 수 도 있는데, 그렇게 않한 이유가 알고 싶습니다.