본문 바로가기

전체 글58

리팩터링(2) - 문제 해결하기 지난 글에서 리팩터링의 필요성을 직접 느끼고 문제 상황을 정의한 경험을 공유했습니다. 이번 글에서는 문제를 어떻게 해결해나갔는지에 대해 작성해보겠습니다. 1. 각 도메인 코드와 알람 코드 분리 리팩터링하기 이전의 코드도 의존관계는 단방향으로 잘 흐르고 있었습니다. 각 도메인에서 알람을 참조하는 형태로 이뤄졌고, 알람은 외부 도메인에 대한 정보가 전혀 없었습니다. 덕분에 의존성에 대한 문제는 전혀 존재하지 않았습니다. 다만 각 도메인에서 알람을 전송하기 위한 코드들이 많이 있었고 이를 도메인에서 떼어내기 위해 여러 고민을 했고 최종적으로 도메인 이벤트라는 방법을 선택하게 됐습니다. 도메인 이벤트를 사용하면 다음과 같은 장점이 있었습니다. 절차지향의 코드를 객체지향 코드로 전환할 수 있다. 외부 패키지와의 .. 2022. 9. 24.
리팩터링(1) - 필요성과 계획 수립 리팩터링(2) - 문제 해결하기 리팩터링(3) - 하다보니 보이는 것들 안녕하세요. 이번 시리즈는 우아한테크코스 쿠폰 문화를 관리하는 땡쿠의 코드를 리팩터링하며 겪은 경험을 정리하고자 작성하였습니다. 땡쿠 서비스는 쿠폰을 주고 받고, 예약을 요청하고, 예약을 승인하면 만남이 생성되는 주요 흐름이 있고 부가적으로 재미요소인 마음 보내기라는 기능이 있습니다. 모든 상호작용 과정에는 알람이 생성되고, 우아한테크코스 슬랙 그룹으로 알람을 전송하게됩니다. 그 중 저는 기존의 알람서비스를 리팩터링하였는데요. 이번 포스팅은 리팩터링의 필요성과 계획 수립에 대해 작성해보겠습니다. 필요성과 코드 이해 사실 가장 먼저 물음을 가져야 할 부분은 리팩터링하는 이유였습니다. 이미 서비스에 배포도 되어있고 문제 없이 잘 굴러가고.. 2022. 9. 24.
부하테스트(2) - 부하테스트 적용하기 안녕하세요. 이번 글에서는 부하테스트 적용하기에 대해서 포스팅해보겠습니다. 앞선 글을 보며 우리 서비스는 왜 부하테스트를 해야할까, 부하테스트에는 어떤 종류가 있고 어떻게 실행을 계획할 수 있을까에 대해 충분히 고민할 수 있었을 것입니다. 이제 부하테스트를 진행하면서 예상하는 성능, 안정성에 도달하기 위해 개선 - 테스트의 반복적인 과정이 진행될텐데요. 서비스의 부하를 잘 측정하기 위해서는 적절한 부하테스트 도구를 먼저 선정해야 합니다. 1. 부하테스트 도구 선정 서비스에 대한 세밀한 부하테스트를 진행하기 위해서는 시나리오 기반의 부하테스트가 가능한 도구를 사용하는 것이 주요합니다. 저는 JMeter, Ngrinder, K6를 사용해보았고, 각 툴에 대해 제가 느낀 점은 아래와 같습니다. JMeter J.. 2022. 9. 20.
부하테스트 (1) - 부하테스트의 종류와 목적 안녕하세요. 이번 글에서는 부하테스트의 종류에 대해서 설명해보겠습니다. 앞선 포스팅에서 작성했 듯 부하테스트에는 여러가지 목적이 있습니다. 시스템이 잘 돌아가는 지 확인할 수 있다. 성능 지표를 확인할 수 있다. 부하 상황에서 잘 견딜 수 있는지, 자동으로 회복이 되는지 확인할 수 있다. 위 내용과 같이 다양한 목적을 달성하기 위해 부하테스트에는 각 목적을 달성하기 위한 테스트가 있습니다. 0. 부하테스트의 종류 위 사진과 같이 부하테스트는 크게 4가지로 분류됩니다. Smoke Test Load Test Stress Test Soak Test 하지만 이번 포스팅에서는 1, 2, 3번 부하테스트 방식에 대해 설명해보고자 합니다. ( 4번은 학습 경험이 없습니다.. ) 지금부터 차례대로 3가지 부하테스트 방.. 2022. 9. 9.
부하테스트 (0) - 고가용성과 부하테스트 부하테스트(1) - 부하테스트의 종류와 목적 부하테스트(2) - 부하테스트 적용하기 부하테스트(3) - WAS, Connection Pool 설정하기 부하 테스트를 왜 해야하는가?에 대한 의문은 고가용성의 서비스를 만들기 위한 노력이 없다면 갖기 힘든 의문이라고 생각합니다. 따라서 부하테스트 시리즈의 첫 글을 고가용성과 부하테스트로 시작해보려 합니다. 물론 저 또한 큰 서비스를 운영해본 경험이 없기 때문에 글에 일부 오점들이 드러나겠지만, 부하테스트를 학습하는 과정에서 갖게 된 제 생각과 운영 중인 작은 서비스에 적용한 경험을 솔직하게 기록한다고 생각하며 이 시리즈를 시작합니다. 1. 고가용성 최근 채용 공고를 둘러 보면 흔히 고가용성이라는 단어를 들어볼 수 있습니다. 쉽게 볼 수 있는 단어이지만 서비스.. 2022. 9. 8.
의존관계 분리 경험 공유(2) 안녕하세요. 땡쿠팀의 백엔드 개발자 후니입니다. 지난 포스팅에 이어서 강한 의존관계를 분리하는 방법을 소개하고자 하는데요. Separated Interface 패턴을 이용하여 의존관계를 분리한 제 경험을 작성해보겠습니다. Separated Interface? 개발을 하다보면, 서로 다른 두 개의 시스템 파트의 결합도를 줄임으로써 설계의 수준을 개선할 수 있습니다. 일반적인 구조를 부정하고 다른 패키지를 참조해야 할 때 이 패턴을 주로 사용할 수 있는데요. 구현체를 상대 패키지에 두고, 인터페이스를 현재 패키지에 위치시키는 것입니다. 그러면 클라이언트는 구현체에 대한 정보는 참조할 필요 없이 현재 패키지의 인터페이스만 참조하게 되겠죠? 문제 상황 단건 쿠폰을 조회할 때, 쿠폰과 연관된 예약 / 만남 정보를.. 2022. 8. 10.