묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
테스트 방식에 관해서 질문이 있어요
안녕하세요 강사님 강의 듣고 많이 배우고 있습니다.다름이 아니라 테스트 방식에 질문이 있어서 문의 드립니다.현재 테스트는 서비스 코드를 먼저 짜고 테스트를 진행하는데테스트 방식에는 테스트 코드를 먼저 짜고 서비스 코드를 만들어가는 형식도 있더라구요..둘 차이점이 혹시 있을까요..
-
미해결쥬쥬와 함께 하루만에 끝내는 스프링 테스트
flyway 컨테이너가 동작하지 않습니다.
안녕하세요! 강의 잘 듣고 있는 중에 문의드립니다.현재 컨테이너 기반 테스트 환경을 구성한 상태로, 실제 데이터로 테스트를 진행하기에 앞서 맥북으로 진행하던 내용을 pc에서도 진행하고자 코드를 그대로 pull해온 상태입니다. 근데 컨테이너들이 정상적으로 동작하는 것 같지 않아 문의드립니다...ㅠ스프링 로그에서는 마이그레이션 성공시 출력될 로그를 확인하는 정규식 표현에 매칭되는 로그를 찾지 못해 timeout이 나는 것으로 나오고, 도커 데스크탑을 보고 있으면 다른 컨테이너들은 정상적으로 실행되는데에 반해 flyway 컨테이너(local-db-migrate)만 계속 Exited와 Restart를 반복하고 있습니다. 해당 컨테이너 로그를 살펴보면 계속해서 아래와 같이 출력됩니다 ㅠㅠ /flyway/conf/flyway.conf는 컨테이너의 볼륨에서 해당 파일을 찾지 못했다는 것인가요? 혹시 해결 방안을 아시면 답변 부탁드리겠습니다. 참고로 OS는 윈도우입니다.infra/test/docker-compose.yaml 파일db/flyway.conf 파일
-
해결됨쥬쥬와 함께 하루만에 끝내는 스프링 테스트
Mock 객체 사용법
아직 mock 사용법이 이해가 안가는데 실제로 db에 저장도 안되고 jpa repository 호출도 안되는 건가요? db가 올라간 도커를 내려도 잘 되네요
-
미해결쥬쥬와 함께 하루만에 끝내는 스프링 테스트
flyway jdbcdriver 오류
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 presentCaused by: Unable to instantiate class com.mysql.cj.jdbc.Driver : com.mysql.cj.jdbc.DriverCaused by: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver 나름대로 구글링해본 결과 직접 jdbc 파일을 넣어주어야 한다고 하는데 이렇게 하는게 맞을까요?flyway의 github에 들어가서 compose 파일을 확인하니 alphine 리눅스로 되어 있던데 jdbc driver jar파일을 다운받으려고 사이트를 들어가니 알파인 리눅스용 드라이버는 없던데 어떻게 해야할까요? 강사님으로부터 flyway를 처음 알게되었는데 유용할 것 같아 넘어갈 수 있는 부분이지만 다시 질문드리게 되었습니다. 감사합니다.
-
미해결쥬쥬와 함께 하루만에 끝내는 스프링 테스트
강의 코드
안녕하세요 강사님 강의를 거의 다 들어가고 있는 시점인데...제공해주신 노션 자료는 너무 좋은데요.. 코드나 커밋된 git 주소 좀 알려주실 수 있나요?노션 자료가 좋긴한데 코드가 없어서 개인적으로 조금 힘드네요
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
스프링 버전업일 경우에는 Pointcut @PostMapping 조건이 달라질까요?
안녕하세요 강사님현재 스프링부트 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 [제목을 입력해 주세요]] ]
-
미해결쥬쥬와 함께 하루만에 끝내는 스프링 테스트
[M1 MAC] 도커 컴포즈 docker-compose up 에러
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에 접속은 되는데 안에 초기 데이터가 들어가지를 않는데 어떤게 문제이고 어떻게 해결할 수 있을까요?
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
equals와 longValue 관련 질문드립니다
[질문]제가 담당했던 업무에서는 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
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
계좌번호를 Long 타입으로 하는 이유가 무엇일까요?!
기초적인 질문일 수도 있으나 궁금합니다...
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
[정보공유] Hibernate 로그 작동 안하시는 분들!!
Hibernate 로그 작동 안하시는 분들 중에 저처럼 Spring-boot:3.0.0 쓰시는 사람 계시다면 도움 될 겁니다! 기존 강사님 application-test.ymllogging: level: '[shop.mtcoding.bank]': DEBUG '[org.hibernate.type]': TRACE기존의 org.hibernate.type: TRACE를 org.hibernate.orm.jdbc.bind: TRACE 이걸로 대체해주시면 작동 될 겁니다!!수정된 application-test.ymllogging: 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
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
UserControllerTest 테스트 실패 문의
안녕하세요, 강사님!강사님 쉬운 설명 덕분에 재밌게 강의 듣고 있습니다. 항상 감사드립니다.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에 계속해서 중복된 값이 저장되기 때문에 오류가 생기진 않나요?질문이 길어졌습니다.매번 친절하게 답변해주셔서 감사합니다.
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
스프링 시큐리티 6.2 버전 이후로 apply() 메서드를 이용한 JwtAuthenticationFilter 가 등록이 안됩니다.
직접 만든 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 되어 지원이 되고 있지 않은 상황이라 필터 등록이 되지 않고있습니다.
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
import 오류
안녕하세요 프로젝트 생성 시 이렇게 오류가 뜨는데, 어떤 문제인지 모르겠어서 글 올립니다. 현재 jdk17 버전 사용중이고, 그래서 3버전으로 바꿨는데 jdk 11버전 다운로드와 2점대로 버전을 낮춰야하는건지 여쭤보려구요! build.gradle 사진도 첨부합니다. 추가 간단하게 web,devtools로도 테스트 프로젝트 생성해봤는데 똑같은 에러가 납니다ㅠㅠ 강사님 repo에 있는걸 clone 해서 연결해봐도 같습니다ㅠㅠ
-
해결됨쥬쥬와 함께 하루만에 끝내는 스프링 테스트
인텔리제이로 Commit 시 pre-commit 이 안됨
안녕하세요. 수강중에 해당 부분에서 막혀서 계속 찾아보다가 질문 남깁니다,,다름이 아니라 터미널에서 직접git add .git commit -m "~~"하면은 해당 pre-commit 이 정상적으로 동작하는데 인텔리제이에서 실행하면 안되는 상황입니다..아 강의에 있는거처럼 인텔리제이에서 run git hooks 는 체크 해놨습니다. 혹시 이외에 다른걸 확인할 방법이 있을까요인텔리제이 버전은 IntelliJ IDEA 2023.2.1 (Ultimate Edition) 입니다.
-
미해결쥬쥬와 함께 하루만에 끝내는 스프링 테스트
MySQL property
db 비밀번호 에러로 실행이 안되는데, 혹시 제 로컬에 설치된 mysql 비밀번호를 입력해야하는 건가요?
-
해결됨쥬쥬와 함께 하루만에 끝내는 스프링 테스트
카프카 실행에 문제가 있는 분들
노션에 작성된 의존성에 는 org.testcontainers:kafka 라고 적혀있는데, org.testcontainers:kafka:1.19.0 와 같이 버전 명시해주시면 해결됩니다.
-
해결됨쥬쥬와 함께 하루만에 끝내는 스프링 테스트
github action 통합 테스트 build 오류 건
안녕하세요 🙂 github action build 시 오류가 발생하여 해결 방안을 찾고자 질문 내용을 작성했습니다.-- IntegrationTest.classpackage com.dnd.gooding.integration; import java.io.File; import java.time.Duration; import java.util.HashMap; import java.util.Map; import org.junit.Ignore; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.transaction.annotation.Transactional; import org.testcontainers.containers.DockerComposeContainer; import org.testcontainers.containers.wait.strategy.Wait; @Ignore @Transactional @SpringBootTest @ContextConfiguration(initializers = IntegrationTest.IntegrationTestInitializer.class) public class IntegrationTest { static DockerComposeContainer rdbms; static { rdbms = new DockerComposeContainer(new File("infra/test/docker-compose.yml")) .withExposedService( "local-db", 3306, Wait.forLogMessage(".*ready for connections.*", 1) .withStartupTimeout(Duration.ofSeconds(180L))) .withExposedService( "local-db-migrate", 0, Wait.forLogMessage("(.*Successfully applied.*)|(.*Successfully validated.*)", 1) .withStartupTimeout(Duration.ofSeconds(180L))); rdbms.start(); } static class IntegrationTestInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { Map<String, String> properties = new HashMap<>(); String rdbmsHost = rdbms.getServiceHost("local-db", 3306); Integer rdbmsPort = rdbms.getServicePort("local-db", 3306); properties.put( "spring.datasource.url", "jdbc:mysql://" + rdbmsHost + ":" + rdbmsPort + "/gooding"); TestPropertyValues.of(properties).applyTo(applicationContext); } } } -- GoodingApplicationTest.classclass GoodingApplicationTest extends IntegrationTest { @Test void contextLoads() { } }-- Github Action 스크립트name: Pull Request Test on: pull_request: types: [opened, synchronize, reopened] permissions: read-all jobs: build-test: runs-on: ubuntu-latest permissions: contents: read pull-requests: write steps: - name: Git Checkout uses: actions/checkout@v3.0.2 - uses: dorny/paths-filter@v2 id: changes with: filters: | application: - 'build.gradle' - 'src/**' - name: JDK 설치 if: steps.changes.outputs.application == 'true' uses: actions/setup-java@v3 with: distribution: zulu java-version: 17 cache: 'gradle' - name: Gradle Build if: steps.changes.outputs.application == 'true' run: | chmod +x ./gradlew ./gradlew build --parallel-- Github Action 오류 발생혹시 해당 오류의 원인을 알 수 있을까요..?? ㅠ 감사합니다 ㅠ
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
spring initializer gradle 에서 3.x.x 대 밖에 없어요. 2.x.x는 보이지 않는데 어떡하져
spring initializer gradle 에서 3.x.x 대 밖에 없어요. 2.x.x는 보이지 않는데 어떡하져
-
미해결Kotlin으로 개발하는 Spring Boot Web MVC
@JsonNaming 과 @field:Pattern 이 함께 동작하지 않는 것 같습니다.
... @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 의 작동 여부에 영향을 끼치는지 궁금합니다.
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
안녕하세요 로그엔 성공적으로 들어온것같습니다..
안녕하세요 그전에 질문 올렸던 수강생입니다.. 이번에 로그엔 성공적으로 postman로 올린경우 된 것같은데 아래에는 error라고 뜨네여,,https://github.com/kimjeonggeon/bankapplication.gitbranch 2-bankApplication 입니다.