Tiny Star
본문 바로가기
Dev Log

"코드는 완벽한데 왜 빌드가 안 될까?" 윈도우 개발자가 꼭 알아야 할 Gradle 트러블슈팅

by 별터 2026. 1. 7.

개발을 공부하다 보면 코딩보다 '환경 설정'이 더 어렵다는 말을 실감하게 됩니다. 특히 맥(Mac) OS 위주의 강의나 문서를 보며 윈도우(Windows)에서 실습하다 보면, 예상치 못한 에러들을 마주하게 되죠.

 

오늘은 우아한테크코스 프리코스 과제를 진행하며 겪었던, "분명히 코드는 맞는데 테스트가 실패하거나 아예 실행조차 안 되는" 기이한 현상들과 그 해결 방법을 정리해보려 합니다.


1. 공포의 `ClassNotFoundException`과 OneDrive

 

가장 저를 괴롭혔던 건 멀쩡히 존재하는 테스트 파일(ApplicationTest)을 찾을 수 없다는 에러였습니다.

Caused by: java.lang.ClassNotFoundException: oncall.ApplicationTest

 

패키지 경로도 맞고, 파일도 그 자리에 있는데 왜 컴퓨터는 없다고 할까요?

 

원인: 클라우드 동기화의 간섭

범인은 바로 OneDrive였습니다. 윈도우는 기본적으로 `문서` 폴더를 OneDrive와 동기화합니다. Gradle이 프로젝트를 빌드해서 `.class` 파일을 생성하는 순간, OneDrive가 이를 클라우드에 올리기 위해 파일을 '잠금(Lock)' 상태로 만들어버립니다. 그 찰나의 순간에 테스트 도구가 파일을 찾으려 하니 에러가 발생하는 것이죠.

 

해결책: 프로젝트 이사 가기

해결 방법은 간단하지만 확실합니다. 프로젝트를 클라우드 동기화가 되지 않는 로컬 경로(C드라이브 최상단 등)로 옮기는 것입니다.

  • Before: `C:\Users\Name\OneDrive\Documents\Project` (동기화됨)
  • After: `C:\Project` (로컬 전용)

프로젝트를 옮기자마자 거짓말처럼 빌드가 성공했습니다. 개발 프로젝트는 가급적 OneDrive 바탕화면이나 문서 폴더가 아닌 곳에 두는 것을 추천합니다.


2. 한글이 외계어로 보여요: 인코딩 문제

 

테스트 코드를 돌렸는데, 기대하는 값은 "4월"인데 실제 출력값은 `4ì›`” 처럼 깨져 나오는 경우가 있습니다.

 

원인: MS949 vs UTF-8

IntelliJ와 같은 IDE는 똑똑해서 `UTF-8`을 기본으로 쓰지만, 윈도우의 터미널(CMD, PowerShell)은 기본적으로 `MS949`(한글 완성형) 인코딩을 사용합니다. Gradle이 터미널 환경을 따라가면서 한글을 제대로 읽지 못해 발생하는 문제입니다.

 

해결책: Gradle에게 UTF-8 강제하기

`build.gradle`을 수정하지 않고 해결하는 가장 깔끔한 방법은 윈도우 환경 변수를 설정하는 것입니다.

  1. 시스템 환경 변수 편집 실행
  2. 새 변수 만들기: `GRADLE_OPTS`
  3. 값: `-Dfile.encoding=UTF-8`

이렇게 설정해두면 터미널에서 `./gradlew test`를 실행할 때마다 자동으로 UTF-8 옵션이 적용되어 한글 깨짐 없이 테스트를 통과할 수 있습니다.


3. 줄바꿈의 미세한 차이 (`\r\n`)

 

`println()`을 사용했을 뿐인데 테스트가 실패한다고 뜬다면? 윈도우의 줄바꿈은 `\r\n`(Carriage Return + Line Feed)이고, 리눅스/맥 기반의 채점 서버는 `\n`을 사용합니다. 눈으로 보기엔 똑같아도 컴퓨터는 "글자 수가 다르다"며 오답 처리합니다.

이럴 땐 `println("문자열")` 대신, `print("문자열\n")`처럼 명시적으로 `\n`을 붙여주는 습관을 들이는 것이 안전합니다.


마무리

 

환경 설정 문제는 코딩 실력과 무관하게 발생하지만, 해결하지 못하면 개발을 시작조차 할 수 없습니다. 윈도우 환경에서 개발하시는 분들이 저와 같은 삽질(?)을 덜 하길 바라며 글을 마칩니다.