묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
HATEOAS 3단계 적용 질문입니다 !
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-hateoas</artifactId> </dependency>섹션 4 Level3 단계의 REST API 구현을 위한 HATEOAS 적용에서 오류가 발생했습니다.retrieveAllUsers@GetMapping("/users") public List<User> retrieveAllUsers() { return service.findAll(); }전체 조회 메서드는 잘 작동이 되는데retrieveUser @GetMapping("/users/{id}") public EntityModel<User> retrieveUser(@PathVariable int id) { User user = service.findOne(id); if (user == null){ throw new UserNotFoundException(String.format("ID[%s] not found", id)); } EntityModel<User> entityModel = EntityModel.of(user); WebMvcLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers()); entityModel.add(linkTo.withRel("all-users")); return entityModel; }이런 오류가 발생했습니다.어떻게 해결해야 할까요?
-
미해결토비의 스프링 부트 - 이해와 원리
@JdbcTest 관련 질문
안녕하세요. 섹션 10. 스프링 부트 자세히 살펴보기에서스프링 부트의 자동 구성과 테스트로 전환하는 부분 보다가 궁금증이 생겨서 질문남깁니다. @HellobootTest를 @JdbcTest 또는 @SpringBootTest로 전환하는 부분에서 @JdbcTest같은 경우는 내장된 테스트용 db로 교체를 한다. 라고 설명을 해주셨습니다. 그리고 이전 강의에서 테스트를 위해 인메모리 db인 h2를 사용하도록 application.properties에 설정을 하고 테스트를 진행했었습니다. 여기서 질문은 @JdbcTest를 사용하면 교체된다고 하는 db가 기존에 사용했던 h2 DB가 아닌 또 다른 DB로 전환된다는 말씀인건지가 헷갈려서 질문드립니다. 구체적으로 JdbcTemplateTest class가 jdbcTemplate을 테스트하기 위해 hello table을 db에 생성하고 insert하는 작업을 할 때, @HellobootTest 일 때는 h2 db를 사용하고 @JdbcTest로 교체했을 때는 다른 embedded db를 사용하는건가요? 감사합니다!
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
스프링 시큐리티 최신버전 코드 있을까요?
제일 최근에 질문한 글 참고해도 적용이 안되네요...혹시 현재 버전에서 적용 가능한 코드가 있을까요?아니면 참고할 수 있는 자료라도 있을까요? https://start.spring.io/ 에서 gradle로 생성해서 사용중입니다. 스프링 3.2버전 사용하고있어요.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest 실행문제
소스파일https://drive.google.com/file/d/1Laef4VrgEfQ0--86aUf1ENR9yi4LSwXF/view?usp=sharing강사님이 하신대로 따라하는 중인데 처음 MemberRepositoryTest를 실행할 경우 테스트가 통과됩니다. 이후 @Rollback(false)를 추가해서 실행할 때부터 에러가 납니다. h2 DB를 삭제하고 처음부터 다시 해봐도 똑같이 처음 한번은 통과하고 그 다음부터 에러가 납니다. 아래는 로그 전문입니다. https://drive.google.com/file/d/1sLImPcsiNvBY04ZOmBWe6fVansFaWWPi/view?usp=sharing
-
미해결스프링 시큐리티
연결 부분
이런 내부 인증 과정을 세세하게 알 수 있어서 너무 좋습니다..근데 중간에 브레이킹 포인트 찍을 때 장면이 생략이 되서 중간 중간 부분이 아는 사람만 알게 넘어간 것 같아서 질문 드립니다.. 1)AbstractAuthenticaionProcesingFilter 해당 filter 에 attemptAuthentication 가 추상 메서드로 있는 상태에서 this.attemptAutehnticaion 했을 때 어떻게UsernamPasswordAutenticationFilter에 구현 된 attemptAutentication이 실행 되는지 2) UserNamePasswordAuthenticationFilter에서return this.getAuthenticationManager().authenticate(authRequest); public interface AuthenticationManager { Authentication authenticate(Authentication authentication) throws AuthenticationException; }impementation이 5개가 있는데 왜 ProviderManager 클래스로 넘어갈 수 있는 건가요? 3) ProviderManager에서 해당 인증을 처리할 수 있는 Provider인 DaoAuthenticationProvider에서 createSuccessAuthenticaion까지 가는 과정을 알 수 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
단축키 오류 Cannot perform refactoring. Unknown expression type
Cannot perform refactoring. Unknown expression type Ctrl + Alt + V 단축키를 누르면 위와 같은 오류가 납니다.어떻게 해야할까요?
-
미해결스프링 시큐리티 OAuth2
인가서버에 login post요청
안녕하세요?상태 :client server에서 고객 아이디와 비번을 client server controller로 보내서여기서 restTemplate를 이용하여,localhost:8081/oauth2/authorization/springoatuh2로 get mapping하여 login page를 얻어왔습니다.여기서다시 한번 restTemplate을 이용하여 localhost:9000/login 으로post 요청을 하면서 body (multipart/form-data) 에 username, password, _csrf(로그인페이지에 있는) 값을 보내어 access token을 받으려고 하였는데,null을 리턴받았습니다. response header 에 Location은 localhost:9000/login이 되었습니다.이유는 쿠키가 전달되지 않아서 그랬습니다. 그래서, 첫번째 restTemplate으로 부터 받은 response에서쿠키를꺼내서 두번째 restTemplate에 담아서 같이 보냈더니 localhost:9000/으로 response header Location이 잡혔습니다. 그래서, 인가서버에서 다음상황으로 그러니까 client server로 code를 전달해주는 과정으로 넘어가지가 않고 멈추었습니다. 인가서버 log level을 oauth2로 잡고 디버그해보았을때 로그인이 되어있고, redirect uri 가 `/` 로 되어있음도 확인하였습니다. postman으로는 두 요청을 보내었을때 성공적으로 accesstoken을 받았는데,질문 :직접 client server의 controller에서 보낼때는 실패하는 이유가 무엇일까요?뭔가 더 필요한 정보가 있을까요? state, nonce 와 같은 값들을 넣어주어야 할까요?긴글 읽어주셔서 감사합니다.
-
해결됨Spring Boot JWT Tutorial
/api/hello에 접근이 안됩니다 ㅠㅠ
package NewYear.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; //기본적인 웹 보안을 활성화 하는 어노테이션 @Configuration @EnableWebSecurity @EnableMethodSecurity public class SecurityConfig { @Bean public WebSecurityCustomizer configure() { return (web) -> web.ignoring() .requestMatchers(new AntPathRequestMatcher("/h2-console/**")) .requestMatchers(new AntPathRequestMatcher("/favicon.ico")); } @Bean public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { return httpSecurity .csrf(AbstractHttpConfigurer::disable) .authorizeHttpRequests((registry) -> registry.requestMatchers(new AntPathRequestMatcher("/api/hello")).permitAll() .anyRequest().authenticated() ) .build(); } } @EnableWebSecurity를 비활성화도 해보고 커뮤니티에 올라온 코드로 다 해봤는 데 접근이 401에러로 접근이 안되는 것 같습니다 ㅠㅠ 해결방안이 있을까요 스프링부트 버전은 3.2.0입니다
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
findByName 메서드
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]findByName 메서드 리턴값이 result.stream().findAny(); 인데 findFirst()가 아닌 findAny()를 사용하신 이유가 뭔가요? 둘중 아무거나 사용해도 상관없을까요?
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
어떻게 생성자 없이 number1과 number2에 값이 할당된건지 모르겠습니다.(DTO관련)
안녕하세요 강사님먼저 첫번째 질문은 DTO (CalculatorMultiplyRequest request)를 매개변수로 받는 데, 자동으로 request 인스턴스가 생성되는 것이 이해가 가지 않습니다. 클래스는 생성자를 호출하기 위해서는 new키워드로 생성해야 하는 것으로 알고있는데, 이해가 잘 되지 않습니다.두번째 질문은 GET요청과는 다르게 POST요청은 Request 클래스 내부에 생성자 없이도 number1과 number2에 값이 할당되는 점입니다.어떻게 이게 가능할 수 있죠..?
-
해결됨1시간만에 끝내는 spring boot rest api 서비스 개발
마이바티스 - 해쉬맵
안녕하세요! 강의 잘듣고있습니다! 마이바티스 설정관련 parameter를 1개임에도 불구하고 HashMap으로 감싸서 보내는데 원래 마이바이스트 매개변수 넘길때 보통 해쉬맵으로 감싸서 보내나요?또한가지 만약 넘겨줄 매개변수가 Object 타입 (id,username....), String 타입 2가지 혹은 그 이상인 경우에도 해쉬맵에 Object도 매핑해서 보내준 후 #{objec명.필드명} 이런식으로 빼쓰나요?
-
미해결스프링 시큐리티
anyRequest().authenticated() 접근 안 됨
@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{ http .authorizeHttpRequests(authorize -> authorize .anyRequest().authenticated() ) ; return http.build(); }이런 식으로 설정을 했는데 아예 권한이 없어서(?) 접근이 안되는 403 에러가 나네요.. 해당 부분은 SecurityConfig 설정 하는 방법이 변경 되어서 나는 다른 점일까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
test results가 안뜹니다.
강사님처럼 이렇게 뜨는 것이 아니라 이렇게 뜨는데 묘하게 거슬려서요.. 따로 설정해야하는 부분인가요?
-
해결됨토비의 스프링 부트 - 이해와 원리
스프링 부트 2.x 버전 지원 중단
안녕하세요! 최근에 강의를 수강하게 된 학생입니다.다름이 아니라 강의에서 말씀해주신 SpringBoot 2.7.6 버전을 설치하려고 하는데 start.spring.io에는 3.x버전들 밖에 보이지 않더라고요. 그래서 spring-cli를 사용해서 설치하려고 했으나 Initializr service call failed using 'https://start.spring.io' - service returned Bad Request: 'Invalid Spring Boot version '2.7.6', Spring Boot compatibility range is >=3.1.0'라는 문구와 함께 설치가 되지 않아 공식 깃허브를 찾아보았더니 2.x 버전에 대해서는 지원이 중단되었다고 적혀있었습니다.https://github.com/spring-io/start.spring.io/issues/1357Commercial support에 대해서는 25년까지 가능하다고 되어있는데, Commercial support(유료 지원?)이라는 것이 정확하게 어떤 것인지 이해가 잘 되지 않습니다. 그렇기에 Commercial support와 SpringBoot 3.1.6 버전을 설치하는 것 둘 중에 어떤 것이 더 나을지 질문드립니다ㅠㅠ 감사합니다!
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
권한처리를 위한 세션강제주입
/api/admin 요청 시 권한만을 체크하기 위해 id 와 role 만 있는 객체를 시큐리티세션에 저장했다고 하셨는데만약 username 이나 email 이 필요한 경우라면 그 로직도 BasicAuthenticationFilter 를 상속받은 필터에서 doFilterInternal() 메서드 안에서 강제주입을 할때 username 과 eamil을 가져와서 시큐리티 세션에 강제주입하는건가요 ?
-
해결됨장애 없는 서비스를 만들기 위한 Resilience4j - CircuitBreaker
컨테이너 환경에서의 circuitbreaker 상태 전파 방식 질문
안녕하세요~ 여러 대의 서버가 컨테이너 환경에서 실행될 때, 모든 서버의 서킷 브레이커 상태를 실시간으로 자동 전파하려면 어떻게 해야 할까요?
-
해결됨스프링 시큐리티 OAuth2
마지막 장 front end 에서 리소스 서버 직접 요청
안녕하세요. 선생님어느덧 마지막장이네요.한가지 질문이 있네요.사용자에 대한 엑세스 토큰을 발급 받기 위해 사용자가 로그인 링크를 클릭해서 클라이언트 서버에 로그인 요청하면 클라이언트 서버에서 임시코드를 발급 받기 위한 인가서버 요청 url을 만들어 사용자 브라우저로 redirect 하고, 인가서버의 로그인 화면에서 로그인을 하게 되면 인가서버는 임시코드를 parameter 로 넣어서 클라이언트로 redirect 되어, 최종 클라이언트 서버가 사용자에 대한 엑세스 토큰을 인가서버에 요청하여 발급 받잖아요? 그리고 클라이언트 서버가 그 엑세스 토큰을 관리하게 되고..그러니까 클라이언트 서버가 대신 요청? 그런데 마지막장에 리소스 서버에 자원을 요청하는데.. 클라이언트 API 서버가 요청하는 것도 있고.. frond end 자바스크립트에서 클라이언트 서버를 경유하지 않고 직접 리소스 서버에 자원을 요청하는 예제가 있네요.실무에서는 이렇게 frond end 단에서 직접 리소스 서버로 요청하기도 하는지요?front end에서 클라이언트 API 서버에 요청을 하여 사용자 정보를 가져와 보여주는 식으로 구현해야 하는 것인지? 아니면 front end에서 직접 리소스 서버에 토큰 들고 요청하여 사용자 정보를 가져와 보여주는 식으로 구현해야 하는지? 실무에서 어떻게 구현하는지 알고 싶네요.
-
미해결스프링 배치
writer에서 다시 processor 호출 질문 드립니다.
질문 드립니다. processor의 return 형식이<A, B> 일 때 processor에서 A를 받아 B로 가공하여 return 하는데 이 때 B말고 다른 C도 함께 writer로 return이 가능한가요? step을 구성할 때 reader -> processor -> writer 순서인데 writer까지 진행된 이후 write 한 객체로 다시 processor 혹은 reader -> writer 등을 진행하고 싶을 땐 어떻게 해야 할까요? processor에서 조건을 사용하여 reader를 호출 하고 있는데 reader를 bean으로 생성하지 않고 reader.read(); 와 같은 방식으로 호출하는데 이 방식이 옳바른 방식인가요?
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Validation Map -> 어떻게 변경하는게 좋은지 궁금합니다.
안녕하십니까. 데이터 검증2 를 듣다가 궁금한점이 생겨서 질문을 남기게 되었습니다. @Getter @RequiredArgsConstructor public class ErrorResponse { private final String code; private final String message; private final List<Validation> validations = new ArrayList<>(); public void addValidation(String fieldName, String errorMessage) { this.validations.add(new Validation(fieldName, errorMessage)); } private record Validation(String fieldName, String errorMessage) { } } @Test @DisplayName("/posts 요청시 title 값 필수.") void test2() throws Exception { mockMvc.perform(post("/posts") .contentType(MediaType.APPLICATION_JSON) .content("{}") ) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.code").value("400")) .andExpect(jsonPath("$.message").value("잘못된 요청입니다.")) .andExpect(jsonPath("$.validations[0].errorMessage").value("title을 입력해주세요.")) .andExpect(jsonPath("$.validations[1].errorMessage").value("content를 입력해주세요.")) .andDo(print()); } 일단 Map -> List<Validation> 방식으로 수정해보았는데요@Setter @Getter @ToString public class PostCreate { @NotBlank(message = "title을 입력해주세요.") private String title; @NotBlank(message = "content를 입력해주세요.") private String content; }테스트 코드에서 0번째 에러메시지가 title을 입력해주세요 가 될 줄 알았는데 content를 입력해주세요 가 나와서 실패했습니다. (PostCreate 필드 순서대로 validations에 담길 줄 알았는데 예상되로 나오지 않았습니다.) -> 테스트 할 때마다 결과가 뒤죽박죽 이네요. 이러한 경우 어떻게 테스트 하는지 궁금합니다.또한 이렇게 만약 여러 error field가 잡히거나, 에러 메시지가 바뀌는 경우가 생기면 테스트 코드 수정이 빈번해 질 것 같은데 어떻게 해결할 수 있을지 궁금합니다.마지막으로 List<Validation> 방법 말고 조금 더 많이 쓰이는 ? 혹은 괜찮은 방법 있으면 추천해주시면 감사하겠습니다.
-
미해결스프링 부트 - 핵심 원리와 활용
라이브러리 스프링 빈 등록시 타 라이브러 사용 문의
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 표제와 같이 라이브러리 등록에 관해 궁금한점이 있어서 문의 드립니다.예제에서 메모리 기능 관련하여 기능을 구현후에 라이브러리로 만든 파일을 사용자가 import하는 예시를 들어주셨는데요. 혹시 협업 과정에서 누군가가 메모리 기능을 구현해야 하는데 해당 메모리 기능 중에서 import 될 프로젝트에서 특정 기능을 불러와서 사용해야 한다면 어떠한 방법으로 접근가능한가요??Main 프로젝트의 기능(특정 데이터 또는 서비스 호출)을 메모리 라이브러리에서 사용하고(Main프로젝트 없이) 별도로 개발 후(메모리 라이브러리)에 Main 프로젝트에서 해당 라이브리를 사용하고 싶은 케이스인데 가능한가요? 감사합니다^^