inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

로그가 안찍히네요..

해결됨

코드로 배우는 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 조회수 148

질문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 조회수 251

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

해결됨

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

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

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

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

해결됨

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

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

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

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

해결됨

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

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

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

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 조회수 384

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

해결됨

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

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

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

스프링부트 버전이 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 조회수 966

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 조회수 213

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

해결됨

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

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

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

로그아웃 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 조회수 580

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

미해결

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

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

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

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

미해결

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

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

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

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 조회수 464

mac에서 mongo download 하는 방법도 알려주시면 안되나요..?

미해결

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

강의 내용과 달라서 따라하기 어렵습니다... https://www.mongodb.com/ko-kr/docs/manual/tutorial/install-mongodb-on-os-x/ mongoDB 매뉴얼 보고 설치를 시도했는데요 잘 설치가 된 건지 잘 모르겠습니다...

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

섹션 3 부트 프로젝트 생성 및 확인 / 엔티티 클래스 만들기 강의가 재생되지 않습니다.

미해결

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

섹션 3 부트 프로젝트 생성 및 확인 / 엔티티 클래스 만들기 강의가 재생되지 않습니다. 크롬으로 보던 중 무한로딩이 떠서 시크릿모드 및 다른 브라우저로 시도해봤지만 여전히 재생되지 않습니다. 다른 영상은 잘 재생되는데, 섹션 3 부트 프로젝트 생성 및 확인 / 엔티티 클래스 만들기 강의만 재생되지 않네요. 확인 한 번 부탁드립니다!

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
양성준 댓글 2 좋아요 0 조회수 180

검증 필드의 영역

미해결

Practical Testing: 실용적인 테스트 가이드

안녕하세요 사이드 프로젝트를 하면서 선생님에게 배운 테스트를 적용하며 성장 하고 있습니다. 감사합니다! 👍 테스트를 하며 작은 궁금증이 생겼습니다. 만약 10개의 필드를 업데이트 한다면 모든 필드를 extracting 하여 검증 해야 하나요? 3~4개의 대표적인 필드만 하는게 맞을까요? 다 검증 하는게 안정성은 무조건 좋다고 생각 합니다. 하지만 검증 부분이 길어 가독성이 좋지 않을것 같기도 하고 3~4개면 검증 되지 않을까 하는 생각도 듭니다. 다른 질문은 프로젝트 중 고민이 있어서 혹시 선생님은 어떻게 생각 하시나 궁금해서 여쭈어 봅니다. 🙏 현재 프로젝트에서 요청 할때 JWT 토큰을 내고 user의 정보를 시큐리티 컨텍스트 홀더에 저장 하고 있습니다. api 요청이 올 떄 @GetMapping("/{id}") 이렇게 파라미터로 받지 않고 컨텍스트 홀더의 유저 ID를 사용 하고 있습니다. 컨텍스트 정보를 UserUtils로 만들고 서비스에서 utils 값을 꺼내어 사용 하고 있습니다. 현재 까진 문제가 없는데 혹시 안좋은 방법인가요? 마지막 질문은 블로그에 테스트에 관해 작성 해도 괜찮을까요? 테스트의 전체적인 흐름을 알려주는 곳이 없어서 답답했는데 컨트롤러, 서비스, 리포지토리 각 어떤것을 중점으로 테스트 하는지 적을려고 합니다. 선생님 코드가 일부 인용 할 것 같아서 혹시 가능할까요? 물론 출처는 남길거에요!

  • jwt
  • 검증
조희제 댓글 2 좋아요 0 조회수 183

unique 작성법

미해결

[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기

@Table 애노테이션을 써서 unique 를 설정하셨는데, @Column(unique = true) 로 설정하는 방법을 사용하지 않으신 이유가 있나요??

  • kotlin
  • spring-boot
  • jpa
  • spring-security
  • jwt
안호성 댓글 1 좋아요 0 조회수 190

카카오연동이후 product 사진 깨지는현상

미해결

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

왜그런지 궁금해서 post맨으로 product read할때 header에 accessToken넣고 요청보내봤는데 정상호출이됩니다 근데. 리액트에서 만든 인터셉터에서 에러 메시지를 받으면 원래요청에 새로운 엑세스 토큰 넣어서해주는 기능이있는걸 봤어요 어> 근데 이러면 사진이 안깨져야 말이맞지않나요? 어디서 잘못된건지 잘 모르겠어서 질문드립니다

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
김우철 댓글 3 좋아요 0 조회수 218

claims 공개/비공개 개념 질문

미해결

스프링 시큐리티 OAuth2

{ "sub" : "1234567890", "iss" : "onjsdnjs.com" // 등록된 클레임 "exp" : 192630000 "https://onjsdnjs.com/claims/job" : "developer" //공개 클레임 "userId" : "leaven" // 비공개 클레임 "username" : "onjsdnjs" } 공개와 비공개 개념이 있습니다. 어디에 혹은 어느 대상에 공개를 한다는 것인지 설명이 없어 문의 드립니다.

  • java
  • spring
  • spring-boot
  • oauth
  • jwt
댓글 1 좋아요 0 조회수 157

인기 태그

인프런 TOP Writers

주간 인기글