월 17,380원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결호돌맨의 요절복통 개발쇼 (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)로 테스트코드를 각각 작성하시는 편이신가요?
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Testcase 상에서 @Trasactional 사용시
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.안녕하세요. 호돌맨님 강의 잘 보고 있습니다! Post 관련 테스트를 작성할 때, 저는 @Transactional을 이용해서 DB에 데이터가 반영되지 않도록 시도했습니다.그리고 테스트를 진행하였습니다. 메서드를 각각 테스틀 할 때는 통과했지만, 메서드 모두 동시에 돌릴 때는 테스트 통과에 실패하였습니다. @Transcational, 영속성 컨텍스트로 구글링을 시도했었습니다. @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)를 사용하면 영속성 컨텍스트를 새로 생성함으로써 테스트가 모두 통과가 되었지만, 매번 영속성 컨텍스트를 새로 생성하는 것은 비효율적이라고 생각했습니다.. 결론적으로 제가 본 바로는 유의미한 결과를 얻을 수 없었습니다.. 아래 코드와 그에 출력되는 결과를 이미지로 첨부해두었습니다. 혹시 어떤 것이 원인인건지 힌트라도 알려주실 수 있을까요?? 구글링 키워드를 알려주셨으면 좋겠습니다..! (해결법은 제가 찾겠습니다!!)PostService.java @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class PostService { private final PostRepository postRepository; @Transactional public void save(PostCreateDto postCreate){ // Post post = new Post(postCreate.getTitle(), postCreate.getContent()); Post post = Post.builder() .title(postCreate.getTitle()) .content(postCreate.getContent()) .build(); postRepository.save(post); } public Long findPostById(Long postId){ Post post = postRepository.findById(postId) .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 게시물입니다.")); return post.getId(); } } PostServiceTest.javaimport com.toktok.core.domain.post.Post; ... @SpringBootTest @Transactional. //똑같이 영속성 컨텍스트를 공유하고 있기 때문에 save가 롤백되어야 하지 않나요??.. class PostServiceTest { @Autowired private PostService postService; @Autowired private PostRepository postRepository; @Test @DisplayName("데이터가 저장 되어야합니다.") void save_test(){ //given PostCreateDto postDto = PostCreateDto.builder() .title("제목입니다.") .content("내용입니다.") .build(); //when postService.save(postDto); //then Post post = postRepository.findAll().get(0); assertThat(post.getId()).isEqualTo(1L); assertThat(post.getTitle()).isEqualTo(postDto.getTitle()); } @Test @DisplayName("데이터는 하나 조회") void find_test(){ //given Long postId = 1L; PostCreateDto postDto = PostCreateDto.builder() .title("글 제목입니다.") .content("글 내용입니다.") .build(); postService.save(postDto); //when Long postById = postService.findPostById(1L); //then assertThat(postById).isEqualTo(1L); } @Test @DisplayName("존재하지 않는 데이터 확인") void not_exist_post(){ //given Long notExistPostId = 2L; Post post = Post.builder() .title("글 제목입니다.") .content("글 내용입니다.") .build(); Post savedPost = postRepository.save(post); //when postService.findPostById(savedPost.getId()); //then assertThrows(IllegalArgumentException.class, ()-> postService.findPostById(notExistPostId)); } }
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
@ModelAttribute 사용시 @Valid
@RequestBody @Valid 사용시에 오류가 발생하면ControllerAdvice @ExceptionHandler(MethodArgumentNotValidException.class)로 잡을 수 있었습니다.하지만 @ModelAttribute를 사용하면ControllerAdvice @ExceptionHandler(MethodArgumentNotValidException.class)로 잡히지가 않습니다..제가 잘못한 부분이 있을까요?/author/presentation/AuthorControllergetAuthorListByNickname에서 오류가 잡을 수가 없습니다.ControllerAdvice는/global/error/ControllerAdvice에 있습니다.감사합니다~https://github.com/320Hwany/Webtoon
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
인증요청시 문의드립니다.
강의진행중 궁금한게 있어서 문의드렸습니다!강의중에 토큰이 탈취될수도 있다고하셔서 String jws = Jwts.builder() .setSubject(String.valueOf(userId)) .signWith(key) .setIssuedAt(new Date()) .compact();코드를 넣어주셨습니다. 매번 다른 accessToken값이 나올수 있도록이요! 그 결과 로그인 시마다 매번 다른 토큰값이 나오는데, 로그인을 하고나서 기존의 토큰값으로 /foo 메소드를 호출하여도 인증이 되는데 왜 그런걸까요??1. 로그인시 abc토큰이 나와서 abc토큰으로 /foo 컨트롤러를 호출함 인증됨2. 또 한번 로그인시 abcd토큰이 나옴. 그런데 이전 로그인 토큰이였떤 abc토큰으로 /foo 컨트롤러를 호출하여도 인증 성공됨.왜 그런지 궁금합니다!
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
시즌3 예정에 열렬한 환호를 보냅니다.
시즌3 예정에 열렬한 환호를 보냅니다.
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
PostCreate 기본생성자 없이 테스트 통과에 대하여
작성글 저장2 - 클래스 분리에서 PostCreate 테스트 시 기본생성자 없이 테스트 통과가 어떻게 되는지 궁금합니다.커뮤니티에서 저처럼 이 부분에 대해 궁금증이 생겨 질문한 글을 보았습니다.호돌맨님이 그 글에서 링크 건 동욱님 글도 보고 여러 가지 찾아봤는데요.제 나름대로 결론을 지은 것을 말씀드리면기본 생성자가 없을 때는 ObjectMapper가 인스턴스를 생성해 직렬화를 진행할 때 인자와 멤버 변수 간의 관계를 몰라서 그런게 아닐까 생각이 됩니다그리고 호돌맨님의 답변 중 기본 생성자 없이 title, content에 내용을 넣으려면 어떻게 해야하는지에 대해서 고민해봐야 된다고 하셨는데요저는 일단 아래와 같은 방법을 사용해서 테스트를 통과했습니다.@ToString @Getter public class PostCreate { @NotBlank(message = "제목은 필수입니다!") public String title; @NotBlank(message = "내용은 필수입니다!") public String content; @Builder @JsonCreator public PostCreate(@JsonProperty("title") String title, @JsonProperty("content") String content) { this.title = title; this.content = content; } } 혹시 제가 한 방법말고 기본생성자 없이 내용을 넣는 방법을 찾으셨는지? 궁금하고어떻게 호돌맨님은 기본생성자 없이 테스트가 통과 됐는지.. 궁금합니다...
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
인증 처리에 관하여 질문이 있습니다!
안녕하세요 호돌맨님!강의에서는 호돌맨님께서는 스프링 시큐리티를 사용하시지 않고 AuthResolver 및 JWT 방식으로 인증 과정을 처리하셨는데 실무에서도 이렇게 많이 처리하는 편인지 궁금합니다.인증을 이렇게 처리하고 인가 부분만 스프링 시큐리티를 사용하시는지, 아니면 추후에 인증 부분도 스프링 시큐리티를 사용하셔서 리팩토링 하실지도 궁금합니다!감사합니다.
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
데이터 검증2 ErrorResponse의 Map 변경
안녕하세요 호돌님!데이터 검증2 부분에서 Map을 Dto로 변경후 테스트를 통과하였는데,맞는 방법인지, 더 효율적인 방법이 있는지 궁금합니다! 변경한 코드내용은 다음과 같습니다 ErrorResponseValidation 클래스 생성테스트 코드테스트 결과답변 부탁드립니다 감사합니다!
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Exception에 대해서 질문드립니다.
실무를 하다 보면 다양한 Exception이 많이 나오게될텐데 그럴때마다 Exception파일을 만들어서 상속 받은 뒤 처리를 하시나요?? 그러면 엄청나게 많은 Exception파일들이 생길 것 같아서요!!아니면 공통적인 Exception들만 ExceptionHandler로 잡아서 에러처리하고 공통적이지 않은 Exception들은 어떤식으로 처리하는지 궁금합니다.저희 회사같은 경우는 Enum클래스에 여러가지 상황에맞는 상태코드와 문구를 설정해두고, 해당 상황이 나오면 상태코드와 문구를 Json데이터에 세팅하여 내려주더라구요. 반면에 ExceptionHandler는 사용하지 않고 있어요.호돌맨님은 어떤식으로 처리하는지 궁금하여 질문드립니다.
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
회원가입 성공 시 테스트에 대한 질문입니다.
안녕하세요 호돌맨님회원가입 성공 시 테스트 코드에 대해서 궁금한게 있어 질문 드립니다. @Test @DisplayName("회원가입 성공") void test1() { PasswordEncoder encoder = new PasswordEncoder(); Signup signup = Signup.builder() .name("호돌맨") .email("hodolman@gmail.com") .password("1234") .build(); authService.signup(signup); assertEquals(1L, userRepository.count()); User user = userRepository.findAll().iterator().next(); assertEquals("hodolman@gmail.com", user.getEmail()); // assertNotNull(user.getPassword()); // assertNotEquals("1234", user.getPassword()); assertTrue(encoder.matches("1234", user.getPassword())); assertEquals("호돌맨", user.getName()); } 지금 userRepository에 비밀번호가 암호화 된 상태로 저장중이어서 assertTrue로 테스트를 한 번 짜봤는데 위처럼 하는 방식은 좋지 않은 방식인가요?
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
안녕하세요 유틸클래스 질문있습니다
보통 암호화하는 클래스들을 static 유틸클래스들로 만들었었는데 이런 static유틸클래스와 @Component를 달아서 사용하는 유틸클래스는 어떤 차이를 만들어낼수있는건가요..?제가 생각했을땐 유틸클래스를 스프링 빈으로 관리하겠다는 생각만 떠오르는데.. 이해할수있을만한 예시가있을까요..? 제가 못찾는건지 마땅히 그럴싸한 자료를 못봤던것같아서요 ㅠ강의도중 @Component얘기가 잠깐나와서 생각이나서 질문드려봅니다...
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
스프링부트 3.0.2 querydsl + rest docs + propoerties
스프링부트 3.0.2로 따라하고 계신분들을 위한 공유입니다.queryDSLimplementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api"Spring REST Docsext { asciidocVersion = "3.0.0" }버전을 3.0.0으로 지정application.propertiesspring.h2.console.enabled=true spring.datasource.url=jdbc:h2:mem:test spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password=
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
vue설치후 소소하게 질문있습니다!
vue.js설치후 각각의 vue파일안에 html코드가 호돌맨님 코드처럼 색깔이 구분되지 않고 타이핑을해도 자동완성?? <tem 이정도만 쳐도 <template>이렇게 뜨는정도?? 이런게 안되고 있는데, localhost:5137를 실행하면 정상적으로 화면은 뜹니다.제대로 설치가 된걸까요??
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
영상에 나오는 브금 출처좀 알 수 있을까요?
노동요로 좋네요ㅇㅅㅇ
- 해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Interceptor 여러번 호출
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new AuthInterceptor()); } }@Slf4j public class AuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info(" >> preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.info(" >> postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info(" >> afterCompletion"); } } 호출이 여러번 되는 현상이 발생합니다. preHandle 로그가 3번 찍혀요.검색하여 기본 + 2번 더 호출된다는 글을 보았으나, 제게는 해결책이 아니었습니다.(https://okky.kr/articles/598386)2번 더 호출 될 때에는 request.getParameter null로 넘어옵니다. (acceessToken까지 진행해보다가 롤백했어요 ... 이거부터 해결이 되어야해서 ㅠ.ㅠ)도와주세요 호돌맨님! (git 주소 가렸어요 ! :D)
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
문서화를 위한 별도의 테스트 클래스를 꼭 만들어야 하나요?
강의에서는 API 문서화를 위한 별도의 테스트 클래스를 만들어서 진행하셨잖아요? 실무에서도 이렇게 별도로 만드시나요? 아니면 컨트롤러 테스트를 하나만 만들고 어노테이션만 추가해서 하시나요?
- 미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
호돌맨님 강의 챕터 순서대로 듣지 않아도 상관없을까요?
Spring Rest Docs 까지 순서대로 들었는데 깃헙이나 배포, Vue 이 부분보다 인증 부분이 좀 더 급한 거 같아 그 부분 먼저 들으려고 하는데 상관없을까요?