묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
59강 getProperty가 뜨지 않습니다.
어떤것 때문에 getProperty가 나타나지 않는지 이상하네요
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
뷰 관련해서 질문이 있습니닷
안녕하세요 태현님 강의 재밌게 보고 있습니다.다름이 아니고뷰를 조금 제가 생각하는 요구사항에 맞게 커스텀을 하고 싶은데 리액트 js 파일이 압축되어서 저장되어 있어서 직접 뷰까지 구성을 하신건지 뭔가 스크립트를 자동으로 구성해주는 툴을 사용하시는 건지 궁금합니다ㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 여러개 주문
안녕하세요,아래 강의 시간대에 상품 주문 여러개 하기 위해서 상품을 추가, 삭제하고 하는 부분 UI 구성 코드(validation 부분까지도여)로 남겨주실수 있을까요?강의 챕터: 상품주문시간: 7분 58초
-
해결됨스프링 프레임워크는 내 손에 [스프2탄]
page의 값이 어디서 증가하는지 궁금합니다..
29강 - 리스트에 페이지 번호 구하기를 들으면서 이해가 안가는 부분이 있어 질의 드립니다.페이지 하단에 페이지번호 출력과 각 번호를 누르면 list?page=1, list?page=2 이런식으로 웹이 이동하는 방식 같은 전체적인 프로세스는 강의를 들으면서 이해가 잘되었습니다.한가지 이해가 안가는 부분이 있는데 제목에 작성한것처럼 page의 증가가 어디서 이루어지는지를 잘모르겠습니다.정상적으로 다 작동이 잘되고 디버깅을 이용해서 page가 1 - > 2 로 값이 정상적으로 들어가있는것도 확인하였습니다.코드를 전체적으로 검토를 해봤지만 page를 따로 증가시켜주는 코드는 찾지못했는데 어디서 증가가 되는건지가 궁금합니다 ㅠㅜㅠㅠ
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
테스트 코드에서 Connection.close 메서드를 호출해주지 않아도 괜찮나요?
안녕하세요.이번 수업 시간에 테스트 코드를 통해 커넥션 예제를 보여주셨는데, 코드 상으로는 close 메서드를 호출해주지 않으셔서 질문 남깁니다.@Slf4j public class ConnectionTest { /** * DriverManager */ @Test void driverManager() throws SQLException { Connection con1 = DriverManager.getConnection(URL, USERNAME, PASSWORD); Connection con2 = DriverManager.getConnection(URL, USERNAME, PASSWORD); log.info("con1: class = {}, connection = {}", con1.getClass(), con1); log.info("con2: class = {}, connection = {}", con2.getClass(), con2); } /** * DataSourceDriverManager */ @Test void dataSourceDriverManager() throws SQLException { // DriverManagerDataSource - 항상 새로운 커넥션 획득 DriverManagerDataSource dataSource = new DriverManagerDataSource(URL, USERNAME, PASSWORD); Connection con1 = dataSource.getConnection(); Connection con2 = dataSource.getConnection(); log.info("con1: class = {}, connection = {}", con1.getClass(), con1); log.info("con2: class = {}, connection = {}", con2.getClass(), con2); } }close 메서드를 호출해주지 않아도 내부적으로 알아서 커넥션을 제거해주는 것 같은데, 혹시 이에 대한 보충 설명을 해주실 수 있을까요..?
-
미해결스프링 핵심 원리 - 기본편
getBeanDefinitionNames()관련해서 질문이요
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.컨테이너에 등록된 모든 빈을 조회할때Object bean=ac.getBean(beanDefinitionName);으로 bean을 찾았습니다.근데 밑 내용에서 스프링 컨테이너 에서 스프링 빈을 찾는 가장 기본적인 조회방법은 ac.getBean(빈이름,타입), ac.getBean(타입)으로 찾습니다.즉 매개변수를 하나로 찾으려면 ac.getBean(타입)으로 찾아야한다는 말과 같습니다.ac.getBean(beanDefinitionName)은 beanDefinitionName을 출력했을때 타입이 아니라 빈 이름인것 같은데 이게 어떻게 된걸까요?
-
미해결스프링 핵심 원리 - 기본편
제가 이해한게 맞을까요?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.제가 이해한게 맞는지 확인 좀 해주세요!스프링 빈의 이벤트 라이프 사이클은스프링 컨테이너 생성-> 스프링 빈 생성-> 의존관계 주입-> 초기화 콜백 ->사용 ...이렇게 되는데NetworkClient 예제에서는 초기화라는게 networkClient.setUrl("http ...") 이 아닌 connect() 와 call("초기화 연결 메세지") 이다즉 의존 관계 주입이후 connect와 call을 호출 하는 것이 목적이다.그렇기 때문에 @Beanpublic NetworkClient networkClient(){에서 return networkClient를 하기 전, networkCludent.setUrl(...)을 한 후에 networkClient.connect(), networkClient.call()을 한다면출력창에 찍히는 것은 같을지 몰라도 그 의미가 다르다. 왜냐하면 빈이 등록(return networkClient)이전에 호출한 함수이기 때문이다. 우리가 원하는 것은 의존관계 주입이후에 connect와 call을 하는 것이기 때문에 NetworkClient tmp=ac.getBean(NetworkClient.class);tmp.connect(); tmp.call();을 하는 것과 이론적으로 같다. 하지만 이렇게 하는게 귀찮으므로(?)1)인터페이스(InitializingBean)2)설정 정보에 초기화 메서드, 종료 메서드 지정, 3) @PostConstruct,@PreDestroy 애노테이션을 지원한다. 이게 맞나요??아 이거 뭔가 아닌것같은데 ㅠㅠ
-
미해결스프링부트 시큐리티 & JWT 강의
안녕하세요 강사님 질문이 있습니다.
loadUserByUsername 메서드를 구현하지 않아도로그인 기능, 권한 넘겨주기 다 가능할 거 같은데이 메서드가 꼭 필요한 이유가 있나요?doFilter를 안 탄다고 말씀해주셨는데전 JWT를 쿠키에 저장하는데,쿠키의 값이 없을 때 doFIlter를 그냥 빠져나가는 식으로 구현했습니다. successfulAuthentication이나, 권한을 UsernamePasswordAuthenticationToken authentication // = new UsernamePasswordAuthenticationToken(userId, null, List.of(new SimpleGrantedAuthority("ROLE_USER")));authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); SecurityContextHolder.getContext().setAuthentication(authentication); 이렇게 넣을 수 있던데 이러한 방식은 뭐가 잘못된 걸까요?문제가 생기나요?
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
mariadb 실행
mac m1 사용하고 있습니다. brew services start mariadb를 입력하면Name Status User Fileemacs nonemariadb stopped kimbongseob ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plistunbound none다른 Status 가 Started가 들어와야하는데 stopped가 들어옵니다.Can't connect to local server through socket '/tmp/mysql.sock' (2)mariadb 접속시 위와 같은 에러가 발생합니다. 기존 Mysql 사용한 적이 있어서 해당 부분 잘 삭제하고 실행 했습니다. (삭제 직접 폴더 파일 다 열어서 확인해봤는데 없었습니다.)
-
해결됨실전! 스프링 데이터 JPA
테스트 코드 오류가 뜹니다...
강의를 보면서 혼자 정말 여러 번 코드를 고쳐봤지만 도저히 원인을 알 수가 없어서 질문드립니다.https://www.inflearn.com/questions/792196/%EA%B0%95%EC%9D%98-%EB%93%A4%EC%9C%BC%EB%A9%B4%EC%84%9C-%EC%9D%91%EC%9A%A9%ED%95%B4%EC%84%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%9E%91%EC%84%B1%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94%EB%8D%B0-%EC%9E%90%EA%BE%B8-null%EC%9D%B8-%EC%83%81%ED%83%9C%EB%9D%BC%EA%B3%A0-%ED%95%B4%EC%84%9C-%EC%A7%88%EB%AC%B8%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4이 글에 대한 답변 좀 주실 수 있을까요...?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 데이터 베이스 mac사용자는 어디 서 다운 받나요?
데이터 베이스 h2 데이터 베이스 mac사용자는 어디 서 다운 받나요?
-
해결됨스프링 시큐리티 OAuth2
Ajax 인증시 AuthenticationManager 등록 문의
Spring Authorization 1.0 을 사용하여 FormLogin 이 아닌 Ajax로 로그인을 하려고 합니다.Spring Security 강의를 참조하여AbstractAuthenticationProcessingFilter를 상속하여 CustomUserDetailsService, CustomAuthenticationProvider, CustomAuthenticationProcessingFilter, CustomAuthenticationToken 구현체를 만들었습니다.CustomAuthenticationProcessingFilter는 AbstractAuthenticationProcessingFilter 상속하여 개발하였는데 Filter를 등록 하려면 강의에서 내용처럼 AuthenticationManager를 등록 해줘여 하는데 강의는 WebSecurityConfigurerAdapter 상속하여 설정 하는것으로 설명되어 있는데 Spring Securitty 6.0 에서는 삭제되었습니다.Spring Security 의 강의를 보면 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.authenticationProvider(ajaxAuthenticationProvider()); }configure(AuthenticationManagerBuilder auth)를 구현하고 @Bean public AjaxLoginProcessingFilter ajaxLoginProcessingFilter() throws Exception { AjaxLoginProcessingFilter filter = new AjaxLoginProcessingFilter(); filter.setAuthenticationManager(authenticationManagerBean()); return filter; } 질문)AjaxLoginProcessingFilter Bean 에서 설정하는데 SecurityFilterChain 를 등록하는 방식에서는 어떻게 등록해야 할지 문의 합니다.제가 구현한 소스 일부Authorization Server 설정을 다른 클래스에서 설정하였고 디버깅을 해보니 Authorization Server 용 FilterChain 과 로그인 처리용 FilterChain 이 따로 등록되어 로그인 프로세스는 Spring Security FilterChain Class 에서 진행하였습니다@Configuration는 Spring Security 6에서는 @EnableWebSecurity에 포함되지 않아 추가 하였습니다.@EnableWebSecurity @RequiredArgsConstructor @Configuration public class DefaultSecurityConfig { private final PasswordEncoder passwordEncoder; private final CustomAuthenticationProvider customAuthenticationProvider; // @Bean public CustomAuthenticationProcessingFilter customAuthenticationProcessingFilter() throws Exception { CustomAuthenticationProcessingFilter filter = new CustomAuthenticationProcessingFilter(); return filter; } // @formatter:off @Bean SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authorizeRequests ->authorizeRequests .requestMatchers(CorsUtils::isPreFlightRequest).permitAll() .requestMatchers("/login/**").permitAll() .requestMatchers("/api/registered-client/**").permitAll() .anyRequest().authenticated() ) .csrf(csrf -> csrf .ignoringRequestMatchers(new AntPathRequestMatcher("/api/registered-client/**")) ) .formLogin().disable(); http.authenticationProvider(customAuthenticationProvider); http.addFilterBefore(customAuthenticationProcessingFilter(), UsernamePasswordAuthenticationFilter.class); return http.build(); } // @formatter:on }AuthenticationManager를 등록하지 않아 예와가 발생함Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customAuthenticationProcessingFilter' defined in class path resource [com/naon/oidc/security/config/DefaultSecurityConfig.class]: authenticationManager must be specified그리고 @Bean으로 만들어 등록하면 순환참조가 됩니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Process 'command 'C:/Program Files/Java/jdk-19/bin/java.exe'' finished with non-zero exit value 1
문제 관련해서 게시판 답변들을 참고하였습니다ctrl + shitf + s -> gradle -> build and run using (gradle로 변경) & run teset using (gradle로 변경) invalidate caches -> restart gradle로 변경을하면 classNotFoundException은 발생안하는데 아래와 같은 에러가 계속 발생하네요.혹시 놓치는 부분이 있을까요?https://drive.google.com/file/d/18n2GiksxflnW0g0svZx6jq6gUFomqSPW/view?usp=sharing 혹시 몰라 아래 사진도 첨부합니다
-
미해결스프링 핵심 원리 - 기본편
NoUniqueBeanException 에러
https://www.inflearn.com/questions/776767/nouniquebeandefinitionexception-%EC%97%90%EB%9F%AC해당 글이랑 똑같은 에러, 상황인데 혹시 해결되셨나요? 답변이 없어서요 Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: rateDiscountPolicy,getDiscountPolicy
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
폼 객체 사용 질문
폼 객체를 이렇게 이해한 것이 맞는지 !! @GetMapping("/members/new") public String createForm(Model model) { model.addAttribute("memberForm",new MemberForm()); return "members/createMemberForm"; } GET 요청시 비어있는 MemberForm 객체를 모델에 담아서 뷰(템플릿)에 전달 @PostMapping("/members/new") public String create(@Valid MemberForm form , BindingResult result) {클라이언트가 폼에 작성한 필드들을 Submit 할때 POST 요청되어템플릿에서 각 필드의 값들을컨트롤러에서 넘겨준 모델의 form 객체에 set 한다 Address address = new Address(form.getCity(), form.getStreet(), form.getZipcode()); Member member = new Member(); member.setName(form.getName()); member.setAddress(address); memberService.join(member);form 객체는 이제 값이 설정되었으니 Member 객체를 생성하고 이 member 의 필드들을 form 객체에서 가져와서 set 하고 join(회원가입)을 완료한다 . 강의에서 말하는 폼 객체 vs 엔티티 직접 사용 지금은 서비스가 작아서 폼 객체를 사용하는 것이 더 번거러운 일인듯 한데 더 복잡해지면 엔티티를 유지보수하기 어려워지기 떄문에 엔티티는 화면을 위한 로직은 없어야 한다. 항상 친절한 답변 주셔서 감사합니다 !
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ScriptAssert 에러 문제
안녕하세요. 강의를 듣던중에 교안에 추가되지 않은 듯한 내용이 있는거 같아서 글 쓰게 되었습니다.< Bean Validation - 오브젝트 오류 > 파트에서맨처음에 @ScriptAssert 애너테이션을 이용하여 자바 스크립트 코드를 실행하는 내용이 있는데,현재 날짜 2023년 2월 23일 기준스프링 부트 버전 3.0.2 + java 버전 17.0.6 을 사용하여 실행시, 아래의 오류가 발생합니다. jakarta.validation.ConstraintDeclarationException: HV000170: No JSR-223 scripting engine could be bootstrapped for language "javascript".] with root cause org.hibernate.validator.spi.scripting.ScriptEvaluatorNotFoundException: HV000232: No JSR 223 script engine found for language "javascript".이유가 궁금해서 조금 찾아보니, JVM 이 지원하는 스크립트 엔진의 차이 때문에 해당 오류가 발생하는 것 같다는 글을 다수 발견했습니다.현재 jdk8 ~ jdk14의 JVM 상에서 사용되는Nashorn 엔진은 javascript를 지원하는데, jdk14 이후 버전부터는 javascript가 지원되지 않는 GraalVM 을 사용한다고 합니다.스프링 부트 3이후에는 java 17 이상을 사용하는 것이 필수조건으로 되어있기 때문에, 더는 스프링 부트 3에서는 @ScriptAssert를 이용한 자바스크립트 표현식을 사용할 수 없는 것 같습니다. 강의 내용중 크게 중요한 부분을 차지하지는 않는 것 같아서, 질문이 없는 것 같은데 확인해주시면 감사할 것 같습니다.reference :https://stackoverflow.com/questions/71481562/use-javascript-scripting-engine-in-java-17https://sinau.tistory.com/60
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
webapp index.html 웰컴페이지와 jsp 404 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 공유해주신 소스코드를 실행시키는 데는 문제가 없었는데 제가 진행하던 프로젝트에서 webapp 하위에 index.html이나 다른 jsp 파일을 폴더 경로에 맞게 넣어놔도 접근이 안되고 404에러가 뜹니다.다음과 같이 경로 모두 일치하게 넣었고, index.html 자체도 웰컴페이지로 나오지 않는걸 봐선 코드 오타 문제는 아닌 것 같습니다. (모든 코드는 혹시나 싶어 제공해주신 소스 코드에서 복붙했었습니다)한 가지 다른 점이 있다면, 저는 아래와 같은 스프링 부트 버전에서 개발했다는 건데요 plugins { id 'java' id 'war' id 'org.springframework.boot' version '2.7.7' id 'io.spring.dependency-management' version '1.0.15.RELEASE' }혹시 버전 때문에 이런 문제가 발생할 수도 있나요?버전 때문에 생기는 문제라면 나중에 혼자 개발할 때도 같은 문제가 생길 수 있을 것 같은데 구글링해보니까 내용이 잘 안나와서.. 검색 키워드나 관련 내용 참고할 수 있는 사이트가 있다면 알고 싶습니다.
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요
강사님 강의기초 + 도서관 강의 까지보고 개인 프로젝트 중에 막혀서 질문 드립니다.. ㅜㅜ 일단 개인 프로젝트 질문 드려서 죄송합니다.. 아무리 구글링해도 답이 안나오고 코틀린 같은 경우에는 계속 안드로이드 쪽만 레퍼런스가 있어서 답을 못 찾았습니다. 단순이 Entity ->Dto 변환 문제인데 @Enumrated 를 사용하지 않고 Converter를 사용해서 변환하려 하는데 아직 코틀린이 눈에 익숙하지 않아서 그런지 봐도 잘 모르겠습니다 ㅜㅜ이전 개인프로젝트에서 하던 방식과 똑같이 햇는데 안되는 이유도 궁금하고 , 혹시나 더 좋은 방법이 있다면 추천 부탁 드리겠습니다!!
-
미해결실전! 스프링 데이터 JPA
실무에서 .get() 바로 쓰지 않는다고 하시는데 그럼 어떻게 쓰이나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. Member findMember = memberRepository.findById(member1.getId()).get();실무에서 이렇게 안쓴다고 하시던데 실무에서 어떤식으로 쓰이나요?
-
미해결스프링 핵심 원리 - 기본편
ObjectProvider<MyLogger> myLoggerProvider 질문
안녕하세요 계속 고민하고 구글링하고 하다가 정리가 확실히 안되서 질문드립니다 ㅠ우선 https://www.inflearn.com/questions/743070/provider 여기에 나와있는 답변을 바탕으로 어느정도 정리가 되었습니다.하지만 여기서 드는 고민이 있습니다. 1. 그럼 LogDemoController,LogDemoService 는 @RequiredArgsConstructor 때문에 생성자에서 (두개의 클래스 안에 공통으로 있는) 필드ObjectProvider<MyLogger> myLoggerProvider를 주입받아야 되는데 ObjectProvider<MyLogger> myLoggerProvider는 .getObject()나오기 전까지 스프링컨테이너에 아무일도 안일어나는건가요?? 1번이 맞다면 대기하였다가 이 .getObject()이 실행될때 해당 빈(Mylogger)을 찾아서 반환을 해주고 그때서야 스프링컨테이너에 LogDemoController,LogDemoService 이 두개의 빈이 등록되는건가요???