현재 상황 클라이언트와 서버를 각자 다른 도메인에 배포했습니다. 소셜 로그인은 passport 모듈과 session을 사용했습니다. 서버에서 소셜 로그인이 성공해도 클라이언트에는 세션 쿠키가 전달되지 않습니다. 클라이언트 axios get 요청을 보내면 cors 에러가 떠서 a 태그를 사용했습니다. <a href="http://서버ip/auth/github">깃 헙 로그인<a/> 서버 아래의 코드는 강의의 내용과 동일합니다. passport 모듈을 활용해 소셜 로그인을 구현했습니다. import express from "express"; import passport from "passport"; import { isLoggedIn, isNotLoggedIn } from "../middlewares/authMiddleware.js"; const router = express.Router(); router.get("/github", passport.authenticate("github")); router.get( "/github/callback", passport.authenticate("github", { failureRedirect: "/", }), (req, res) => { res.redirect(`http://localhost:3000`); } ); router.get("/logout", isLoggedIn, (req, res) => { req.logout(); req.session.destroy(); res.json({ message: "logout" }); }); export default router; 소셜 로그인에 성공하면 클라이언트 서버의 메인 페이지로 redirect 시키고 있습니다. 문의 서버에서 소셜 로그인 성공시 클라이언트 서버에도 session 쿠키를 전달하고 싶습니다. 두 개의 다른 서버에서 소셜 로그인을 어떻게 구현해야될지 모르겠습니다.
안녕하세요! 강의 잘 듣고있습니다. express서버사용해보기 편에서 제로초님이 쓰신 코드 그대로 따라쳐보고 있는데요! nodemon app 을 cmd에 실행했을때 실행이 되지 않는데요 package에서도 nodemon이 확인이 되는데 왜 접근이 안되는 걸까요 ? 감사합니다
아직 현업을 겪어보지 못한 취준생입니다. 강의를 보고 공부를 하던 중 querydsl을 이용해 dto에 fit한 쿼리를 한번에 나오게끔 어찌저찌 짜봤는데요. 공부를 하다 궁금한 점이 생겨서 질문 드립니다. 로직을 위해 한 3번 정도의 쿼리가 나간 뒤 자바 코드로 로직에 맞게 수정하는 것과, 로직을 위해 한번의 쿼리가 나가면서 쿼리가 복잡해지는 것 중 어느게 좋은 쿼리일까요? 제 생각에는 3번의 가독성 좋은 쿼리가 나가는 것이 좋을 것 같습니다. 혹시 현업에서는 아니면 저보다 선배님들은 어떤 식으로 하시는지 궁금합니다.
안녕하세요. 강사님! 지방 사는 비전공자이고 6개월 정도의 교육 후에 취업하고 싶습니다. 자금 상황 때문에 부트캠프 온라인 vs 서울 고시원 살며 국비지원 받기 중 하나를 택하려 합니다.(42서울 등 교육들은 될지로 모르는데다 시기도 좀 기다려야 해서요.100퍼 된다는 보장이 없어서 일단 둘만 놓고 고민합니다) 뭐가 더 나을까요....? 강사님이나 수업 종류에 따라 다를까요?
안녕하세요 강의 항상 잘 보고 있습니다. 몇가지 궁금한 점이 있어서 질문 드립니다! public static void main(String[] args) { SpringApplication.run(QuerydslApplication.class, args); } @Bean JPAQueryFactory jpaQueryFactory(EntityManager em){ return new JPAQueryFactory(em); } 이전 MemberJpaRepository에서 보여주셨던 것과 같이 시작 메소드에서 em을 주입받은 queryFactory를 Bean으로 등록하고, private final JPAQueryFactory queryFactory; public MemberRepositoryImpl(JPAQueryFactory queryFactory){ this.queryFactory = queryFactory; } MemberRepositoryImpl에서 위와 같이 작성하였습니다. 이 상황에서, em이 주입된 queryFactory 싱글톤 빈을 받아서 MemberRepositoryImpl이 생성될 때 그 queryFactory를 주입한다고 생각하면 될까요?? 이렇게 작성하였을 때, basicTest는 통과하였습니다. 하지만 searchTest에서는 result가 비어있었습니다. 그래서 처음에 생각했을 때는, 시작메소드에서 JPAQueryFactory를 빈으로 등록했지만, 여기는 Test이기 때문에 시작 메소드를 실행하지 않았고 따라서 제대로 동작하지 않았다고 생각했었습니다. 하지만 그렇다면 뭔가 컴파일 오류가 난다던지, basicTest가 불통과된다던지 했었을 텐데, 그러지 않은 것을 보니 무언가 다른 이유가 있을거라 생각합니다. 조금 난해한 질문일 수는 있지만, 위와 같은 제 생각의 흐름에서 어떤 부분이 잘못되었는지 말씀해 주실 수 있으실까요?? 또한 condition에서 setTeamName을 제거했을 때는, result를 출력했을 때, member3와 member4가 나왔고 assertThat을 그에 맞게 수정하였더니 Test가 통과되었습니다. 즉, setTeamName 조건을 더했을 때, search가 제대로 동작하지 않는 것인데, 이유가 무엇인지 모르겠습니다. 아래에 전체 코드를 첨부하겠습니다. MemberRepositoryImpl package study.querydsl.repository; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import study.querydsl.dto.MemberSearchCondition; import study.querydsl.dto.MemberTeamDto; import study.querydsl.dto.QMemberTeamDto; import javax.persistence.EntityManager; import java.util.List; import static org.springframework.util.StringUtils.hasText; import static study.querydsl.entity.QMember.member; import static study.querydsl.entity.QTeam.team; //MemberRepository + "Impl" 형식을 맞춰야 한다. public class MemberRepositoryImpl implements MemberRepositoryCustom{ private final JPAQueryFactory queryFactory; //시작 메소드에서 JPAQueryFactory를 스프링 빈으로 등록해둠 //em이 주입된 queryFactory 싱글톤 빈을 받아온 것 //MemberRepositoryImpl이 생성될 때 그 queryFactory를 주입한다. public MemberRepositoryImpl(JPAQueryFactory queryFactory){ this.queryFactory = queryFactory; } @Override //회원명, 팀명, 나이(ageGoe, ageLoe) public List<MemberTeamDto> search(MemberSearchCondition condition) { return queryFactory .select(new QMemberTeamDto( member.id, member.username, member.age, team.id, team.name)) .from(member) .leftJoin(member.team, team) .where(usernameEq(condition.getUsername()), teamNameEq(condition.getTeamName()), ageGoe(condition.getAgeGoe()), ageLoe(condition.getAgeLoe())) .fetch(); } private BooleanExpression usernameEq(String username) { return hasText(username) ? member.username.eq(username) : null; } private BooleanExpression teamNameEq(String teamName) { return hasText(teamName) ? member.username.eq(teamName) : null; } private BooleanExpression ageGoe(Integer ageGoe) { return ageGoe == null ? null : member.age.goe(ageGoe); } private BooleanExpression ageLoe(Integer ageLoe) { return ageLoe == null ? null : member.age.loe(ageLoe); } } MemberRepositoryTest package study.querydsl.repository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import study.querydsl.dto.MemberSearchCondition; import study.querydsl.dto.MemberTeamDto; import study.querydsl.entity.Member; import study.querydsl.entity.Team; import javax.persistence.EntityManager; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @Transactional class MemberRepositoryTest { @Autowired EntityManager em; @Autowired MemberRepository memberRepository; @Test public void basicTest() { Member member = new Member("member1", 10); memberRepository.save(member); Member findMember = memberRepository.findById(member.getId()).get(); assertThat(findMember).isEqualTo(member); List<Member> result1 = memberRepository.findAll(); assertThat(result1).containsExactly(member); List<Member> result2 = memberRepository.findByUsername("member1"); assertThat(result2).containsExactly(member); } @Test public void searchTest() { Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 20, teamA); Member member3 = new Member("member3", 30, teamB); Member member4 = new Member("member4", 40, teamB); em.persist(member1); em.persist(member2); em.persist(member3); em.persist(member4); MemberSearchCondition condition = new MemberSearchCondition(); condition.setAgeGoe(35); condition.setAgeLoe(40); condition.setTeamName("teamB"); List<Member> all = memberRepository.findAll(); List<MemberTeamDto> result = memberRepository.search(condition); System.out.println("all = " + all); System.out.println("result = " + result); assertThat(result).extracting("username").containsExactly("member4"); } } 이때 다음과 같이 변경하면 테스트가 통과됩니다. @Test public void searchTest() { Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 20, teamA); Member member3 = new Member("member3", 30, teamB); Member member4 = new Member("member4", 40, teamB); em.persist(member1); em.persist(member2); em.persist(member3); em.persist(member4); MemberSearchCondition condition = new MemberSearchCondition(); condition.setAgeGoe(30); condition.setAgeLoe(40); // condition.setTeamName("teamB"); List<Member> all = memberRepository.findAll(); List<MemberTeamDto> result = memberRepository.search(condition); System.out.println("all = " + all); System.out.println("result = " + result); assertThat(result).extracting("username").containsExactly("member3", "member4"); }
cent2: MariaDB 0.0 B/s | 0 B 02:04 cent2: Errors during downloading metadata for repository 'mariadb': cent2: - Curl error (28): Timeout was reached for https://ftp.harukasan.org/mariadb/mariadb-10.4.26/yum/rhel/8/x86_64/repodata/repomd.xml [Connection timed out after 30757 milliseconds] cent2: - Curl error (28): Timeout was reached for https://ftp.harukasan.org/mariadb/mariadb-10.4.26/yum/rhel/8/x86_64/repodata/repomd.xml [Connection timed out after 30727 milliseconds] cent2: - Curl error (28): Timeout was reached for https://ftp.harukasan.org/mariadb/mariadb-10.4.26/yum/rhel/8/x86_64/repodata/repomd.xml [Connection timed out after 30464 milliseconds] cent2: - Curl error (28): Timeout was reached for https://ftp.harukasan.org/mariadb/mariadb-10.4.26/yum/rhel/8/x86_64/repodata/repomd.xml [Connection timed out after 30723 milliseconds] cent2: Error: Failed to download metadata for repo 'mariadb': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried cent2: No repository match: AppStream 위와 같이 마리아 디비를 다운로드 받지 못하네요..
안녕하세요? 강의를 듣고 복습하던 중 발견한 골치아픈 문제가 있어서 질문드립니다. Vue-Router를 이용하여 routing하였고, 페이지 내에서 클릭하고 들어가면 잘 동작하지만, 브라우저에서 새로고침 버튼을 누르거나, url을 직접 치고 들어가면 페이지를 찾을 수 없다는 에러가 반환됩니다. 실무에서는 종종 url로 직접 연동되는 page도 필요할텐데, 항상 root path로 일단 들어가서 click 등으로 다른 view로 이동해야 하는지 궁금합니다. SPA의 한계로 인해, root path외에 다른 route는 url을 통한 직접 접근이 불가능한가요? 이런 문제를 어떻게 해결할 수 있는지 답변주심 매우 감사드리겠습니다!
안녕하십니까. javascript를 배운지 얼마 안된 초보자입니다. document.writeln 이라는 출력문을 이용해서, 수식계산행을 이하와 같이 4개 만들어보았는데요. <script> document.writeln(1==1); document.writeln(1!=1); document.writeln(1>2); document.writeln(1<2); </script> 결과값(구글크롬에서 본 결과값)을 아래와 같이 개행(줄바꿈) 시키고 싶습니다. true false false true 이것저것 시도해보았지만 잘 되지 않았습니다. 혹시 해당 출력문을 이용하여 개행을 할 수 있을까요?\ 그 외에 제가 시도해 본건 아래와 같습니다. <script>태그 사이에 <pre>태그 추가 document.write를 이용하여 각 행 마다 \n 추가 괄호안에 <br>태그 추가 혹시 해당 출력문이 아니라 다른 방법이 있다면 알려주시면 감사합니다. 그리고 추가로 하나 더 질문이 있습니다만, 각 출력문마다 끝에 세미콜론을 꼭 붙여야하나요? 이 부분도 알려주시면 정말 감사하겠습니다.
안녕하세요. 저 리액트 파트 AWS 배포 했는데 Gateway 502 에러가 떠서 혹시 해결 방법을 알 수 있을지 질문 드리고 싶습니다ㅎㅎ 제 github은 다음과 같습니다. 감사합니다! https://github.com/LeeJongbokz/docker-react-app
안녕하세요 선생님. 양질의 강의 너무나 잘듣고 있습니다. 강의 듣다가 질문이 생겼는데 자전거 수요예측 1강 9분쯤에 피쳐와 타깃값을 barplot 으로 시각화하면서 피쳐의 개수에 해당하는 8개의 그래프가 만들어졌는데 혹시 이그래프만으로도 피쳐 셀렉션이 가능할까요? 또 barplot 말고 regplot으로 시각화를 한다면 추세선까지 파악가능한데 그렇다면 더욱더 피쳐셀렉션을 시각화 그래프로 할수있지 않을까라는 의문이 생겨서 질문드립니다. 감사합니다.
안녕하세요. 강의 잘 듣고 있습니다. 다름이 아니라 실행하실 때, 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 omitted Caused 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
안녕하세요. SSH 내부에서 DockerFile 로 톰캣 생성 후 컨테이너 실행 아래 이미지와 같은 에러가 발생합니다. 톰캣의 문제 인가 싶어서 톰캣을 다른버전으로 바꾸어서 이미지를 빌드했지만 그래도 아래와 똑같은 에러가 발생하네요. 혹시 어떤 원인 일지 짐작 가시는게 있다면 답변 부탁드립니다. 감사합니다.
강의를 본지 오래되어 개념이 살짝 헷갈려서 엉뚱한 질문일 수도 있는데...ㅠㅠ SpringDataJpaConfig에서 @Bean으로 등록하는 두 코드를 빼었더니 Test Code가 오류가 나네요. 혹시 @Bean을 빼면 자동주입이 안될까요? 다른방법으로 @Controller와 @Repository, @Service가 적혀있는데 컴포넌트 스캔이 안되었나 해서 해당 Config파일을 최상단으로 올려서 @ComponentScan을 적어도 안되네요 ㅠㅠ 혹시 @Bean으로 직접 등록해주는 것 말고 다른 방법이 있을까요?