묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
File is read only 해결을 못하겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]자물쇠 해결도 해보았고, File - File properties- Make file Writable도 해보았으나 해결이 안됩니다
-
미해결스프링 부트 - 핵심 원리와 활용
Actuator를 Auto scaling 구조에서 Prometheus 모니터링 지표 수집은 어떻게 되나요?
안녕하세요 Actuator Prometheus 공부를 하면서 의문이 하나 생겨 질문 드립니다! 1개의 서버의 Spring application에서 Prometheus 수집하는게 아닌 분산환경에서 actuator를 Prometheus에 연동해도 Grafana에 수집 되는 metric이 알맞은 지표로 수집되는지 궁금합니다! 만약 아니라면 어떤식으로 구성해야되는지 궁금합니다.
-
해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
테스트코드 질문드립니다.
안녕하세요, 강사님.강사님 덕분에 항상 코틀린 공부 재미있게 하고 있습니다!getUserLoanHistoriesTest2 테스트 코드 관련해서 질문드립니다.제가 강의를 보기 전에 혼자 작성해보았던 코드는 아래와 같은데요.// given val savedUser = userRepository.save(User("A", null)) savedUser.loanBook(Book.fixture("book1")) savedUser.loanBook(Book.fixture("book2")) savedUser.loanBook(Book.fixture("book3")) savedUser.returnBook("book3") userRepository.save(savedUser)테스트는 통과가 되는데, 위와 같이 해도 테스트 코드로서 의미가 있는지, 그런면에서 userLoanHistoryRepository.saveAll()을 사용하는 것이 더 적절한 건지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
간단한 질문이지만 궁금하여 해봅니다..
간단한 질문이지만 궁금하여 해봅니다회원서비스 테스트 강의에서 중복 회원 예외 메소드안에서try catch문을 통한 예외를 잡는 구문인데요.오류의 결과중에org.opentest4j.AssertionFailedError: expected: "이미 존재하는 회원입니다.123123" but was: "이미 존재하는 회원입니다"Expected :"이미 존재하는 회원입니다.123123"Actual :"이미 존재하는 회원입니다"라고 저는 뜨지만,강의에서는 Expecting:<"이미 존재하는 회원입니다.">to be equal to:<"이미 존재하는 회원입니다.123123">but was not. 이런식으로 저의 오류와 반대로 나오는데이것이 버전이 up되면서 바뀐건가요 아니면 설정을 따로 안한게 있을까요?갑자기 궁금하여 질문드립니다.감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2.bat 실행 안됩니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요. h2.bat이 실행이 안됩니다 여기에 질문 다 찾아보고 했는데도 안됩니다cmd입력도 깜빡이고 console 은 아예 실행도 안됩니다 도와주세요파일에서 열면 이거 뜨고요cmd에서 하면 이렇게 깜빡이다가 안떠요 이건 bat 파일 내부입니다 *1.4.200버전도 해봤습니다IntelliJ 실행해서 오류가 나는건가요?근데 끄고 bat 실행해도 안됩니다
-
해결됨스프링 시큐리티
SessionCreationPolicy의 IF_REQUIRED와 NEVER 속성에 대해서
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. IF_REQUIRED의 설명 중 "필요시"라고 되어있는 부분이 있는데 어떤 상황이 "필요시"에 해당할까요??NEVER의 설명 중 스프링 시큐리티가 생성하지 않지만 "이미 존재"하면 사용이라고 써놓으셨는데, 애초에 생성하지 않았는데 어떻게 이미 존재할 수 있나요??
-
미해결스프링 배치
ItemStream의 open 메서드 관련 궁금합니다
안녕하세요 강사님~먼저 질좋은 강의를 만들어주셔서 감사합니다 :)ItemStream 관련 궁금증이 생겨 질문드리게 되었는데요!public void open(ExecutionContext executionContext)위 메서드의 ExecutionContext 는 Step의 ExecutionContext 로 이해했습니다.그런데 Step 중간에 오류가 발생할 경우. 전체 Job이 실패하고.JobExecution & JobExecutionContext 가 새로 생성되며, 해당 Step의 StepExecution & StepExecutionContext 또한 새로 생성되어. 재시작전의 StepExecutionContext 에 저장해둔 index 는 꺼내어 사용 못하는게 아닌가요..?!재시작 후에 ExecutionContext 에서 index를 가져올 수 있는 부분이 헷갈립니다ㅜ추가로 index 예제는 ItemStream 통한 복구대비를 해두어. 재시작시 오류가 발생한 Chunk의 item부터 이어서 처리할 수 있었는데요.ItemStream 없이 ItemReader 만 사용할 경우는 트랜잭션 커밋되어 반영된 Chunk 가 있어도 무시하고 처음 Chunk 부터 다시 작업을 하게되는걸까요?
-
해결됨토비의 스프링 부트 - 이해와 원리
안녕 하세요~~
강의 내용과 관련 없는 내용이기는 한데...너무 궁금한게 있어서요~~토비님은 스프링으로 실무를 하실 때 테스트를 어떻게 하시나요?컨트롤러, 서비스, 도메인 그외 등등 있을 때각자 다 테스트를 하시는지...고전파로 하시는지 런던파로 하시는지...좀 궁금합니다~~ 감사합니다
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
jpa 1:n 조인
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]일대다 관계의 테이블에서 조인을 하면 데이터가 뻥튀기 되는건 당연한건데 이걸 자바 객체 입장에선 리스트로 어차피 한번에 다 들고있으니까 뻥튀기가 될 필요가 없다고 생각하면 될까요 ? (그래서 distinct를 사용하고 )
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradlew.bat 파일이 안보입니다. 또한 어떻게 실행해야될지 감이안잡히네요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]gradlew.bat 위치는 인텔리제이 상에서 C:\test\hello-spring\hello-spring 있다고는 하는데 폴더에 없어요
-
미해결스프링 시큐리티
접근이 거부되었습니다. 예외가 발생합니다.
5) 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (2) 강의 관련 질문입니다. 참고로, 현재 SecurityConfig 파일이 파일명으로 구분해서 Ajax 인증용과 폼인증 두개 입니다.문제는 로그인까지 성공하고 /mypage 로 들어가면 접근 거부 예외가 생깁니다.'org.springframework.security.access.AccessDeniedException: 접근이 거부되었습니다.' SecurityConfig , AjaxSecurityConfig 설정파일명으로 구분했고 마지막에 설정 코드도 올렸지만 authenticationManager 같은 Bean 메서드들도 이름으로 구분했습니다. 사용자정보, 권한정보등 제대로 갖고 왔는데 어디가 잘못된건지 잘모르겠네요..혹시 시큐리티 설정파일에서 서비스 클래스 두가지를 사용해서 그런지 의심도 되고 그렇네요..private final SecurityResourceService securityResourceService;private final UserDetailsService userDetailsService; 아래에 도움이 될까 해서 디버깅화면 캡쳐해서 올렸습니다.감사합니다. AbstractSecurityInterceptor 클래스UrlFilterInvocationSecurityMetadataSource 클래스 RoleVoter 클래스ExceptionTranslationFilter 클래스FormAccessDeniedHandler 클래스AccessDeniedException 클래스 웹페이지에는 흰 배경만 나타나고 302 코드를 반환하네요.Request URL:http://localhost:8080/mypageRequest Method:GETStatus Code:302Remote Address:[::1]:8080Referrer Policy:strict-origin-when-cross-orig 시큐리티 설정파일 @Configuration@RequiredArgsConstructor@Order(1)public class SecurityConfig { @Bean public WebSecurityCustomizer configure() { return (web) -> web.ignoring().mvcMatchers( "/css/**", "/js/**", "/error" ); } private final AuthenticationConfiguration authenticationConfiguration; private final AuthenticationDetailsSource authenticationDetailsSource; private final AuthenticationSuccessHandler formAuthenticationSuccessHandler; private final AuthenticationFailureHandler formAuthenticationFailureHandler; private final SecurityResourceService securityResourceService; private final UserDetailsService userDetailsService; public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/", "/users", "user/login/**", "/login*").permitAll() .antMatchers("/mypage").hasRole("USER") .antMatchers("/messages").hasRole("MANAGER") .antMatchers("/config").hasRole("ADMIN") .anyRequest().authenticated() .and() .exceptionHandling() //.accessDeniedPage("/denied") .accessDeniedHandler(accessDeniedHandler()) .and() .addFilterBefore(customFilterSecurityInterceptor(), FilterSecurityInterceptor.class) ; http .formLogin() .loginPage("/login") .loginProcessingUrl("/login_proc") .authenticationDetailsSource(authenticationDetailsSource) .defaultSuccessUrl("/") .successHandler(formAuthenticationSuccessHandler) .failureHandler(formAuthenticationFailureHandler) .permitAll() ; //http.csrf().disable(); return http.build(); } public FormAuthenticationProvider formAuthenticationProvider() { return new FormAuthenticationProvider(userDetailsService, passwordEncoder()); } @Bean public AccessDeniedHandler accessDeniedHandler(){ FormAccessDeniedHandler accessDeniedHandler = new FormAccessDeniedHandler(); accessDeniedHandler.setErrorPage("/denied"); return accessDeniedHandler; } @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception { ProviderManager authenticationManager = (ProviderManager) authenticationConfiguration.getAuthenticationManager(); authenticationManager.getProviders().add(formAuthenticationProvider()); return authenticationManager; } @Bean public FilterSecurityInterceptor customFilterSecurityInterceptor() throws Exception { FilterSecurityInterceptor filterSecurityInterceptor = new FilterSecurityInterceptor(); filterSecurityInterceptor.setSecurityMetadataSource(urlFilterInvocationSecurityMetadataSource()); filterSecurityInterceptor.setAccessDecisionManager(affirmativeBased()); filterSecurityInterceptor.setAuthenticationManager(authenticationManager(authenticationConfiguration)); return filterSecurityInterceptor; } public AccessDecisionManager affirmativeBased() { AffirmativeBased affirmativeBased = new AffirmativeBased(getAccessDecisionVoters()); return affirmativeBased; } private List<AccessDecisionVoter<?>> getAccessDecisionVoters() { return Arrays.asList(new RoleVoter()); } /** * 자원/권한 정보를 저장하고 있는 클래스를 빈으로 생성 * @return * @throws Exception */ @Bean public FilterInvocationSecurityMetadataSource urlFilterInvocationSecurityMetadataSource() throws Exception { return new UrlFilterInvocationSecurityMetadataSource(urlResourcesMapFactoryBean().getObject()); } private UrlResourcesMapFactoryBean urlResourcesMapFactoryBean() { UrlResourcesMapFactoryBean urlResourcesMapFactoryBean = new UrlResourcesMapFactoryBean(); urlResourcesMapFactoryBean.setSecurityResourceService(securityResourceService); return urlResourcesMapFactoryBean; }}
-
미해결실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD
API 테스트로 전환하기
해당 영상 내에서 굳이 var 타입을 사용하신 이유를 알 수 있을까요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 학습 전 자바를 어디까지 해야 할지
안녕하세요 지금 자바를 공부하고 있는데요이것이 자바다 2권을 공부 중인데 어디까지 공부해 두는 게 좋을지 궁금합니다2권 목차에멀티 스레드, 제네릭, 람다식, 컬렉션 프레임워크, 스트림과 병렬 처리, JavaFX, IO입출력/네트워킹, NIO 입출력/네트워킹이렇게 있는데 예전에 다른 곳에서 질문했을 때는 JavaFX랑 NIO 입출력/네트워킹 빼고 다 공부하면 된다고 들었었는데 맞나요? JavaFX는 필요 없을 것 같긴 한데, NIO는 굳이 공부 안 해도 상관없는 건가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
시간 추출 실행 결과
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.시간추출을 했는데 (MemberServiceTest 실행)강사님과 다르게 이렇게 나옵니다회원 목록 조회나.. 회원가입을 해도 따로 추가되는 시간측정값이 없어요
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
jwt 토큰 인증 시 Authentication 객체를 SecurityContext에 저장하는 건 이해했는데
최초 로그인 시에 Authentication 객체를 저장하는 이유가 이해되지 않아 질문드립니다..로그인 요청을 하면 사용자 인증 정보를 통해 확인 후 응답 헤더에 토큰을 실어서 반환하고Stateless 설정으로 인해 요청/응답이 끝남과 동시에 세션이 비워지는 걸로 이해했는데,토큰만 응답헤더에 실어서 보내면 끝인데 세션에 Authentication 객체는 저장 안 해도 상관 없지 않나 하는 의문이 들었습니다.. 설명해주시면 감사하겠습니다!
-
미해결스프링 시큐리티
vue같은 프런트 엔드 프레임워크를 사용할 때는 CSRF 토큰을 어떻게 설정하나요?
코드를 보면 타임리프가 만들어준 CSRF를 meta 태그로 전달하는데 이를 서버쪽에서 만들어주는 html 파일을 통해 브라우저에 전달하는데요.Vue 같은 프런트 엔드 프레임워크를 사용하면 Web Server를 별도로 띄워서 정적파일을 관리하는데 이런 상황에선 타임리프가 정적파일에 CSRF 토큰을 심어줄 수 없는 구조라고 생각이 됩니다.이런 경우에는 CSRF 공격을 어떻게 막을 수 있나요?제가 생각나는 건 이 두 가지네요.. Web Server에서 요청 프록시를 해주고(Reverse 프록시) Web Server에서 CSRF 토큰을 관리한다.CSRF 토큰이 필요한 곳은 정적파일을 WAS에서 관리한다.좋은 방법이 있을까요?
-
미해결스프링 부트 - 핵심 원리와 활용
[애플리케이션] 초기화의 의미!
[애플리케이션] 초기화도 결국에는 서블릿을 등록하는 것인데, 왜 굳이 [애플리케이션]이라는 용어를 썼을까요?저 같으면, 그냥 [서블릿 컨테이너 초기화의 또 다른 방법]이라고 설명을 했을텐데....여기서 말하는 애플리케이션의 의미는 무엇인가요??
-
해결됨토비의 스프링 부트 - 이해와 원리
안녕 하세요
우리가 스프링 부트를 사용할 떄 dispatcher랑 factory를 등록하는 것 없이 사용 가능한데spring boot starter web 라이브러리를 추가 하면 자동으로 등록되는 거죠??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 주문 submit 버튼 누룰 시 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported https://drive.google.com/file/d/1SPT29SzTIZ-E-f3aJrRZ8IvxPyXhJVtR/view?usp=sharing
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
DB Table 생성, 데이터 입력 외래키 생성 문의
DB table 생성, 데이터 입력 문의jdbc 연결 부분에서 계속 문제가 발생해 maridb 버전을 5점대로 다시 깔고 지금 학습 중입니다. 영상에서 cust_info 테이블에 cust_id를 unique 키로 만들면 외래 키가 만들어지는데 전 안 만들어져서 문의 드립니다?