월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
감사합니다~
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요~p88 에서 오타를 발견하였습니다. @pathvariable 이 설정이 안되어 있어서 인텔리제이에서 컴파일 오류가 납니다~물론 제가 완전 초보라 잘못하고 있어서 그럴 수도 있겠지만요~감사합니다!
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
빌더패턴 사용시 연관관계ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
안녕하세요 ㅠㅠ 빌더패턴 사용시 이런식으로 구성하려고하는데요. 이렇게해서 INSERT를 하면 NULL로 받습니다. 그래서이렇게 putOrder메소드를 만들어서 빌더패턴안에 포문으로 돌려서 해결했는데 이런식으로 하는게 맞는지(?) 되는지(?) 궁금합니다. 또한https://www.inflearn.com/questions/419013/%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%ED%8E%B8%EC%9D%98-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%83%9D%EC%84%B1-%EB%A9%94%EC%86%8C%EB%93%9C%EC%97%90-%EB%8C%80%ED%95%B4-%EC%A7%88%EB%AC%B8%EB%93%9C%EB%A0%A4%EC%9A%94 여기서 질문한 것 역시 봤었는데,왜 저는 저렇게 안되는 걸까요?? @@무슨 차이가 있는 걸까요???
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요~ 강의 듣기 전 예습을 하는데 오타를 발견했습니다.p89 입니다.감사합니다^^
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepository의 findName이 이해가 되지 않습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]public List<Member> findName(String name){ return em.createQuery("select m from m where m.name =:name", Member.class) .setParameter("name", name) .getResultList(); }MemberRepository 패키지의 findName을 보면반환 타입이 List<Member>인데 validation을 할 때 보면 findName이 넘겨준 값이 존재하는지 안하는지로 중복 여부를 체크합니다.그리고 findName의 쿼리를 보면 쿼리 실행 값이 한개만 나오는거로 예상이 됩니다. where절에서 넘겨받은 name 파라미터 값과 동일한 데이터만 이라고 조건이 있기에.findName 실행 결과 값을 Member 객체 하나만 받을 텐데 그렇다면 name은 중복인 값이 존재하지 못하는데 왜 List<Member> 자료형을 쓰는건가요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
doFilterInternal 관련 질문있습니다.
안녕하세요. 제가 BasicAuthenticationFilter 상속받아서 doFilterInternal 메소드를 구현했는데 해당 필터의 해당 메소드는 인증이나 권한이 필요한 API를 호출했을 때만 동작을 하는 걸로 알고 있었는데 SecurityConfig에서 antMatcher에 permitAll로 지정한 경로의 API를 호출했는데 doFilterInternal 메소드가 동작하는 현상이 발생하는데 혹시 왜그런건지 궁금합니다. 해당부분에 관련된 코드는 아래와 같습니다.SecurityConfig@Configuration @EnableWebSecurity public class SecurityConfig { private final CorsConfig corsConfig; private final MemberRepository memberRepository; private final JwtProvider jwtProvider; public SecurityConfig(CorsConfig corsConfig, MemberRepository memberRepository, JwtProvider jwtProvider) { this.corsConfig = corsConfig; this.memberRepository = memberRepository; this.jwtProvider = jwtProvider; } @Bean BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .formLogin().disable() .httpBasic().disable() .apply(new MyFilters()) .and() .authorizeRequests() .antMatchers("/api/member/join").permitAll() .antMatchers("/api/member/login").permitAll() .anyRequest().authenticated() .and().build(); } public class MyFilters extends AbstractHttpConfigurer<MyFilters, HttpSecurity> { @Override public void configure(HttpSecurity builder) throws Exception { AuthenticationManager authenticationManager = builder.getSharedObject(AuthenticationManager.class); builder .addFilter(corsConfig.corsFilter()) .addFilter(new JwtAuthenticationFilter(authenticationManager, jwtProvider)) .addFilter(new JwtAuthorizationFilter(authenticationManager, memberRepository, jwtProvider)); } } } JwtAuthenticationFilterpackage com.example.shop.jwt; import com.example.shop.auth.PrincipalDetails; import com.example.shop.model.Member; import com.example.shop.repository.MemberRepository; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.io.Decoders; import io.jsonwebtoken.security.Keys; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; import javax.crypto.SecretKey; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class JwtAuthorizationFilter extends BasicAuthenticationFilter { private final MemberRepository memberRepository; private final JwtProvider jwtProvider; public JwtAuthorizationFilter(AuthenticationManager authenticationManager, MemberRepository memberRepository, JwtProvider jwtProvider) { super(authenticationManager); this.memberRepository = memberRepository; this.jwtProvider = jwtProvider; } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { String refreshToken = jwtProvider.getRefreshTokenInCookie(request); String accessToken = ""; SecretKey jwtKey = Keys.hmacShaKeyFor(Decoders.BASE64.decode(JwtProperties.SECRET)); if (refreshToken == null) { chain.doFilter(request, response); return; } String jwtHeader = request.getHeader(JwtProperties.HEADER_STRING); Claims claims = null; try { // refreshToken 유효성 검증 jwtProvider.validRefreshToken(refreshToken); } catch (Exception e) { // refreshToken 검증 결과에 따른 예외처리 e.printStackTrace(); chain.doFilter(request, response); return; } Member member = memberRepository.findByRefreshToken(refreshToken); Long memberId = member.getId(); try { if (jwtHeader == null) { // 브라우저 새로고침 고려하여 accessToken 재발급 accessToken = jwtProvider.createAccessToken(memberId, jwtKey); response.addHeader(JwtProperties.HEADER_STRING, accessToken); } else { // 그 외의 경우 accessToken 유효성 검증 accessToken = jwtHeader.replace(JwtProperties.AUTH_TYPE, ""); claims = Jwts.parserBuilder().setSigningKey(JwtProperties.SECRET).build() .parseClaimsJws(accessToken).getBody(); } } catch (Exception e) { // accessToken 검증 결과에 따른 예외처리 e.printStackTrace(); chain.doFilter(request, response); return; } // refreshToken, accessToken 검증 이후 작업 PrincipalDetails principalDetails = new PrincipalDetails(member); Authentication authentication = new UsernamePasswordAuthenticationToken(principalDetails, null, principalDetails.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authentication); chain.doFilter(request, response); } } 특이한 점은 api/member/login 경로의 API(UsernamePasswordAuthenticationFilter의 attemptAuthentication를 상속받아 구현했습니다.)를 호출했을 때에는 doFilterInternal이 동작을 하지 않지만 api/member/join 경로의 API를 호출했을 때에는 doFilterInternal이 동작을 합니다.
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
BookForm 클래스의 setter는 열어놔도 무방한가요??
안녕하세요!엔티티의 setter는 무조건 닫는게 좋다고 하셨는데form 객체의 setter는 열어놔도 무방한가요??접근 레벨을 private로 설정했더니 값이 들어가질 않던데혹시 th:filed를 통해 값을 세팅할 때 setter를 사용하기 때문인가요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 수정 5:50
updateItemFrom.html<form th:object="${form}" method="post">th:action 프로퍼티가 없습니다.수정버튼을 누르셨잔아요.items/1/edit 로요청이 가는데 rest url 을 명시해준적도 없잔아요.items/1/edit 가는 요청이라는 것을어떻게 인식하는거죠?
- 해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
단위 테스트 작성 후 통합 테스트의 범위
안녕하세요! 강의에서 말씀해주신대로, 엔티티 레벨에서 단위테스트를 작성해보았는데 단위 테스트에서 이미 여러 케이스 별로 테스트를 작성했다고 했을 때 서비스 계층의 테스트(repository는 mock 사용)에서도 다시 한 번 모든 경계값 등을 고려하여 '빡빡한' 테스트를 작성할 필요 내지는 그럴 가치가 있다고 생각하시는지 궁금합니다.추가로, 서비스 테스트에서 repository는 mock을 사용한다고 했을 때 repository에 대한 테스트는 생략해도 괜찮은건지 궁금합니다!감사합니다.
- 해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
스프링3 org.hibernate.orm.jdbc.bind: trace 관련질문입니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.스프링 부트 3.0.0으로 쿼리파라미터를 하기위해서 org.hibernate.orm.jdbc.bind: trace으로 하면 된다고 교재에도 있고 다른 분들도 이것으로 바꾸면 잘 된다고 하던데 저는 잘 안되네요 여러번 해보다가 안되서 질문 올립니다. 파일 링크: https://drive.google.com/file/d/1loOVtPkftmkkX_7tVq4lJpwjv9CToMuo/view?usp=share_link 감사합니다.
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
패싯에 jpa 설정 추가하기
엔티티 클래스 개발1 17분 쯤에 강사님께서컨트롤+알트+쉬프트+s 누르신다음에 jpa를 설정할수있는 패싯에 들어가셨는데, 저는 강사님처럼 spring, web 설정도 없고, 추가하려해도 jpa가 뜨지않습니다.어떻게 해야하나요?
- 해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Spring자체는 실행되지만 종료가 되고 h2 database에 생성이 되지 않습니다
=====[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요 이번 강의를 보고 배우는 학생입니다. 다름이 아니라 이번에 강의를 보고 따라했는데요 spring 자체는 실행 되지만 강제 종료가 되면서 쿼리문도 찍히지 않습니다. 원인을 찾기 위해 3일동안 생각 하였는데도 알지 못하겠습니다. pdf 도 참조 하였습니다. H2 데이터베이스는 최신을 쓸려고 하였으나 실행이 안되어 현재 pdf 내 버전인 1.4.200을 사용하고 있습니다. java 버전 17를 사용하였습니다.파일 전체 project 링크 남깁니다.https://drive.google.com/file/d/1arku76D2AedlxlE3HFGhIQPMSzefJTjO/view?usp=share_link
- 해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
스프링부트 버전 관련 질문 있습니다.
안녕하세요 스프링부트 3.0 부터는 지원하는 자바 버전도 17만 되는 것 같고 이전의 스프링부트 버전과 다른 점이 상당 부분 있는 것 같은데 혹시 스프링부트 버전을 몇으로 사용하는 것이 적절한지 여쭤보고 싶습니다.
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
spring boot 3.0.0 에서 p6spy 적용이 안됩니다.
[질문 내용]jpa 강의를 spring boot 3버전으로 진행중입니다.메뉴얼을 보고 쿼리 파라미터 로그 남기기 중에hibernate6org.hibernate.orm.jdbc.bind: trace로 수정 후 해결하였고, 외부 라이브러리인 p6spy는 적용이 안됩니다.p6spy 버전은 1.8.1을 사용했습니다. 해당 문제 해결방법이 있을까요?
- 해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JPA와 DB 설정, 동작확인
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요~ 수업 진행 후 아까 통과 했던 테스트도 아래와 같은 이유로 fail 하네요... 감사합니다.
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 클래스 개발1 / 2
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.엔티티 클래스 개발 파트에서 아래 부분에서 빨간 줄이 뜹니다. 다른 클래스들도 마찬가지입니다~ 감사합니다.
- 해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원 기능 테스트
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요~ 회원 기능 테스트 중에 두 테스트 모두 위와 같은 오류가 납니다. 검색도 해보았지만 해결되지 않아 질문 올립니다. 감사합니다^^
- 해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티 개발 1에서 아래와 같은 오류가 발생합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 잘 듣고 있습니다. 다만 엔티티 개발 1에서 Order클래스에 아래와 같은 오류가 생기는데 왜 생기는지 어떻게 해결해야 하는지를 모르겠습니다. 답변부탁드립니다. 감사합니다.
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@Transactional 질문있습니다
@Transactional 지정위치에대해 궁금합니다 6:17초 부분에서 JPA의 변경을 이용할때에는 트랜잭션을 사용하는게 좋다고 하셨는데 그러면 MemberService 레벨에서 @Transactional 를 지정하는게 아닌 직접적으로 JPA를 작동시키는 MemberRepository에서 어노테이션을 지정하는게 더 좋지않을까요
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JPA 테이블 생성 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]다음과 같이 코드를 작성한 후 실행을 시키면 이런 식으로 테이블이 생성됩니다. 하지만 다음과 같이 코드를 작성한 후 실행을 시키면 1번째 방법과 똑같이 테이블이 생성됩니다. <질문> 1번째 방법과 2번째 방법 모두 같은 테이블이 생성되는데 영한님께서 알려주신 방법은1번째 방법으로 알고 있습니다. 하지만 2번째 방법도 1번째 방법과 같은 테이블을 생성한다면2번째 방법은 사용하면 안 되는 방법인가요? 안된다면 그 이유를 알고 싶습니다.
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Junit5 fail() 처리
@Test public void 상품주문_재고수량초과() throws Exception { Member member = createMember(); Item item = createBook("CentOS9", 20000, 20); int orderCount = 21; assertThrows(NotEnoughStockException.class, () -> { orderService.order(member.getId(), item.getId(), orderCount); }, "재고 수량 예외가 발생해야 한다."); }안녕하세요 영한님 강의 정말 잘 듣고 있습니다!!강의 코드를 조금씩 변형해가면서 실습을 하고 있는데 테스트 관련 질문이 있어 올립니다.assertThrows의 message 파라미터를 통해 실패 메세지를 출력했는데 이렇게 작성하면 fail 메서드를 생략해도 상관 없나요??