본문 바로가기

Web Development14

[Testing] 단위 테스트 - 테스트 대역(Mock, Stub) 잘 사용하기 우리는 보통 Mock, Stub, Test Double(=테스트 대역) 을 이야기 할 때 사전적 정의를 따르지 않고 뭉뚱그려 이야기하는 경우가 많다. 개념상 Mock 과 Stub 이 모두 Test Double 이기도 하고, Mockito, MockK와 같은 대표적인 Mock 라이브러리 들을 이용해 테스트 대역(Test Double)을 작성하기 때문에, Mock 라이브러리를 테스트 대역의 동의어로 여기기도 하기 때문이다. 그러나 테스트 대역의 무분별한 사용은 테스트 취약성을 초래할 수 있다. 따라서 테스트 취약성 관점에서 Mock, Stub, Test Doouble 를 구분하고, 좋은 테스트를 작성하기 위해 이들을 어떻게 사용해야 하는지 알아보자. (이 글은 ⌜Unit Testing⌟(블라디미르 코리코프.. 2024. 8. 14.
[Testing] 단위 테스트 - 좋은 단위 테스트 작성하기 주변으로부터 TDD 를 도입해야 한다거나 테스트 커버리지를 높여야 한다는 당위적 주장은 비교적 쉽게 접할 수 있다. 더 나아가 개발자 채용공고에 이러한 내용을 써놓은 회사들도 굉장히 많다. 그러나 이러한 주장에 대한 논리적 근거나 구체적이고 명확한 실천 방법을 접하기는 쉽지 않다. 최근 읽은 ⌜Unit Testing⌟(블라디미르 코리코프) 는 좋은 단위 테스트란 무엇이며, 이를 어떻게 작성할 수 있는지를 체계적이고 명확하게 설명해준다.  1. 단위 테스트란?책의 저자는 단위 테스트를 정의하기 위해 '런던파'와 '고전파' 두 견해를 소개하며, 앞으로 전개할 내용은 '고전파' 관점에서 정의한 단위테스트를 다루겠다고 이야기 한다. '고전파' 관점에서 해석한 단위 테스트의 중요한 세 가지 속성은 다음과 같다. .. 2024. 8. 11.
[DDD] 도메인 주도 설계가 잘 안 됐던 이유 프로젝트를 시작할 때 'DDD를 사용해보자' 라는 말이 종종 나오곤한다. 이후로 이벤트스토밍을 하며 요구사항을 분석하고, 포트앤 어댑터 계열의 아키텍처에 Aggregate(Root), Entity VO, Repository 등 DDD 요소들을 활용하여 어플리케이션을 설계한다. 그러나 막상 이러한 설계대로 어플리케이션을 구현하다보면 많은 난관에 부딪힌다(물론 잘 끝날 수도 있다). 왜 그럴까? 내가 놓치고 있던 부분은 무엇일까? 이 글에서는 내가 그동안 DDD 를 한답시고 놓친 것들에 대해 얘기해보고자 한다.  1. 조회는 DDD 의 관심사가 아니다실제 웹어플리케이션 로직을 보면 커맨드 뿐 아니라 쿼리 역시 꽤나 복잡하다. 심지어 ERD 엔티티 간의 참조무결성이 완벽히 지켜지지 않아 쿼리로 해결이 안 돼.. 2024. 7. 18.
[DB / Oracle] SQL 튜닝 기본 - 실행계획과 옵티마이저 0. 들어가며 지난 한 주간 SQL 튜닝 교육을 받으러 다녀왔는데요, DBA가 아닌 이상 알기 어려운 지식들을 많이 배울 수 있었던 기회였습니다. 이번 포스팅에서는 그 중 실행계획과 옵티마이저에 대해 정리해보고자 합니다. 목차 1. SQL 튜닝의 필요성과 절차 2. SQL 처리단계 3. 실행계획과 옵티마이저 4. 쿼리 힌트 5. 마무리 1. SQL 튜닝의 필요성과 절차 1-1. SQL 튜닝이란? 튜닝이란 시스템이 최적의 성능을 발휘할 수 있도록 시스템을 유지·개선 하는 일을 의미합니다. 우리가 구축한 시스템이 최적의 성능을 발휘하기 위해선 최소한의 자원으로 최대한의 일을 할 수 있어야 할텐데요, 이런 의미에서 SQL 튜닝은 가장 적은 작업량으로 사용자가 원하는 결과를 얻어낼 수 있도록 SQL 쿼리를 작성.. 2022. 12. 30.
[Java / SpringBoot] Exception Class 설계 및 Exception Handler 적용해보기 0. 들어가며 이번 포스팅에서는 최근 경험했던 Spring Boot 에서의 Exception Class 설계와 Exception handling 에 대해 다뤄보고자 합니다. 처음에 Exception Class 를 만들어야 한다는 요구사항을 받았을 때 단순히 개발이 어렵기보다는 어떤 식으로 설계해야 좋은 어플리케이션이 될 수 있을지 고민을 많이 했었는데요, 그 문제해결의 과정을 공유드리도록 하겠습니다. 1. Exception Class 를 사용하는 이유 1-1. 표준 예외를 사용하라 Exception Class 를 정의해야 한다는 이야기를 듣고 가장 먼저 찾아본 자료는 Effective Java 였습니다. 사전에 정의되어 있는 예외를 사용하는 것이 아니라, 직접 예외 클래스를 정의해야하는 상황에서는 무엇을.. 2022. 12. 11.
[JPA / Hibernate] 복합키(Composite Key)를 갖는 객체(Entity) 간의 연관관계 매핑 보통의 JPA 예제에서는 단일 컬럼을 PK로 갖는 엔티티 간의 연관관계 매핑을 주로 다룹니다. 그러나 실제로 Legacy System을 JPA 기반의 어플리케이션으로 개발하다보면 기존의 데이터 모델이 복합키를 갖고, 식별관계로 매핑된 경우를 경우를 쉽게 볼 수 있습니다. 이번 글을 통해 이런 경우 어떻게 JPA를 활용할 수 있는지 다뤄보고자 합니다. 목차 기본적인 1:N 연관관계 매핑 @IdClass를 통한 복합키(Composite Key) 설정 DB에서 식별관계를 갖는 객체의 연관관계 매핑 요약 기본적인 1:N 연관관계 매핑 아래의 이미지는 이번 포스팅에서 예시를 들기 위해 설계한 1:N 관계의 엔티티 입니다. 회원을 의미하는 Member 와 회원별 주문내역을 다루는 MemberOrderHistory .. 2022. 12. 7.
반응형