TOP
본문 바로가기
프로그래밍 및 기타/Java, Spring Boot

[Java] Spring Boot - 기본 구조, "Hello World" 띄워보기

by 기록자_Recordian 2025. 4. 14.
728x90
반응형
이전 내용
 

[Java] 인텔리제이 새 프로젝트 생성하기

이전 내용 [Java] 스프링부트를 위한 인텔리 제이(커뮤니티) 다운로드이전 내용 스프링 부트(Spring Boot)    인텔리 제이(IntelliJ) 란?   인텔리 제이 다운로드(커뮤니티 버전) 먼저 구글에서 '인

puppy-foot-it.tistory.com


스프링부트
기본 디렉터리 구조

 

  • src/: 프로젝트의 소스 코드와 리소스를 포함하는 상위 디렉토리.
  • main/: 실제 애플리케이션의 소스 코드가 저장되는 디렉토리.
  • java/: Java 소스 파일이 위치하는 디렉토리로, 일반적으로 패키지 구조에 따라 서브디렉토리 생성 됨.
  • com/example/yourproject/: 패키지 구조로, 일반적으로 도메인 이름의 역순으로 설정 된다. 이 디렉토리에는 애플리케이션의 클래스 파일이 포함된다.
  • YourProjectApplication.java: 애플리케이션의 진입점(main 메서드가 포함된 클래스). 스프링 부트 애플리케이션을 시작하는 데 사용된다. @SpringBootApplication 어노테이션을 포함한다.
  • controller/: REST 요청을 처리하는 컨트롤러 클래스들로 구성되며, @RestController 어노테이션이 붙은 클래스들이 포함된다.
  • service/: 비즈니스 로직을 처리하는 서비스 클래스들이 위치하며, 일반적으로 @Service 어노테이션이 붙는다.
  • repository/: 데이터베이스와 상호작용하는 레포지토리 클래스들이 위치. 보통 Spring Data JPA에서 제공하는 JpaRepository 인터페이스를 확장한 클래스가 포함된다.
  • model/: 데이터 구조를 정의하는 엔터티 클래스. @Entity 어노테이션이 붙은 클래스가 포함된다.
  • resources/: 애플리케이션 리소스가 저장되며, 설정 파일과 정적 자원이 위치힌다.
  • application.properties 또는 application.yml: 애플리케이션의 설정 파일. 데이터베이스 연결, 서버 포트, 로깅 수준 등 여러 설정을 조정할 수 있다.
// application.properties
server.port =8080
spring.datasource.url=jdbc:h2:mem:testdb

// YAML 형식
server:
	port: 8080
spring:
	datasource:
    	url: jdbc:h2:mem:testdb
  • static/: 정적 리소스(HTML, CSS, JavaScript 파일 등)가 위치하는 디렉토리.
  • templates/: Thymeleaf, Freemarker 와 같은 템플릿 엔진에서 사용하는 템플릿 엔진용 HTML 파일이 위치.
  • test/: 테스트 관련 소스 코드가 저장되는 디렉토리. src/main/java와 유사한 패키지 구조를 가진다. 기본적으로 MySpringbootApplicationTests.java가 포함되며, JUnit, MockMvc 등을 사용해 단위/통합 테스트를 작성한다.
  • YourProjectApplicationTests.java: 애플리케이션의 통합 테스트를 작성하는 클래스.
  • pom.xml 또는 build.gradle: 프로젝트의 빌드 및 의존성 관리를 위한 파일. Maven을 사용하는 경우에는 pom.xml 파일, Gradle을 사용하는 경우에는 build.gradle 파일이 생성된다.
  • README.md: 프로젝트 설명, 설치/실행 방법 등을 기록.

Maven과 Gradle:
Java 프로젝트의 빌드 및 의존성 관리를 위한 도구

 

1. Maven
Maven은 Apache Software Foundation이 개발한 빌드 도구로, XML 기반의 구성 파일을 사용하여 프로젝트를 관리한다.

  • 모델 기반: pom.xml 파일을 기반으로 하여 프로젝트의 구조, 의존성, 빌드 정보 등을 정의.
  • 의존성 관리: 중앙 저장소에서 라이브러리 의존성을 자동으로 다운로드하고 관리.
  • 표준화된 프로젝트 구조: Maven은 특정한 디렉토리 구조를 권장하여, 일관된 방식으로 프로젝트를 구성.
  • 생태계: 다양한 플러그인과 생태계를 통해 보고서 생성, 테스트, 배포 등을 지원.

◆ 장점

  • 간편한 의존성 관리: 라이브러리의 버전을 지정할 수 있으며, transitive dependencies(전파적 의존성)을 통해 필요한 라이브러리를 자동으로 가져온다.
  • 많은 자료와 커뮤니티: 오랜 역사를 가지고 있어 자료가 풍부하고, 커뮤니티 지원이 활성화되어 있다.

◆ 단점

  • 느린 빌드 속도: XML 기반의 설정 파일로 인해 복잡한 빌드를 처리하는 데 시간이 더 걸릴 수 있다.
  • 유연성 부족: XML 파일은 정적으로 구성되어 있어 환경에 따라 동적으로 변경하기 어렵다.
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

 

2. Gradle
Gradle은 현대적인 빌드 도구로, Groovy 또는 Kotlin DSL(도메인 특화 언어)을 사용하여 빌드 로직을 작성한다.

  • 유연한 빌드 스크립트: Groovy 또는 Kotlin으로 작성된 빌드 스크립트를 통해 유연하게 빌드 구성.
  • 의존성 관리: Maven 중앙 저장소와 JCenter, 등 다양한 저장소에서 라이브러리를 관리.
  • 이벤트 기반 빌드: Gradle은 변경 사항을 추적하고, 필요한 부분만 변경하여 빌드를 수행하여 속도 향상.

◆ 장점

  • 빠른 빌드 속도: Incremental build(증분 빌드) 기능을 통해 변경된 파일만 다시 빌드하여 속도 향상.
  • 유연성과 확장성: 다양한 유형의 프로젝트와 빌드 요구 사항에 따라 쉽게 확장 및 조정.

◆ 단점

  • 학습 곡선: Groovy 또는 Kotlin DSL을 배우는 데 다소 시간이 필요할 수 있다.
  • 복잡성: 강력한 기능이 많다 보니, 단순한 프로젝트에서는 오히려 과도할 수 있다.
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

.gitignore

 

스프링 부트 이니셜라이저를 통해 프로젝트를 생성했다면 .gitignore 가 포함되어 있다.

.gitignore 파일은 프로젝트에 원하지 않는 백업 파일이나 로그파일 혹은 컴파일 된 파일들을 Git에서 제외시킬 수 있는 설정 파일을 말한다.

 


구조의 흐름과 역할

 

[흐름]

  • MySpringbootApplication이 실행되며 스프링 컨텍스트 초기화
  • application.properties에서 설정 로드(포트, DB 등)
  • 요청 순서: 클라이언트 요청 → Controller → Service → Repository → DB 순
  • 응답은 역순

[역할]

  • Controller: HTTP 요청/응답 처리
  • Service: 비즈니스 로직 처리
  • Repository: 데이터베이스 작업
  • Resource: 설정, 정적 파일, 템플릿 관리

★ 프로젝트가 커지면 추가 디렉토리가 생길 수 있다.

  • config/: 스프링 설정 클래스(ex. SecurityConfig)
  • dto/: 데이터 전송 객체(Data Transfer Object)
  • exception/: 커스텀 예외 클래스
  • util/: 유틸리티 클래스

인텔리제이 + 스프링부트
"Hello World" 띄워보기

 

모든 프로그래밍의 첫 시작을 의미하는 "Hello World"를 띄워보도록 한다.

8080 포트는 Apache Tomcat, JBoss, GlassFish 등 다양한 웹 서버 및 애플리케이션 서버의 기본 포트로 사용된다. 따라서 이러한 서버 중 하나가 이미 8080 포트를 사용하고 있다면, 새로운 애플리케이션이 동일한 포트를 사용하려 할 경우 충돌이 발생하게 된다. 따라서, 포트 번호를 9090으로 바꾼다.

 

application.properties에서 연결 포트 번호를 수정할 수 있다.

spring.application.name=spro00

server.port=9090

 

그리고나서, 프로젝트Application.java에서

@RestController
@SpringBootApplication
public class Spro00Application {

	public static void main(String[] args) {
		SpringApplication.run(Spro00Application.class, args);
	}

	@GetMapping("/")
	public String HelloWorld() {
		return "Hello World!!!";
	}
}
  • main 메서드: 프로그램의 진입점으로, 이 메서드가 실행되면 Spring Boot 애플리케이션이 시작
  • SpringApplication.run(...): 이 메서드는 Spring Boot 애플리케이션 컨텍스트를 초기화하고, 애플리케이션을 실행
  • @RestController: RESTful 웹 서비스 개발을 위한 컨트롤러를 정의하며, 반환되는 데이터가 자동으로 JSON 형식으로 변환
  • @GetMapping: 특정 URL 경로에 대해 HTTP GET 요청을 처리하는 메서드를 지정.  웹 브라우저에서 루트 URL을 요청하면 이 메서드가 호출
  • HelloWorld() 메서드: 이 메서드는 String 형식의 응답을 반환한다. 클라이언트가 "/" URL로 GET 요청을 보내면 "Hello World!!!"라는 문자열이 응답으로 전송

부분을 추가해 주면 된다.

 

[Controller와 RestController 차이]

특징 @Controller @RestController
용도 주로 HTML 뷰 반환 RESTful API 응답
응답 형태 뷰 이름을 반환 (HTML)  데이터(주로 JSON)를 반환
직렬화 없음 (명시적으로 모델과 뷰를 반환) 자동으로 JSON 형태로 직렬화

 

코드를 추가하고, 실행 버튼(▷) 을 누른 뒤, 인터넷 주소창에 'localhost:포트번호' 를 입력하면

 

Hello World가 잘 뜨는 것을 볼 수 있다.


다음 내용

 

[Java] Spring Boot: 제어 역전, 의존성 주입

이전 내용 [Java] Spring Boot - 기본 구조, "Hello World" 띄워보기이전 내용 [Java] 인텔리제이 새 프로젝트 생성하기이전 내용 [Java] 스프링부트를 위한 인텔리 제이(커뮤니티) 다운로드이전 내용 스프링

puppy-foot-it.tistory.com

 

 

728x90
반응형