우아한 테크코스 8기 프리코스 3주차 회고

이 글의 목차5개
  1. 2주차의 아쉬움
  2. 코드 리뷰
  3. 3주차 미션: 로또
  4. 미션을 수행하며 들었던 고민들
  5. 3주차를 마치며

2주차의 아쉬움

2주차 미션이 끝나고 아쉬움이 남았다.

1주차에 비하면 MVC 패턴과 레이어드 아키텍처를 도입하며 분명 구조적으로는 발전했다.

하지만 그 구조 속을 들여다보면, 정작 중요한 로직이나 데이터의 흐름은 여전히 어설프고 견고하지 못하다는 느낌을 지울 수 없었다.

새로운 설계를 적용하는 데에만 급급한 나머지, 코드의 디테일을 놓쳤고 테스트 코드도 제대로 작성하지 못했다.

물론, 새로운 것을 처음 시도할 때 완벽하게 접목하는 것은 불가능하다는 것을 알고 있지만, 공부를 하면 할수록 내 코드의 잘못된 점들이 많이 보여서 아쉬웠던 것 같다.

3주차 과제에서는 2주차에 세운 구조를 더 탄탄하게 다지고, 그 안의 로직들을 더 명확하게 하자는 목표를 세웠다.

코드 리뷰

2주차 과제가 끝난 후에도 여러 사람에게 코드 리뷰를 요청했다. 감사하게도 몇몇 분들이 내 코드의 근본적인 부분들을 지적해주셨다.

주요 피드백은 아래와 같았다.

“상태 없이 동작만 수행하는 클래스는 유틸리티 클래스로 분리하라.” “DTO의 매개변수로 도메인을 포함시키지 말아야 한다.” “private, static 키워드를 명확한 기준 없이 남용하고 있다.” “모델을 VO로 관리하여 스스로 검증하도록 만들어라.

여러 조언 중에서도 내게 가장 크게 와닿은 것은 **“모델을 VO(Value Object)로 관리하여 스스로 검증하도록 만들라”**는 것이었다.

2주차까지의 나는 데이터를 원시값(primitive type) 이나 단순한 컬렉션으로 다루며, Service 레이어에서 이 값들을 검증하려했다.

하지만 VO와 ’일급 컬렉션(First-Class Collection)’에 대해 공부하면서, 내가 무엇을 잘못 생각하고 있었는지 명확히 알게 되었다.

핵심은, 객체가 스스로의 존재를 책임지도록 하는 것이었다.

값 자체를 객체로 포장하고, 그 객체가 생성되는 시점에 스스로를 검증한다면, 그 도메인 객체가 존재한다는 사실 자체가 이미 그 값의 무결성을 입증한다.

3주차 미션: 로또

3주차 미션은 작년과 같은 ‘로또’ 미션이었다.

이 문제는 특이하게도 Lotto 클래스 코드가 일부 작성된 채로 제공되었다.

이외에도 Lotto 클래스에 대해 다음과 같은 조건들이 제시되었다.

“필드는 private으로 유지되어야 한다.” “numbers를 제외한 새로운 필드를 추가할 수 없다.”

나는 프리코스를 준비하는 스터디를 진행하며 로또 문제를 이미 풀어본 적 있었다.

하지만, 당시에는 이 제약조건에 대해 큰 의미를 두지 않고 그저 핸디캡 정도라고 생각했다.

그러나, 이번 프리코스를 진행하면서는 이 조건을 다시 보았을 때 이 객체를 일급 컬렉션으로 다루고, 도메인으로서의 책임을 부여하라는 명확한 가이드라인이라는 것임을 알 수 있었다.

1, 2주차에 받았던 피드백과 3주차 미션이 제시하는 설계 방향이 정확히 일치함을 깨닫는 순간이었다.

미션을 수행하며 들었던 고민들

3주차 미션에서는 많은 도메인들을 만들고 검증과 로직을 책임지도록 했다.

이런 경험이 처음이었기에, 자연스럽게 많은 고민과 선택들을 했다.

보너스 번호는 단 하나의 숫자인데, 이것만을 위해 클래스를 만드는 것이 과연 효율적일까? 값을 주고받을 때, 원시값을 써야 할까, 도메인 객체를 그대로 매개변수로 넘겨도 될까?

1, 2주차에서는 이 기술을 쓰는지에 대한 것이었다면, 3주차에서의 고민은 그 기술 속에서 누구에게 책임을 맡겨야 하는지에 대해 고민해야했다.

어느 것이 정답인지 명확하지는 않았다. 그래서 나는 각 선택지의 장단점을 따져가며 나름의 기준을 세우고, 왜 이 객체가 이 책임을 져야 하는지 스스로 설명할 수 있도록 코드를 작성했다.

이런 고민을 하고 있다는 사실 자체가 스스로의 성장을 보여주는 증거라고 생각했다.

3주차를 마치며

3주차 과제를 제출하는 순간까지도 이 설계가 최선인가 하는 의문은 생겨났다.

새로운 설계를 적절하게 적용하는 것은 정말 어려웠고, 더 나은 코드를 작성할 수 있지 않았을까 하는 욕심도 남는다.

그럼에도 불구하고, 1, 2주차에는 무엇을 해야 할지조차 몰랐던 것들, 왜 해야 하는지 몰랐던 것들에 대해 이제는 나름의 기준을 가지고 판단하고 적용했다는 사실이 기쁘다.

배우면 배울수록 나의 부족함이 더 크게 와닿고, 공부해야 할 것들이 산더미처럼 느껴진다.

하지만 이 낯선 두려움과 막막함조차, 내가 성장하고 있기에 느낄 수 있는 당연한 감정이라 생각한다.

전체 글 보기