묻고 답해요
163만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 부트와 리액트로 구현하는 보안 JWT 로그인
섹션 9 실전 질문
강사님 세션 9에서 Secretes Manager나 Parameter Store 를 현업에서도 깃허브 액션 하고 같이 쓰나요?이거 궁금해서 질문드립니다.
-
미해결스프링 부트와 리액트로 구현하는 보안 JWT 로그인
깃허브 코드
강사님 혹시 44강 듣고 있는데 이거 프론트엔드 코드가 깃허브에 있는것과 다른 코드인데 어디서 볼 수 있나요?
-
해결됨누구보다 빠르게 배우는 Kotlin + Springboot + JWT 로그인
10번 영상이 중간부터 시작하는 것으로 보여요
영상을 시작하면 갑자기 JwtUtils 코드가 이미 어느 정도 작성된 상태에서 뭔가 에러 체크 하시는 부분부터 시작이 됩니다
-
미해결스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
일정 삭제 시 예외 발생 질문과 이전 질문에 대한 추가질문드립니다.
// 컨트롤러 메서드 @DeleteMapping("/plan/{no}") public ResponseEntity<Map<String, Object>> removePlan(@PathVariable(value = "no") int no){ Map<String, Object> resultMap = plannerService.removePlan(no); return ResponseEntity.ok(resultMap); } // 서비스 메서드 @Transactional public Map<String, Object> removePlan(int no) { System.out.println("no :" + no); log.info("removePlan"); Map<String, Object> resultMap = new HashMap<>(); int result = plannerRepository.deleteByPlanNo(no); if(result > PLAN_DELETE_FAIL){ log.info("REMOVE PLAN SUCCESS"); }else{ log.info("REMOVE PLAN FAIL"); } resultMap.put("result", result); return resultMap; } // 레퍼지토리 메서드 int deleteByPlanNo(int planNo); // 삭제된 행의 개수 첫번째 질문위 코드처럼 작성을 하고 delete 버튼을 클릭하면2025-12-21 20:36:32 ERROR [[dispatcherServlet]] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.ClassCastException: class com.office.calendar.planner.jpa.PlannerEntity cannot be cast to class java.lang.Integer (com.office.calendar.planner.jpa.PlannerEntity is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader @34790124; java.lang.Integer is in module java.base of loader 'bootstrap')] with root causejava.lang.ClassCastException: class com.office.calendar.planner.jpa.PlannerEntity cannot be cast to class java.lang.Integer (com.office.calendar.planner.jpa.PlannerEntity is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader @34790124; java.lang.Integer is in module java.base of loader 'bootstrap') at jdk.proxy4/jdk.proxy4.$Proxy153.deleteByPlanNo(Unknown Source) ~[?:?] at com.office.calendar.planner.PlannerService.removePlan(PlannerService.java:124) ~[main/:?] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:360) ~[spring-aop-6.2.11.jar:6.2.11] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) ~[spring-aop-6.2.11.jar:6.2.11] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-6.2.11.jar:6.2.11] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380) ~[spring-tx-6.2.11.jar:6.2.11] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-6.2.11.jar:6.2.11] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.2.11.jar:6.2.11] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:728) ~[spring-aop-6.2.11.jar:6.2.11] at com.office.calendar.planner.PlannerService$$SpringCGLIB$$0.removePlan(<generated>) ~[main/:?] at com.office.calendar.planner.PlannerController.removePlan(PlannerController.java:123) ~[main/:?] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:258) ~[spring-web-6.2.11.jar:6.2.11] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:191) ~[spring-web-6.2.11.jar:6.2.11] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:991) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:896) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.11.jar:6.2.11] at org.springframework.web.servlet.FrameworkServlet.doDelete(FrameworkServlet.java:936) ~[spring-webmvc-6.2.11.jar:6.2.11] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:596) ~[tomcat-embed-core-10.1.46.jar:6.0] at...위 예외가 발생하면서 planner_fetch.js의 fetchRemovePlan 함수에서 catch 문에 걸리면서alert('일정 삭제 중 오류가 발생했습니다.'); 이 실행됩니다.서비스에서 deleteByPlanNo를 호출할 때 문제가 발생한 것 같은데찾아보니 레퍼지토리 메서드에 @Modifying을 붙여보라고 해서 해봤는데 해결은 안됐습니다.어떤 원인으로 위 같은 예외가 발생한거고, 어떻게 해결할 수 있는지 질문드립니다. 두번째 질문 이전 질문에서<script src="planner_fetch.js"></script><script src="planner.js"></script>위 코드는 브라우저에서 다음과 같이 처리됩니다.1. planner_fetch.js를 읽고 실행2. 그 다음 planner.js를 읽고 실행3. 이 두 파일은 각각 다른 파일이지만, 브라우저에서는 하나의 JavaScript 실행 공간에서 실행결과적으로 파일이 나뉘어 있어도 "같은 공간"에서 실행되기 때문에 서로의 전역 변수, 함수 등을 공유할 수 있습니다.하나 더 중요한 사실이 있는데요, 로딩 순서가 중요합니다.<script src="planner_fetch.js"></script><script src="planner.js"></script>위와 같은 순서라면, planner_fetch.js가 먼저 실행되고 planner.js에서 planner_fetch.js 안의 함수를 사용할 수 있습니다.하지만, 로딩 순서를 변경하면<script src="planner.js"></script><script src="planner_fetch.js"></script>다음과 같은 에러가 발생할 수 있습니다.fetchPlans(); // 에러 (아직 정의되지 않음)즉, 먼저 로드 된 파일의 함수만 사용할 수 있습니다.이렇게 답변을 주셨는데추가적으로 궁금한 점은planner.js가 나중에 로드 되어서 planner.js에 있는 함수나 변수를 planner_fetch.js에서 사용하면 정의 되지 않아서 사용을 못해야 할텐데 코드에서는 planner.js에 있는 showDetailPlanView 함수라든지 current_year같은 변수를 사용하고 있는데 에러가 발생하지 않습니다. 이 부분 질문드립니다.
-
미해결스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
일정 등록 및 조회 부분 강의 질문입니다.
1.일정 관련 js파일이planner.js와 planner_fetch.js 파일로 나눠져 있는데planner.js에서 planner_fetch.js에 있는 함수들을 사용하고planner_fetch.js에서는 planner에 있는 함수, 변수들을 사용하던데각각 별도의 js 파일들인데 어떻게 서로 변수나 함수들을 가져다 사용할 수 있는지 궁금합니다. planner_fetch.js의 fetchGetPlan 함수에서 fetch url이 /planner/plan/3 형식이 아니라 /planner/plan?no=3 형식이던데 이렇게 사용한 이유가 있을까요??
-
미해결스프링 부트와 리액트로 구현하는 보안 JWT 로그인
로그인구현
로그인구현 직접하는줄 알고 결재했는데 직접구현하는 강의가 없는건지 제가 못찾은건지바로 서버 생성하고 배포하는걸 보여주시는데 직접구현하는거는 어디서봐야할까요?다른강의일까요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
@Bean으로 AuthenticationProvider를 등록 시 http.authenticationProvider 함수를 이용해서 추가해줘야되나요?
AuthenticationProvider 객체를 추가하는 방법 중에 @Bean 어노테이션을 이욯하여 컨테이너에 등록하는 경우에 AuthentcationManager 객체를 가져와서 .authenticationProvider( customAuthenticationProvider() ); 이렇게 또 메서드를 호출시키도록 로직이 구현되어있는데 bean으로 올라간 customAuthenticationProvider 객체를 주입받아서 객체를 넣어주면 안되나요? @Beanpublic AuthenticationProvider customAuthenticationProvider() { return new CunstomAuthenticationProvider();} 위 메서드가 두번 호출되는거 아닌가 싶어서요
-
미해결스프링 부트와 리액트로 구현하는 보안 JWT 로그인
강의 자료를 제공해주실 수는 없을까요?
동영상 화면만 보면서 강의 자료를 확인하기에는 제가 원하는 부분을 실시간으로 확인하기가 어려운 점도 있고, 이후 복습하기도 어렵습니다. 강의 자료를 제공해주신다면 학습 하는 데에 시간을 많이 아낄 수 있을 것 같습니다.
-
미해결스프링 부트와 리액트로 구현하는 소셜 로그인
사업자 등록 번호가 없는 경우는 어떻게 하죠?
사용자 등록 번호가 없습니다. 거의 대부분의 수강생이 없을거라고 생각 되는데 이 경우는 어떻게 해야하는지 설명 부탁드립니다.
-
미해결스프링 부트와 리액트로 구현하는 소셜 로그인
OAuthAttributes와 CustomOAuth2User의 차이
OAuthAttributes와 CustomOAuth2User 간의 차이가 궁금합니다. OAuthAttribute는 google로부터 받은 사용자 정보를 우리가 원하는 대로 확장 가능하게 하는 DTO라고 말씀해주셨고, CustomOAuth2User도 google로부터 받은 데이터 외에 별도의 사용자 정보를 추가하는 용도라고 말씀해주셨는데, 두 설명이 같은 의미처럼 느껴집니다. 두 클래스가 어떤 차이가 있는 건가요?
-
미해결스프링 부트와 리액트로 구현하는 소셜 로그인
Jwt 토큰문제
Jwt토큰 클래스에서 Keys를 사용하기 위해서 더 추가해야하는것이 있나요?
-
해결됨스프링 부트와 리액트로 구현하는 보안 JWT 로그인
정리된 문서도 받을 수 있을까요?
정리된 문서도 받을 수 있을까요?
-
미해결스프링 부트와 리액트로 구현하는 소셜 로그인
[소셜 로그인 33강] 일반 로그인 -> 소셜 로그인 관련 질문
33강에 27-30분대를 보면SecurityConfig 클래스에서 .formLogin을 .oauth2Login으로 바꾸고, TodoController 에서 CustomUserDetails로 받았던 사용자 정보를 CustomOAuth2User 로 바꾼 것으로 보이는데,,일반 로그인 시에 사용할 로직과 소셜 로그인 시에 사용할 로직을 둘 다 두지 않고, 소셜 로그인 하나만 사용하는 것으로 진행하려고 바꾸는건가요??
-
해결됨스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
JWT 기반 인증
JWT 기반 인증을 사용하면 서버 확장 시 세션 관리 문제를 해결할 수 있다고 하는데, 혹시 이 부분 관련되어 시간있으실 때 추가 강의 요청드려도 될까요? 강의 너무 잘 보고 있습니다 ! 😀
-
미해결스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
properties 파일 질문입니다
application.properties 파일에spring.devtools.restart.enabled=truespring.thymeleaf.cache=false각각 자바코드, 타임리프코드 수정 시에 서버를 재시작 안해도 수정사항이 자동 적용시키는 거라고 이해를 했는데 실제 해보니까 자동 적용이 안되는데 추가적으로 설정을 해야하는 부분이 있을까요??그리고 혹시 강의 듣고 제 나름대로 정리해서 내용을 블로그나 노션에 올리거나 강의 들으면서 친 코드를 깃허브 private 레퍼지토리에 올리는게 가능할지 문의드립니다.
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Deprecated 관련 사항들
보통 실무에서는 deprecated된 사용할때 발견하면 그때 그때 찾아보나요? 아니면 항상 up-to-date하는 공부방법이 따로 있나요?
-
미해결스프링 부트와 리액트로 구현하는 소셜 로그인
[소셜 로그인 16강] 로그인 실패 시 리다이렉트 관련 질문
16강을 수강하고 있습니다. CustomLoginFailureHandler사용자가 로그인에 실패했을 때 호출되는 메서드에 대한 질문입니다. if(savedRequest != null) { String targetUrl = savedRequest.getRedirectUrl(); //사용자가 접근하려던 URL // 즉, 로그인에 실패했지만 사용자를 원래 있던 페이지로 보내줌 // 실패 시 사용자가 접근하려던 URL 로그 출력 log.info("[핸들러 - 사용자가 접근 시도한 URL]\n-> " + targetUrl); // 사용자가 접근하려던 URL로 리다이렉트 (로그인 실패 후에도 이동) response.sendRedirect(targetUrl); }그런데 if문의 마지막 줄을 보면 로그인 실패 후에도 targetUrl 즉, 사용자가 접근하려했던 페이지로 이동시킨다고 작성 되어 있는데 ... 로그인 실패 시에도 targetUrl로 리다이렉트시키는 이유가 뭔가요?? 로그인에 실패하면 로그인 페이지에 남아있어야 하는 것 아닌가요 ...?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
loginPage("/loginPage") 질문드립니다.
폼로그인 방식에서 시큐리티가 제공하는 기본 로그인 페이지를 사용하지 않으려고 해당 설정을 하는것으로 아는데요그런데 IndexController는 RestControlle인데, html뷰는 어떻게 사용자에게 보여주나요? 기본적으로 RestController는 http 리턴으로 알 고 있습니다.
-
미해결돌고래도 이해하는 스프링부트 3 + PostgreSQL 17
1~2강은 원래 소리가 안 나는 영상인가요?
1~2강은 원래 소리가 안 나는 영상인가요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
@EnableWebSecurity
@EnableWebSecurity 꼭 붙여야 된다고 하셨는데 안붙여도 움직이는데 붙이고 안붙이고의 차이가 있나요?의존성에 spring-security 들어가 있으면 AutoConfiguration 에 의해 자동구성된다면 붙일 이유가 없을것 같은데 뭔가 다른게 더 초기화작업에 추가되거나 하는건가요?