교재내용중에, " 해당람다에서 체크예외를 밖으로 던질수 없기때문에 언체크 예외로 바꾸어 던지도록 예외를 전환했다 " 의 의미는 ===> 람다에서는 bizLogic()을 호출할때 발생하는 체크예외를 throws를 사용해서 밖으로 던질수 없기때문에 try~catch로 예외를 처리했고, 체크예외를 처리할떄 catch안에서 throw로 IllegalStateException(언체크예외)로 바꾸어 던지는 이유는 트랜잭션 템플릿이 비즈니스로직을 수행하다가 언체크 예외가 발생하면 롤백하기 때문이다. 이렇게 이해하면될까요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 코드에서보면 새로운 쿠키를 만들어서 setMaxAge로 00 으로 설정해서 만료시키는거같은데 그런 이유가 있나요 ? 기존에 쿠키의 수명 0으로 만들어 만료시키는 방법은 안되나요??
https://join.slack.com/t/lopun-lecture/shared_invite/zt-2mkxcgt5h-7Bq~fMnMJ8Scle17fzFYCQ Supabase로 노트앱 완성하기 15:00 즈음에 검색 기능을 만드는 과정에서 search state에 따른 검색 결과 업데이트에 질문이 있습니다. useEffect를 하나 더 추가해서 의존성 배열에 search 넣은 코드가 추가되었는데요. 기존 의존성 배열이 빈값인 녀석에 search만 추가해줘도 동일한 기능이 아닌가요? 첫 렌더링, search state 변화 될 때만 실행이 되니까요. 한번 더 동일한 코드에 의존성 배열만 다르게 해주신 점이 궁금합니다.
-안녕하세요 선생님 강의 잘 듣고 있습니다. 제가 구현이 너무 안되어서....이 강의를 듣게 되었습니다..혼자 코드업 문제 등을 풀어보면 해결이 안되는 문제는 몇일씩 고민해도 시간만 가고 해결이 안되더라구요... 그래서 방법을 한번 바꿔볼까 해서 이 강의를 듣게 되었어요.. 선생님 강의를 전체 한번 쭉 다 듣고 다시 개인적으로 공부하는 방법이 어떤가 싶어 문의드립니다.. 알고리즘을 떠올리기가 힘듭니다...ㅜ 지금 DFS문제부터 듣고 있습니다.. 뒷 부분 강의부터 먼저 접해보면 앞부분의 문제는 좀더 쉽게 해결되지 않을까 해서요....;; 공부 방법에 대해 선생님께 조언을 좀 구하고저 합니다... 작성된 코드는 대부분 다 이해를 합니다..구현이 너무나 어렵습니다....ㅠㅠ 조언 부탁드립니다..
안녕하세요 실습문제 풀어보다가 질문이 생겨서 남깁니다! 해당 문제인 경우는 팀원의 수가 적어서 3이라는 숫자로 적어서 나누는게 가능했지만, 만약 팀원의 수가 굉장히 많다면 해당 함수는 쓰기 어려워질까요? (어차피 매개변수에 그만큼 나열해야하니 효율성문제로) sql과 달리 avg라는 연산자가 없는 것 같아서요! 또한 int를 적용하지 않았는데 덧셈연산자가 작동한 이유를 알고 싶습니다! 어렴풋하게만 느낌이 와서 정확히 알고 싶습니다.
@Valid, @Validated 어노테이션으로도 유효성 검증이 가능하다는 것을 알고 있습니다. 그리고 GlobalExceptionHandler에서 ResponseEntityExceptionHandler 추상 클래스를 상속받아 메서드를 재정의해서 구현하는 방식으로 전역적으로 예외 객체 관리가 가능하다는 것을 알고 있는데요. 잘 이해가 되지 않는 부분이 있어 질문을 드립니다. 강의에서와 같이 DTO를 사용해 제약 조건을 추가해 타임리프에 오류 메시지를 추가하는건 BindingResult를 통해 이루어지는 것을 알고 있는데 어노테이션을 사용하면 타임리프에서의 유효성 검증만 가능한 것이고 ResponseEntityExceptionHandler 추상 클래스를 상속받아 메서드를 재정의해서 구현하는 경우에는 타임리프에 적용을 할 수 없고 RESTful API 개발에만 적용할 수 있는 것인가요? 타임리프 쓰면 그냥 DTO에 제약조건 걸고 어노테이션 써서 유효성 검증하는 것 말곤 방법이 없나요?
안녕하세요 강의 수강 후에 자체 프로젝트를 진행하고 있는데 소셜 로그인 처리 중 궁금한 점이 있어 질문 드립니다. 기존에는 Google, Naver, Kakao, Facebook 등 5가지 소셜 로그인을 각각 OAuth 리디렉션 방식으로 구현했으나, 이번에는 NextAuth를 활용하여 간편하게 통합적으로 구현하려고 합니다. 소셜 로그인은 authorization code 발급용으로만 사용하고 실제 access, refresh token 발급은 자체 서버에서 처리를 하려고 합니다. 따라서 인가 과정만 next auth를 활용하고 callbacks 내부에서 인가 코드를 전달하여 access token 발급 과정을 진행하려 했습니다. /api/auth/[...nextauth]/route.ts const authOptions = { // Configure one or more authentication providers providers: [ GoogleProvider({ clientId: process.env.GOOGLE_ID ?? "", clientSecret: process.env.GOOGLE_SECRET ?? "", }), ], callbacks: { async signIn({ account, profile }: any) { if (account.provider === "google") { const response = await fetch( `${process.env.GATEWAY_SERVER_URL}/auth/v1`, { method: "POST", headers: { "Content-Type": "application/json", devicetype: "1", }, body: JSON.stringify({ sns_type: "GOOGLE", key: 인가코드, }), } ); } return true; // Do different verification for other providers that don't have `email_verified` }, }, }; const handler = NextAuth(authOptions); export { handler as GET, handler as POST }; 하지만 알아본 결과 NextAuth의 callbacks에서는 access token이 발급되고 authorization code는 받을 수 없게 되어있는 것 같은데 authorization code 발급용으로만 사용하기에는 next auth를 사용하는것이 적합하지 않은 것인지 궁금합니다. 또한 authorization code를 받을 수 있는 방법이 있다면 알려주시면 감사하겠습니다!
인강듣기전에 학습자료를 보고 먼저 따라했는데요. 인강에선 <main> 이부분을 삭제를 안했는데, 학습자료에선 main을 다 삭제 했더라구요. 이부분에서 학습자료를 참고해도 될까요? 아님 다시 복구 해야하나요? 이 부분 뿐만아니라 인강에서는 삭제를 안했는데, 학습자료에선 삭제된 부분이 꽤 있어서 걱정이 되어 문의를 드립니다.
강의를 듣다가 2024-08-07T11:08:47.538+09:00 ERROR 9788 --- [servlet] [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[memberSaveServlet] : Servlet.service() for servlet [memberSaveServlet] in context with path [] threw exception java.lang.NumberFormatException: Cannot parse null string at java.base/java.lang.Integer.parseInt(Integer.java:624) ~[na:na] at java.base/java.lang.Integer.parseInt(Integer.java:778) ~[na:na] at hello.servlet.basic.domain.web.servlet.MemberSaveServlet.service(MemberSaveServlet.java:25) ~[classes/:na] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.11.jar:6.1.11] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.11.jar:6.1.11] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.11.jar:6.1.11] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.11.jar:6.1.11] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.11.jar:6.1.11] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.11.jar:6.1.11] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:904) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] 2024-08-07T11:08:47.559+09:00 DEBUG 9788 --- [servlet] [nio-8080-exec-3] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@330cc8fe:org.apache.tomcat.util.net.NioChannel@37334a47:java.nio.channels.SocketChannel[connected local=/[0:0:0:0:0:0:0:1]:8080 remote=/[0:0:0:0:0:0:0:1]:60555]], Status in: [OPEN_READ], State out: [CLOSED] 이라는 에러가 떴는데 int age = Integer.parseInt(request.getParameter("age"));에서 문제가 있다는것 같은데 아무리 확인해도 왜 오류가 뜨는건지 모르겠습니다...
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 순수 JDBC영상 7분30초 쯤 파일참고해서 붙여넣기를 했더니 빨간줄이 어마무시하게 많이 그였습니다. 원인좀 알려주실 수 있을까요 https://drive.google.com/file/d/16hfb328rA7fdLiE6oxILNIjL-gpDYSPL/view?usp=sharing
강의 내용 진행중 update 할때만 아래와 같은 에러가 나는데, 혹시 수정할 부분이 있을까요? insert/delete는 이상없이 진행 됩니다. 코드는 tailwind 일부만 제외하고는 전체 동일합니다. nextjs : 14.2.5 @supabase/supabase-js: "^2.45.0" ''' localhost/:1 Access to fetch at ' https://********.supabase.co/rest/v1/note?id=eq.8 ' from origin ' http://localhost:3000 ' has been blocked by CORS policy: Method PATCH is not allowed by Access-Control-Allow-Methods in preflight response. ''' const onEdit = async () => { if(!title || !content){ alert("제목과 내용을 입력하세요"); return; } const { data, error} = await supabase .from('note') .update({ title, content }) .eq('id',note.id); if(error){ alert(error.message); return; } setIsEditing(false); fetchNotes(); }
제곱수의 합문제요.. 6일 경우 제곱이 되려면 루트6밖에 안되는데 왜 2가 2로 떨어지는 약수의 개수로 카운팅되는지 이해를 못하겠네요… 또 3의 제곱 5의 제곱은 왜 고려안하는지도… ( 이미 이해 다 됐다고 가정해서 말씀하신건지도 모르겠습니다.ㅠㅠ ) 바보도 알고리즘 천재로 만들어주신다고 들어서 잘 알려주시면 감사드리겠습니다 ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 정적 페이지는 잘 랜딩되는데, Controller를 통해 랜딩하는 페이지들은 에러 페이지라고 뜹니다. 8080/ 페이지만 잘 나오고, 나머지 controller를 통한건 다 안 나옵니다.
안녕하세요. 강사님께서 제공해주신 이분탐색 1번 2번 코드중 2번 코드로 새로운 문제를 풀려고 합니다. 1번 코드(left와 right 설정)으로는 잘 풀리는데 2번 코드(cur과 step 설정)로는 잘 안풀리네요. 백준 2343번 기타문제를 강사님께서 제공해주신 코드로 풀려고 아래와 같이 코드를 짜보았습니다. 하지만 원하는 결과를 얻지 못했는데요. 어떤 부분이 잘못된건지 알려주실 수 있을까요?? nums, blue_nums = map(int, input().split()) bluelay_length = list(map(int, input().split())) def check(length): count = 1 current_length = 0 for i in bluelay_length: if current_length + i <= length: current_length += i else: current_length = i count += 1 return count == blue_nums cur = 0 steps = 10000+1 while steps > 0: while cur + steps <= 10000+1 and check(cur + steps): cur += steps steps //= 2 print(cur) 감사합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요. H2 DB는 자바로 만들어져 있고, 덕분에 JVM 내부에서 동작하는 임베디드 모드를 지원한다고 이해했습니다. 스프링 부트는 데이터베이스에 대한 별다른 설정이 없으면 임베디드 데이터베이스를 사용(제공)한다고 하는데.. 질문: 그렇다면 스프링 부트가 DataSource를 스프링 빈으로 자동 등록 시 라이브러리(의존 관계)에서 H2가 있는지를 먼저 확인 하고, 별도의 설정(application.properties 내 url, username 등)이 없으면 임베디드 모드로 DataSource를 생성하여 빈으로 등록하는 건가요? 아니면 application.properties를 먼저 확인 하고 url이 없으면 -> 라이브러리에 H2가 있는지 확인 후 메모리 DB를 사용하는 DataSource를 생성하여 빈으로 등록하는 건가요? 만약 후자라면 왜 그렇게 설계했을지(이점?)도 궁금합니다.. 감사합니다.