묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 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 프로젝트에서 해당 라이브리를 사용하고 싶은 케이스인데 가능한가요? 감사합니다^^
-
해결됨Spring Boot JWT Tutorial
mysql 설정로 실습시
# server port #spring.server.port=8080 # data base spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3307/데이터베이스이름?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8 spring.datasource.username=유저 spring.datasource.password=비밀번호 # thymeleaf spring.thymeleaf.cache=false spring.jpa.database=mysql spring.jpa.database-platform= org.hibernate.dialect.MySQL8Dialect # spring data jpa spring.jpa.properties.hibernate.dialect.storage_engine=innodb spring.jpa.show-sql=true spring.jpa.open-in-view=false spring.jpa.hibernate.ddl-auto=create spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.show_sql=true spring.jpa.defer-datasource-initialization= true spring.sql.init.mode= always logging.level.org.silvernine=DEBUGplugins { id 'java' id 'org.springframework.boot' version '3.1.5' id 'io.spring.dependency-management' version '1.1.3' } group = 'NewYear' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.testng:testng:7.1.0' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' implementation 'mysql:mysql-connector-java:8.0.29' // implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.29' runtimeOnly 'mysql:mysql-connector-java' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('bootBuildImage') { builder = 'paketobuildpacks/builder-jammy-base:latest' } tasks.named('test') { useJUnitPlatform() } mysql에 정상적으로 connection이 되는 데 Entity에서 테이블 생성을 못하는 거 같습니다.따로 오류는 없고, 테이블이 생성이 안됩니다.data.sql에서 따로 테이블을 생성하는 구문을 넣으면 테이블과 컬럼값들이 제대로 들어가는 데 Entity에선 테이블을 자동으로 생성하지 못합니다.무엇이 문제일까요? ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 파일을 실행시켰을때 결과화면
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.h2데이터베이스에 잘 실행이 되는것을 확인했는데 강사님 화면처럼 insertinto ~~이런식으로 안떠서 뭐가 문제인건가요??
-
미해결토비의 스프링 부트 - 이해와 원리
Environment Abstraction 의 우선순위
섹션8의 Environment 추상화와 프로퍼티 제목의 강의의 막바지 부분에서 Environment Abstraction 의 우선순위에 대한 내용이 나옵니다. 강의 내용을 요약해보자면 ServletConfig Parameter < ServletContext Parameters < JNDI < System Properties < System Environment Variables < @PropertySource < application.properties, xml, yml 대로 오른쪽으로 갈 수록 우선순위가 높다라고 이해를 했습니다. 우선 저는 System Properties가 jvm 옵션을 말하는건가? 라는 생각을 가지고 들었고 그렇게 생각하고 위의 내용을 보니 jvm option의 우선순위가 os의 환경 변수보다 높아야 되는거 아닌가? 라는 궁금증이 생겼습니다. 제목 그대로 우선순위에 대한 내용에 오류는 없는것인지 궁금합니다.++ 질문 수정"자동 구성에 Environment 프로퍼티 적용" 강의를 들어보니 우선순위를 제가 반대로 이해한것 같습니다. 여기서 추가적으로 궁금증이 생겼습니다.저는 application level의 설정이 더 우선해야 되는 것 아닌가? 라는 생각에application property > jvm property > os level property 라고 생각을 했습니다. 하지만 스프링에서는jvm property > os level property > application property의 우선순위를 가지게 한 것 같은데 그 이유가 무엇일까요?이것에 대한 생각이 어떠신지 궁금합니다.그리고 우선순위의 변경을 원한다면 바꿀 수 있도록 스프링이 제공하는지도 궁금합니다! 감사합니다.=======================제가 강의 내용을 끝까지 안듣고 궁금한것을 적었는데..질문을 남기고 나머지 강의를 들어보니 궁금했던 내용이 해소가 됐네요. 자문 자답하자면, application의 설정을 default로 하되, 어떤 환경에서 어떤 사용자가 사용하냐에 따라 설정이 달라질 수 있어야 하기 때문에 jvm, os level의 property보다 우선순위가 낮아야 할 것입니다. 이왕 글을 남긴거 삭제하기 뭐해서 남겨두겠습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 데이터베이스 연결할 때 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 궁금한 점이 생겨 질문 드립니다.jdbc url도 다 연결이 되고 test.mv.db도 있었습니다. 그런데 7분 이후의 과정을 따라가려 하니 그 다음단계를 진행하려고 할 때마다 연결이 끊어져 매번 del을 해주고 있는데 매번 이래야 하나요?? 아니면 연결이 끊어지는 특정 조건이 있는 건가요? 감사합니다!
-
미해결스프링 배치
안녕하세요. 신규 강의 관련
해당 강의와 관련된 질문은 아니지만 동시성 관련 강의 오픈 메일에 링크가 이쪽으로 연결이 돼서요.11/21~28 오픈 예정이라고 하셨는데 혹시 오픈일정을 알 수 있을까요?