본문 바로가기

우아한테크코스8

우아한테크코스를 마무리하며 우아한테크코스가 초반 게더타운에서 어색하게 대화했던 때가 생각난다. 새벽 늦게까지 게더타운에서 떠들며 시간을 보내는 게 왜 그렇게 재밌던지. 다음 날 오전에 일어나야 해도 게더타운에서 크루들과 우스꽝스런 이야기를 하는 게 그렇게 웃겼다. 보이는 라디오도 기억에 남는다. 나라는 사람을 다른 크루들에게 강하게 각인 시킨 날인 것 같다. 후니 오빠라는 역할을 수행했는데, 그게 재밌었던 것 같다. 사람들도 많이 좋아해주고 좋아하는 사람들을 보니 나도 덩달아 기뻤다. 페어 프로그래밍이라는 것을 처음 하게 됐다. 의견을 주고 받으며 미션을 수행했는데, 솔직히 처음에는 많이 서툴렀다. 뭔가 내 주장을 너무 많이 펼친다는 생각이 많이 들었다. 그래도 가면 갈 수록 좋아졌던 것 같고.. 또 페어를 했던 크루들에게 많이 .. 2022. 11. 11.
리팩터링(3) - 하다보니 보이는 것들 지난 글에 이어 리팩터링을 하다보니 보이는 것들에 대해 작성해보겠습니다. 리팩터링은 단순히 코드의 개선을 의미하지 않습니다. 코드가 개선되는 만큼 리팩터링한 개발자의 성장, 팀원의 성장으로 이어집니다. 제가 리팩터링하면서 볼 수 있었던 모든 성장, 개선에 대해 설명해보겠습니다. 리팩터링한 개발자의 성장 앞선 글들을 보았다면 리팩터링을 하기 위해 많은 과정을 거치는 것을 알 수 있을텐데요. 그 과정을 거치다보면 자연스럽게 타인이 작성한 코드를 이해하는 능력이 길러집니다. 물론 매 PR마다 코드리뷰를 진행하지만 코드 리뷰를 하는 것과 직접 팀원이 개발한 코드를 사용하는 것은 정말 다른 일입니다. 위 PR의 64개의 comment 중 절반 이상을 제가 달았음에도 막상 직접 사용하려 할 때는 이 코드를 작성한 .. 2022. 9. 25.
리팩터링(2) - 문제 해결하기 지난 글에서 리팩터링의 필요성을 직접 느끼고 문제 상황을 정의한 경험을 공유했습니다. 이번 글에서는 문제를 어떻게 해결해나갔는지에 대해 작성해보겠습니다. 1. 각 도메인 코드와 알람 코드 분리 리팩터링하기 이전의 코드도 의존관계는 단방향으로 잘 흐르고 있었습니다. 각 도메인에서 알람을 참조하는 형태로 이뤄졌고, 알람은 외부 도메인에 대한 정보가 전혀 없었습니다. 덕분에 의존성에 대한 문제는 전혀 존재하지 않았습니다. 다만 각 도메인에서 알람을 전송하기 위한 코드들이 많이 있었고 이를 도메인에서 떼어내기 위해 여러 고민을 했고 최종적으로 도메인 이벤트라는 방법을 선택하게 됐습니다. 도메인 이벤트를 사용하면 다음과 같은 장점이 있었습니다. 절차지향의 코드를 객체지향 코드로 전환할 수 있다. 외부 패키지와의 .. 2022. 9. 24.
리팩터링(1) - 필요성과 계획 수립 리팩터링(2) - 문제 해결하기 리팩터링(3) - 하다보니 보이는 것들 안녕하세요. 이번 시리즈는 우아한테크코스 쿠폰 문화를 관리하는 땡쿠의 코드를 리팩터링하며 겪은 경험을 정리하고자 작성하였습니다. 땡쿠 서비스는 쿠폰을 주고 받고, 예약을 요청하고, 예약을 승인하면 만남이 생성되는 주요 흐름이 있고 부가적으로 재미요소인 마음 보내기라는 기능이 있습니다. 모든 상호작용 과정에는 알람이 생성되고, 우아한테크코스 슬랙 그룹으로 알람을 전송하게됩니다. 그 중 저는 기존의 알람서비스를 리팩터링하였는데요. 이번 포스팅은 리팩터링의 필요성과 계획 수립에 대해 작성해보겠습니다. 필요성과 코드 이해 사실 가장 먼저 물음을 가져야 할 부분은 리팩터링하는 이유였습니다. 이미 서비스에 배포도 되어있고 문제 없이 잘 굴러가고.. 2022. 9. 24.
부하테스트 (1) - 부하테스트의 종류와 목적 안녕하세요. 이번 글에서는 부하테스트의 종류에 대해서 설명해보겠습니다. 앞선 포스팅에서 작성했 듯 부하테스트에는 여러가지 목적이 있습니다. 시스템이 잘 돌아가는 지 확인할 수 있다. 성능 지표를 확인할 수 있다. 부하 상황에서 잘 견딜 수 있는지, 자동으로 회복이 되는지 확인할 수 있다. 위 내용과 같이 다양한 목적을 달성하기 위해 부하테스트에는 각 목적을 달성하기 위한 테스트가 있습니다. 0. 부하테스트의 종류 위 사진과 같이 부하테스트는 크게 4가지로 분류됩니다. Smoke Test Load Test Stress Test Soak Test 하지만 이번 포스팅에서는 1, 2, 3번 부하테스트 방식에 대해 설명해보고자 합니다. ( 4번은 학습 경험이 없습니다.. ) 지금부터 차례대로 3가지 부하테스트 방.. 2022. 9. 9.
[Java] JUnit으로 System.in, System.out 테스트하기 deep dive 레벨 1 미션 레이싱카는 콘솔을 기반으로 진행됩니다. 1단계를 진행하며 작성한 단위 테스트에서는 입, 출력값을 테스트 할 필요가 없었지만 2단계 미션인 MVC리팩토링 과정에서는 컨트롤러를 테스트하는 방법에 대해 많이 고민하게 될 텐데요. 이번 포스팅에서는 입, 출력값에 대한 테스트를 추상클래스로 작성하여 상속을 통해 실제 테스트가 진행되는 코드를 깔끔하게 유지하면서 I/O를 테스트 할 수 있는 코드를 작성해보고자 합니다. Scanner 와 System.in 먼저 테스트를 진행하기 위해서는 사용자가 원하는 입력값을 입력해야 합니다. 이번 미션의 프로덕션 코드에서 아래 예시처럼 Scanner 인스턴스를 System.in 인자로 생성 했을텐데요. Scanner scanner = new Scanner(Syste.. 2022. 2. 16.