묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
테스트 관련 공부에 대한 조언을 얻고 싶습니다
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 아니오2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]솔직히 강의에 관련된 질문과는 거리가 먼 내용이어서 질문을 해야 하나 말아야 하나 고민하다가 결국 질문하는 게 좋겠다고 생각되어 질문을 올립니다. 강의 중에 강사님께서 중간중간에 test관련 공부를 열심히 해야한다고 하셨는데 혹시 어떤 식으로 공부해야 하는지 그리고 강사님께서는 어떻게 하셨는지, 또 추천하시는 서적이 있다면 그 서적의 제목이 어떻게 되는지 알고 싶습니다.
-
해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용 앱 57강 질문입니다.
영상 1분경에 보면드래그해서 폴더랑 파일 순서 변경하시는데 저는 현재 xcode 26.2 버전 사용하고있는데요.최신버전에서는 폴더, 파일순서 변경이 안되는건가요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
@repository 어노테이션
안녕하세요 강의를 듣던중 궁금한것이 생겨서요,해당 프로젝트 구조를보면 di주입을 config에서new 키워드를 통해 repository 클래스를 직접 인스턴스화해서 주입해주고있고 구현체에 해당하는 인스턴스를 생성한후추상화된 repository를 빈에 등록해서호출하여 사용하는 형식으로, 특정 구현체에 의존되지 않게 해주고있는데요 근데 가만생각해보니실제 MemotyItemRepository에 보면@Repository 어노테이션을 사용하고있는데해당 어노테이션을 사용하면 자동으로 빈에 등록해주는 역할을해주는걸로알고있는데 config 에서 직접 new 를 통해 주입해주고있는데굳이 왜 빈에 등록해야하는거지?라는 의문이 들어서요 MemoryItemRepository에서@Repository 어노테이션을 사용하지 않아도전혀 문제가 없을것같은데 굳이 왜 사용하는 건지 궁금합니다!
-
해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용 앱 30강 에러 질문입니다
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편 - 백엔드 웹 개발 활용 기술
섹션3번 수업에 대한 질문입니다.
이 수업 처음에 form-start에서 시작하라고 하셨는데 form-start에서는 Item.java에 선언되어있는 내용이 부족해서 이걸로는 수업이 진행되지않습니다. form으로 시작하기에는 코드를 따라서 칠수가없구요...=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@Autowired 보다 더 좋은 방법이 어떤 걸까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]정리 영상 중 Bean등록을 @Component, @Autowired를 설명해 주시면서 더 좋은 방법이 있다고 말씀하셨습니다.다만, 저는 현재 사용하는 방법은 @Autowired 같은 생성자 주입인데. 더 좋은 방법은 어떤걸까요?@RequiredArgsContructor도 같은 생성자 주입을 사용하는 것으로 알고있습니다.. 더 좋은 방법은 어떤걸까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (모름)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 말 그대로 타입 컨버터 가 고급3편에 배운 람다랑 비슷해 보여서 글을 남김니다. 이유는 타입 컨버터를 배우면서 ,자바 고급3편 이 계속 생각났습니다. 그래서 자바 고급 3편을 찾아보니 , 필터(값이 트루면 통과), function(t,r), map(a->b로)을 찾을 수 있었는데요 저의 생각이 맞는지 궁급합니다.답변 부탁드립니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.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편 - 백엔드 웹 개발 활용 기술
스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 궁금증이 생겨서 질문을 드립니다.스프링 부트 에서 기본적으로 제공 하는 에러페이지를 보여주기위해서, 영한님이 4xx, ~ 500.html을 보여주셨습니다.여기에서 오류 정보를 보여주는 500.html에서 궁금증이 생겻습니다.사진을 보시면 볼록된 시간 객체(추정)를 통하여서 시간을 출력 하시는 것을 보여주셨는데, 이건 갑자기 어디서 나온 것인지 궁금합니다.세션2,3에 타임리프 기능에 있는건가 하여서 ctrl+f "timestamp" 하고 넣어보았지만 안보였고, http 서블릿 request나 respone 에 있는 것인가 하고 get및 set으로 찾아보았지만. 안보였습니다.뜬금없이 갑자기 전달된 것이라서 이해가 안갑니다.timestamp에 대해서 가르쳐 주시면 감사하겠습니다. 답변 부탁 드립니다.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
기초앱 17강 Contraints 설정 질문입니다.
6:09 쯤에 UIView 에 대해서 Add New Contraints 하실때따라해보면 Top alignment 가 맞지않는게 좀 다르게 설정이 되는것 같습니다.Inspector 패널에서 확인해보면Top Alignment Constraint 가First Item : View.topSecond Item : Safe Area.top이런식으로 적용되고있는데요.이부분 설정을 어떻게해야 강의에 나오는것 처럼 수직정렬이 반듯하게 적용이 되는걸까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
톰캣 에러 페이지가 안보입니다.
application.properties 파일에 server.error.whitelabel.enabled=false을 적어줘도 계속 부트 에러 페이지가 보이네요build, clean 다 해봐도 그대로 입니다. 부트 버전이 4.0.1인데 버전과 관련이 있을까요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
jdbc 학습하다 궁금해서 질문드려요
강의 jdbc 연동 설명해주시는데..지금은 h2로 연동하지만..로컬에는 h2 디비를 사용하는데..환경이 다른곳에서 DB를 변경할경우그에대한 설정은 어떤방법으로 처리하는지 궁금합니다.예를들어서A란서버에는 오라클 B란서버에는 mysqlC란서버에는 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 causeorg.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편 - 백엔드 웹 개발 활용 기술
apiEceptionController에서 센드 에러 호출하면 안되는지?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (안보임)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 궁금증이 생겨서 질문을 남깁니다.말 그대로 apiExceptionController에서 sendErrr를 호출하면 안될까 라는? 생각이 들어서 여쭤봅니다. 해보니 되서 말입니다.일단 코드및 결과값을 공유합니다. 코드들결과 값 코드는 apiExceptionController 에서 HttpServletResponse 를 추가하고 여기에 send Error를 넣고 실행한 화면 입니다.(sendError 에서 나오는 에러는 그냥 던짐) '이렇게 해도 될 것 같은데' 라는 생각이 들어서 코드 및 결과를 공유 하고 물어봅니다.혹 이렇게 하면 안되는 건지? 아니면 이렇게 해도 되는지 궁금해서요. 수정1: 사진 하나더추가(프로퍼티즈 설정) 수정2 결과값에 json이 안되어 있어서 다시 돌림(결과값 변경, 그외 따른 사진 추가 )답변 부탁드립니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
ItemService
=========================================[질문 템플릿]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); 답변 부탁 드립니다.
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
자바 8버전이 선택지에 없는데 어떻게 하죠
첫 프로젝트 생성에서
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
논리 커밋, 물리 커밋 질문드립니다.
강의 19분부터 설명하시는 내용이트랜잭션 매니저에 커밋하는 것이 논리 커밋이라고 하시는데요,실제 DB에 커밋하는 물리 커밋도 코드상에서 트랜잭션 매니저를 통해서 진행되는 것 아닌가요?이건 어떻게 이해해야 할까요?물리 트랜잭션이라는 것이 별개로 존재하는 것이 아니라 논리 트랜잭션이 모여진 개념이라결국 트랜잭션 매니저에 하는 논리 커밋이라는 것이 사실 물리 커밋도 포함하는 개념이라고 이해하여야 하나요?예를들어 외부 내부 트랜잭션이 있을 때 각각은 논리 트랜잭션이지만 하나의 물리 트랜잭션으로 묶이죠.그리고 실제로 코드상에서 외부 트랜잭션에서 커밋을 하여야 물리 커밋이 진행되는데 이때 외부 트랜잭션을 별개로 보면 논리 커밋을 진행 한 것이기도 하지만 물리 커밋이 진행된 것처럼트랜잭션 매니저가 하는 것은 논리 커밋이다 라는 개념도 논리 커밋을 하는 것은 외부 트랜잭션 일 경우 물리 커밋을 포함한다. 이렇게 이해하여야하나요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
내부 트랜잭션 커밋은 필수인가요?
log.info("내부 트랜잭션 커밋"); txManager.commit(inner); log.info("외부 트랜잭션 커밋"); txManager.commit(outer);전체 커밋하는 상황에서 내부, 외부 모두 커밋이 되어야 실제 물리 커밋이 이루어진다고 앞서 개념을 설명하실 때도 그렇고 이번 강의에서도 설명하셨습니다. 그런데 내부 커밋을 진행하면 아무 일도 발생하지 않고 외부 트랜잭션에서 커밋을 진행해야 실제 물리 커밋이 되는데그렇다면 이때 내부 커밋을 진행하지 않아도 되나요? 아니면 모두 커밋돼야 커밋된다는 원칙에 따라 내부 커밋도 필수적으로 진행하여야하고 외부 커밋도 진행하여야하는 것인가요?제 생각에는 정말 내부 커밋이 필요하다면 호출이 반드시 필요하다라고 설명하셨을 것 같은데 내부 커밋을 해도 아무것도 안한다고 하시니 내부 커밋 코드를 호출에 의문점이 생깁니다. 실제 물리 커밋은 외부 커밋에서 진행되기 때문에 내부 커밋 코드를 강의 설명 차원에서 작성하신 것인지 아니면 정말 원칙에 따라 필요해서 호출한 것인지 궁금합니다.