24%
65,180원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
AbstractAuthenticationProcessingFilter내에서 HttpServletResponse값이 안들어갑니다
@Bean public SecurityFilterChain httpSecurity(HttpSecurity http) throws Exception { return http.cors().disable() .csrf().disable() .httpBasic().disable() .formLogin().disable() .authorizeRequests().anyRequest().authenticated() .and() .addFilterAt(authFilter(), UsernamePasswordAuthenticationFilter.class) .addFilterAt(jwtFilter(), UsernamePasswordAuthenticationFilter.class) .build(); } @Bean public WebSecurityCustomizer webSecurityCustomizer() { return web -> { web.ignoring().requestMatchers().antMatchers("/h2/**"); }; } @Bean public AuthFilter authFilter() throws Exception { var authFilter = new AuthFilter(); authFilter.setAuthenticationManager(authenticationConfiguration.getAuthenticationManager()); authFilter.setAuthenticationSuccessHandler(new SimpleUrlAuthenticationSuccessHandler("/")); authFilter.setAuthenticationFailureHandler(new SimpleUrlAuthenticationFailureHandler("/error")); return authFilter; }설정은 위와 같이 했습니다.@Override protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException { super.successfulAuthentication(request, response, chain, authResult); String SECRET = "secrsdkfjhjh4243j234jh2SDdsfjhgsdfhjgjFQQQQdasd1et"; Claims claims = Jwts.claims(); claims.put("username", SecurityContextHolder.getContext().getAuthentication().getName()); String compact = Jwts.builder() .setClaims(claims) .setIssuedAt(new Date(System.currentTimeMillis())) .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)) // 1시간 .signWith(SignatureAlgorithm.HS256, SECRET) .compact(); response.addHeader("Authorization", compact); response.addCookie(new Cookie("token", compact)); }위와 같이 설정을 했는데 http 요청 테스트를 해보면 설정한 값이 하나도 들어가 있지않습니다.컨트롤러나 OncePerRequestFilter에서 값을 넣어보면 잘 적용됩니다..
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
AWS 과금 조심!
질문글은 아니지만 혹시 저처럼 AWS랑 안 친하신 분들을 위해 과금 조심하시라고 올립니다. 강의 내용에도 설명 해주시지만, 고정IP(아마존에서는 Elastic IP Addresses, 탄력적 IP라고 부르네요)를 생성하고 인스턴스를 연결 안 하거나, 연결된 인스턴스가 running상태가 아니면 하루에 0.12USD정도 나가는 것 같네요.(저는 인스턴스에 연결만 해두면 되는 줄 알고 연결된 인스턴스 꺼놨다가 요금 나갔네요ㅜ.. 수업료가 그나마 싸서 다행입니다. )AWS 강의까지 진행하시는 분들은 참고하셔서 진행하시면 좋을 것 같아요!
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
테스트(Matchers.is) 질문드립니다.
.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(Matchers.is(2)))위 코드와 아래코드 모두 정상적으로 통과하는걸 확인하였는데요.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(2))수업에서는 Matchers.is()를 사용하셨는데 위 코드 문맥에서 is()를 굳이 왜 사용하셨는지 궁금해서 질문드립니다.
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
배포 질문있습니다.
안녕하세요. 해당 강의로 배포를 배우고 있습니다. 현재 별개로 진행하는 스프링부트 프로젝트에서 레디스를 도커를 이용해 (docker-compose up) 실행하고, 스프링 프로젝트를 실행하는 형태로 진행하고 있습니다. 이러한 경우는 배포를 어떻게 해야할지를 모르겠습니다.원격 ec2 서버에도 마찬가지로 docker desktop 및 redis를 설치하여 실행한 뒤, 스프링부트 프로젝트를 실행해야 할까요?
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
enum방식이 실무에서 자주 쓰이는 편인가요??
안녕하세요 호돌맨님 이번 강의 내용중 3번 enum을 이용한 방식에 대한 궁금증이 생겨서 질문 드립니다.제가 생각했을때 enum방식은 제한적이라 실무에서는 자주 쓰이지 않을 것 같다는 의문이 생겼습니다.제한적이라고 생각했던 부분은reflection을 이용한 인스턴스 생성이므로 스프링이 제공해주는 AOP프록시나 DI의 혜택을 받을 수 없다.입니다.예시로 들어주신 AnimalSerivce의 구현 클래스들은 트랜잭션이나 기타 AOP기능을 하용하지 않고, 주입받아야 하는 의존성도 없어서 괜찮지만 만약 Controller -> Service를 호출하는 동일한 구조로 호출 대상이 되는 Service가 AOP프록시나 DI등의 처리가 필요한 클래스라면 AOP미적용, 또는 newInstance() 호출 시 예외 발생등의 문제가 발생할 것으로 보입니다.실제로 실무에서 변수값에 따라 서로 다른 클래스 컴포넌트를 호출해야하는 상황에서 enum방식이 자주 쓰이나요??
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
H2 가 아닌 mysql DB 를 사용중인데 조그만한 질문이 있습니다.
재기동을 했음에도 불구하고 쿠키값이 그대로 남아있는 현상이 있어서 원하는 요청이 정상적으로 이루어지지 않았던 문제가 있었습니다.이상해서 원인을 파악하다보니 현재 전 mysql DB 를 연결하여 사용중이었고, 호돌맨님은 H2 DB 를 사용중이시더라구요.그래서 재기동을 할때마다 쿠키값이 삭제되고 다시 생성이 되지 않았던 건데 혹시 이런 상황에서 조언이 될 만한 링크나 키워드를 알려주실 수 있으실까요??제가 직접 삽질하면서 찾아보고 해결해보려구요 ㅠㅠ(현재는 매번 재기동 할때마다 쿠키값을 직접 삭제해주면서 강의를 따라가고 있습니다)
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Controller Test 시 Repository 사용 관련 질문입니다.
안녕하세요 호돌맨님 !! 강의 하면서 항상 궁금했던 점인데, 저는 Controller Test 를 End-To-End Test 용도로 자주 활용하고 있는데요, 이러면 Repository Method 를 Controller Test 에서 직접적으로 사용하는 것보다 Service 단 로직을 거쳐 Repository 의 Method 가 호출되도록 하는게 맞는걸까요 ? 호돌맨님은 항상 Controller Test 로직 짜실 때 Repository 의 save() 와 같은 메서드를 한번에 호출해서 사용하는 걸보고 질문 드립니다 !
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
안녕하세요. 호돌맨님. 서비스 정책 로직 위치에 대해 궁금한 점이 있습니다.
좋은 강의 정말 감사드립니다. 강의 수강 도중 서비스 로직 관련 궁금한 점이 있어 문의드리게 되었습니다.제가 DDD 를 공부하면서 알게된 부분이 DDD 에서는 비즈니스 로직을 도메인에 몰아서 작성하라고 했는데 본 강의에서는 절대 서비스 정책을 도메인에 둬서는 안된다고 말씀하신 걸로 알고 있습니다. 호돌맨님께서 말씀하신 서비스 정책을 두지 말라는 조언은 DDD를 적용하지 않았기 때문인지 두지 말라고 하신건지 알고 싶습니다.(서비스 정책 == 비즈니스 로직으로 이해했습니다. 혹시 제가 이해한 부분이 잘못 됐을까요?)감사합니다.
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
인터셉터 활용?
안녕하세요 호돌맨님!JWT 관련 강의에서 ArgumentResolver를 활용해 토큰 검증을 하고 사용자 정보를 추출해 반환하셨는데, 만약 프로젝트를 진행할 때 로그인을 해야 모든 URL에 접근할 수 있다고 한다면 아래 코드처럼 인터셉터에서 토큰 검증을 하고 ArgumentResolver에선 별다른 검증 없이 subject만 추출해서 반환해도 문제가 없을까요? 혹시 제가 접근 자체를 잘못하고 있다면 알려주시면 감사하겠습니다@Slf4j @RequiredArgsConstructor public class LoginCheckInterceptor implements HandlerInterceptor { private final JwtService jwtService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String requestURI = request.getRequestURI(); log.info("인증 체크 인터셉터 실행 {}", requestURI); String accessToken = request.getHeader("Authorization"); jwtService.validateAccessToken(accessToken); try { jwtService.getSubject(accessToken); } catch (JwtException e) { throw new Unauthorized(); } return true; } } @RequiredArgsConstructor public class JwtArgumentResolver implements HandlerMethodArgumentResolver { private final JwtService jwtService; @Override public boolean supportsParameter(MethodParameter parameter) { boolean hasLoginAnnotation = parameter.hasParameterAnnotation(Login.class); boolean hasLoginType = LoginUser.class.isAssignableFrom(parameter.getParameterType()); return hasLoginAnnotation && hasLoginType; } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { String accessToken = webRequest.getHeader("Authorization"); Long userId = jwtService.getSubject(accessToken); log.info("userId = {}", userId); return new LoginUser(userId); } }
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Spring boot + Vue 배포
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세요.문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.안녕하세요! 강의 보면서 저만의 프로젝트를 열심히 만들어보고 있습니다.다름이 아니라 호돌맨님 프로젝트와 비슷하게 프로젝트 폴더 아래 front와 src (Springboot)가 따로 있는 상황이어서 인터넷을 찾아보며 vue build 결과물 (dist 폴더)를 src/main/resources/static/ 에 넣고 배포하는 식으로 진행해보았습니다.위 처럼 했을 때는 5173 => 8080 이 서로 통신하는게 아닌게 되버린 것인지 Vue에서 작성했던 코드들이 정상적으로 작동하지 않아 문제를 겪고있습니다.그 외에도 다른 글들을 참고하면서 build를 해보면 build 과정에서 오류가 발생하는 상황입니다.제대로 동작하게 배포를 하고 싶은데,vue 부분을 따로 배포하는 것 말고는 방법이 없을까요?좀 오랫동안 삽질하게 되어 질문드립니다... 방향이나 참고할만한 내용이 있을까요...?git - https://github.com/ppusda/NyangMunity
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
PostEditorBuidler cannot find symbol 오류
안녕하십니까 호돌맨님 교육 강의를 듣고있는 학생입니다. 다름이 아니라 도저히 구글링을 해봐도 해결책을 찾지 못해서 질문 남깁니다. PostEditorService -> edit methodPostEntityErrorSpring REST Docs1 - 기본설정 챕터에서 30분 정도에 호돌맨님이 Gradle 에 build 버튼을 누르시는데 거기서 querydsl compile 과 관련된 에러가 납니다. 내용을 보면 PostEditor 에서 PostEditorBuilder 심볼을 찾지 못한다고 에러가 발생하는데 Q파일 생성 문제인거 같은데 구글링을 해봐도 문제해결을 하지 못하였습니다.호돌맨님이 작성하신 코드랑 제가 다르게 작성한 코드 부분는 그냥 PostEditor 자체에서 static 으로callEditor 를 호출해서 PostEdit 파라미터로 받아서 값을 셋팅하고 Post 엔티티에 넘겨주는 방식으로 수정해 봤습니다. git url : https://github.com/ilikeamoney/inflearn-hodolman
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
게시글 조회 4 - 페이징 처리
<Post><PostResponse><PostService><PostController><PostControllerTest> org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property 'desc' found for type 'Long'; Traversed path: Post.id안녕하세요 호돌님 PostControllerTest에서 페이지size와 정렬방법 설정의 "/posts page=1&size=5"은 정상 작동하는데 &sort=id.desc를 작성하면 위와 같은 오류가 발생하는데 뭐가 잘못된건지 모르겠습니다ㅠ
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
스프링 2.7.x 사용자 오류
오류 난 거 몇 가지 적겠습니다.이제 User 클래스에 @Table(name = "users") 붙여줘야 합니다. h2 버전 올라가면서 테이블 이름 user를 사용 못 합니다. 9:15에서 실행하면 중간에 에러 떠요.15:44sql:init:mode: always 그리고 이전까지 h2가 잘 실행됐는데 이번 편에서localhost:8080/h2-console 접속 시 whitelabel이 계속 나오고 Application 실행 시에 h2가 실행된다는 메시지도 안 나오는 미친 에러 걸려서 (h2 로그 안 나옴)해결법을 못찾아서 압축하고 드라이브 올리고 마지막으로 확인차 다운받아서 확인해 봤는데 다시 h2 실행이 잘 되네요..? 왜 그런지 아시는 분 댓글 부탁드립니다 ㅎㅎ
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
작성글 저장2 - 클래스 분리
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.selfstudy.request.PostCreate]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.selfstudy.request.PostCreate (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2] 안녕하세요 호돌님, 강의의 '작성글 저장2 - 클래스 분리' 파트 초반부분에서 영상대로 따라했는데 테스트가 실패하여서 관련 오류를 찾아 PostCreate 클래스에 @NoArgsConstructor 어노테이션을 이용해 기본생성자를 추가하는 방법으로 오류를 해결했습니다.그런데 영상에선 분명히 PostCreate 클래스에 따로 기본생성자를 추가한 것이 안보이는데 어떤 차이로인해 오류가 발생한 것인지 궁금합니다
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
session:spring-session-jdbc 의존성 추가 시 mysql 설정
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.만약 MySQL로 진행하시는 분들을 위해 session-jdbc 추가 시 SPRING_SESSION 테이블 추가가 안된다면 이 링크 참고해서 해주시면 되고자 공유드립니다.https://stackoverflow.com/questions/53823174/how-to-initialize-schema-in-spring-session-with-jdbc아래처럼 application.yml에 spring 프로퍼티 안에 해당 내용을 추가하시면 될듯합니다.session: jdbc: initialize-schema: always추가로 설정이 필요한 내용이 있으면 댓글 부탁드리겠습니다.
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
JWT 관련 질문입니다.
https://www.inflearn.com/questions/810394/%EC%9D%B8%EC%A6%9D%EC%9A%94%EC%B2%AD%EC%8B%9C-%EB%AC%B8%EC%9D%98%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4호돌맨님 강의 정말 잘 듣고 있습니다. 다름이 아니라 저도 이 질문과 같은 의문이 생겼는데 해답을 찾지 못해 질문드립니다. 추가적으로 accessToken이eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwiaWF0IjoxNjgzMzQwODAzfQ.4c7pfgz689iJdKBrInNP4QBf7YLc-bW_FVkb0JNHvk라고 했을 때 맨뒤 k를 다른 알파벳으로 바꿔도 정상적으로 요청이 되는 경우가 있던데 이 이유도 잘 모르겠습니다.. 알려주시면 감사하겠습니다 !!
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
로그인 테스트 관련해서 간단한 질문
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.안녕하세요 호돌맨님.다름이 아니라 호돌맨님 영상 9:30쯤에서 Login DTO에 대한 @NoArgsConstructor가 없는데도 테스트가 정상 작동되는 모습이 보입니다.저는 반대로 NoArgsConstructor가 없이 실행하니 생성자를 만들고 테스트를 실행하라고 빌드내용이 떴습니다.이에 대해서 제가 놓치고 있는 부분이 있는가 싶습니다.자바 버전 이슈인가, 롬복 버전 이슈인가 고민이 드네요https://github.com/uiurihappy/blog.ybchar.dev/commit/e5ee816f3b3a3c05dabb586caee0ddfb9fc471a6 해당 커밋입니다.
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
안녕하세요 호돌맨님!
title이 글자수 10이 넘지 않으려면Post클래스 title객체에다가 @Max(value=10,"10이 넘으면 안된다") 를 붙이면 해결되지 않을까요??만약 기존에 있던 글들이 글자수 10이 넘으면 오류가 날테니? 그에따른 try catch문으로 substring적용해서 글자 수 줄여주고요!
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Editor에 관한 질문이 있습니다!
다른 질문들을 보고도 아직Post 엔티티를 Editor를 사용해서 변경하는 것과 아래 코드가 어떠한 차이가 있는지 잘 이해가 되지 않습니다...public Post toUpdate(PostUpdate req) { this.title = req.getTitle() != null ? req.getTitle() : this.title; this.content = req.getContent() != null ? req.getContent() : this.content; return this; }
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
테스트코드 질문
안녕하세요 호돌맨님,!Service 계층 테스트코드와 MockMVC를 이용한 Controller 계층 테스트코드를 각각 작성하시는것 같은데, 이유가 있으신지요?, 저의 좁은 시야로는 Controller 테스트 실행시 Service 로직도 검증이 될것 같아서 질문을 드립니다.실무에서도 계층별(예를들어 Controller, Service, Repository)로 테스트코드를 각각 작성하시는 편이신가요?