묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링부트 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 입니다.
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
JwtAuthorizationfilter test mvc.performget 관련 질문입니다!
https://github.com/kimjeonggeon/bankapplication.git2-bankapplication branch 입니다! 첫번 째 질문은 get 부분 urltemplate으로 받지 못합니다ㅜㅜ..그리고 저번에 올렸던 질문인데 해결을 못해서요.. 그 이번에 accountcontroller 부분에서 로그인 확인을 postman을 통해 하는데 username을 보냈는데 로그인 실패 response로 안오고 error 만 뜹니다.아래는 오류 코드 입니다.감사합니다.org.springframework.security.authentication.InternalAuthenticationServiceException: 인증 실패at shop.mtcoding.bank.config.auth.LoginService.lambda������������������loadUserByUsername0(LoginService.java:23)at java.base/java.util.Optional.orElseThrow(Optional.java:408)at shop.mtcoding.bank.config.auth.LoginService.loadUserByUsername(LoginService.java:22)at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:94)at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:133)at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182)at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:201)at shop.mtcoding.bank.config.jwt.JwtAuthenticationFilter.attemptAuthentication(JwtAuthenticationFilter.java:50)at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:227)at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217)at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112)at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82)at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221)감사합니다.
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
JwtAuthorizationfilter test mvc.performget 부
이부분을 urltemplate으로 받아야하는데 array로 받네요 어떻게 하면 url로 받을 수 있을까요?
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
longValue() 질문
Long 타입을 비교할때 longValue() 를 쓰셨는데Long 이라는 레퍼런스 객체를 비교할 때 equals() 를 써도 되지 않나요 ? 제가 equals() 로 하고 테스트해봤는데 오류가 뜨지는 않아서 뭐가 더 나은지 궁금합니다 !
-
해결됨쥬쥬와 함께 하루만에 끝내는 스프링 테스트
블로그 포스팅 관련 문의
강사님 안녕하세요. 강의 내용이 좋아서 그런데 블로그에 내용 간단하게 정리해서 포스팅 해도 될까요..?출처 꼭 남기겠습니다
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
jwt 인가필터 규현및 등록
회원가입은 되는데 로그인 시도 시 에러 뜨고 그전에 에러 메시지에는 아래와 같이 나왔습니다. 어느 부분에서 잘못된것일까여.springframework.security.authentication.InternalAuthenticationServiceException: 인증실패 at shop.mtcoding.bank.config.auth.LoginService.lambda$loadUserByUsername$0(LoginService.java:22) at java.base/java.util.Optional.orElseThrow(Optional.java:408) at shop.mtcoding.bank.config.auth.LoginService.loadUserByUsername(LoginService.java:21) at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:94) at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:133) at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182) at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:201) at shop.mtcoding.bank.config.jwt.JwtAuthenticationFilter.attemptAuthentication(JwtAuthenticationFilter.java:50) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:227) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
-
해결됨쥬쥬와 함께 하루만에 끝내는 스프링 테스트
Kafka테스트 다른 테스트랑 같이 돌리면 실패하는데 이유를 모르겠습니다..
예시 코드대로 카프카 테스트를 실행하면 잘 성공합니다. 그런데 다른 통합테스트들과 같이 실행시키면 실패합니다.로그를 보면잘 실행되고 문제도 없는데 process메서드를 잘 실행 했음에도 불구하고 수행되지 않았다고 나오는거 같습니다. @SlowTest public void kafkaSendAndConsumeTest() { String topic = "test-topic"; String expectValue = "expect-value"; kafkaProducerService.send(topic, expectValue); var stringCaptor = ArgumentCaptor.forClass(String.class); System.out.println("-----------mock-----------start"); Mockito.verify(kafkaConsumerService, Mockito.timeout(5000).times(1)) .process(stringCaptor.capture()); System.out.println("-----------mock-----------finish"); Assertions.assertEquals(expectValue, stringCaptor.getValue()); }혹시 관련 문제에 대해 아실까요? ㅠㅠ
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
스프링부트 3버전
안녕하세요! 스프링부트 3버전으로만 지금 진행이 되어서 강의를 보며 따라가고 있는데 혹시 config할때 deprecate 된거를 3버전에 맞게 바꿀때 참고할만한게 있을까여?