본문 바로가기

전체 글59

테스트 코드 최적화 여행기 (5) 안녕하세요 깃들다팀의 손너잘입니다. 드디어 마지막 글이네요! 저번 글에서는 인수테스트의 조회용 테스트와 그외 테스트를 분리하여 테스트 속도의 최적화가 가능함을 확인해 봤습니다. 이번글에서는 실제로 테스트에 이를 적용해 보도록 하겠습니다. 다중 데이터 소스와 DB 선택 전략 다중 데이터소스를 사용하는 자세한 방법에 대해서는 [링크]를 참고하여 주세요! 이전 글에서 저는 위와같은 테스트 환경을 구상했습니다. 이를 구현하기 위해서 2개의 h2를 띄우도록 하였습니다. 위와 같은 방식으로 read, wirte DataSouce bean을 생성하였습니다(이제보니 write db라는 말이 이상하네요.. 위 그림의 CUD DB가 write db라고 생각해 주시면 감사하겠습니다 🙂) 그리고 상황에 따라 특정 DataSo.. 2021. 10. 7.
테스트 코드 최적화 여행기 (4) 안녕하세요 깃들다의 손너잘 입니다. 이 글을 시작하기 전에 저희 프로젝트의 도메인에 대한 설명이 필요할 것 같은데요... 그냥 인스타그램이라고 생각하시면 편합니다! 그러면 글 시작하겠습니다! 드디어 제가 적용한 마지막 테스트 최적화 방법에 대한 글을 작성하게 되었네요..! 마지막으로 제가 적용시킨 방법은 인수테스트의 조회용 테스트와 그 외 테스트를 분리하여 진행하는것입니다. 이게 무슨소리인가..? 하지요..? 일단, 이에 대한 자세한 설명을 하기 전에 인수테스트의 어느 부분이 문제였는지를 설명해 보겠습니다. 전체 테스트 시간을 봤을 때 가장 오랜 시간을 차지하는 테스트는 인수테스트 입니다. 실제로 HTTP 요청을 전송하여 테스트를 진행하기 때문에 그만큼의 딜레이가 발생하기 때문입니다. 따라서 인수테스트의.. 2021. 10. 7.
테스트 코드 최적화 여행기 (3) 우리는 처음에 Context를 재사용 하기 위해서 Dirties Context를 제거했습니다. 그리고 그를 통해 비약적인 테스트 속도 개선을 이뤄냈습니다. 그래서 저는 이제 모든 테스트가 동일한 Context를 돌려 사용한다고 생각했고, 안심하고 있었습니다. 그런데 전체 테스트를 진행했을때 이상한점을 찾았습니다. 테스트가 잘 진행되다가 중간중간에 한번씩 뚝,뚝, 걸리는 부분이 있는겁니다. 그래서 그 뚝 뚝 걸리는 테스트를 확인해 봤더니 왠걸... 새로운 Context를 Load하고 있었습니다. 왜 이런일이 발생하는가 소스를 비교하고 실험해본 결과, 스프링이 테스트에서 컨텍스트를 관리하는 방법과 관련이 있었습니다. 스프링은 기본적으로 테스트를 진행할 때 Context를 캐싱하여 여러 테스트에서 돌려 사용할.. 2021. 10. 7.
테스트 코드 최적화 여행기 (2) 안녕하세요 깃들다팀의 손너잘 입니다. 테스트 최적화의 두번째 글을 작성하게 되었습니다. 이전 글에서 작성하였듯, 첫번째로 할 것은 DirtiesContext의 제거입니다. 많은 프로젝트에서 매번 테스트의 환경을 초기화 시키기 위해 DirtiesContext를 사용합니다. 하지만 DirtiesContext는 스프링 테스트가 매 테스트마다 Application Context를 다시 Load하도록 합니다. 이는 스프링 테스트가 제공해주는 Application Context의 캐싱의 이점을 전혀 가져가지 못합니다. 깃들다팀 또한 처음 프로젝트를 시작했을 떄 테스트의 환경을 초기화해주기 위해(정확히는 인메모리 DB초기화를 위함이지만요) DirtiesContext를 사용했습니다. 심지어 BEFORE_EACH_TES.. 2021. 10. 7.
테스트 코드 최적화 여행기 (1) 우테코 3단계를 진행하면서 프로젝트로 깃허브 기반의 SNS를 제작하고 있다. 팀의 컨벤션으로 테스트코드를 정말 빡시게 짜고있는데, 덕분에 리팩토링, 트러블 슈팅 등 많은 부분에서 큰 도움을 얻고 있다. 하지만 프로젝트의 기능이 하나식 추가되고 커지면서 문제점이 발생하는데, 바로 큰 도움을 준 테스트 코드가 그 주인공이다. 테스트 코드를 작성하다보니 어느 순간 500개가 넘는 TC가 쌓였다. 하지만 그에 따른 테스트 시간이 비약적으로 증가하였다. 체감상으로는 테스트가 쌓일수록 지수그래프를 따라 상승하는 것 같다. 또한 그 뿐만 아니라, 짧은 시간안에 많은 기능들을 구현하고자 하니 팀원들간의 테스트 컨벤션이 맞질 않아 테스트 픽스쳐가 여기저기 흩뿌려져 있고, 인수테스트의 경우 api를 호출하는 코드가 여기저.. 2021. 10. 7.
우리는 왜 CI/CD에 실패하였는가? 이전글에서 필자는 필자가 생각하는 CI/CD에 대하여 논하였다. CI/CD란 무엇인가? CI/CD란 무엇인가? 프로젝트를 진행하면서 CI/CD 를 통한 자동화 배포 프로세스를 구축하는 경우가 많다. 우테코에서 이번 팀 프로젝트를 진행하면서 우리팀 역시 CI/CD 프로세스를 구축했으나 결론적으로 CI/CD를 제 bperhaps.tistory.com 그렇다면 이번 글에서, 왜 필자가 이번 프로젝트에서 CI/CD를 실패했다고 생각했는지에 대하여 작성해 보도록 하겠다. 엄밀히 말하자면 필자는 CD보다는, CI에 실패했다고 생각하고 있다. 이전글에서도 말했듯, CI의 가장 큰 목적은 머지데이의 안좋은점을 제거하는데 있다고 생각한다. 하지만 프로젝트를 진행하면서 나름 치밀하게 CI/CD를 구축했다고 생각했음에도 불.. 2021. 9. 27.