2025. 11. 11. 22:00ㆍ우아한테크코스 8기
우아한테크코스 8기 글 목록
1. [0주 차] 지원 마감 하루 전 날, 우테코 8기 지원하기
2. [1주 차] 우테코 8기 프리코스 첫 번째 미션 – 문자열 덧셈 계산기
3. [2주 차] 우테코 8기 프리코스 두 번째 미션 – 자동차 경주
4. [3주 차] 우테코 8기 프리코스 세 번째 미션 – 로또
5. [4주 차] 우테코 8기 오픈 미션 - Java로 구현하기 1
6. [현재글] [4주 차] 우테코 8기 오픈 미션 - Java로 구현하기 2
7. [5주 차] 우테코 8기 오픈 미션 - Java로 구현하기 3
1. 과제 개요
내 두 번째 오픈미션은 JAVA 2주 차 미션 경주였다.
혹시나 미션이 금방 끝날 것 같아서
확장성 있게 계획했던 점이 도움 됐다.
2주 차 BE 미션 깃허브 저장소다.
2. 문제 접근 방식
2.1. 접근 방식
해결한 미션이라 기존 리드미대로 설계하면 되지만
능동적인 부품으로 만들고 싶어서 다시 설계했다.
2.2. 설계 방향
가장 중요하게 본 것은 검증이었다.
사용자 입력에서 검증을 이루면
바로 가공해서 사용할 수 있지만
부품이 스스로 판단하지 못한다는 단점이 있었다.
최종 코테 대비를 위해 3주 차에 제공된 로또 파일의 제약사항을 임의로 부여했다.
어떤 값을 집어넣어도 부품이 만들어지면 문제였다.
그래서 부품 내부에 검증을 적용했다.
부품 내에서 모든 검증을 이루면 코드 작성면에서 편리하지만
"중복 이름 검출" 같은 부품 생성 측면에서 효율적이지 않은 검증 조건도 있었다.
특히 자동차를 생성하기 위해 이름을 부여해야 하는데
다른 자동차 이름도 같이 전달하는 것은 비효율적이었다.
그래서 오랜 고민 끝에
검증을 입력, 부품으로 나누었다.
입력은 다중 요소를 검증하고
부품은 단일 요소를 검증하도록 했다.
public class Validator {
// 사용자 입력 검증
public static void validateCarNames(String carNames) {
String[] carNameArr = Arrays.stream(carNames.split(","))
.map(String::trim)
.toArray(String[]::new);
String[] distinctCarNameArr = Arrays.stream(carNameArr)
.distinct()
.toArray(String[]::new);
if (carNameArr.length != distinctCarNameArr.length) {
throw new IllegalArgumentException("[ERROR] 자동차 이름이 중복됩니다.");
}
}
// 자동차 부품 검증
public static void validateCar(String name) {
String trimName = name.trim();
if (trimName.isEmpty()) {
throw new IllegalArgumentException("[ERROR] 부여된 자동차 이름이 없습니다.");
}
if (trimName.length() > 5) {
throw new IllegalArgumentException("[ERROR] 자동차 이름은 5글자 이하로 설정해야 합니다.");
}
}
}
2.3. 단위 테스트
이번에 @Nested를 사용해서 @Test를 묶었다.
class도 한글로 작성할 수 있어서 신기했다.
2.4. 통합 테스트
클래스를 모킹해야 하는 데 그러려면 외부 라이브러리를 사용해야 했다.
마침 제공된 파일에서 Mockito가 있었다.
build.gradle 파일 의존성에 추가했다.
이 파일은 JavaScript의 package.json 같은 역할이었다.
모킹을 해야 하는 데 문서가 불친절해서 미쳐 돌아버리는 줄 알았다.
문서를 읽어도 when, verfify 어떻게 쓰는지 감이 안 왔다.
그나마 ai가 있어서 진입을 시도할 수 있었다.
이마저도 없었으면 아직까지도 모킹 하고 있을 것 같다.

3. 배운 점과 느낀 점
이번 미션도 동일하게
설계부터 구현까지 2일 걸렸다.
내가 보기에 구현 시간에서 가장 큰 비중을 가지는 건 테스트였다.
뭘 테스트해야 할지는 아는데
어떻게 테스트 코드를 작성할지 탐색하는 데 한 세월이었다.
특히 통합 테스트가 문제였다.
단위 테스트는 익숙해져서 이제는 괜찮다.
이번 미션을 통해서 왜 인스턴스를 생성하고 넘기는지 이해했다.
다 테스트 때문이었다.
4. 커뮤니티 참여
저번 오픈 미션과 다른 점이 있다면
이제는 FE 뿐만 아니라 BE 코드리뷰에도 참여하고 있다.
물론 BE 코드 리뷰는 완료한 미션 내에서다.
이번 4주 차에는 회고글이 올라오지 않아서
지금이 4주 차가 맞는지 살짝 혼동했다.
시작할 때 주 차 별 회고록을 작성한다고 한 만큼
프리코스가 끝날 때까지 해볼 계획이다.

5. 학습 및 앞으로 계획
BE 로또 미션 하나 남았다.
이전에 경주 미션에서 궁금했던 점을 정리하고
다시 미션을 시작할 예정이다.
다음 주 김장이라 미리 끝 맞춰 놓아야 마음이 놓일 것 같다.
'우아한테크코스 8기' 카테고리의 다른 글
| 우테코 8기 최종 테스트 선발 발표 30분 전, 한 달 되돌아보기 (+결과) (0) | 2025.12.29 |
|---|---|
| [5주 차] 우테코 8기 오픈 미션 - Java로 구현하기 3 (0) | 2025.11.18 |
| [4주 차] 우테코 8기 오픈 미션 - Java로 구현하기 1 (0) | 2025.11.08 |
| [3주 차] 우테코 8기 프리코스 세 번째 미션 – 로또 (0) | 2025.11.04 |
| [2주 차] 우테코 8기 프리코스 두 번째 미션 – 자동차 경주 (0) | 2025.10.28 |