com.example.demo
org.springframework.boot
net.shop.app
스프링에서 프로젝트를 만들면 기본 패키지 경로가 aaa.bbb.ccc 형태로 생성되는데, 이 이유는 자바의 패키지 네이밍 규칙과 프로젝트의 식별,관리 목적이 합쳐진 결과이다. 자바는 패키지를 "폴더"처럼 사용하지만, 목적은 전 세계적으로 고유한 네임 스페이스를 가지기 위함이다. 따라서 자바는 관례적으로 도메인 이름을 역순으로 사용해 프로젝트의 시작 패키지를 만든다.
1. 첫 번째 : com, org, net
인터넷 도메인의 최상위 도메인(TDL, Top-Level Domain)을 역순으로 적는다. com은 commercial(기업), org은 organization(조직, 재단), net은 network 기반 조직이다. 즉 간단히 설명하는 이 코드를 만든 단체의 성격이 드러내기 위해 가장 바깥에서 나타나는 계층이다.
2. 두 번째 : example
소유 조직의 실제 도메인 이름을 역순으로 표현한다. 즉 도메인은 example.com, naver.com 이지만 패키지는 com.example, com.naver가 된다. 의미는 "naver가 만든 코드"이다.
3. 세 번째 : demo, boot, app
대부분 우리가 실제 사용하게 될 프로젝트 명 혹은 모듈 명이다. 스프링 부트에서 컴포넌트 스캔 기준 패키지(root package) 역할이며, 어떤 시스템인지 구분하기 때문에 조직에서 다양한 서비스, 시스템을 만들 때 충돌하지 않아야 한다. 즉 패키지 명이 겹치지 않게 네미잉을 관리해야 한다. 왜냐하면 개발자가 실제 사용할 해당 프로젝트 명이, 서비스 이름, 깃헙 레파지토리 이름과 같게 만들 확률이 높기 때문이다.
@SpringBootApplication
public class XxxApplication {
public static void main(String[] args) {
SpringApplication.run(XxxApplication.class, args);
}
}
따라서 com.example.demo에 위와 같은 @SpringBootApplication이 붙은 Application 클래스가 있으면 스프링 부트가 해당 클래스가 있는 패키지 기준으로 하위 패키지 전체를 스캔해서 Bean으로 등록한다.
@SpringBootApplication은 3개가 합쳐진 메타 애노테이션이다. @Configuration, @EnableAutoConfiguration, @ComponentSacn이고 @ComponentScan은 스프링이 Bean을 찾는 기준이 된다. 여기서 핵심은 ComponentScan의 “기준 패키지”가 이 Application 클래스가 위치한 패키지라는 점 이다.
com.example.demo ← Application.java 위치
├─ controller ← 스캔됨
├─ service ← 스캔됨
├─ domain ← 스캔됨
└─ repository ← 스캔됨
스프링은 Application 클래스가 있는 패키지의 하위 패키지들을 자동으로 인식해서 Bean을 만든다.
'Spring' 카테고리의 다른 글
| 스프링 부트 단독으로 실행 가능한 파일로 만들기 (0) | 2025.12.26 |
|---|---|
| @PostConstruct로 알아보는 스프링 생명주기, @Autowired 사용 안하는 이유 (0) | 2025.12.18 |
| [Spring Security] BCryptPasswordEncoder 암호화된 비밀번호 검증 어떻게 할까? (0) | 2024.11.21 |
| [Spring] 프론트엔드에서 값 입력 누락 시, 백엔드 데이터 JSON 처리 어떻게 될까? + null 값에 .equals() 사용시 에러(24/11/09 수정) (0) | 2024.11.05 |
| [Spring] Postman 포스트맨, 토큰 자동 주입, 자동으로 들어가게 만들기(Tests tab 없는 사람) (0) | 2024.11.04 |