묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
인증요청시 문의드립니다.
강의진행중 궁금한게 있어서 문의드렸습니다!강의중에 토큰이 탈취될수도 있다고하셔서 String jws = Jwts.builder() .setSubject(String.valueOf(userId)) .signWith(key) .setIssuedAt(new Date()) .compact();코드를 넣어주셨습니다. 매번 다른 accessToken값이 나올수 있도록이요! 그 결과 로그인 시마다 매번 다른 토큰값이 나오는데, 로그인을 하고나서 기존의 토큰값으로 /foo 메소드를 호출하여도 인증이 되는데 왜 그런걸까요??1. 로그인시 abc토큰이 나와서 abc토큰으로 /foo 컨트롤러를 호출함 인증됨2. 또 한번 로그인시 abcd토큰이 나옴. 그런데 이전 로그인 토큰이였떤 abc토큰으로 /foo 컨트롤러를 호출하여도 인증 성공됨.왜 그런지 궁금합니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MVC 패턴 적용 중 404 에러가 납니다. (/servlet-mvc/members/new-form)
강의 정보MVC 패턴 - 적용 (04 : 14)에러 내용http://localhost:8080/servlet-mvc/members/new-form 로 접근하니 다음과 같이 404 에러가 납니다.MvcMemberFormServlet 클래스는 오타가 있을 경우를 대비해 오류 발생 이후에는 강의 자료의 내용을 복사하여 가져왔습니다.MvcMemberFormServlet 클래스 내의 service 메서드가 실행되는지 확인하기 위해 System.out.println("MvcMemberFormServlet.service"); 명령어를 사용하였는데, 터미널에서는 출력되지 않습니다.접근 url도 index.html에서의 링크로 접근을 해서 오타는 없을 것 같습니다.http://localhost:8080/servlet-mvc/members/new-form 을 제외한 다른 url들은 전부 접근이 잘 되고 있습니다.아래는 프로젝트 환경과 소스 코드, 터미널 출력입니다!프로젝트 환경프로젝트 구조소스 코드webapp/WEB-INF/views/new-form.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- 상대경로 사용, [현재 URL이 속한 계층 경로 + /save] --> <form action="save" method="post"> username: <input type="text" name="username" /> age: <input type="text" name="age" /> <button type="submit">전송</button> </form> </body> </html>java/hello/servlet/web/servletmvc/MvcMemberFormServletpackage hello.servlet.web.servletmvc; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "mvcMemberFormServlet", urlPatterns = "/servlet-mvc/members/new-form") public class MvcMemberFormServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("MvcMemberFormServlet.service"); String viewPath = "/WEB-INF/views/new-form.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); } }터미널 출력"C:\Program Files (x86)\Java\jdk-17.0.2\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2021.3.1\lib\idea_rt.jar=57706:C:\Program Files\JetBrains\IntelliJ IDEA 2021.3.1\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\User\source\BackEnd\study\스프링MVC1\servlet\servlet\build\classes\java\main;C:\Users\User\source\BackEnd\study\스프링MVC1\servlet\servlet\build\resources\main;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.projectlombok\lombok\1.18.26\8f8cf0372abf564913e9796623aac4c8ea44025a\lombok-1.18.26.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\2.7.9\e745a069e2b7ca51e378fcbc397d14dd82178199\spring-boot-starter-web-2.7.9.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-jasper\9.0.71\7ea76096eda4d1847fd50d985b1d26fa36a9822a\tomcat-embed-jasper-9.0.71.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\javax.servlet\jstl\1.2\74aca283cd4f4b4f3e425f5820cda58f44409547\jstl-1.2.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-json\2.7.9\671b3611eeb2fb315281ae17242ef082666e4262\spring-boot-starter-json-2.7.9.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\2.7.9\19f855d327f68690cf630698e4e41c3afe134a83\spring-boot-starter-2.7.9.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-tomcat\2.7.9\a1076e6ffa1d771d3ccd18e72280317a152323e8\spring-boot-starter-tomcat-2.7.9.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webmvc\5.3.25\62a8258bcc4f7a58dd69af5140481b64653c90\spring-webmvc-5.3.25.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework\spring-web\5.3.25\c69815e7931cd3ce7f19cc8028fd1c36626120d6\spring-web-5.3.25.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-core\9.0.71\adaed61b4eaa5b52448336c0881fcd828fd51a2f\tomcat-embed-core-9.0.71.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-el\9.0.71\8fe43848c27ec921c8c5d6dcbd8b959076d7bf99\tomcat-embed-el-9.0.71.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.eclipse.jdt\ecj\3.26.0\4837be609a3368a0f7e7cf0dc1bdbc7fe94993de\ecj-3.26.0.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jsr310\2.13.5\8ba3b868e81d7fc6ead686bd2353859b111d9eaf\jackson-datatype-jsr310-2.13.5.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-parameter-names\2.13.5\a401a99e7a45450fd3ef76e82ba39005fd1a8c22\jackson-module-parameter-names-2.13.5.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jdk8\2.13.5\1278f38160812811c56eb77f67213662ed1c7a2e\jackson-datatype-jdk8-2.13.5.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.13.5\aa95e46dbc32454f3983221d420e78ef19ddf844\jackson-databind-2.13.5.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\2.7.9\849b238dd024101cad8d107b4a8b0906f75003d5\spring-boot-autoconfigure-2.7.9.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\2.7.9\788d60e73e0f7bbbf11b30c3fb0a9cbaa073446b\spring-boot-2.7.9.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\2.7.9\4b1afa6083581924606c7cc892933b63ec5810d3\spring-boot-starter-logging-2.7.9.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\jakarta.annotation\jakarta.annotation-api\1.3.5\59eb84ee0d616332ff44aba065f3888cf002cd2d\jakarta.annotation-api-1.3.5.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\5.3.25\85382e86321227506bf7f97ed80e2ab88bce25f0\spring-core-5.3.25.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\1.30\8fde7fe2586328ac3c68db92045e1c8759125000\snakeyaml-1.30.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-websocket\9.0.71\987b6460af04b08bc9914788d2762080afb09541\tomcat-embed-websocket-9.0.71.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\5.3.25\268a70ce4f44333ce0f13304c5f8c53b3df5f5f4\spring-context-5.3.25.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\5.3.25\d681cdb86611f03d8ef29654edde219fe5afef1d\spring-expression-5.3.25.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\5.3.25\722e30759b29331726f9deed76f80b22345ee627\spring-aop-5.3.25.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\5.3.25\b3aeae036b4ea1abfa1f9604d452e19664efe5f6\spring-beans-5.3.25.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.apache.tomcat\tomcat-annotations-api\9.0.71\898ad20682cb807f734e600ba224d6a3eecaedbc\tomcat-annotations-api-9.0.71.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.13.5\136f77ab424f302c9e27230b4482e8000e142edf\jackson-annotations-2.13.5.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.13.5\d07c97d3de9ea658caf1ff1809fd9de930a286a\jackson-core-2.13.5.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.2.11\4741689214e9d1e8408b206506cbe76d1c6a7d60\logback-classic-1.2.11.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.17.2\17dd0fae2747d9a28c67bc9534108823d2376b46\log4j-to-slf4j-2.17.2.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\1.7.36\ed46d81cef9c412a88caef405b58f93a678ff2ca\jul-to-slf4j-1.7.36.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\5.3.25\2e65a986dc7f98b40faed8df1d50db77c0b96c61\spring-jcl-5.3.25.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.2.11\a01230df5ca5c34540cdaa3ad5efb012f1f1f792\logback-core-1.2.11.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\1.7.36\6c62681a2f655b49963a5983b8b0950a6120ae14\slf4j-api-1.7.36.jar;C:\Users\User\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.17.2\f42d6afa111b4dec5d2aea0fe2197240749a4ea6\log4j-api-2.17.2.jar hello.servlet.ServletApplication OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release. . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.9) 2023-03-10 21:21:23.566 INFO 20752 --- [ main] hello.servlet.ServletApplication : Starting ServletApplication using Java 17.0.2 on LAPTOP-O321EMIC with PID 20752 (C:\Users\User\source\BackEnd\study\스프링MVC1\servlet\servlet\build\classes\java\main started by User in C:\Users\User\source\BackEnd\study\스프링MVC1\servlet\servlet) 2023-03-10 21:21:23.569 INFO 20752 --- [ main] hello.servlet.ServletApplication : No active profile set, falling back to 1 default profile: "default" 2023-03-10 21:21:24.462 INFO 20752 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2023-03-10 21:21:24.472 INFO 20752 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2023-03-10 21:21:24.472 INFO 20752 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.71] 2023-03-10 21:21:24.743 INFO 20752 --- [ main] org.apache.jasper.servlet.TldScanner : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 2023-03-10 21:21:24.758 INFO 20752 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2023-03-10 21:21:24.758 INFO 20752 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1120 ms 2023-03-10 21:21:24.965 INFO 20752 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: ServletContext resource [/index.html] 2023-03-10 21:21:25.085 INFO 20752 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2023-03-10 21:21:25.094 INFO 20752 --- [ main] hello.servlet.ServletApplication : Started ServletApplication in 1.889 seconds (JVM running for 2.506) 2023-03-10 21:21:37.051 DEBUG 20752 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [0] 2023-03-10 21:21:37.051 DEBUG 20752 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer : Received [GET /servlet-mvc/members/new-form HTTP/1.1 Host: localhost:8080 Connection: keep-alive sec-ch-ua: "Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Referer: http://localhost:8080/index.html Accept-Encoding: gzip, deflate, br Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7 Cookie: JSESSIONID=E3785888BB25462DB7B183BFA52FDD63 ] 2023-03-10 21:21:37.079 INFO 20752 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2023-03-10 21:21:37.079 INFO 20752 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2023-03-10 21:21:37.080 INFO 20752 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms 2023-03-10 21:21:37.174 DEBUG 20752 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer : Before fill(): parsingHeader: [true], parsingRequestLine: [true], parsingRequestLinePhase: [0], parsingRequestLineStart: [0], byteBuffer.position(): [0], byteBuffer.limit(): [0], end: [809] 2023-03-10 21:21:37.174 DEBUG 20752 --- [nio-8080-exec-1] o.a.coyote.http11.Http11InputBuffer : Received [] 2023-03-10 21:21:37.174 DEBUG 20752 --- [nio-8080-exec-1] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@48295e2e:org.apache.tomcat.util.net.NioChannel@3716c58c:java.nio.channels.SocketChannel[connected local=/[0:0:0:0:0:0:0:1]:8080 remote=/[0:0:0:0:0:0:0:1]:57719]], Status in: [OPEN_READ], State out: [OPEN] build.gradleplugins { id 'java' id 'war' id 'org.springframework.boot' version '2.7.9' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' //JSP implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'javax.servlet:jstl' //JSP compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() }
-
미해결코딩테스트 [ ALL IN ONE ]
문의드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.설명 하실떄 사용하는 파이썬 프로그램 명은 어떤건 가요? 저는 파이참을 사용중인데 하나씩 재생하는데? 조금 불편함이있어 노씨님 프로그램으로 사용해보고 싶어 문의 드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
실무에서 form 태그를 많이 사용하나요?
사실 이 강의와 큰 연관이 없는 것 같은 질문이긴 한데 너무 궁금해서요 ㅠㅠ클라이언트에서 상품 등록처럼 무언가 입력해서 서버로 보낼 때 form 태그를 많이 사용하나요?아니면 form 태그를 사용하지 않고 자바 스크립트로 하나씩 value를 읽어와서 json으로 만들어서 보내는 경우가 많나요?전자의 경우 서버에서는 @ModelAttribute를 사용할 테고 후자의 경우 서버에서 @RequestBody를 사용할 텐데 어떤 경우가 많나요?결국엔 둘 다 동작은 똑같이 할 것 같은데 어떠한 큰 차이가 있나요? 아니면 비슷하나요?클라이언트 관련 질문이라 강의와 연관이 없어서 답변을 못 받을 수도 있을 것 같긴 한데 너무 궁금합니다 ㅠㅠㅠ
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
6:58초에서 log로 왜 proxy가 찍히는건지 잘 모르겠습니다..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]잘 이해가 안되어 질문 남깁니다. test에 있는 itemRepository는 bean으로 Config 파일을 통해서 주입시킨 JpaRepository 객체가 autowired 통해서 들어왔는데, 왜 프록시 객체가 로그로 찍히나요?repository의 프록시는 서비스 레이어 넘기기 전, 예외 변경기능만 하는 것 아닌가요? itemRepository에 주입된 객체가 왜 repository의 프록시 객체인지가 궁금합니다.. save()같은 repository안의 메서드에서 예외가 발생하여 service로 넘어갈때 프록시 객체가 적용되어야 하는것 아닌가요?헷갈려서 질문남깁니다..감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 중에 등장한 구글 확장프로그램 이름 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]View 환경설정 강의에서 3분 45초에 공식 문서를 볼 때 오른쪽 위에 등장하는 구글 확장 프로그램 이름이 어떻게 되나요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
블로그 포스팅 시 출처
안녕하세요. 선생님강의를 완강하고 내용을 정리하며 복습하기 위해 블로그에 글을 작성했습니다.다른 질문에서 출처만 남기면 된다고 하셨지만,이렇게 작성하는 것이 처음이라 선생님께서 한 번 확인해주실 수 있으실까요?https://sdoram.tistory.com/44https://sdoram.tistory.com/45https://sdoram.tistory.com/47강의 자료의 비중이 너무 높다면 비공개로 올리도록 하겠습니다.좋은 강의 감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
실무에서는 일반적으로 컨트롤러에서 예외를 던지나요?
컨트롤러, 서비스, 레포지토리 계층이 있을 때 서비스에서 직접 예외를 throw 해도 @ControllerAdvice에서 그 예외를 받아서 처리를 해주더라고요.질문 1. @ControllerAdvice는 컨트롤러에서 발생하는 예외를 처리해준다고 하셨는데 서비스에서 발생한 예외가 컨트롤러까지 와서 @ControllerAdvice가 그것을 인식하는 건가요?질문 2. 보통 서비스 계층에서 비즈니스 로직을 처리하는 걸로 알고 있는데 제 생각에는 오류를 던지는 것도 서비스 계층에서 던지는 것이 좋지 않을까하는 생각이 듭니다.실무에서는 컨트롤러 계층에서 에러를 던지는 편이 일반적인가요?
-
해결됨디지털포렌식전문가 2급 필기 핵심 요약집[전자책]
디지털 포렌식 분석 대상에 따른 분류 항목 질문
먼저, 좋은 자료 감사합니다. 혼자 디지털 포렌식을 준비하면서 공부 자료 준비부터 많은 어려움이 있었는데 덕분에 양질의 자료로 공부를 시작할 수 있게 되었습니다.올려주신 자료 중 분석 대상에 따른 분류 항목에서 질문이 있습니다.여러가지 분석대상을 기준으로 유형이 나누어져 있는데요.이 중, 침해사고 대응 포렌식은 분석 대상이 아닌 분석 목적에 따라 분류된 것으로 이해가 됩니다.그리고 시스템을 구성하는 운영체제나 애플리케이션이 분석 대상이 되는 경우도 있을 것 같은데 분류된 유형 중 분석 대상이 운영체제나 애플리케이션인 유형이 없는 것 같습니다.침해사고 대응 포렌식이 시스템 포렌식, 즉 운영체제나 애플리케이션 로그 등을 분석하는 분야인 것으로 이해하면 될까요?+) 그리고, 디지털 포렌식 일반 원칙 중, 연계 보관성 부분에는 담당자가 당자라고 쓰여 있는 것 같습니다.
-
해결됨
Querydsl을 멀티쓰레드 환경에서 사용할 때 발생하는 문제에 대해
안녕하세요. Querydsl강의를 수강하고 혼자 개발을 진행하다가 다음과 같은 문제가 발생해서 질문을 남기게 되었습니다. 제 상황은 A엔티티와 B엔티티를 가지고 있고, 둘은 OneToOne관계로 B가 연관관계의 주인인 상황입니다. Repository에는 A와 B의 데이터를 호출하는 Querydsl코드가 각각 존재하며, 이를 Service Layer에서 그대로 Return값으로 받고 있습니다.이들을 멀티쓰레드 환경에서 호출했을 때 B데이터를 호출하는 코드에 Connection leak이 존재한다는 에러가 발생하는 상황입니다. (.yml파일에서 hikari의 leak-detection-threshold을 설정한 상황입니다.)Domain@NoArgsConstructor @AllArgsConstructor @Entity public class A { @Id private Long id; @OneToOne(mappedBy = "a") private B b; private int var1; }@NoArgsConstructor @AllArgsConstructor @Entity public class B { @Id private Long id; @OneToOne @JoinColumn(name = "b_id") private A a; private int var1; }Repositorypublic interface Repository extends JpaRepository<A,Long>, RepositoryCustom { }public interface RepositoryCustom { Dto queryOne(); Dto queryTwo(); Dto queryThree(); }public class RepositoryCustomImpl implements RepositoryCustom { private final JPAQueryFactory queryFactory; public RepositoryCustomImpl(EntityManager em) { this.queryFactory = new JPAQueryFactory(em); } @Override public Dto queryOne() { return queryFactory .select(Projections.constructor(Dto.class, a.id, a.var1 )) .from(a) .fetchFirst(); } @Override public Dto queryTwo(){ return queryFactory .select(Projections.constructor(Dto.class, b.id, b.var1 )) .from(b) .fetchFirst(); } @Override public Dto queryThree(){ System.out.println("a.getClass() = " + a.getClass()); System.out.println("b.getClass() = " + b.getClass()); return queryFactory .select(Projections.constructor(Dto.class, b.id, b.var1 )) .from(b) .fetchFirst(); } }queryThree는 queryTwo와 Querydsl코드는 동일합니다. 다만 쿼리를 실행하기 전에 Qtype의 a와 b를 순서대로 한번 호출했다는 부분이 queryTwo와 다릅니다.DTOpublic class Dto { private Long id; private int var1; } Service@org.springframework.stereotype.Service @RequiredArgsConstructor public class Service { private final Repository repo; @Transactional public Dto logicOne(){ return repo.queryOne(); } @Transactional public Dto logicTwo(){ return repo.queryTwo(); } @Transactional public Dto logicThree(){ return repo.queryThree(); } }테스트코드@SpringBootTest @Slf4j public class SimpleTest { @Autowired Service service; @Test void connection_leak_detected(){ Runnable userA = () -> { Dto dto = service.logicOne(); log.info("[Thread A: {}]",dto); }; Thread threadA = new Thread(userA); threadA.start(); Runnable userB = () -> { Dto dto = service.logicTwo(); log.info("[Thread B: {}]",dto); }; Thread threadB = new Thread(userB); threadB.start(); sleep(6000); } @Test void leak_not_detected(){ Runnable userA = () -> { Dto dto = service.logicOne(); log.info("[Thread A: {}]",dto); }; Thread threadA = new Thread(userA); threadA.start(); Runnable userB = () -> { Dto dto = service.logicThree(); log.info("[Thread B: {}]",dto); }; Thread threadB = new Thread(userB); threadB.start(); sleep(6000); } @Test @Transactional void connection_leak_detected_otherCase(){ Runnable userA = () -> { Dto dto = service.logicOne(); log.info("[Thread A: {}]",dto); }; Thread threadA = new Thread(userA); threadA.start(); Runnable userB = () -> { Dto dto = service.logicThree(); log.info("[Thread B: {}]",dto); }; Thread threadB = new Thread(userB); threadB.start(); sleep(6000); } private void sleep(int millis){ try{ Thread.sleep(millis); } catch (InterruptedException e){ e.printStackTrace(); } } }connection_leak_detected를 테스트하면 Connection leak이 발생했다는 에러가 발생합니다.leak_not_detected를 테스트하면 Connection leak 로그가 출력되지 않습니다.leak_not_detected와 동일한 테스트코드에 Transactional을 선언한 connection_leak_detected_otherCase은 Connection leak 로그가 출력됩니다.어떤 이유로 이러한 Connection leak이 발생하는지, 그리고 어떻게하면 이러한 문제를 해결할 수 있는지 궁금합니다..!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
AOP 출력시간 개수
6분20초 경 강사님께서는 START가 3개 나오는데 전 1개만 나옵니다. 상관없는걸까요??
-
미해결데이터 분석 SQL Fundamentals
dbeaver 환경설정 문제
안녕하세요! 처음으로 dbeaver 을 사용하는데 sql추출하는 곳의 글꼴 크기가 너무 작아 구글을 통해 환경설정을 하려고 했습니다. 근데 보통 설정>모양>색상및 글꼴>기본>텍스트 글꼴 하면 된다고 나오는데... 저한테는 텍스트 글꼴 목록자체가 나오지 않습니다. 이부분에 대해서도 구글링을 해보았지만 해답이 나오지 않습니다. 혹시 선생님께서 알고 계시다면 알려주시면 감사하겠습니다...!
-
미해결[중급편] 코인 가격 모니터링 앱 제작 (Android Kotlin)
패턴질문입니다.
프로젝트 공부하다가 궁금한점이있어 질문드립니다.커뮤니티앱은 mvc패턴이고코인가격앱은 mvvm패턴인가요?
-
해결됨팝스타 공식 뮤비 제작 & 유튜브 2천만 뷰 크리에이터의 애니메이트 X 이모티콘 클래스
부모자식 기능에서 크기 변형할 때
안녕하세요, '부모자식' 기능에서 레이어 종속을 만들어준 다음에 강의에서처럼 몸통만 선택 후 납작하게 줄이려고 하는데, 왜 전체 캐릭터가 같이 줄어들까요? (줄이거나 키우거나 마찬가지네요)이 부분이 막혀서 다음 진도를 나갈 수가 없네요 도와주세요!ㅜ.ㅜ
-
미해결
Enjoy Horror Granny Game
Before you play the horror game called granny. It's necessary to know some basic things about this game. Let's explore:The setting of the game is a spooky mansion with a rumored grandma monster. If Grandma sees you, she will kill you. Your mission is to find the key to the exit door while avoiding the monster's attack.The entire house is painted a dark gray. Household appliances were also in poor condition and littered the floor. All of them give players a strange and frightening feeling.The sound of objects creaking and the screams of grandpa monsters will add to the game's eerie atmosphere.
-
해결됨[에듀윌 화이트해커 양성과정] 악성코드 제작
컴파일에러
안녕하십니까, 강사님강사님 강의 수강하면서 코드를 작성 후 컴파일을 했는데, 아래와 같이 에러가 납니다.아래 에러는 어떻게 수정하면 되는지요??C:\Users\k5841\OneDrive\문서\payload>gcc .\payload_executor.c -o payload_executor.exe -lntdll -mwindows.\payload_executor.c:5:22: fatal error: winternl.h: No such file or directory #include <winternl.h>
-
미해결Flutter 중급 1편 - 클린 아키텍처
type 에러
안녕하세요 선생님! 다름이 아니라 테스트 코드 작성중에result 를 Success로 캐스팅 하여 테스트 코드 실행 하였는데 터미널과 같은 에러가 발생하는데 무엇때문에에러가 뜨는지 모르겠어요 ㅠㅠ운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨카프카 완벽 가이드 - 커넥트(Connect) 편
AVRO 연결이 안됩니다 ㅠㅠ
안녕하세요. 선생님 수업을 잘 듣고 있습니다.일단 선생님이 알려주신 부분하고 다르게 하고 있는게 있어서 환경 부터 어떻게 했는지 말씀 드릴게요.일단 kafka는 Confluent kafka 가 아닌 apache kafka 로 설치 했습니다.EC2 에서 총 8개의 인스턴스를 구축 했으며Apache Zookeeper 3.8.1 3개Apache Kafka 2.13-3.3.2 3개=> Source connect : Debezium mysql connect 2.1.2=> Sink connect : Confluent JDBC Connector 10.6.3Confluent Schema registry 7.3.0 1개mysql DB 1 개 (Source 와 Sink 는 user 로 분리해서 데이터 넣는 방식으로 테스트 중입니다)위와 같이 구성을 해서 구축을 했습니다.테스트는 json 방식으로 Source 와 sink 쪽에 각각 connect 정보 등록 해서 데이터 전달 되는것까지 통과 했습니다.Confluent Schema registry 는 설치 하고 카프카서버에서 스키마 서버 8081포트 가 뜨는것도 확인 했습니다.Json 방식으로 Schema registry 로 데이터 전달 되는것도 문제 없었습니다. 문제점. 수업에 있는 Avro 로 connect 등록 할려고 하니 바로 에러가 납니다.{"error_code":500,"message":"Error trying to forward REST request: Connector configuration is invalid and contains the following 2 error(s):\nInvalid value io.apicurio.registry.utils.converter.AvroConverter for configuration key.converter: Class io.apicurio.registry.utils.converter.AvroConverter could not be found.\nInvalid value io.apicurio.registry.utils.converter.AvroConverter for configuration value.converter: Class io.apicurio.registry.utils.converter.AvroConverter could not be found.\nYou can also find the above list of errors at the endpoint /connector-plugins/{connectorType}/config/validate"} 위와 같은 에러에 대해 일단 조치한 점은kafka 의 connect-distributed.properties 에서 설정한 "plugin.path" 에Kafka Connect Avro Converter(https://www.confluent.io/hub/confluentinc/kafka-connect-avro-converter)를 압축 풀어서 두었습니다. connect 서버 재 가동 후, 아래 명령어로 Plugin 확인 하였는데 mysql connect 나 jdbc Source connect , jdbc sink connect 는 뜨는데 "avro" 관련된 plugin 이 보이지 않았습니다."curl --location --request GET 'localhost:8083/connector-plugins' | jq '.'" 그래서 위 에러가 Avro 를 못찾는다는 이유가, kafka에 avro 를 설정을 못한건지?Confluent Schema registry 에 avro 문제 인건지? 아니면 제가 Confluent kafka 가 아닌 apache kafka 로 설치 해서 인지 알수가 있을까요?
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
1강 질문입니다..
시작하자마자 턱에 걸리네요ㅠㅠ파이썬에서 아래와 같이 입력했는데import win32com.client as win32 hwp = win32.gencache.EnsureDispatch(hwpframe.hwpobject)이런 결과가 나오네요... 어떻게 해야할지 모르겠습니다. 도와주세요.C:\Users\hwa0h\anaconda3\python.exe C:\PPP1\test.py Traceback (most recent call last): File "C:\PPP1\test.py", line 2, in <module> hwp = win32.gencache.EnsureDispatch(hwpframe.hwpobject) NameError: name 'hwpframe' is not defined Process finished with exit code 1
-
해결됨[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
selenium을 활용한 크롤링 질문
안녕하세요 강사님 selenium은 동적 크롤링을 할때 사용한다고 알고있습니다. 간혹 로그인을 해야만 정보를 열람할 수 있는 사이트가 있는데 이런 경우에는 어떤식으로 접근을 할 수 있을지 알고싶습니다!