현재 "회원가입 서비스 코드 리팩토링"까지 봤는데 Dummy는 테스트 단에서만 쓰이는 것으로 보입니다. 그러면 더미 클래스를 main.config.dummy가 아닌 test.dummy에 작성하는 것이 의미가 분명하고 추후 개발 및 배포에서도 용이한 것 아닌지 의문이 들어 질문 드립니다! config에 작성한 이유와 test에 작성하지 않은 이유가 궁금합니다.!
안녕하세요 강사님 강의 듣고 많이 배우고 있습니다. 다름이 아니라 테스트 방식에 질문이 있어서 문의 드립니다. 현재 테스트는 서비스 코드를 먼저 짜고 테스트를 진행하는데 테스트 방식에는 테스트 코드를 먼저 짜고 서비스 코드를 만들어가는 형식도 있더라구요.. 둘 차이점이 혹시 있을까요..
안녕하세요! 강의 잘 듣고 있는 중에 문의드립니다. 현재 컨테이너 기반 테스트 환경을 구성한 상태로, 실제 데이터로 테스트를 진행하기에 앞서 맥북으로 진행하던 내용을 pc에서도 진행하고자 코드를 그대로 pull해온 상태입니다. 근데 컨테이너들이 정상적으로 동작하는 것 같지 않아 문의드립니다...ㅠ 스프링 로그에서는 마이그레이션 성공시 출력될 로그를 확인하는 정규식 표현에 매칭되는 로그를 찾지 못해 timeout이 나는 것으로 나오고, 도커 데스크탑을 보고 있으면 다른 컨테이너들은 정상적으로 실행되는데에 반해 flyway 컨테이너(local-db-migrate)만 계속 Exited와 Restart를 반복하고 있습니다. 해당 컨테이너 로그를 살펴보면 계속해서 아래와 같이 출력됩니다 ㅠㅠ /flyway/conf/flyway.conf 는 컨테이너의 볼륨에서 해당 파일을 찾지 못했다는 것인가요? 혹시 해결 방안을 아시면 답변 부탁드리겠습니다. 참고로 OS는 윈도우입니다. infra/test/docker-compose.yaml 파일 db/flyway.conf 파일
https://www.inflearn.com/questions/1199599/m1-mac-도커-컴포즈-docker-compose-up-에러 안녕하세요 이전에 docker-compose에서 flyway를 띄울 때 오류가 있어 질문을 드렸습니다. 말씀해주신대로 버전을 변경해서 실행을 하니 해당 오류는 발생하지 않으나 다른 에러가 발생하였습니다. ERROR: Unable to instantiate JDBC driver: com.mysql.cj.jdbc.Driver => Check whether the jar file is present Caused by: Unable to instantiate class com.mysql.cj.jdbc.Driver : com.mysql.cj.jdbc.Driver Caused by: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver 나름대로 구글링해본 결과 직접 jdbc 파일을 넣어주어야 한다고 하는데 이렇게 하는게 맞을까요? flyway의 github에 들어가서 compose 파일을 확인하니 alphine 리눅스로 되어 있던데 jdbc driver jar파일을 다운받으려고 사이트를 들어가니 알파인 리눅스용 드라이버는 없던데 어떻게 해야할까요? 강사님으로부터 flyway를 처음 알게되었는데 유용할 것 같아 넘어갈 수 있는 부분이지만 다시 질문드리게 되었습니다. 감사합니다.
안녕하세요 강사님 현재 스프링부트 3.2.2 버전을 사용하고 있습니다. 배운대로 개인적인 프로젝트에 적용해보고 있는데 @Around 애노테이션의 메서드 실행이 @GetMapping일 경우에는 AOP가 잘 작동하나 @PostMapping일 경우에는 작동하지 않고 @Validation 애노테이션에서 오류가 먼저 터집니다.. 무슨 문제일까요..? .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public org.springframework.http.ResponseEntity<?> com.board.www.app .board.controller.api.BoardApiController.create( com.board.www.app .board.dto.BoardDto,org.springframework.web.multipart.MultipartFile) with 2 errors: [Field error in object 'dto' on field 'content': rejected value []; codes [NotBlank.dto.content,NotBlank.content, NotBlank.java .lang.String,NotBlank]; arguments [ org.springframework.context.support .DefaultMessageSourceResolvable: codes [dto.content,content]; arguments []; default message [content]]; default message [내용을 입력해 주세요]] [Field error in object 'dto' on field 'title': rejected value []; codes [NotBlank.dto.title,NotBlank.title, NotBlank.java .lang.String,NotBlank]; arguments [ org.springframework.context.support .DefaultMessageSourceResolvable: codes [dto.title,title]; arguments []; default message [title]]; default message [제목을 입력해 주세요]] ]
docker compose up -d [+] Building 0.0s (0/0) docker:desktop-linux [+] Running 4/4 ✔ Network local_default Created 0.0s ✔ Container local-local-db-1 Started 0.1s ✔ Container local-local-db-migrate-1 Started 0.1s ! local-db-migrate The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested 0.0s 안녕하세요 강의 잘 듣고 있습니다. 강사님께서 주신 설정 파일을 토대로 동일하게 복사, 붙여넣기를 하고 경로도 동일하게 했는데 위와 같은 에러가 나오고 있습니다. DB에 접속은 되는데 안에 초기 데이터가 들어가지를 않는데 어떤게 문제이고 어떻게 해결할 수 있을까요?
[질문] 제가 담당했던 업무에서는 Long 값을 비교하는 일이 거의 없어서 이 챕터에서 생각을 못 했었던 부분을 알게 되어 좋았습니다. 관련 자료를 찾아보다가 equals 메서드에서는 Long 타입일 경우 .longValue();로 체크하는 로직을 보게되었습니다. public boolean equals(Object obj) { if (obj instanceof Long) { return value == ((Long)obj).longValue(); } return false; } 은행권 같은 실무에서는 equals와 longValue 둘이 어떻게 사용하는지 궁금합니다. [참고 자료] https://www.baeldung.com/java-compare-long-values
Hibernate 로그 작동 안하시는 분들 중에 저처럼 Spring-boot:3.0.0 쓰시는 사람 계시다면 도움 될 겁니다! 기존 강사님 application-test.yml logging: level: '[shop.mtcoding.bank]': DEBUG '[org.hibernate.type]': TRACE 기존의 org.hibernate.type: TRACE 를 org.hibernate.orm.jdbc.bind: TRACE 이걸로 대체해주시면 작동 될 겁니다!! 수정된 application-test.yml logging: level: org.hibernate.orm.jdbc.bind: TRACE shop.mtcoding.bank: DEBUG 왜냐하면 원인이 Spring-boot3 부터 hibernate6 사용하기 때문입니다. 따라서 Spring-boot3에서는 hibernate6의 log level 설정하는 방법으로 yml을 정의해야 제대로 로그가 찍힙니다. 자세한 것은 아래 링크를 확인해보시면 도움 될 것 같습니다 😚 . 출처: https://thorben-janssen.com/hibernate-logging-guide/#log4j-configuration-for-hibernate-4-5-and-6
안녕하세요, 강사님! 강사님 쉬운 설명 덕분에 재밌게 강의 듣고 있습니다. 항상 감사드립니다. Purpose 다름이 아니라, UserControllerTest 관련 질문이 있어서 이렇게 문의 드립니다. 링크: https://github.com/codingspecialist/junit-bank-class/blob/main/src/test/java/shop/mtcoding/bank/web/UserControllerTest.java Situation 강의에서 나온 대로 ` join_success_test() `와 ` join_fail_test() ` 따로 실행시키면 정상적으로 테스트가 통과합니다. 다만 궁금한 점이 둘이 동시에 테스트를 진행하면( UserControllerTest 클래스 단위로 테스트를 실행하면) ` join_success_test() ` 테스트에서 실패 가 뜨는데요. Approach 제 생각에는 테스트 진행 시 ` join_fail_test() ` 이 먼저 실행된다면, repository에 "ssar"이 먼저 등록되고, @BeforeEach public void setUp() { dataSetting(); } private void dataSetting() { userRepository.save(newUser("ssar", "쌀")); } 그 다음 ` join_success_test() `가 진행될 때 ` dataSetting() ` 에서 " Unique index or primary key violation "이 발생하는 게 아닐까 생각이 드는데요. 제가 유추한 것이 맞을까요? Question 맞다면, 하나 더 궁금한 점이 매번 @BeforeEach 로 돌면서 userRepository.save(newUser("ssar", "쌀")); 가 등록이 된다면, 하나의 repository에 계속해서 중복된 값이 저장되기 때문에 오류가 생기진 않나요? 질문이 길어졌습니다. 매번 친절하게 답변해주셔서 감사합니다.
직접 만든 JwtAuthenticationFilter 를 스프링 시큐리티 필터로 등록하는 과정에서 HttpSecurity.apply() 메서드를 활용하셨는데 현 시점 스프링 시큐리티 6.2 버전 이후로는 apply() 메서드가 deprecated 되어 더 이상 지원되지 않는 상황입니다. 이걸 6.2 버전에 맞게 대체할 방법을 찾다보니 with() 메서드를 사용하면 되는것까지는 확인했는데 이 메서드는 또 어떻게 써야할지 모르겠습니다. public <C extends SecurityConfigurerAdapter < O , B >> B with(C configurer, Customizer <C> customizer) throws Exception 어떻게 하면 강의에서처럼 JwtAuthenticationFilter 를 스프링 시큐리티 필터로 등록해줄 수 있을까요 위의 캡처본을 보시면 알 수 있듯이 apply() 메서드는 현재 제가 사용중인 스프링 시큐리티 6.2 버전 부터는 deprecated 되어 지원이 되고 있지 않은 상황이라 필터 등록이 되지 않고있습니다.
안녕하세요 프로젝트 생성 시 이렇게 오류가 뜨는데, 어떤 문제인지 모르겠어서 글 올립니다. 현재 jdk17 버전 사용중이고, 그래서 3버전으로 바꿨는데 jdk 11버전 다운로드와 2점대로 버전을 낮춰야하는건지 여쭤보려구요! build.gradle 사진도 첨부합니다. 추가 간단하게 web,devtools로도 테스트 프로젝트 생성해봤는데 똑같은 에러가 납니다ㅠㅠ 강사님 repo에 있는걸 clone 해서 연결해봐도 같습니다ㅠㅠ
안녕하세요. 수강중에 해당 부분에서 막혀서 계속 찾아보다가 질문 남깁니다,, 다름이 아니라 터미널에서 직접 git add . git commit -m "~~" 하면은 해당 pre-commit 이 정상적으로 동작하는데 인텔리제이에서 실행하면 안되는 상황입니다.. 아 강의에 있는거처럼 인텔리제이에서 run git hooks 는 체크 해놨습니다. 혹시 이외에 다른걸 확인할 방법이 있을까요 인텔리제이 버전은 IntelliJ IDEA 2023.2.1 (Ultimate Edition) 입니다.
... @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class) data class UserRequest( ... @field:Pattern(regexp = "^\\\\d{2,3}-\\\\d{3,4}-\\\\d{4}\\\$") var phoneNumber:String?=null, ) 위와 같이 UserRequest 데이터클래스에서 @JsonNaming 과 @field:Pattern 을 동시에 사용하면 @JsonNaming 의 snake case 적용이 작동하지 않아 PUT 요청의 body 에 phoneNumber 로 요청해야만 정상 작동하고 phone_number 로 요청하면 400 에러가 나지만, 해당 필드에 @field:Pattern 대신 @field:Size 를 사용하면 @JsonNaming 에 기대하는대로 phone_number 로 요청해도 200 응답으로 정상작동 하는 현상을 겪고 있습니다. 왜 Validation 어노테이션을 바꾸었을 뿐인데 그와 상관없어보이는 @JsonNaming 의 작동 여부에 영향을 끼치는지 궁금합니다.