학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] @GetMapping("/attach/{itemId}") public ResponseEntity<Resource> downloadAttach(@PathVariable("itemId")Long itemId) throws MalformedURLException { Item item = itemRepository.findById(itemId); String storeFileName = item.getAttachFile().getStoreFileName(); String uploadFileName = item.getAttachFile().getUploadFileName(); UrlResource resource = new UrlResource("file" + fileStore.getFullPath(storeFileName)); log.info("uploadFileName={}",uploadFileName); String encodedUploadFileName = UriUtils.encode(uploadFileName, StandardCharsets.UTF_8); String contentDisposition = "attachment; filename=\"" + uploadFileName + "\""; return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION,contentDisposition) .body(resource); } 이렇게 코드를 작성하고 했는데 서버 오류라고 해서 어떤 오류인지 찾다가 잘 모르겠어서 ㅠ 2024-07-15T15:14:14.924+09:00 ERROR 8932 --- [upload] [nio-8081-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception java.net.MalformedURLException: unknown protocol: filec at java.base/java.net.URL.<init>(URL.java:681) ~[na:na] at java.base/java.net.URL.fromURI(URL.java:748) ~[na:na] at java.base/java.net.URI.toURL(URI.java:1139) ~[na:na] at org.springframework.core.io.UrlResource.<init>(UrlResource.java:111) ~[spring-core-6.1.10.jar:6.1.10] at hello.upload.controller.ItemController.downloadAttach(ItemController.java:75) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) ~[spring-web-6.1.10.jar:6.1.10] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) ~[spring-web-6.1.10.jar:6.1.10] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.1.10.jar:6.1.10] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.10.jar:6.1.10] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.10.jar:6.1.10] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.10.jar:6.1.10] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.10.jar:6.1.10] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.10.jar:6.1.10] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.10.jar:6.1.10] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.10.jar:6.1.10] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.25.jar:6.0] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.10.jar:6.1.10] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.25.jar:6.0] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.25.jar:10.1.25] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.10.jar:6.1.10] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.10.jar:6.1.10] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.10.jar:6.1.10] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.10.jar:6.1.10] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.10.jar:6.1.10] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.10.jar:6.1.10] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:904) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.25.jar:10.1.25] at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na] 2024-07-15T15:14:14.954+09:00 DEBUG 8932 --- [upload] [nio-8081-exec-4] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@8c546e9:org.apache.tomcat.util.net.NioChannel@774f14c1:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8081 remote=/127.0.0.1:3270]], Status in: [OPEN_READ], State out: [CLOSED] 오류 코드는 이것 입니다 혹시 몰라서 구글 드라이브 에 넣었는데.. 확인 부탁 드립니다 https://drive.google.com/file/d/1iFzAm4dJRLJM7ljbpelZhd1dz7ZBbeEp/view?usp=sharing
질문 답변을 제공하지만, 강의 비용에는 Q&A는 포함되어 있지 않습니다. 다만 실습이 안되거나, 잘못된 내용의 경우는 알려주시면 가능한 빠르게 조치하겠습니다! [질문 전 답변] 1. 강의에서 다룬 내용과 관련된 질문인가요? [예 | 아니요] 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? [예 | 아니요] 3. 질문 잘하기 법을 읽어보셨나요? [예 | 아니요] (https://www.inflearn.com/blogs/1719) 4. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 5. vagrant up 에서 발생하는 문제는 주로 호스트 시스템(Windows, MacOS)과 연관된 다양한 조건에 의해 발생합니다. 따라서 이를 모두 제가 파악할 수 없어서 해결이 어렵습니다. vagrant up 으로 진행이 어렵다면 제공해 드리는 가상 머신(VM) 이미지를 import해서 진행하시기 바랍니다. ( https://www.inflearn.com/questions/992407/comment/281901 ) 6. ARM 계열의 m1 , m2 계열은 VirtualBox를 통한 구성이 원할하지 않고, 실습 환경의 다변화는 추후 대처하기 어려워서 현재 과정에서는 지원하지 않습니다. ( https://www.inflearn.com/questions/915529 ) [질문 하기] 위 사진 처럼 4.4 로드밸런서 강의를 듣고 실행하였는데 로드밸런서가 펜딩현상에서 넘어가지지 않습니다. 설정을 잘못 했나 싶어 VM을 삭제하고 재설치를 진행하고 하였으나 동일 증상 발생중입니다. 확인 부탁드립니다.
안녕하세요 강의 재밌게 잘 따라가고 있는데요, 궁금한 점이 있어서 첫 질문 올리게 되었습니다. Login 페이지 테스트 시 이메일이나 패스워드 관련해서 잘못된 부분이 있으면 사진과 같이 하단에 메시지가 표시되는데요, 이 메시지는 어디서 발생하는 메시지인지?(FF or Firebase) 그리고 규칙(자리수, 이메일 포맷 등등)이나 문구를 바꾸려면 어떻게 해야하는지 알려주시면 감사하겠습니다.
python ide에서는 정답 맞는데 백준에서는 틀립니다 solution함수를 이렇게 하면 틀리는 이유는 뭔가요? from collections import Counter def solution(arr): pre_answer=Counter(arr) for key in pre_answer: if pre_answer[key]%2==1: return key n=int(input("참가자 수:")) arr=[] for i in range(n): arr.append(input()) for j in range(n-1): arr.append(input()) print(solution(arr))
이해가 어려운 섹션이나 영상 설명은 질문으로 꼭 남겨주세요. 구조체 멤버를 지정할때구조체명.멤버 구조체명->멤버(*구조체명).멤버로 할수있는것으로 알고있는데그렇다면답은 -> 말고도 .이 될수도 있나요?더불어 위의 코드 하나씩 풀이해주시면 감사하겠습니다. 코도 의미가 너무 어렵고 이해가 안가네요.ㅜㅡㄴ
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 먼저 유사한 질문이 있었는지 검색해 보세요. 서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요! 너무 좋은 강의 올려주셔서 감사합니다 덕분에 엄청엄청 많이 도움받았습니다. 궁금한점이 void타입의 검증메소드의 경우 mockito를 사용할때 reason: no instance(s) of type variable(s) T exist so that void conforms to T 라는 컴파일 에러가 나는데, wilThrow는 해야하거든요! 이런 void타입의 경우는 어떻게 테스트하는지 궁금합니다! 추가적으로 서비스 레이어를 sut으로 작성했지만 void타입일 경우 어떤 데이터를 검증해야하는지 궁금합니당.. 만약 마지막 흐름이 특정 레포지토리라면 해당 레포지토리가 호출되었는지 행위검증만하는 verfiy만 사용하면 될까요?
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
안녕하세요! 이동할 때 서버에 움직여도 되는지 묻고, 대답이 오면 그때 움직이는 방식으로 만든다고 했을 때, SetDir, SetState같은 것들도 위와 같은 방식을 취하는 게 좋을까요? 이동은 선 보고 후 허락이 오면 이동하는 방식, SetDir과 SetState는 강의에서처럼 먼저 Set하고 서버에 보고하는 방식으로 코드를 짰는데 이게 뭔가 흐름이 꼬이는 부분이 있는 것 같아요. 두 개를 하나의 방식으로 통일하는 게 좋을지, 보통 선 보고 후 허락이 오면 이동하는 방식을 취할 때 SetDir, SetState같은 것들도 똑같이 허락이 오면 바뀌는 방식으로 하는지 궁금합니다. 감사합니다. 강의 잘 보고 있습니다!
S3 기초 강의에 강의자료 업로드가 안되어 있습니다. "index.html ", "userdata.txt" 두가지 파일 모두 받을 수 없습니다. 이전 강의에서도 파일 업로드가 안되어있는 경우가 있어서 적당히 생략하거나 했는데, 파일 업로드좀 해주세요. 각 강의마다 따로 올리기 힘드시면 일괄적으로 한번에 받을 수 있게 해주세요. 강의 영상을 보고 타이핑해도 되지만, 강의에서는 업로드 하였다고 말씀하시니 찾아보는데, 아무리 찾아봐도 파일이 없네요
이해가 어려운 섹션이나 영상 설명은 질문으로 꼭 남겨주세요. 기출문제를 풀다가 막힌 개념이 있나요? 질문으로 회차나 번호, 개념을 예시로 질문해주세요. 답변에 도움이 됩니다. 이론 문제는 통합본 PDF 파일로 제공될 예정입니다. (6월 중 업로드 예정) 합격을 가르는 것은 역시 코드해석문제. 이론을 외울 시간이 없다면 코드에 익숙해지고, 중요 개념을 몇 가지 외워가면 합격할 수 있습니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] https://drive.google.com/drive/folders/1omwrHagdmHylTjdmWgRgTnX7nQkNpvms?usp=sharing test 코드 실행을 하는데 전부 다 실패합니다. datasource에 문제가 있는 것 같은데 왜 문제가 생긴건지 모르겠습니다.
4장 Chapter 4-1(예수금 조회).py 실행하면 더 이상 진행되지 않습니다. 1) 코드 실행, 고객ID, 비밀번호 입력 2) 다음 팝업 화면 생성, 계좌비밀번호 입력창 생성되지 않고, 코드에 계좌비밀번호를 입력해도 동일합니다. 3) 더 이상 진행이 되지 않습니다.
안녕하세요, 올려주신 양질의 강의 잘 듣고 있습니다. 다름이 아니라 7시간 정도에 이르는 네트워크 강의를 들으며 제 나름대로 '이런 점은 개선되었으면 한다.', '이런 점은 추가 설명이 필요하다.' 싶었던 내용을 정리하여 올립니다. 강사님께서 확인하시고 강의 내용을 보강해 주신다면 추후에 학습하는 분들에게 큰 도움이 될 것입니다. 영어로 된 용어는 발음이 명확했으면 합니다 : 일례로 "Status"를 "스테투스"라고 발음하시는 것을 들었는데, 전공자와 비전공자를 가리지 않고 듣는 강의인 만큼 용어의 발음은 정확해야 한다고 생각합니다. 특히 CS의 기본적인 지식에는 영어 단어가 많기 때문에 더욱 중요합니다. 어학 능력도 보는 기업이 적지 않은 만큼 이 부분에 있어선 개선을 부탁드립니다. XSS, CSRF에 대한 내용도 구체화되었으면 합니다 : CORS 강의에서 CSRF에 대한 내용이 간단하게만 언급되고 넘어갔는데, 네트워크에서 가장 중요한 부분은 보안이라는 것에 강사님께서도 공감하실 것입니다. 그러나 네트워크 강의에서 보안에 관한 내용이 부족했던 것 같아 이에 대한 개선을 부탁드립니다. 실습 파일명이 명확했으면 합니다 : 서버 파일명을 a.js, b.js와 같이 명명하시는 것보다는 client.js, server.js, JWTLoginServer.js, sessionLoginServer.js 등 어떤 내용에 대한 실습인지 알 수 있는 파일명으로 명명해 주시면 학습이 조금 더 원활할 것입니다. 현재는 a.js가 뭘 하는 서버이고, b.js가 뭘 하는 서버인지 파악하는 데서 불필요한 시간과 인지적 자원이 소모된다는 느낌을 받았습니다. 이에 대한 개선을 부탁드립니다. 강의자료가 조금 더 교정되었으면 합니다 : 기본적인 오탈자 교정은 빠른 시일 내에 꼭 이루어져야 한다고 보고, 이외에도 구조적인 측면에서 학습자가 머릿속에 내용을 구조화하기 쉽도록 보완이 되었으면 합니다. 지금도 충분히 괜찮지만 더 좋아질 수 있는 강의자료라고 생각합니다. 좋은 강의 제공해 주셔서 감사합니다. 강의 초반부에 말씀해 주신 것처럼 며칠 몰아서 듣지 않고 하루 30분 학습하고 해당 내용 복습하면서 잘 흡수하고 있습니다!! 파이팅입니다 ^^
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에서 답변을 보면, @PostMapping("/members/new") public String create(MemberForm form){ Member member = new Member(); member.setName(form.getName()); memberService.join(member); return "redirect:/"; } 위와 같이 코드를 작성하면, "members/new"로 POST 메소드가 호출되었을 때, 스프링이 create() 메서드를 실행하기 위해 MemberForm 객체를 만들어야 하고, setter를 불러와서 멤버변수에 파라미터를 주입한다고 이해했습니다. 그런데, 한가지 의문이 들었습니다. MemberForm에 name을 저장하고, 그 값을 다시 Member 객체에 저장할거면, 한번에 Member에 저장하면 안되나? Member에도 멤버변수로 name이 있고, setter도 있으니, 안될 건 없다고 생각했습니다. 그래서 아래와같이 코드를 작성했습니다. @PostMapping("/members/new") public String create(Member member){ memberService.join(member); return "redirect:/"; } 이렇게 작성하고 회원가입, 회원목록 기능을 모두 수행해본 결과, 똑같이 잘 작동했습니다. 혹시 강사님께서 굳이굳이 MemberForm을 거쳐서 Member 객체를 만드신 이유가 있나요? 어떤 성능상의 이점이 있는 건가요? 아님 두번째 방법이 위험한 방법이라서 그런건가요? 왜 그런건가요?
강사님 안녕하세요. 강의를 보다보면 배워야할 점이 많이 보입니다. - 채팅방 그룹 이름을 만들 때 staticmethod 장식자를 활용한다던지 - 해당 강의에서 Room 모델 안에서 다른 필드와 섞이는 것을 방지하기 위해 별도의 추상화 클래스를 만든다던지 파이썬의 고급 기술? 이라고 해야할까요? 이런 걸 잘 사용하려면 결국엔 의식적으로 사용하려고 하고 연습해야 할거 같은데 추천하시는 강의나 서적이 있을까요?
섹션 3. 컴포넌트 이해와 활용 중에서 "컴포넌트를 만드는 방법" 강의를 듣다 이해가 잘 안 되는 것이 있어 질문합니다. 컴포넌트를 만들 때는 더이상 쪼개지지 않는 단위부터 만드는 게 좋다고 하셨는데 조합형 컴포넌트를 만든다고 가정했을 때 (가령 ㅁ1+ㅁ2를 조합하여 컴포넌트를 만든다고 했을 때) 그 안에 요소가 마스터의 성격을 가질 수 있다라고 하면 기초 단위 마스터를 다시 만들어서 조합형 컴포넌트 안에 일반 ui요소를 컴포넌트 방식으로 교체해주면 된다고 하셨던 걸 토대로 한다면 ㅁ1+ㅁ2에서 ㅁ1, ㅁ2도 각각 컴포넌트 처리를 해야한다는 소리인가요?