24%
28,880원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
서버에 배포할때 질문입니다.
서버에 만든 템플릿 프로젝트를 배포하고 나서./gradlew clean build 명령어로 빌드할때기본 으로 생성되는@SpringBootTest class SpringApiAppApplicationTests { @Test void contextLoads() { } }이 테스트가 빌드시에 자동으로 실행되는데, 빌드시에는 VMOption으로 jasypt password가 입력이 안되어서 그런지 자꾸 test에 실패합니다. 일단 test를 실행하지 않고 빌드하긴 했는데 이럴 경우엔 구파고님은 어떻게 하시나요?
- 미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
accessTokenExpireTime만들때 LocalDateTime 을 안쓰고 date타입을 사용한 이유가 궁금합니다.
안녕하세요.accessTokenExpireTime, refreshTokenExpireTime을 만들때 LocalDateTime 을 안쓰고 date타입을 사용한 이유가 궁금합니다.
- 미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
SocialLoginApiServiceFactory 주입 시점
안녕하세요 구파고님!SocialLoginApiServiceFactory 클래스에 socialLoginApiServices에서 key와 value값이 언제 주입되는지 궁금합니다!생성자 주입을 통해서 key값으로는 bean의 이름, value에는 각 소셜로그인 api 서비스 구현체가 들어간다고 하셨는데 어떤 시점에 주입되는지 모르겠어서 질문드립니다!
- 미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
tokenClaims에서 memberId를 가져올때
안녕하세요 tokenClaims에서 memberId를 가져올 때Long memberId = Long.valueOf((Integer) tokenClaims.get("memberId"));이렇게 Integer로 형변환후 Long.valueOf로 Long으로 바꿔주시고 계시는데요 Long memberId = (Long) tokenClaims.get("memberId");이런식으로 바로 Long으로 형변환을 시켜 준다면 어떤문제가 생기나요??
- 미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
로그아웃시 refresh token 은 만료 시간 업데이트 했지만 access token 은 만료 시간 업데이트 못하는건가요?
로그아웃 하게된다면웹 브라우저시에 쿠키 및 로컬 스토리지에 아직 access token 이 남아 있을텐데다른 사용자가 이걸 발견하고 이용하면 문제 있는거 아닌가요??
- 미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
callback시 문제
안녕하세요.다름이 아니라 callback시에해당 code값으로 받고 싶으나 해당 controller를 타지 않고바로 위와 같은 화면으로 이동됩니다...대체 머가 문제일까요?
- 미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
다른 서버로 요청할때 webclient를 쓰는건 어떤가요?
다른 서버로 요청할때 webclient를 쓰는건 어떤가요?장단점을 알려주실 수 있을까요?
- 미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
Spring Cloud OpenFeign 부터 계속 DTO쪽 에러가 발생하는데 원인을 모르겠습니다.
안녕하세요. 지난번에 DTO 기본생성자 에러가 발생해서 프로젝트 다시 생성해서 해보고 잘되었는데요.브라우저에서 로그인해서 카카오토큰 받아오는것에서 또 같은 오류가 발생하더라구요.public class KakaoTokenDto { @Builder @Getter public static class Request { private String grant_type; private String client_id; private String redirect_uri; private String code; private String client_secret; } @ToString @Builder @Getter public static class Response { private String token_type; private String access_token; private Integer expires_in; private String refresh_token; private Integer refresh_token_expires_in; private String scope; } } Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.app.web.kakaotoken.dto.KakaoTokenDto$Response (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] 이번에도 기본생성자 오류문제인데요. 강사님꺼 완성본 코드를수정해서 실행하면 잘되는데 제꺼 파일 다 지우고 강사님꺼 파일과 코드를복사 붙여넣기 하면 또 안되고 그렇습니다. 🤔 왜 제껏만 DTO쪽에서이런 에러가 발생하는지 잘 모르겠습니다.
- 해결됨생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
카카오로그인 시 프론트단에 있는 client_id는 어떻게 숨기나요?
안녕하세요.위 사진과 같이 client_id는 어떻게 숨겨야되는지 감이 잘 안 옵니다.아마 yml에 ENC()로 숨겨놓은 client_id랑 같을 텐데요타임리프로 값을 가져오면 되겠다는 생각을 해봤지만 이를 웹 브라우저에서 보면 보일 것 같습니다.다른 방법이 있는지 궁금합니다.따로 검색어라도 알려주시면 감사드리겠습니다. 현재 저 프론트단에서 client_id를 노출시키고, yml에서는 ENC()로 암호화한 id, secret 값은 잘 됩니다.저 프론트 단에서는 id를 어떻게 숨길지만 궁금합니다🤔
- 미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
3:30 질문이 있습니다.
안녕하세요. 강의 잘 듣고 있습니다.다름이 아니라 실행하실 때, dev 프로파일이 아닌, 기본 으로 하신걸까요..? 강의에서는 dev설정에서는 8081포트로 되어 있어서요.그리고 로그가 잘 나오는데, 뒤에 이런 에러가 나오는데 어찌 해야 되는지 잘 모르겠습니다.감사합니다.feign.codec.DecodeException: Type definition error: [simple type, class com.app.springapiapp.api.health.dto.HealthCheckResponseDto]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.app.springapiapp.api.health.dto.HealthCheckResponseDto (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]at feign.AsyncResponseHandler.decode(AsyncResponseHandler.java:119) ~[feign-core-11.8.jar:na]at feign.AsyncResponseHandler.handleResponse(AsyncResponseHandler.java:87) ~[feign-core-11.8.jar:na]at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:138) ~[feign-core-11.8.jar:na]at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:89) ~[feign-core-11.8.jar:na]at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100) ~[feign-core-11.8.jar:na]at com.sun.proxy.$Proxy103.healthCheck(Unknown Source) ~[na:na]at com.app.springapiapp.api.feigntest.controller.HealthFeignTestController.healthCheckTest(HealthFeignTestController.java:20) ~[classes/:na]at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.22.jar:5.3.22]at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.22.jar:5.3.22]at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.22.jar:5.3.22]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.22.jar:5.3.22]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.22.jar:5.3.22]at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.22.jar:5.3.22]at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1070) ~[spring-webmvc-5.3.22.jar:5.3.22]at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.22.jar:5.3.22]at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.22.jar:5.3.22]at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.22.jar:5.3.22]at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.65.jar:4.0.FR]at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.22.jar:5.3.22]at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.65.jar:4.0.FR]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.65.jar:9.0.65]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.22.jar:5.3.22]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.22.jar:5.3.22]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.22.jar:5.3.22]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.22.jar:5.3.22]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.22.jar:5.3.22]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.22.jar:5.3.22]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.65.jar:9.0.65]at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]Caused by: org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.app.springapiapp.api.health.dto.HealthCheckResponseDto]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.app.springapiapp.api.health.dto.HealthCheckResponseDto (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:388) ~[spring-web-5.3.22.jar:5.3.22]at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:343) ~[spring-web-5.3.22.jar:5.3.22]at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:105) ~[spring-web-5.3.22.jar:5.3.22]at org.springframework.cloud.openfeign.support.SpringDecoder.decode(SpringDecoder.java:75) ~[spring-cloud-openfeign-core-3.1.3.jar:3.1.3]at org.springframework.cloud.openfeign.support.ResponseEntityDecoder.decode(ResponseEntityDecoder.java:61) ~[spring-cloud-openfeign-core-3.1.3.jar:3.1.3]at feign.optionals.OptionalDecoder.decode(OptionalDecoder.java:36) ~[feign-core-11.8.jar:na]at feign.AsyncResponseHandler.decode(AsyncResponseHandler.java:115) ~[feign-core-11.8.jar:na]... 56 common frames omittedCaused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.app.springapiapp.api.health.dto.HealthCheckResponseDto (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67) ~[jackson-databind-2.13.3.jar:2.13.3]at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1904) ~[jackson-databind-2.13.3.jar:2.13.3]at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400) ~[jackson-databind-2.13.3.jar:2.13.3]at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1349) ~[jackson-databind-2.13.3.jar:2.13.3]at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1415) ~[jackson-databind-2.13.3.jar:2.13.3]at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:351) ~[jackson-databind-2.13.3.jar:2.13.3]at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:184) ~[jackson-databind-2.13.3.jar:2.13.3]at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) ~[jackson-databind-2.13.3.jar:2.13.3]at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674) ~[jackson-databind-2.13.3.jar:2.13.3]at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3682) ~[jackson-databind-2.13.3.jar:2.13.3]at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:380) ~[spring-web-5.3.22.jar:5.3.22]... 62 common frames omitted
- 해결됨생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
3:40 부분 activeProfiles에 dev 출력과 로그 출력이 안 됩니다
안녕하세요.3:40 부분에서 선생님 화면에서는 GET으로 요청하면 json으로 되어있는 activeProfiles의 값에 dev가 나옵니다.하지만 제가 했을 때에는 GET 요청은 되지만 dev가 안 나오는데요...제가 빠뜨린 부분이 어디인지 찾기가 쉽지 않아 질문 드립니다.Edit Configurations에서 Active Profiles에 dev를 넣으면 GET자체를 못 하고, 빼면 역시 아무것도 안 나옵니다ㅜㅜ봐야겠다 싶은 소스 있으면 바로 보여드리겠습니다.Edit Configurations 현재 상태입니다.제가 친 로그에는 [helloClient#HealthCheck] 라는 로그가 안 보입니다...ㅜㅜ
- 해결됨생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
10:30쯤에 나오는 ErrorCode에서 TEST를 만드는 방법에 대해 질문 있습니다
@Getter public enum ErrorCode { TEST(HttpStatus.INTERNAL_SERVER_ERROR, "001", "business exception test"); ErrorCode(HttpStatus httpStatus, String errorCode, String message) { this.httpStatus = httpStatus; this.errorCode = errorCode; this.message = message; } private HttpStatus httpStatus; private String errorCode; private String message; } httpStatus, errorCode, message를 위에 올리고 TEST를 만들면 오류가 생기는데, 위 소스처럼 httpStatus, errorCode, message를 아래로 내리면 오류가 없어집니다. 어떤 기능인지 궁금한데요. 검색 키워드라도 알려주시면 감사드리겠습니다