한 줄 요약
IntelliJ에서 폴더에 우클릭해도 "Java Class" 메뉴가 없다면, 그 폴더가 소스 루트(Source Root) 로 지정되지 않은 것이 원인이다.
핵심 개념 — 소스 루트(Source Root)란?
IntelliJ IDEA는 프로젝트 안의 모든 폴더를 동등하게 취급하지 않는다.
JetBrains 공식 문서에 따르면, IntelliJ는 프로젝트를 모듈(Module) 단위로 관리하며,
각 폴더에는 아래와 같은 역할(Content Root Type) 을 명시적으로 지정해야 한다.
| 폴더 유형 | 색상 | 역할 |
|---|---|---|
| Sources Root | 파란색 | Java 소스 파일이 위치하는 폴더 |
| Test Sources Root | 초록색 | 테스트 코드가 위치하는 폴더 |
| Resources Root | 노란색 | 설정 파일, 이미지 등 리소스 |
| Excluded | 회색 | 빌드/인덱싱 제외 폴더 |
출처: JetBrains IntelliJ IDEA 공식 문서 — Content roots
소스 루트로 지정된 폴더에서만 IntelliJ는 Java 클래스 생성, 패키지 인식, 컴파일 대상 포함 등의 기능을 활성화한다.
지정되지 않은 일반 폴더는 단순 디렉터리로 취급하기 때문에 우클릭 메뉴에 "New → Java Class"가 나타나지 않는다.
쉽게 이해하기 — 비유로 설명
도서관에서 책을 검색할 때, "장서 구역"으로 등록된 서가에 있는 책만 검색 시스템에 뜬다.
아직 분류되지 않고 구석에 쌓인 박스는 시스템이 인식하지 못한다.
IntelliJ도 마찬가지다.
소스 루트로 등록된 폴더 = 장서 구역.
등록 안 된 폴더 = 분류 전 박스.
소스 루트 지정 방법
방법 1 — Project Structure에서 직접 지정 (가장 확실한 방법)
File → Project Structure열기 (단축키:Cmd + ;/Ctrl + Alt + Shift + S)- 왼쪽에서
Modules선택 - 가운데 패널에서 소스로 쓸 폴더 클릭
- 상단
Sources버튼 클릭 → 폴더가 파란색으로 변하면 완료
방법 2 — 폴더 우클릭으로 빠르게 지정
- 프로젝트 창에서 해당 폴더 우클릭
Mark Directory as → Sources Root클릭



이 설정은
.iml파일(IntelliJ 모듈 설정 파일)에 저장된다.
왜 이런 구조를 쓰는가 — 기술적 배경
Maven과 Gradle 같은 빌드 도구는 소스 파일 위치를 컨벤션(convention) 으로 정의한다.
- Maven:
src/main/java를 기본 소스 루트로 사용
(출처: Apache Maven — Standard Directory Layout) - Gradle:
sourceSet을 통해 소스 디렉터리를 명시적으로 선언
(출처: Gradle 공식 문서 — Java Plugin Source Sets)
IntelliJ는 Maven, Gradle 프로젝트를 import할 때 이 컨벤션을 읽어 자동으로 소스 루트를 지정한다.
직접 만든 폴더이거나 빌드 도구 없이 프로젝트를 구성한 경우에는 수동 지정이 필요하다.
핵심 정리
- IntelliJ는 폴더 유형을 명시적으로 구분하며, 소스 루트로 지정된 폴더에서만 Java 클래스 생성이 가능하다.
- 소스 루트 지정은
File → Project Structure → Modules → Sources또는 폴더 우클릭으로 할 수 있다. - Maven/Gradle 프로젝트는
src/main/java가 자동으로 소스 루트로 인식된다. - 설정 정보는
.iml파일에 저장된다. - 폴더 아이콘이 파란색으로 바뀌면 소스 루트로 정상 지정된 상태다.
주의사항
- Maven, Gradle 프로젝트에서 소스 루트를 임의로 변경하면 빌드 오류가 발생할 수 있다.
- 팀 프로젝트에서
.iml파일은.gitignore에 포함되는 경우가 많으므로, 협업 시 각자 재설정이 필요할 수 있다. - IntelliJ 재시작 후에도 설정이 유지되지 않는다면 Maven/Gradle
Reload(코끼리 아이콘)를 실행해 동기화할 것.
'프로그래밍 언어 > JAVA(JSP, Spring)' 카테고리의 다른 글
| [Spring Boot] Jasypt를 이용한 application.yaml 암호화 적용 (ISMS 대응) (0) | 2026.07.01 |
|---|---|
| Spring Boot 3.x 빌드 에러 해결 — "Dependency requires at least JVM runtime version 17" 원인과 해결법 (0) | 2026.04.04 |
| Spring Boot가 꺼졌는데 왜 포트는 안 풀려요? (0) | 2026.04.02 |
| Spring Boot 빌드 도구 완전 정리 | Gradle vs Maven 차이점과 선택 기준 (0) | 2026.03.29 |
| JPA vs MyBatis 핵심 차이점, 사용 방식, 용도 완벽 정리 (0) | 2025.11.20 |