우아한테크코스 프리코스(Open Mission)
Windows CMD 기준으로 작성된,
“처음 보는 사람도 그대로 따라 할 수 있는”
Clone → Build → Run → DTO 생성 → 예외 테스트 전체 플로우 가이드입니다.
글은 크게 아래 두 파트로 명확히 나뉩니다:
Part 1. 실행 가이드 (Execution Guide)
Part 2. 9가지 예외 테스트 (Error Test Scenarios)
Part 1. 실행 가이드 (Execution Guide)
Windows CMD 기준으로 작성되었으며,
각 명령어는 “현재 어떤 폴더에서 실행해야 하는지”를 모두 표기합니다.
1. GitHub 프로젝트 Clone
설명
프로젝트를 받는 첫 단계는 GitHub에서 clone 하는 것입니다.
✔ 실행 위치
바탕화면이든 C 드라이브든 자유.
여기서는 바탕화면을 기준으로 진행합니다.
✔ 명령어 (Windows CMD)
cd C:\Users\UOS\Desktop
git clone https://github.com/hsj9433/json-dto-converter.git
Clone이 완료되면 다음 폴더가 생긴다:
C:\Users\UOS\Desktop\json-dto-converter
2. Gradle 빌드 — JAR 파일 생성
✔ 실행 위치
clone된 프로젝트 폴더:
C:\Users\UOS\Desktop\json-dto-converter
✔ 명령어
cd C:\Users\UOS\Desktop\json-dto-converter
.\gradlew clean build

빌드가 끝나면 BUILD SUCCESSFUL 메시지가 출력된다.
3. JAR 파일 확인
✔ 실행 위치
빌드 후 생성된 libs 폴더:
cd build\libs

✔ JAR 파일 목록 확인
dir

생성된 실행 파일은 다음과 같다:
json-dto-converter-1.0-SNAPSHOT.jar
4. 정상 실행 (sample.json)
✔ 사용된 JSON (sample.json)
아래 JSON을 실제로 Converter에 전달해 DTO 생성 테스트를 했다.
{
"employee": {
"id": "E123",
"personalInfo": {
"name": "Alice Smith",
"contact": {
"email": "alice.smith@example.com",
"phone": "555-1234"
}
},
"position": "Software Engineer"
}
}
✔ 실행 위치
JAR 파일이 있는 위치:
C:\Users\UOS\Desktop\json-dto-converter\build\libs
✔ 실행 명령어
java -jar json-dto-converter-1.0-SNAPSHOT.jar ^
--input C:\Users\UOS\Desktop\sample.json ^
--root-class Worker ^
--package com.org ^
--out C:\Users\UOS\Desktop\output ^
--inner-classes false

#️⃣ 5. DTO 파일 생성 결과
실행이 완료되면 --out 옵션으로 지정한 폴더에
자동으로 Java DTO 파일들이 생성된다.
✔ output 폴더 생성됨

✔ 생성된 .java 파일들

- Worker.java
- WorkerEmployee.java
- WorkerEmployeePersonalInfo.java
- WorkerEmployeePersonalInfoContact.java
총 4개의 파일이 생성된다.
✔ 실제 생성된 DTO 파일 내용

여기까지가 정상 플로우이며,
Converter가 JSON 구조를 분석하여 DTO 클래스를 정확히 생성함을 검증했다.
Part 2. 9가지 예외 테스트 (Error Test Scenarios)
Converter의 입력 유효성 검사 기능을 확인하기 위한 테스트입니다.
JSON 내용 + 실행 결과를 함께 제시해, 스크롤 없이 바로 이해할 수 있도록 구성했습니다.
예외 1 — --input 옵션 누락
입력:
java -jar json-dto-converter-1.0-SNAPSHOT.jar ^
--root-class Worker ^
--package com.org ^
--out C:\Users\UOS\Desktop\output ^
--inner-classes false
❌ 잘못된 부분:
- 명령줄 전체에서 --input 옵션이 아예 빠져 있음 (필수 옵션 누락)
- 올바른 명령이라면 --input C:\Users\UOS\Desktop\sample.json 처럼 입력 JSON 파일 경로가 반드시 있어야 함

[ERROR] --input은 필수입니다.
예외 2 — 존재하지 않는 파일 전달
입력:
java -jar json-dto-converter-1.0-SNAPSHOT.jar ^
--input C:\Users\UOS\Desktop\no_such_file.json ^
--root-class Worker ^
--package com.org ^
--out C:\Users\UOS\Desktop\output ^
--inner-classes false
❌ 잘못된 부분:
- --input C:\Users\UOS\Desktop\no_such_file.json
- 경로 자체는 문법적으로 맞지만, 실제로 존재하지 않는 파일을 가리킴

[ERROR] --input 경로가 존재하지 않거나 파일이 아닙니다
예외 3 — 디렉토리를 입력으로 전달
java -jar json-dto-converter-1.0-SNAPSHOT.jar ^
--input C:\Users\UOS\Desktop ^
--root-class Worker ^
--package com.org ^
--out C:\Users\UOS\Desktop\output ^
--inner-classes false
- ❌ 잘못된 부분:
- --input C:\Users\UOS\Desktop
- JSON 파일이 아니라 디렉터리 경로를 넣었기 때문에, 파일 존재/유효성 검사 단계에서 걸림

[ERROR] --input 경로가 존재하지 않거나 파일이 아닙니다
예외 4 — JSON 파싱 실패 (broken.json)
📄 broken.json
{ "a": 123,, "b": }
java -jar json-dto-converter-1.0-SNAPSHOT.jar ^
--input C:\Users\UOS\Desktop\broken.json ^
--root-class Worker ^
--package com.org ^
--out C:\Users\UOS\Desktop\output ^
--inner-classes false
❌ 잘못된 부분:
- --input C:\Users\UOS\Desktop\broken.json
- 파일 자체는 존재하지만, 그 내용이 유효한 JSON 문법이 아님
- 즉, 명령어 문법은 정상이지만, 입력 파일 콘텐츠가 잘못된 케이스

[ERROR] --input 파일이 유효한 JSON이 아닙니다
예외 5 — 루트 타입이 숫자 (root_number.json)
📄 root_number.json
12345
java -jar json-dto-converter-1.0-SNAPSHOT.jar ^
--input C:\Users\UOS\Desktop\root_number.json ^
--root-class Worker ^
--package com.org ^
--out C:\Users\UOS\Desktop\output ^
--inner-classes false
❌ 잘못된 부분:
- --input C:\Users\UOS\Desktop\root_number.json
- JSON 문법은 맞지만, **루트 값이 숫자(12345)**라서 DTO 생성 대상(JSON Object)이 아님
- 즉, “파일 내용 구조가 요구사항과 맞지 않음”

[ERROR] 루트 타입이 객체 또는 배열이어야 합니다
예외 6 — 루트 타입이 배열 (root_array.json)
📄 root_array.json
[{ "name": "A" }, { "name": "B" }]
java -jar json-dto-converter-1.0-SNAPSHOT.jar ^
--input C:\Users\UOS\Desktop\root_array.json ^
--root-class Worker ^
--package com.org ^
--out C:\Users\UOS\Desktop\output ^
--inner-classes false
❌ 잘못된 부분:
- --input C:\Users\UOS\Desktop\root_array.json
- JSON 문법은 맞지만, 루트가 배열([...]) 이고, 현재 Converter는 “루트 Object만 지원”하도록 설계됨
- 따라서 루트 타입이 사양과 맞지 않아 예외 발생

[ERROR] JSON 루트는 객체(Object)여야 합니다.
현재 입력의 최상위 타입이 배열 혹은 값입니다.
예외 7 — --root-class 누락
입력:
java -jar json-dto-converter-1.0-SNAPSHOT.jar ^
--input C:\Users\UOS\Desktop\sample.json ^
--package com.org ^
--out C:\Users\UOS\Desktop\output ^
--inner-classes false
❌ 잘못된 부분:
- 명령줄 전체에서 --root-class 옵션이 아예 빠져 있음
- root DTO 이름을 정해주지 않았기 때문에 필수 인자 누락으로 처리

[ERROR] --root-class는 필수입니다.
예외 8 — --package 누락
입력:
java -jar json-dto-converter-1.0-SNAPSHOT.jar ^
--input C:\Users\UOS\Desktop\sample.json ^
--root-class Worker ^
--out C:\Users\UOS\Desktop\output ^
--inner-classes false
❌ 잘못된 부분:
- 명령줄 전체에서 --package 옵션이 아예 빠져 있음
- DTO를 어느 패키지 아래에 생성할지 지정하지 않았기 때문에 예외 발생

[ERROR] --package는 필수입니다.
예외 9 — boolean 옵션 입력 오류 ( --inner-classes maybe )
입력:
java -jar json-dto-converter-1.0-SNAPSHOT.jar ^
--input C:\Users\UOS\Desktop\sample.json ^
--root-class Worker ^
--package com.org ^
--out C:\Users\UOS\Desktop\output ^
--inner-classes maybe
❌ 잘못된 부분:
- --inner-classes maybe
- --inner-classes 는 true / false만 허용하는 옵션인데,
maybe 라는 잘못된 문자열 값을 전달했기 때문에 파싱 단계에서 예외 발생

[ERROR] --inner-classes 옵션은 true 또는 false만 허용됩니다: maybe
마무리
이 글은 JSON DTO Converter를 처음 실행하는 사람도
clone → build → run → output 확인
과정을 그대로 따라 할 수 있도록 구성했습니다.
구조·설계 중심의 구현기 글은 별도로 여기에서 확인할 수 있습니다:
'우아한테크코스 8기 precourse' 카테고리의 다른 글
| JSON DTO Converter (3) - Generator & 출력 분석 (0) | 2025.11.24 |
|---|---|
| JSON DTO Converter (2) - JSON 분석 (0) | 2025.11.24 |
| JSON DTO Converter (1) - CLI 분석 (0) | 2025.11.24 |
| JSON DTO Converter (0) - Overview & 전체 구조 (0) | 2025.11.24 |
| JSON DTO Converter 오픈 미션 회고록 (0) | 2025.11.24 |