묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결코드로 배우는 React with 스프링부트 API서버
서비스를 인터페이스로 구축하는 이유를 여쭙고싶습니다
서비스를 인터페이스로 구축하는 이유를 여쭙고싶습니다!
-
미해결입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
docker-compose 파일 작성하기 질문 있습니다.
docker-compose 실행을 하면 사진과 같은 오류가 발생하는데 어떻게 해결해야할 지 모르겠습니다. 인터넷에 찾아봐도 자료가 많지 않아 질문 드립니다..
-
미해결
spring-data-jpa 연습 중 순환참조 오류가 발생했습니다.
안녕하세요. 최근 spring-data-jpa 를 공부하다 이상한 순환 참조 오류를 발견했습니다.그런데 도통 납득이 되지 않아 여쭤보고자 질문 드립니다.spring-data-jpa 를 사용하기 전, 저는 주로 MyBatis 를 아래처럼 주로 사용했습니다.// 주로 mybatis interface 인 mapper 를 먼저 선언하고 @Mapper public interface MyBatisMapper {/* ... */} /* ------------ */ // DAO 객체에 주입해 사용하는 형태로 사용했습니다. @Repository public class MyBatisRepo { private final MyBatisMapper mapper; public MyBatisRepo(MyBatisMapper mapper) { this.mapper = mapper; } /* 생략 */ }그래서 JPA 에서도 이처럼 사용해 볼까 하는 마음에 연습하던 중, 순환참조 오류가 발생하였습니다. 아래는 spring-data-jpa 에서 오류가 발생한 코드입니다.TestEntity : 연습용 엔티티@Entity public class TestEntity { @Id private Long id; }DAO 인터페이스 : repository 규약public interface TestRepo { // 연습용이라 텅 비어있습니다. }JPA 인터페이스public interface JPATestRepo extends JpaRepository<TestEntity, Long> { // 연습용이라 텅 비어있습니다. }Repository 구현체@Repository public class JPATestRepoImpl implements TestRepo { private final JPATestRepo jpaRepo; public JPATestRepoImpl(JPATestRepo jpaRepo) { this.jpaRepo = jpaRepo; } // 연습용이라 이후 아무 내용도 없습니다. }실행시 발생하는 에러2024-10-19T19:46:00.760+09:00 WARN 66384 --- [testing] [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'JPATestRepoImpl' defined in file [/~~~/Desktop/Coding/testing/build/classes/java/main/core/testing/JPATestRepoImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'JPATestRepoImpl': Requested bean is currently in creation: Is there an unresolvable circular reference? 2024-10-19T19:46:00.761+09:00 INFO 66384 --- [testing] [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2024-10-19T19:46:00.762+09:00 INFO 66384 --- [testing] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2024-10-19T19:46:00.807+09:00 INFO 66384 --- [testing] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. 2024-10-19T19:46:00.811+09:00 INFO 66384 --- [testing] [ main] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2024-10-19T19:46:00.825+09:00 ERROR 66384 --- [testing] [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: The dependencies of some of the beans in the application context form a cycle: ┌──->──┐ | JPATestRepoImpl defined in file [/~~~/Desktop/Coding/testing/build/classes/java/main/core/testing/JPATestRepoImpl.class] └──<-──┘ Action: Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true. Process finished with exit code 1 콘솔 에러에 따르면 JPATestRepoImpl 가 자기 자신을 의존해 순환참조가 발생한다고 합니다.하지만 JPATestRepoImpl 는 (코드에서 볼 수 있듯이) JPATestRepo 를 주입받을 뿐, 자기자신을 의존하고 있지 않습니다. 게다가 더 혼란스러운 점은 만약 JPATestRepoImpl 의 이름을 다른 것으로 바꾸면 (예를 들어 TestRepoJPAImpl) 거짓말처럼 순환 참조 오류가 없어집니다. 제가 추측하기로는 스프링이나 JPA 가 bean 이름을 헷갈려 발생하는 오류 같은데, 이를 헷갈려 하는 이유를 도통 모르겠습니다.당연히 컴퓨터 재시작, 프로젝트 clean, rebuild, 프로젝트 재생성해 시도해봤지만 모두 같은 현상이 나타납니다. 도대체 어떤 이유 때문에 이런 현상이 일어나는 걸까요...?Github repo : https://github.com/jbw9964/testing
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
학습방법 질문드립니다.
3.x 버전 업데이트 해서 구매했습니다.그럼 실습 부분은 아래에있는 3.x 버전만 보면되나요?위의 2.x 는 생략해도되나요?
-
미해결스프링 시큐리티 OAuth2
인증을 세션이 아닌 jwt로 할 경우 질문입니다.
현재 oauth2Login api를 사용해서 사용자 로그인 인증에 성공하면 인증객체가 세션에 저장되고, 이후 인가서버에 code 요청시 OAuth2AuthorizationEndpointFilter 에서도 securityContext에 저장돼있는 인증객체로 인해 인증성공으로 판단후 code를 발급합니다. 근데 세션 기반이 아닌, jwt 토큰을 받아서 검증후 인증을 처리하는 로직이라면 jwt 토큰을 검증하는 필터인 resource Server api의 필터가 OAuth2AuthorizationEndpointFilter 보다 뒤에 있기 때문에 인증객체가 없어서 코드발급을 안해줄텐데 이럴땐 어떻게 해야하나요? jwt토큰을 검증하고 인증객체를 만드는 필터를 OAuth2AuthorizationEndpointFilter 앞에 만든다고 쳐도 그러면 resource Server api의 필터와 똑같이 동작하는 필터가 생기는건데 좋은 방법인것 같진 않습니다. 어떻게 해야 하나요?
-
미해결스프링 시큐리티 OAuth2
Resouce owner 인증 전 단계 질문입니다.
클라이언트가 인가서버에게 인가코드를 요청하기 전에 사용자인증을 받기 위해 사용자 id, 비밀번호를 입력하는 단계가 먼저 거치고, 인증이 되면 인가서버에게 /oauth2/authorize url로 response_type=code ~~ 이런식의 정보를 포함해서 요청하게 되는데 그러면 사용자가 인증받을때 입력한 사용자 id, 비밀번호를 통해 인증처리를 하는건 인가서버에서 하는게 아닌건가요? 인가서버에서 하는거라면 입력한 사용자 id, 비밀번호는 어떤 필터에서 처리하는건가요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
세션클러스터링 적용후 중복로그인 체크
안녕하세요. 스프링 시큐리티 완전 정복 6.x 버전 잘 들었습니다.궁금한 점 이 있는데요.세션 클러스터링을 통해서 redis를 적용하면 세션이 tomcat -> rediss로 변경되는 부분 확인하였고, 잘 동작되는 것도 확인하였습니다.궁금한 점은 단일 서버일 때 중복 로그인 설정을 하면 session 체크를 ConcurrentSessionFilter에서 하는 것으로 알고 있는데, 세션 클러스터링을 적용하면 동시 세션을 어떻게 체크하는지 궁금하고, 이것을 제어하기 위해 설정이 추가로 필요한지 궁금합니다.단일 서버일 경우 sessionManagement를 통해서 maximumSessions(1) 인 것을 체크를 하게 되는데, 세션 클러스터링을 적용할 경우 이 값을 어떻게 공유하면서 처리하는지 궁금합니다.감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
토큰의 id값 검증
해결했습니다.
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
인증 컨텍스트 - SecurityContext / SecuriryContextHolder - 2
강의 13분 50초를 보면this.securityContextHolderStrateget.setContext(context);this.securityContextRepository.saveContext(context, request, response);두 메서드가 존재합니다.전자는 ThreadLocal에 인증객체를 저장한다라고 하셨고,후자는 세션에 저장한다라고 설명해주셨는데 개인적으로 잘 이해가 안갑니다. 차이가 무엇인지...
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Test에서 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 코드는 다음과 같이 작성했는데 다음과 같은 문제가 발생합니다. 코드를 여러번 수정하고 계속 확인하는데 고쳐지지가 않아서 질문드립니다![질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결스프링 시큐리티 OAuth2
code 를 accessToken 으로 교환시 질문입니다.
인가서버로부터 code 발급받고 이 코드를 accessToken으로 교환하기 위해 서버에 요청할때 이 순간은 인증을 못받은 상태 아닌가요? accessToken을 발급받아야 클라이언트가 인증을 받은거고 그리고 이때도 클라이언트가 인증을 받아서 authorizedClient 객체가 생기는거지 인증객체가 생기는건 아닐텐데 강의 37분30초쯤에는 code를 accessToken으로 바꿔달라는 요청할때 왜 인증객체가 생성돼있나요? authorization server api를 사용했기때문에 마지막에 위치한 인가서버 필터에 도달하기 위해 다르게 처리되는건가요?
-
미해결스프링 시큐리티 OAuth2
resouce server 질문
인가서버 설정을 하면서 인가서버에서 accessToken을 받고 이를 검증해야하기 때문에 oauth2ResourceServer api를 jwt로 설정한다고 설명하셨는데 이게 무슨 말인지 잘 모르겠습니다. oauth2ResourceServer 는 말그대로 헤더에 jwt 토큰이 있는 요청이 들어오면 이 jwt 토큰을 인가서버와의 통신으로 검증해서 인증처리를 하는 구조인건데 인가서버 설정에서 이게 왜 필요한건지 잘 모르겠습니다. user info 요청할때 클라이언트가 인가서버로 accessToken을 주면서 유저정보 달라고할때 인가서버에서 이 accessToken을 검증하는데, 이때 리소스 서버를 사용해서 검증한다는건가요? 그럼 oauth2ResourceServer api를 등록안하면 인가서버는 자체적으로 accessToken을 검증할수가 없는건가요? 인가서버와 리소스서버는 서로 다른 개념인거 같은데 인가서버를 위해 리소스서버를 써야한다는게 잘 이해가 가지 않습니다.
-
미해결스프링 시큐리티 OAuth2
자체로그인 구현시 질문입니다.
카카오, 네이버같은 소셜로그인이 아닌, 자체 로그인을 통한 검증을 구현하려고 하는데 프론트가 react 이므로 jwt 토큰을 사용한 검증을 진행하려고 합니다. 그러면 이를 구현하기 위해서 jwt 토큰을 발급하는 oauth2 authorization server와 발급한 jwt토큰을 검증하는 oauth2 Resource Server와 자체적으로 만든 시큐리티 인가서버에 code와 토큰을 요청하는 oauth2 client api를 전부 사용해야하는건가요? 즉, jwt를 통한 자체로그인 검증기능을 구현하려면 지금까지 학습한 oauth2 client + oauth2 Resource Server + oauth2 Authorization Server 3개 api를 전부 사용해 구현해야 하는건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
배포까지 완료했는데 index.html 접속이 안됩니다
어디서 잘못된걸까요?ㅜㅜ
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Kafka 통신 클라이언트 응답 질문
서비스 로직이 실행될때 Kafka 통해 이벤트를 발행하는 순간 클라이언트 응답이 성공으로 나가는데만약 이 이벤트를 처리하는 컨슈머쪽에서 실패한다고하면 클라이언트 응답은 이미 성공으로 보내졌는데실패했다는걸 어떻게 알리나요? 보상트랜잭션을 발행해서 데이터를 되돌리는건 이해가 되지만 클라이언트 응답에 대해서는 어떻게 해야될지 궁굼합니다 Ex) 주문후 재고감소 이벤트를 발행하는 순간 클라이언트 응답은 성공으로감하지만 재고감소하는 서비스에서 실패를 한다고하면?
-
해결됨코드로 배우는 React with 스프링부트 API서버
spring boot 3.3.2도 호환되나요?
spring boot 3.3.2도 호환되나요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
SQL 설치 관련
https에서 sql release까지 잘 다운로드 받았는 것 같은데 sudo yum install mysql-community-server를 하니까 이런 에러 메세지가 뜹니다...ㅠ
-
미해결Spring Boot를 활용하여 채팅 플랫폼 만들어보기
./gradlew clean build 하면 오류가 생깁니다.
FAILURE: Build failed with an exception.* What went wrong:A problem occurred configuring root project 'demo'.> Could not resolve all artifacts for configuration ':classpath'. > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.3.4. Required by: root project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.3.4 > Dependency requires at least JVM runtime version 17. This build uses a Java 11 JVM.* Try:> Run this build using a Java 17 or newer JVM.> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.> Get more help at https://help.gradle.org.Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.For more on this, please refer to https://docs.gradle.org/8.10.2/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 2s 이런식으로 자바를 17로 올려주라고 하는데, 어떻게 수정해야 할까요?ㅠㅠ 구글에 검색해봐도 vscode 쪽에서 설정하는 방법이 자세하지 않아서요..ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
간단한 주문 조회 V4 : JPA에서 DTO로 바로 조회에 대한 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]해당 강의에서 5:35초를 보시게 되면, 원래는 fetch join이 아닌 join이지만 public List<OrderSimpleQueryDto> findOrderDtos() { return em.createQuery( "select new jpabook.jpashop.repository.OrderSimpleQueryDto(o) " + " from Order o" + " join fetch o.member m" + " join fetch o.delivery d", OrderSimpleQueryDto.class ).getResultList(); }fetch join을 하게 되면 v3메서드와 동일한 결과가 나옴과 동시에 쿼리문도 동일하게 1개가 출력된 것을 확인하였습니다. 여기서 드는 의문점은' fetch join은 select절에 entity가 아닌 DTO를 명시하게 되면 안된다' 즉, 'fetch join은 select절에 entity만을 명시해야 한다' 라고 질문 글을 찾아보며 알게되었습니다. 하지만 결과는 예상과 다르게 잘 작동하여 의문이 들게 되었습니다.
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
리턴타입으로서 EntityModel<User> 와 ResponseEntity질문
이전 학습에서 /users/{Id} 에 맵핑된 retrieveUser 메소드의 리턴타입을 EntityModel<User> 로 정의했습니다.따라서 아래와 같은 리턴문으로 마쳤습니다.return entityModel; 반면, 이번 수업에서는 리턴타입을 ResponseEntity로 정의하셨고return ResponseEntity.ok(entityModel);로 마무리 됐습니다. 두 방식 모두 포스트맨에서 테스트할 때 동일한 결과를 확인할 수 있었는데요.어떤 차이로 두 수업에서 리턴타입을 구별하셨는지 궁금합니다~!