Programming/Study22 테스트를 실행은 하고 싶은데 빌드에서는 제외하고 싶을 때 통합 테스트를 진행하면서 가장 걱정되는 부분은 배포 및 배포 자동화를 진행했을 때는 이 테스트들이 수행되면서 데이터베이스를 건들 것 같다는 점이었다. 또한 통합 테스트 메소드가 많아지면 많아질 수록 빌드에는 더욱 많은 시간이 들어갈 것이었다. 그렇다고 통합 테스트를 해보지 않을 수도 없었다. Spring Security가 잘 적용되는지를 알아봐야했다. 따라서 빌드에서는 해당 테스트를 빼고, 대신 테스트가 수행되게는 하고자 시도해봤다. 가장 먼저 수행해 본 방법은 build.gradle에서 아예 해당 테스트가 빌드에서 빠지게 설정한 방법이었다. 이렇게 설정하고 테스트를 수행하니 다음과 같은 결과가 나왔다. 우리가 수행하는 test는 기본적으로 gradle 기반으로 수행된다. 그런데, gradle빌드에서 해.. 2023. 12. 7. Spring Security의 인증 처리 흐름 Spring Security를 구현하고 사용하는데, 어떻게 인증이 진행되는지 모르고 코드만 따라치는 건 아무 의미가 없다. 어떻게 로그인이 되는지 정도는 간단하게 알고 가는 것이 기왕 공부하는 의미가 있지 않을까? 일반적인 클라이언트 - 서버 간 소통은 클라이언트가 뭔가 요청을 쏴주면 서버에서 해당 요청을 받고 이에 맞는 적절한 작업을 통해 응답하는 과정이다. 그런데 인증 / 인가가 추가되면 어떨까? 서버는 클라이언트의 모든 요청을 그냥 받고 수행해서 결과물을 반납할까? 그럼 인증 / 인가의 의미가 없지 않을까? 그럼, 나한테 요청을 보낸 사용자를 인증하는 과정은 어디서 일어나야할까? 해당 과정은 서버가 요청을 받아들이고 일련의 업무를 수행하기 전에 처리되어야 한다. 그러니까 클라이언트 - 서버의 일대일.. 2023. 12. 6. Spring Security를 사용할 때 csrf.disable()을 사용해도 되는 이유 - 토큰 사용 / 그래서 토큰은 어떻게 저장할건가? Spring Security는 기본적으로 csrf 공격에 대한 방어 기능을 제공한다. csrf가 뭐길래 방어 기능까지 제공할까? 사이트 간 요청 위조(Cross-site request forgery, CSRF)는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다. - 위키백과 그러니까, 나는 A라는 행동을 하기 싫은데, 강제로 A라는 행동을 취하게 되는 것이다. 예를 들어, 흔히 만나는 스팸 메일의 링크를 누르면 타인의 계좌에 송금되는 경우가 csrf의 예시라고 생각할 수 있겠다. 링크에 송금 링크를 걸어두고, 링크를 클릭하면 송금이 일어나게 되는 것이다. 송금 서비스는 송금 요청이 왔으니 이를 .. 2023. 12. 5. PasswordEncoder의 작동 원리와 테스트하기 어려운 이유 회원 가입 과정에서 비밀번호의 암호화가 잘 되었는지를 테스트하고자 했는데, 지속적으로 실패했다. 내 생각은 다음과 같았다. '과정 전부 거치고 나온 Response DTO의 비밀번호랑 따로 PasswordEncoder로 인코딩한 비밀번호가 같은지를 검증하면 되지 않을까?' 뭐 꽤 괜찮은 생각이라고 생각했다. PasswordEncoder는 BCrype 그런데, 막상 진행해보니까 잘 되지를 않더라. 그래서 한 번, 같은 패스워드를 두 번 돌려서 결과를 확인해봤다. @Test void test(){ PasswordEncoder passwordEncoder1 = PasswordEncoderFactories.createDelegatingPasswordEncoder(); String password = "1234".. 2023. 12. 4. Querydsl 사용해보기 - 검색 기능 만들기 이번에 TDD 프로젝트의 검색 기능을 구현하면서 Querydsl을 처음으로 사용해보았다. 동적 쿼리 사용에 도움이 많이 된다는 말을 얼핏 들었고, 검색 기능을 구현함에 있어 동적 쿼리를 사용하는 것은 반드시 필요했기 때문이다. 직접 사용해 본 후기로, Querydsl의 가장 큰 장점은 일단 상당히 가독성이 좋다는 것이다. JPQL로 일일이 SELECT, WHERE 절을 작성하는 것보다 함수 형태로 표현되기 때문에 훨씬 보기 좋았다. 또한, 다양한 기능을 어려움 없이 사용할 수 있다는 점도 좋았다. Specification을 사용한 검색 조건 지정 등은 SQL문법에 맞춰 LIKE 에 들어갈 조건을 작성하는 등 귀찮은 과정이 있었다. 그러나 Querydsl은 그런 과정이 없어 편리했다. 각설하고, 이번에 Q.. 2023. 11. 30. 이전 1 2 3 4 5 다음 반응형