inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

섹션8: 토큰 갱신 오류

미해결

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요. 섹션8 진행하던 중 오류 해결에 도움이 필요해 글 남겨요.. Axios 인터셉터와 Access Token, Refresh 토큰 이용한 Access 토큰 자동 갱신 강의 내용의 코드를 강사님처럼 입력했는데 계속 오류가 납니다.. 콘솔 화면에 나타난 오류 찾아보니 TypeError: Cannot read properties of undefined (reading 'map') 오류가 serverData.dtoList 가 정의되지 않아서 발생했다고 하는데 어떻게 처리 해야 할지 모르겠어요. 참고로 강사님과 코드 내용이 같아 제 코드는 따로 첨부하지 않았어요. 필요하시면 첨부 하겠습니다.

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
댓글 2 좋아요 0 조회수 183

섹션7: gson 오류

해결됨

코드로 배우는 React 19 with 스프링부트 API서버

강의 설명에 따라 build.gradle에 implementation ' com.google .code.gson:gson:2.10.1' 입력 후 이 오류 때문에 강의를 더 이상 진행할 수가 없습니다. 오류로 인해 ./gradlew clean build --refresh-dependencies 터미널에도 실행해보고 configurations.all { resolutionStrategy { force ' com.google .code.gson:gson:2.10.1' } } 이 코드도 추가해서 해결해 보려 했으나, 오류가 해결되지 않았습니다. 도움 부탁드립니다.

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
댓글 2 좋아요 0 조회수 229

섹션5 - 이미지 없이 업로드 해도 1개 있는 거로 나옵니다.

미해결

코드로 배우는 React 19 with 스프링부트 API서버

섹션5에서 상품 이미지가 없는 상태로 add나 modify 를 하면 uplaod 폴더에 uuid 값만 있는 파일이 하나 생성됩니다. 혹시나 하고 CustomFileUtil 파일의 saveFiles 메서드에서 로그를 찍어봤는데 이미지 없이 넘겨도 files.size() 가 1이 나오던데 어떻게 해야 할까요? 강사님 자료 받아서 돌려도 같은 결과가 나옵니다.. 아래 이미지는 등록 시 이미지 없이 시도한 결과입니다.

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
댓글 2 좋아요 0 조회수 147

섹션 4 목록 처리(1)

해결됨

코드로 배우는 React 19 with 스프링부트 API서버

강의를 따라가서 modify 버튼을 누르니 http://localhost:3000/todo/modify/[object%20Object]?page=1&size=10 이렇게 나오더라구요 그래서 섹션2 맨 마지막 강의를 찾아보니 modifyPage.js가 아래와 같았습니다. import React from 'react'; function ModifyPage(props) { return ( <div className={'text-3xl font-extrabold'}> Todo Modify Page </div> ); } export default ModifyPage; 2장 pdf의 동적페이지 이동: 수정/삭제 처리 후 이동 에는 import { useNavigate } from "react-router-dom"; const ModifyPage = ({tno}) => { const navigate = useNavigate() const moveToRead = () => { navigate({pathname:`/todo/read/${tno}`}) } const moveToList = () => { navigate({pathname:`/todo/list`}) } return ( ); <div className="text-3xl font-extrabold"> Todo Modify Page </div> } export default ModifyPage; 이렇게 나와있구요 어떻게 수정해야될까요? 참고로 위에 코드로 수정하면 export 어쩌구 하면서 오류가 나네요.. 참고로 리스트 버튼을 누르면 http://localhost:3000/todo/list?page=1&size=10 잘 넘어갑니다.. 추가 위에 두번째 코드처럼 ModifyPage.js를 수정해도 결과는 동일하게 http://localhost:3000/todo/modify/[object%20Object]?page=1&size=10 이렇게 나오네요.. 어떤 부분을 봐야할까요? 쳇지피티에 물어보니 백틱 문제라고 하는데 백틱도 적용했지만 해결이 안되네요.. 해결했습니다.. onClick={() => moveToModify(todo.tno)} 이 부분이 문제였던 것 같습니다. !!!!!!!!!!!!!!!!!!! pdf와 강의가 다른 부분에 대한 답변만 부탁드리겠습니다!

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
별다방 댓글 1 좋아요 0 조회수 121

강의 프로젝트는 Todo리스트 인가요 쇼핑몰 인가요?

미해결

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요 강사님. 현재 섹션5를 보고 있는데 프로젝트가 어떤 프로젝트인지 헷갈려서 질문 드립니다. 섹션 1,2,3 을 보면 투두리스트 인것 같은데 갑자기 섹션4부터는 product나 상품들도 나오고, 그 뒤 섹션들을 보면 장바구니도 나오고 하던데 최종적으로는 어떤게 만들어지는 건가요?

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
tjdwnsdks 댓글 2 좋아요 0 조회수 149

섹션4 - 목록처리(2)에서 페이지를 두번 클릭해야 정보를 불러옵니다.

미해결

코드로 배우는 React 19 with 스프링부트 API서버

목록처리(2) 에서 refresh 까지 다 하고 하단에 페이지 넘버를 클릭하면 어떨때는 두번 눌러야 화면이 넘어가는 경우가 있습니다. 브라우저 개발자 도구의 콘솔탭에서 확인해보니 아래 이미지처럼 current가 각기 다르게 두번 불러오는데요(현재 2페이지에서 1페이지를 눌렀을때의 결과 입니다.) 리액트에서 두번 불러오는거에 대해서 언급하신게 있었는데 제가 놓친부분이 있는건지... 이렇게 되는 이유를 모르겠습니다. 혹시 몰라 압축파일로 제 구글 드라이브에 올려놓았습니다. ( https://drive.google.com/drive/folders/1TQxdqkRD8xvXIHzVoI5fp2hm_HZaE0aT ) 감사합니다.

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
tjdwnsdks 댓글 2 좋아요 0 조회수 128

로그가 안찍히네요..

해결됨

코드로 배우는 React 19 with 스프링부트 API서버

package org.zerock.apiserver.service; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.zerock.apiserver.DTO.PageRequestDTO; import org.zerock.apiserver.DTO.TodoDTO; import org.zerock.apiserver.Service.TodoService; import java.time.LocalDate; @SpringBootTest @Log4j2 public class TodoServiceTests { @Autowired TodoService todoService; @Test public void testGet() { Long tno = 50L; log.info(todoService.get(tno)); } @Test public void testResister() { TodoDTO todoDTO = TodoDTO.builder() .title("Title...") .content("Content...") .dueDate(LocalDate.of(2023,12,30)) .build(); log.info(todoService.resister(todoDTO)); } @Test public void testGetList() { PageRequestDTO pageRequestDTO = PageRequestDTO.builder().build(); log.info(todoService.getList(pageRequestDTO)); } } 마지막 테스트를 진행하는데 로그가 안찍히네요... 2024-12-02T17:01:47.099+09:00 INFO 13948 --- [ Test worker] o.z.apiserver.service.TodoServiceTests : org.zerock.apiserver.DTO.PageResponseDTO@4dea763c 이런식으로만 찍히는데.. 원래 위에 테스트들은 문제없이 잘 됐는데 왜 안되는걸까요?

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
개발자훈 댓글 3 좋아요 0 조회수 136

질문1) 'Querydsl 검색처리'의 TDD 에서 에러가 나는데 도저히 모르겠습니다..

미해결

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요. 그런데 섹션3 의 'Querydsl 검색처리' 영상을 다 보고 TDD 테스트를 돌리는데 계속 아래와 같은 에러가 납니다.. 몇일동안 찾아봤는데도 아예 해결이 되지 않아서 여기에 질문드리게 됐네요.. ㅠㅠ 혹시 몰라 콘솔탭에 있는거 전부 다 복사해 왔습니다. 강의를 파트별로 정리하면서 공부하고 있어서 앞에 Ex01 이런식으로 이름이 붙어 있습니다. 왜 안되는지 도저히 모르겠어요.. (게시글이 10000자 이상 안써진다고 해서 댓글에 다음 메세지들 쓰겠습니다.) (혹시 몰라서 대댓글로 코드들도 남깁니다.) . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.3.6) 2024-12-02T05:13:22.977+09:00 INFO 7780 --- [ restartedMain] c.zerock.apiserver.ApiserverApplication : Starting ApiserverApplication using Java 17.0.13 with PID 7780 (C:\Users\hykim\Desktop\apiserver\build\classes\java\main started by hykim in C:\Users\hykim\Desktop\apiserver) 2024-12-02T05:13:22.993+09:00 INFO 7780 --- [ restartedMain] c.zerock.apiserver.ApiserverApplication : No active profile set, falling back to 1 default profile: "default" 2024-12-02T05:13:23.010+09:00 INFO 7780 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable 2024-12-02T05:13:23.010+09:00 INFO 7780 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' 2024-12-02T05:13:23.322+09:00 INFO 7780 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2024-12-02T05:13:23.353+09:00 INFO 7780 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 28 ms. Found 1 JPA repository interface. 2024-12-02T05:13:23.632+09:00 INFO 7780 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) 2024-12-02T05:13:23.638+09:00 INFO 7780 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2024-12-02T05:13:23.638+09:00 INFO 7780 --- [ restartedMain] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.33] 2024-12-02T05:13:23.665+09:00 INFO 7780 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2024-12-02T05:13:23.665+09:00 INFO 7780 --- [ restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 655 ms 2024-12-02T05:13:23.733+09:00 INFO 7780 --- [ restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2024-12-02T05:13:23.761+09:00 INFO 7780 --- [ restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final 2024-12-02T05:13:23.777+09:00 INFO 7780 --- [ restartedMain] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled 2024-12-02T05:13:23.936+09:00 INFO 7780 --- [ restartedMain] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer 2024-12-02T05:13:23.951+09:00 INFO 7780 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2024-12-02T05:13:23.989+09:00 INFO 7780 --- [ restartedMain] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.mariadb.jdbc.Connection@6303bda2 2024-12-02T05:13:23.990+09:00 INFO 7780 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2024-12-02T05:13:24.411+09:00 INFO 7780 --- [ restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) 2024-12-02T05:13:24.438+09:00 INFO 7780 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2024-12-02T05:13:24.535+09:00 WARN 7780 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ex04_10_TodoServiceImpl' defined in file [C:\Users\hykim\Desktop\apiserver\build\classes\java\main\com\zerock\apiserver\service\Ex04_10_TodoServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'ex04_13_TodoRepository' defined in com.zerock.apiserver.repository.Ex04_13_TodoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract org.springframework.data.domain.Page com.zerock.apiserver.repository.search.Ex04_11_TodoSearch.search1(com.zerock.apiserver.dto.Ex04_7_PageRequestDto); Reason: Paging query needs to have a Pageable parameter; Offending method: public abstract org.springframework.data.domain.Page com.zerock.apiserver.repository.search.Ex04_11_TodoSearch.search1(com.zerock.apiserver.dto.Ex04_7_PageRequestDto) 2024-12-02T05:13:24.535+09:00 INFO 7780 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2024-12-02T05:13:24.537+09:00 INFO 7780 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2024-12-02T05:13:24.538+09:00 INFO 7780 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. 2024-12-02T05:13:24.539+09:00 INFO 7780 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2024-12-02T05:13:24.545+09:00 INFO 7780 --- [ restartedMain] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2024-12-02T05:13:24.556+09:00 ERROR 7780 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ex04_10_TodoServiceImpl' defined in file [C:\Users\hykim\Desktop\apiserver\build\classes\java\main\com\zerock\apiserver\service\Ex04_10_TodoServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'ex04_13_TodoRepository' defined in com.zerock.apiserver.repository.Ex04_13_TodoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract org.springframework.data.domain.Page com.zerock.apiserver.repository.search.Ex04_11_TodoSearch.search1(com.zerock.apiserver.dto.Ex04_7_PageRequestDto); Reason: Paging query needs to have a Pageable parameter; Offending method: public abstract org.springframework.data.domain.Page com.zerock.apiserver.repository.search.Ex04_11_TodoSearch.search1(com.zerock.apiserver.dto.Ex04_7_PageRequestDto) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:795) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1375) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1212) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.15.jar:6.1.15] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.15.jar:6.1.15] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.15.jar:6.1.15] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.6.jar:3.3.6] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.6.jar:3.3.6] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.6.jar:3.3.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.6.jar:3.3.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.6.jar:3.3.6]

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
tjdwnsdks 댓글 2 좋아요 0 조회수 222

JwtProvider 를 Component 로 선언하신 이유가 궁금합니다.

해결됨

Spring Boot를 활용하여 채팅 플랫폼 만들어보기

안녕하세요 지식공유자님. 강의에서 JwtProvider 에 @Component 어노테이션을 선언하셔서 스프링이 관리하도록 의도하신 것 같습니다. 그런데, 함수에 static 을 모두 붙이시고, 사용하는 쪽에서는 bean 으로 등록 하지 않고 static util 처럼 사용하시는 것을 확인했습니다. 질문은 두가지 입니다. @Component 를 선언하셨음에도 static 메서드를 authService 에서 사용하신 이유가 있으신지. 빈으로 만들고서도 static 함수로 사용하는 것에 이점이 있는 것인지. 답변 부탁드리겠습니다. 감사합니다.

  • mysql
  • spring-boot
  • jpa
  • jwt
  • websocket
Joshua Kim 댓글 2 좋아요 0 조회수 221

안녕하세요 연관관계에 대해 질문이 있습니다.

해결됨

Spring Boot를 활용하여 채팅 플랫폼 만들어보기

안녕하세요 지식공유자님. User 클래스의 credentials 필드에 lazy loading 관련하여 설명을 해주셨는데요, 제가 알기로는 mappedBy 가 있는 쪽에서는 LAZY 로딩이 동작하지 않는 것으로 알고 있습니다. 즉, 연관관계의 주인인 UserCredentails 쪽에만 적용하는 것이 맞다고 생각이 드는데 제 생각이 맞을까요?

  • mysql
  • spring-boot
  • jpa
  • jwt
  • websocket
Joshua Kim 댓글 2 좋아요 0 조회수 163

안녕하세요 MySqlConfig 설정에 대해 질문이 있습니다.

해결됨

Spring Boot를 활용하여 채팅 플랫폼 만들어보기

안녕하세요 지식 공유자님. MySqlConfig 클래스에 대해 질문이 있습니다. yml 에 이미 mysql 정보들을 설정했는데 MySqlConfig 클래스에서도 @Value 를 통해 설정정보를 또 작성하는 것은 무엇을 위함인것일까요? 제가 알기로는 Spring Boot의 자동 설정이 application.yml의 설정들을 자동으로 읽어와서 DataSource bean으로 구성하는 것으로 알고있는데 다시 작성하는 이유가 궁금합니다. 감사합니다.

  • mysql
  • spring-boot
  • jpa
  • jwt
  • websocket
Joshua Kim 댓글 2 좋아요 0 조회수 140

9장 API서버에서 사용자 정보 추출하기 호출 오류 문의

미해결

코드로 배우는 React 19 with 스프링부트 API서버

카카오로 access토큰 받아오고 나서 api서버에서 kakao로 사용자 정보 호출 시 오류가 나네요.. 어떤 부분을 수정해야 할지 잘 감이 안오네요. Not injecting HSTS header since it did not match request to [Is Secure] --아래 로그 1-28T17:15:42.369+09:00 TRACE 26452 --- [apiserver] [nio-8080-exec-2] o.s.security .web.FilterChainProxy : Invoking ExceptionTranslationFilter (13/13) 2024-11-28T17:15:42.369+09:00 DEBUG 26452 --- [apiserver] [nio-8080-exec-2] o.s.security .web.FilterChainProxy : Secured GET /api/member/kakao?accessToken=s0KvFDK1upVad8mdV-4lSc8WG_NwqUV7AAAAAQoqJVAAAAGTcdcZj6ew61y3DOUZ 2024-11-28T17:15:42.370+09:00 INFO 26452 --- [apiserver] [nio-8080-exec-2] o.z.a.controller.SocialController : accessToken : s0KvFDK1upVad8mdV-4lSc8WG_NwqUV7AAAAAQoqJVAAAAGTcdcZj6ew61y3DOUZ 2024-11-28T17:15:42.372+09:00 INFO 26452 --- [apiserver] [nio-8080-exec-2] o.z.apiserver.service.MemberServiceImpl : response 1------------------------------ 2024-11-28T17:15:42.405+09:00 TRACE 26452 --- [apiserver] [nio-8080-exec-2] o.s.s.w.header.writers.HstsHeaderWriter : Not injecting HSTS header since it did not match request to [Is Secure] 2024-11-28T17:15:42.405+09:00 ERROR 26452 --- [apiserver] [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.web.client.ResourceAccessException: I/O error on GET request for " https://kapi.kakao.com/v2/user/me ": PKIX path building failed: sun.security .provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target] with root cause sun.security .provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/ sun.security.provider.certpath.SunCertPathBuilder.build ( SunCertPathBuilder.java:148 ) ~[na:na] at java.base/ sun.security .provider.certpath.SunCertPathBuilder.engineBuild( SunCertPathBuilder.java:129 ) ~[na:na] at java.base/ java.security.cert.CertPathBuilder.build ( CertPathBuilder.java:297 ) ~[na:na] -- 소스코드 private void getEmailFromAccessToken(String accessToken) { String kakaoGetUserURL = "https://kapi.kakao.com/v2/user/me"; if(accessToken == null){ throw new RuntimeException("Access Token is null"); } RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", "Bearer " + accessToken); headers.add("Content-Type","application/x-www-form-urlencoded"); HttpEntity<String> entity = new HttpEntity<>(headers); UriComponents uriBuilder = UriComponentsBuilder.fromHttpUrl(kakaoGetUserURL).build(); log.info("uriBuilder " + uriBuilder); log.info("response 1------------------------------"); ResponseEntity<LinkedHashMap> response = restTemplate.exchange( uriBuilder.toString(), HttpMethod.GET, entity, LinkedHashMap.class); log.info("response 2------------------------------"); log.info(response);

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
조정대 댓글 2 좋아요 0 조회수 367

소스코드는 어디서 받을수 있나요?

해결됨

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요. 강의영상의 코드를 다운받을수 있는곳이 있나요? 강사님 네이버 카페 가보니 코드로배우는리액트 자료실에 타입스크립트 추가되어 있는 yes24 링크인가요? 들어가봤는데 아닌것 같아서 여쭤봅니다..

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
tjdwnsdks 댓글 2 좋아요 0 조회수 190

스프링부트 버전이 3.4.X 여도 괜찮을까요?

해결됨

코드로 배우는 React 19 with 스프링부트 API서버

안녕하세요 강사님. 섹션1 의 ' MariaDB와 부트 프로젝트생성 ' 에서 VScode 에서 스프링부트 프로젝트 만드실때 3.1.X 버전으로 만드셨는데 지금 보면 3.3.6 이랑 3.4.0 밖에 없는데 3.4로 해도 상관 없을까요? 강사님 강의에서는 jpa 를 쓰는것으로 알고 있지만 3.4.0부터는 mybatis framework도 못쓴다고 해서 여쭤봅니다.. 감사합니다.

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
tjdwnsdks 댓글 2 좋아요 0 조회수 949

morgan모듈이 cors 문제가 발생할때만 OPTIONS 메서드가 로깅이 되는 이유가 궁금합니다.

미해결

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

cors 정책 적용 // routes/v2.js const express = require("express"); const { verifyToken, apiLimiter } = require("../middlewares"); const { createToken, getMyPosts, getPostsByHashtag, corsWhenDomainMatches, getFollowersByUser, getFollowingsByUser, } = require("../controllers/v2"); const router = express.Router(); // router.use((req, res, next) => { // res.setHeader("Access-Control-Allow-Origin", "http://localhost:4000"); // res.setHeader("Access-Control-Allow-Headers", "content-type"); // next(); // }); router.use(corsWhenDomainMatches); // CORS 정책 적용 미들웨어 // 토큰 발급 라우터 // /v2/token router.post("/token", apiLimiter, createToken); ... module.exports = router; morgan 로깅 CORS 정책 미적용 // routes/v2.js const express = require("express"); const { verifyToken, apiLimiter } = require("../middlewares"); const { createToken, getMyPosts, getPostsByHashtag, corsWhenDomainMatches, getFollowersByUser, getFollowingsByUser, } = require("../controllers/v2"); const router = express.Router(); // router.use((req, res, next) => { // res.setHeader("Access-Control-Allow-Origin", "http://localhost:4000"); // res.setHeader("Access-Control-Allow-Headers", "content-type"); // next(); // }); // router.use(corsWhenDomainMatches); // CORS 미들웨어 비활성화 // 토큰 발급 라우터 // /v2/token router.post("/token", apiLimiter, createToken); ... module.exports = router; morgan 로깅 찾아보니 OPTIONS 메서드는 CORS 문제 때문이 아닌 브라우저는 요청을 보내기전 OPTIONS 메서드로 먼저 예비요청을 보낸다는 것을 알았습니다. 그렇다면 OPTIONS 메서드는 모든 요청마다 예비 요청으로 이뤄지고 있을텐데 왜 CORS 문제일때만 OPTIONS 메서드가 로깅이 되는지 궁금합니다.

  • node.js
  • mysql
  • mongodb
  • express
  • typescript
  • socket.io
  • jwt
김현수 댓글 2 좋아요 0 조회수 195

MySQL을 미리 설정을 해놔야할까요?

해결됨

Spring Boot를 활용하여 채팅 플랫폼 만들어보기

start.sh 하는데 계속 jpa에서 연결하는 데 문제가 있는거 같아서요. 혹시 이를 세팅하는 부분이 다른 강의에 있는것일까요?

  • mysql
  • spring-boot
  • jpa
  • jwt
  • websocket
syhwan88 댓글 3 좋아요 0 조회수 198

로그아웃 401 에러(Unauthorized)

해결됨

따라하며 배우는 노드, 리액트 시리즈 - 기본 강의

로그인 후 개발자 도구 쿠키에 x_auth 정상적으로 확인 DB에도 토큰 정상적으로 값 입력된 것 확인 로그아웃 버튼을 클릭 시 401 에러 발생, 토큰 삭제 x server/index.js app.post('/api/users/login', async (req, res) => { try { const user = await User.findOne({ email: req.body.email }); if (!user) { return res.json({ loginSuccess: false, message: "제공된 이메일에 해당하는 유저가 없습니다." }); } // 비밀번호가 일치하는지 확인한다. const isMatch = await user.comparePassword(req.body.password); if (!isMatch) { return res.json({ loginSuccess: false, message: "비밀번호가 틀렸습니다." }); } // 비밀번호가 일치하다면 토큰을 생성한다. const tokenUser = await user.generateToken(); res.cookie("x_auth", tokenUser.token) .status(200) .json({ loginSuccess: true, userId: user._id }); } catch (err) { return res.status(400).send(err); } }); app.post('/api/users/logout', auth, async(req, res) => { try { await User.findOneAndUpdate({ _id: req.user._id }, { token: "" }); res.clearCookie("x_auth"); return res.status(200).send({ logoutSuccess: true }); } catch (err) { return res.json({ logoutSuccess: false, message: err.message }); } }); User.js userSchema.methods.comparePassword = function(plainPassword, cb) { const user = this; return bcrypt.compare(plainPassword, user.password); }; userSchema.methods.generateToken = function() { var user = this; // jsonwebtoken을 이용해서 토큰을 생성한다. var token = jwt.sign(user._id.toJSON(), 'secretToken'); user.token = token; return user.save(); }; userSchema.statics.findByToken = async function(token) { const user = this; try { // 토큰을 decode합니다. const decoded = jwt.verify(token, 'secretToken'); // 디코딩된 정보를 이용해 유저를 찾습니다. const userData = await user.findOne({ "_id": decoded, "token": token }); return userData; } catch (err) { throw new Error("유효하지 않은 토큰입니다."); } }; auth.js const { User } = require("../models/User"); function auth(req, res, next) { // 인증 처리한다. // 클라이언트 쿠키에서 토큰을 가져온다. const token = req.cookies.x_auth; if (!token) { return res.status(401).json({ isAuth: false, message: "토큰이 제공되지 않았습니다." }); } // 토큰을 복호화한 후 유저를 찾는다. User.findByToken(token) .then((user) => { if (!user) { return res.status(401).json({ isAuth: false, message: "유효하지 않은 토큰입니다." }); } // 토큰과 유저정보를 다음 단계로 전달한다. req.token = token; req.user = user; next(); }) .catch((err) => { return res.status(401).json({ isAuth: false, message: err.message }); }) }; module.exports = { auth }; 서버의 경로를 절대 경로로 기입하지 않으면 404 에러 발생 5000 포트로 데이터 전송, cors로 3000 포트로 이동하도록 설정 const corsOptions = { origin: 'http://localhost:3000', // 클라이언트 주소 credentials: true // 쿠키를 포함하도록 }; app.use(cors(corsOptions));

  • react
  • node.js
  • jwt
마이히 댓글 2 좋아요 0 조회수 543

password 비교를 하지 않았는데 어떻게 인증이 통과된 건가요?

미해결

스프링부트 시큐리티 & JWT 강의

안녕하세요! 스프링 시큐리티 다양한 분들 강의를 봤는데 이렇게 핵심만 요약해서 알려주시는 강의는 없었던 것 같습니다. attemptAuthentication 에서 authRequestToken으로 loadUserByUsername 를 호출 후 password 를 비교하는 로직이 없는데 어떻게 successfulAuthentication 으로 넘어가는지 이해가 안됩니다. 어느 시점에 password 를 비교하는지 궁금합니다.

  • spring
  • spring-security
  • jwt
김한결 댓글 1 좋아요 0 조회수 347

로그인 후에 화면 변화가 없습니다

미해결

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

로그인 로그아웃까지는 되는데 포스트 부분이 화면이 안뜹니다. html 문제인가요? 아니면 JS 문제인가요? 제가 작성한 코드를 올리고 싶은데 올릴 수 있는 방법이 있을까요? 여기에는 파일도 올릴 수 없고 이미지도 안올라가져서 어떻게 질문을 해야할지 모르겠어요

  • node.js
  • mysql
  • mongodb
  • express
  • typescript
  • socket.io
  • jwt
민지영 댓글 3 좋아요 0 조회수 289

Spring boot 3.x버전에서 data.sql 오류 발생할 경우

미해결

Spring Boot JWT Tutorial

data.sql -> import.sql로 이름 변경 user 테이블 명을 users나 다른 테이블 명으로 수정해야 하며 sql 쿼리문에서의 ""는 삭제해야 합니다. package com.sixplace.user; import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; import lombok.*; import java.util.Set; @Entity @Table(name = "users") @Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor public class User { @JsonIgnore @Id @Column(name = "user_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long userId; @Column(name = "username", length = 50, unique = true) private String username; @JsonIgnore @Column(name = "password", length = 100) private String password; @Column(name = "nickname", length = 50) private String nickname; @JsonIgnore @Column(name = "activated") private boolean activated; @ManyToMany @JoinTable( name = "user_authority", joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "user_id")}, inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "authority_name")}) private Set<Authority> authorities; } insert into users (username, password, nickname, activated) values ('admin', '$2a$08$lDnHPz7eUkSi6ao14Twuau08mzhWrL4kyZGGU5xfiGALO/Vxd5DOi', 'admin', 1); insert into users (username, password, nickname, activated) values ('user', '$2a$08$UkVvwpULis18S19S5pZFn.YHPZt3oaqHZnDwqbCW9pft6uFtkXKDC', 'user', 1); insert into authority (authority_name) values ('ROLE_USER'); insert into authority (authority_name) values ('ROLE_ADMIN'); insert into user_authority (user_id, authority_name) values (1, 'ROLE_USER'); insert into user_authority (user_id, authority_name) values (1, 'ROLE_ADMIN'); insert into user_authority (user_id, authority_name) values (2, 'ROLE_USER');

  • spring-boot
  • jwt
알함 댓글 1 좋아요 4 조회수 438

인기 태그

인프런 TOP Writers

주간 인기글