해결된 질문
작성
·
34
·
수정됨
1
안녕하세요.
양질의 강의 덕분에 제한된 시야에서 새로운 인사이트를 얻을 수 있었습니다.
섹션 18 - 안정감 있는 아키텍처 개선 챕터를 수강하고 있으며, 현재까지 강의를 들으면서 궁금 했던 내용 두 가지를 여쭈어보고 싶습니다.
"TDD를 사용해 만들어진 먹구름 아키텍처를 어느 시점에서 개선 해야 할까요?"
질문을 하게 된 계기는 전형적으로 많이 사용되는 레이어드 아키텍처를 첫 기능 구현 단계에서 부터 차용하여 개발을 진행 해왔는데, 왜 이 아키텍처를 사용했을까? 란 의문이 없었거든요.
강의에서는 흔히 말해 스마트 UI 패턴으로 요구사항을 충분히 충족 해오며 점진적으로 개선 해왔습니다.
그러다 모종의 이유로 내부 아키텍처를 개선 하면서 진행이 되었는데, 아키텍처를 개선 해야겠다고 느끼는 요소가 무엇인지 궁금합니다.
요구사항이 추가 되었을 때 개발 비용을 최소화 하여 충족 시킬 수 있는가? 라고 생각을 하고 있는데, 현재 까지 불편함을 느낄 정도의 확장성을 강요 받아본 적 없어서 감을 못 잡는 것 같습니다.
"어떤 영역을 대상으로 테스트를 작성해야할까?"
위 질문 내용과 답변을 보고 무언가 감이 오는 듯 하나, 아직 정리되지 않는 느낌입니다.
API 계층의 동작이 가볍다 또는 무겁다의 판단 기준
API 계층의 동작이 가벼운지 무거운지에 대한 판단은 어떻게 하시는지 궁금합니다.
해당 강의에선 API 계층의 동작이 가벼웠기 때문에 API 스펙에 인수테스트를 진행 한 것 같습니다.
서비스 대상으로 테스트를 많이 실행하고, API 는 간단한 성공 경우에 테스트를 한다.
이 케이스에선 아래와 같은 테스트 시나리오가 있다고 가정한다면 테스트를 어떻게 하면 좋을까요?
- username 속성이 null 이거나 공백이라면 HasUsernameNullOrEmpty 예외를 반환한다
- username 속성이 올바른 형식을 따르지 않으면 InvalidUsername 예외를 반환한다
- username 속성이 올바른 형식을 따르면 User 객체를 생성한다
서비스 테스트에서 위 3가지 케이스에 대해 검증
인수 테스트에서 username 을 정확히 입력한 경우 상태코드와 유저에 대한 정보를 반환 하는지 검증
이렇게 테스트를 구성한다고 이해 했는데 제대로 이해한걸까요?
다시 한 번 질문을 빌미로 감사 인사를 드리면서 고견 부탁드리겠습니다.
항상 건강하세요!
답변 1
1
제로콜라님 안녕하세요. 강의 수강해주시고 좋은 질문도 남겨주셔서 감사드립니다. 👍
주신 질문들에 대해서 제 생각을 말씀드려볼게요.
질문 1. TDD를 사용해 만들어진 먹구름 아키텍처를 어느 시점에서 개선 해야 할까요?
팀마다 상황이 매우 다양한 이유로 아키텍처를 개선할 수 있습니다.
새로운 요구사항을 만족시키는 데에 코드베이스 이해 등에 소요되는 비용이 너무 크다고 느껴지는 경우.
새로 합류한 팀원 입장에서 코드베이스 온보딩이 쉽지 않은 경우.
팀원의 누군가가 먹구름 아키텍처에 과한 반감을 갖는 경우. 지식과 경험에 따라서 거시적 아키텍처 보다 작은 코드 설계에 관심이 많고 비즈니스 가치와 생산성에 큰 문제가 없더라도 특정 설계를 선호하거나 비선호할 수 있습니다. 제품 개발 생산성에는 가끔 구성원의 작은 동기부여가 영향을 줄 수도 있으니, 아키텍처 변경 비용이 그리 크지 않다면(TDD를 사용해 왔다면 그럴 가능성이 좀 더 높아지겠죠) 개선하는 것도 고려할 수 있습니다.
질문 2. 어떤 영역을 대상으로 테스트를 작성해야할까?
API 계층의 동작이 가볍다 또는 무겁다의 판단 기준
저는 팀의 프로그래머들이 테스트를 실행할 때 느끼는 감정을 가장 먼저 고려합니다. 절대적인 기준이 있는 것은 아니고 프로그래머들이 테스트 실행에 대해서 주로 느리다(무겁다)고 느끼면 개선하고 불편함을 느끼지 않는다면 굳이 개선하지 않습니다.
제가 실무에서 사용하는 장비(m4 맥북)에서는 강의 촬영 환경보다 테스트 실행 성능이 높은데요, 강의 예제 프로젝트의 124개 테스트 실행에 1.7초 정도 걸립니다. 저는 보통 1,000개 테스트 실행에 30초 이하가 걸리면 느리다는 느낌을 별로 받지 않습니다. 물론 앞으로 제 감정은 달라질 수 있죠.
서비스 대상으로 테스트를 많이 실행하고, API 는 간단한 성공 경우에 테스트를 한다.
저는 사례로 말씀해주신 것처럼 할 것 같습니다. 🙂
혹시 답변이 부족했다면 말씀해주세요!