활용 앱 57강 질문입니다.
해결됨
앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
영상 1분경에 보면 드래그해서 폴더랑 파일 순서 변경하시는데 저는 현재 xcode 26.2 버전 사용하고있는데요. 최신버전에서는 폴더, 파일순서 변경이 안되는건가요?
- ios
- iOS-Autolayout
- mvc
- mvvm
- uikit
176만명의 커뮤니티!! 함께 토론해봐요.
해결됨
앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
영상 1분경에 보면 드래그해서 폴더랑 파일 순서 변경하시는데 저는 현재 xcode 26.2 버전 사용하고있는데요. 최신버전에서는 폴더, 파일순서 변경이 안되는건가요?
미해결
스프링 DB 2편 - 데이터 접근 활용 기술
안녕하세요 강의를 듣던중 궁금한것이 생겨서요, 해당 프로젝트 구조를보면 di주입을 config에서 new 키워드를 통해 repository 클래스를 직접 인스턴스화해서 주입해주고있고 구현체에 해당하는 인스턴스를 생성한후 추상화된 repository를 빈에 등록해서 호출하여 사용하는 형식으로, 특정 구현체에 의존되지 않게 해주고있는데요 근데 가만생각해보니 실제 MemotyItemRepository에 보면 @Repository 어노테이션을 사용하고있는데 해당 어노테이션을 사용하면 자동으로 빈에 등록해주는 역할을해주는걸로알고있는데 config 에서 직접 new 를 통해 주입해주고있는데 굳이 왜 빈에 등록해야하는거지? 라는 의문이 들어서요 MemoryItemRepository에서 @Repository 어노테이션을 사용하지 않아도 전혀 문제가 없을것같은데 굳이 왜 사용하는 건지 궁금합니다!
해결됨
앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
let backButton: UIButton = { let button = UIButton(type: .custom) button.setTitle("Back", for: .normal) button.setTitleColor(.white, for: .normal) button.backgroundColor = UIColor.blue button.titleLabel?.font = .boldSystemFont(ofSize: 20) button.addTarget(self, action: #selector(backButtonTapped), for: .touchUpInside) return button }() backButton 설정시에 addTarget 첫번째 인자로 self 로 전달하니까 'self' refers to the method 'FirstViewController.self', which may be unexpected 라는 warning 문구가 xcode 내에 표시되어서 xcode 에서 추천하는 방향대로 아래 코드블록 처럼 FirstViewController.self 로 전달하니까 backButton 클릭시 Exception 이 발생하는데요. button.addTarget(FirstViewController.self, action: #selector(backButtonTapped), for: .touchUpInside) 이 부분 왜 Excpetion 이 발생하는건지 궁금합니다. self 로 전달하면 문제는 없는데 경고문구가 나오는게 신경쓰입니다. 경고문구를 없애고 버튼 클릭에도 문제가 없으려면 어떻게 하는게 좋을까요? Exception 문구는 아래와 같습니다. *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NextVC.FirstViewController backButtonTapped]: unrecognized selector sent to class 0x100e4a3d8' *** First throw call stack: (0x19df92964 0x19ae81814 0x19e02d140 0x19df1235c 0x19df1a200 0x1a4c49f58 0x1a4501154 0x1a4501498 0x1a44fdf08 0x1a450001c 0x1a4c7a2d4 0x1a4c7b734 0x1a4c5e170 0x1a3892d38 0x1a38a1e28 0x1a3894c50 0x1a38a2ee4 0x1a38a2374 0x28cd15560 0x19dee34cc 0x19df130b0 0x19df12fd8 0x19deeac1c 0x19dee9a6c 0x23fb18498 0x1a38c2df8 0x1a386be54 0x1a3997820 0x100e365cc 0x100e3653c 0x100e36648 0x19aed6e28) libc++abi: terminating due to uncaught exception of type NSException
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이 수업 처음에 form-start에서 시작하라고 하셨는데 form-start에서는 Item.java에 선언되어있는 내용이 부족해서 이걸로는 수업이 진행되지않습니다. form으로 시작하기에는 코드를 따라서 칠수가없구요... ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 정리 영상 중 Bean등록을 @Component, @Autowired를 설명해 주시면서 더 좋은 방법이 있다고 말씀하셨습니다. 다만, 저는 현재 사용하는 방법은 @Autowired 같은 생성자 주입인데. 더 좋은 방법은 어떤걸까요? @RequiredArgsContructor도 같은 생성자 주입을 사용하는 것으로 알고있습니다.. 더 좋은 방법은 어떤걸까요?
해결됨
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (모름) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 말 그대로 타입 컨버터 가 고급3편에 배운 람다랑 비슷해 보여서 글을 남김니다. 이유는 타입 컨버터를 배우면서 ,자바 고급3편 이 계속 생각났습니다. 그래서 자바 고급 3편을 찾아보니 , 필터(값이 트루면 통과), function(t,r), map(a->b로) 을 찾을 수 있었는데요 저의 생각이 맞는지 궁급합니다. 답변 부탁드립니다.
미해결
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 /아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 지금 웹서버, 웹 애플리케이션 서버 공부 중인데요.. 웹서버와 웹 애플리케이션 서버가 나와서 반가운 마음에 질문을 드립니다. 강의에는 이 내용까진 않나오고 정적 리소스 제공이 웹서버, WAS 도 웹 서버 기능이 있지만 보통은 웹 애플리케이션 로직 처리에 특화되어있다와 같이 설명을 해주셨습니다. 근데 전에 어디서 들은건데 요즘 SPA 페이지라서... 한 페이지에 여러 이미지 등이 존재하고 소비자가 index.html을 요구했다 가정하면 index.html 을 제공한 후, 그 후에 index.html 에 있는 많은 정적 파일들이 또 요청된다고 알고 있습니다. 그럼 이러한 이유 때문에 현대에서는 웹 서버가 중요하고 그로인해 nginx 를 앞단에 설치한다고 생각하고 있어도 될까요 ?
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] <!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> </body> </html> javascript.html에서 자바스크립트 인라인 안의 var user = [[${user}]]; 부분을 제외하면 서버가 잘 돌아갑니다. 객체 직렬화가 안 되는 것 같은데, 이유를 알 수 있을까요? 오류 메시지는 org.thymeleaf.exceptions.TemplateOutputException: An error happened during template rendering 입니다!
해결됨
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 궁금증이 생겨서 질문을 드립니다. 스프링 부트 에서 기본적으로 제공 하는 에러페이지를 보여주기위해서, 영한님이 4xx, ~ 500.html을 보여주셨습니다. 여기에서 오류 정보를 보여주는 500.html에서 궁금증이 생겻습니다. 사진을 보시면 볼록된 시간 객체(추정)를 통하여서 시간을 출력 하시는 것을 보여주셨는데, 이건 갑자기 어디서 나온 것인지 궁금합니다. 세션2,3에 타임리프 기능에 있는건가 하여서 ctrl+f "timestamp" 하고 넣어보았지만 안보였고, http 서블릿 request나 respone 에 있는 것인가 하고 get및 set으로 찾아보았지만. 안보였습니다. 뜬금없이 갑자기 전달된 것이라서 이해가 안갑니다. timestamp에 대해서 가르쳐 주시면 감사하겠습니다. 답변 부탁 드립니다.
미해결
앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
6:09 쯤에 UIView 에 대해서 Add New Contraints 하실때 따라해보면 Top alignment 가 맞지않는게 좀 다르게 설정이 되는것 같습니다. Inspector 패널에서 확인해보면 Top Alignment Constraint 가 First Item : View.top Second Item : Safe Area.top 이런식으로 적용되고있는데요. 이부분 설정을 어떻게해야 강의에 나오는것 처럼 수직정렬이 반듯하게 적용이 되는걸까요?
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
application.properties 파일에 server.error.whitelabel.enabled=false 을 적어줘도 계속 부트 에러 페이지가 보이네요 build, clean 다 해봐도 그대로 입니다. 부트 버전이 4.0.1인데 버전과 관련이 있을까요?
미해결
스프링 DB 1편 - 데이터 접근 핵심 원리
강의 jdbc 연동 설명해주시는데.. 지금은 h2로 연동하지만.. 로컬에는 h2 디비를 사용하는데.. 환경이 다른곳에서 DB를 변경할경우 그에대한 설정은 어떤방법으로 처리하는지 궁금합니다. 예를들어서 A란서버에는 오라클 B란서버에는 mysql C란서버에는 PostgreSql D란서버에는 티베로 각환경마다 접속하는 DB로 변경할경우 주의사항이나.. index나 기본키나 외래키 같은 설정하는 방법이 다를것같은데 jpa나 mybatis에서 사용할경우 그런경우 각 DB에 맞게 셋팅은 어떻게해야하나요? 롬복이나.. 아니면 별도의 스크립트?(sql)파일을 돌려야할까요?
미해결
스프링 부트 웹 개발 입문 - 따라하며 배우기
2025-12-17 11:51:45.686 ERROR 15916 --- [nio-8081-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.boot.sailing.v1.dao.MenuDao.doList] with root cause org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.boot.sailing.v1.dao.MenuDao.doList at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:229) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:96) ~[mybatis-3.5.13.jar:3.5.13] at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) ~[na:1.8.0_352] at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:94) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) ~[mybatis-3.5.13.jar:3.5.13] at com.sun.proxy.$Proxy64.doList(Unknown Source) ~[na:na] at com.boot.sailing.v1.service.MenuSvc.doList(MenuSvc.java:25) ~[main/:na] at com.boot.sailing.v1.controller.MenuCon.doMenu(MenuCon.java:24) ~[main/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_352] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_352] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_352] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_352] at org.springframework.web.method.support .InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.method.support .InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.24.jar:5.3.24] at javax.servlet.http.HttpServlet.service(HttpServlet.java:670) ~[tomcat-embed-core-9.0.70.jar: 4.0.FR ] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.24.jar:5.3.24] at javax.servlet.http.HttpServlet.service(HttpServlet.java:779) ~[tomcat-embed-core-9.0.70.jar: 4.0.FR ] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.70.jar:9.0.70] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177) ~[tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.tomcat.util.net .NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java:49) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.tomcat.util.threads.ThreadPoolExecutor$ Worker.run (ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.70.jar:9.0.70] at org.apache.tomcat.util.threads.TaskThread$ WrappingRunnable.run (TaskThread.java:61) [tomcat-embed-core-9.0.70.jar:9.0.70] at java.lang.Thread.run (Thread.java:750) [na:1.8.0_352]
해결됨
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (안보임) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 궁금증이 생겨서 질문을 남깁니다. 말 그대로 apiExceptionController 에서 sendErrr를 호출하면 안될까 라는? 생각이 들어서 여쭤봅니다. 해보니 되서 말입니다. 일단 코드및 결과값을 공유합니다. 코드 들 결과 값 코드는 apiExceptionController 에서 HttpServletResponse 를 추가하고 여기에 send Error를 넣고 실행한 화면 입니다.(sendError 에서 나오는 에러는 그냥 던짐) '이렇게 해도 될 것 같은데' 라는 생각이 들어서 코드 및 결과를 공유 하고 물어봅니다. 혹 이렇게 하면 안되는 건지? 아니면 이렇게 해도 되는지 궁금해서요. 수정1: 사진 하나더추가(프로퍼티즈 설정) 수정2 결과값에 json이 안되어 있어서 다시 돌림(결과값 변경, 그외 따른 사진 추가 ) 답변 부탁드립니다.
해결됨
스프링 DB 2편 - 데이터 접근 활용 기술
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 8분30초쯤 나오는 ItemService는 ItemServiceV1을 의미하는걸까요? ItemService가 interface인데 JpaItemRepository에 의존하고 있다는건 아닌거 같아서요
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (찾아보았지만 안보임) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (읽긴 함) [질문 내용] 안녕하세요. 궁금증이 생겨서 질문을 남깁니다. 사용자가 작동(동작)이 없으면 시간이 지난후 세션이 종료한다는것을 프로퍼티즈 를 통해 설정할수 있는 것을 여기에서(강의) 배울 수 있었는데요. 근데 저는 미관상? 세션을 종료하고 쿠키가 남아 있는게 좋지 않다고 생각해서 찾다가 안보여서 여기에 글을 남깁니다. 로그아웃 시에는 JSESSIONID 를 null 로 주어서 쿠키를 삭제하긴 하였는데(expireCokie 메서드를 보고 따라함), server.servlet.session.timeout=60 이걸로는 쿠키가 삭제 안됩니다. (f12로 확인함) 타임아웃시 쿠키를 삭제할 방법을 알고 계시면 가르켜 주시면 감사하겠습니다. 아니면 찾을수 있게 키워드를 주시면 감사하겟습니다. 추가1 그리고 타임아웃 최저 길이가 60초 인가요? 30초 해봤는데(되긴 되는데 1분이 지나서 된것 같습니다.) 정확한 시간(30초)에는 안되고 60초넘어서는 되었습니다 추가2 이 번역기는 어떤 번역기를 쓰면 되나요?(좋아보여서요) 추가3 로그 아웃 시 쿠키 삭제 방법 (이게 있어야 된다는 생각이 갑자기 들어서 추가함) logoutV3() 메서드 에서 session.invalidate(); 밑에 3개의 코드 추가 Cookie cookie = new Cookie("JSESSIONID", null); cookie.setMaxAge(0); response.addCookie(cookie); 답변 부탁 드립니다.
미해결
스프링 부트 웹 개발 입문 - 따라하며 배우기
첫 프로젝트 생성에서
미해결
스프링 DB 2편 - 데이터 접근 활용 기술
강의 19분부터 설명하시는 내용이 트랜잭션 매니저에 커밋하는 것이 논리 커밋이라고 하시는데요, 실제 DB에 커밋하는 물리 커밋도 코드상에서 트랜잭션 매니저를 통해서 진행되는 것 아닌가요? 이건 어떻게 이해해야 할까요? 물리 트랜잭션이라는 것이 별개로 존재하는 것이 아니라 논리 트랜잭션이 모여진 개념이라 결국 트랜잭션 매니저에 하는 논리 커밋이라는 것이 사실 물리 커밋도 포함하는 개념이라고 이해하여야 하나요? 예를들어 외부 내부 트랜잭션이 있을 때 각각은 논리 트랜잭션이지만 하나의 물리 트랜잭션으로 묶이죠. 그리고 실제로 코드상에서 외부 트랜잭션에서 커밋을 하여야 물리 커밋이 진행되는데 이때 외부 트랜잭션을 별개로 보면 논리 커밋을 진행 한 것이기도 하지만 물리 커밋이 진행된 것처럼 트랜잭션 매니저가 하는 것은 논리 커밋이다 라는 개념도 논리 커밋을 하는 것은 외부 트랜잭션 일 경우 물리 커밋을 포함한다. 이렇게 이해하여야하나요?
미해결
스프링 DB 2편 - 데이터 접근 활용 기술
log.info("내부 트랜잭션 커밋"); txManager.commit(inner); log.info("외부 트랜잭션 커밋"); txManager.commit(outer); 전체 커밋하는 상황에서 내부, 외부 모두 커밋이 되어야 실제 물리 커밋이 이루어진다고 앞서 개념을 설명하실 때도 그렇고 이번 강의에서도 설명하셨습니다. 그런데 내부 커밋을 진행하면 아무 일도 발생하지 않고 외부 트랜잭션에서 커밋을 진행해야 실제 물리 커밋이 되는데 그렇다면 이때 내부 커밋을 진행하지 않아도 되나요? 아니면 모두 커밋돼야 커밋된다는 원칙에 따라 내부 커밋도 필수적으로 진행하여야하고 외부 커밋도 진행하여야하는 것인가요? 제 생각에는 정말 내부 커밋이 필요하다면 호출이 반드시 필요하다라고 설명하셨을 것 같은데 내부 커밋을 해도 아무것도 안한다고 하시니 내부 커밋 코드를 호출에 의문점이 생깁니다. 실제 물리 커밋은 외부 커밋에서 진행되기 때문에 내부 커밋 코드를 강의 설명 차원에서 작성하신 것인지 아니면 정말 원칙에 따라 필요해서 호출한 것인지 궁금합니다.
미해결
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 스프링 웹 mvc 2편 중 'API 예외 처리' 수강 후 복습하는 중에 이해가 되지 않는 부분이 있어서 질문드립니다. 질문은 "/api/members/ex 요청 시 왜 json이 아니라 html 이 반환되고, 상태코드는 왜 200인가" 입니다. 현재 코드에 RuntimeException을 처리하는 예외리졸버나 컨트롤러어드바이스가 없어서 스프링이 제공하는 기본 예외 처리 과정을 거쳐야 되는 상황입니다. 제가 강의를 듣고 이해한 바로는 RuntimeException 발생 시 예외가 WAS까지 전달되고 WAS는 예외 처리를 위한 내부 요청을 하게됩니다. 이 때 BasicErrorController가 호출되고, 클라이언트가 보낸 요청의 Accept 에 따라 내부 요청을 처리할 메서드를 결정하는 것으로 알고 있습니다. 저는 포스트맨에서 accept를 application/json 으로 설정했기 때문에 BasicErrorController의 error() 메서드가 실행되어 json 형식으로 응답이 될 줄 알았는데, 결과는 templates/error/500.html 이 응답되고 상태 코드도 200으로 되어 있습니다. gpt 검색을 했을 때는 templates/error/500.html이 있어서 json 응답이 무시되고 html로 응답을 했을 가능성이 있다고 했는데, 강의에서도 templates/error/500.html 이 있었는데 강의에서는 정상적으로 json 응답이 보내지고 500 으로 상태 코드가 전달되었습니다. 저는 왜 이런 응답을 받은건지 이해가 되지 않습니다.