프로젝트 생성.
Spring Boot 프로젝트를 만드는 방법은 크게 두 가지입니다.
하나는 Spring Initializr를 이용하는 것
또 다른 하나는 인텔리제이 IDEA에서 프로젝트를 생성하는 것(유료 버전만 해당)
인텔리제이 IDEA에서 프로젝트 생성하기.
유료버전인 얼티밋 버전을 이용하면 많은 기능을 지원하며 그 중하나가 내장된 Spring Initializr입니다.
이 기능을 이용하면 외부에서 프로젝트를 생성할 필요 없이 곧바로 스프링 프로젝트를 생성할 수 있습니다.
인텔리제이를 실행하고 New Project를 누르면 위와 같이 Spring Initializer를 이용할 수 있습니다.
- Name : 프로젝트의 이름을 설정합니다.
- Location : 프로젝트 생성할 위치를 지정합니다.
- Laguage : JVM 상에서 동작하는 언어를 선택합니다 - java
- Group : 이 프로젝트를 정의하는 고유한 식별자 정보인 그룹을 설정합니다.
- Type : 빌드 툴을 선택합니다. 과거엔 Maven을 많이 사용했으나 요즘은 Gradle을 많이 이용합니다.
- Artifact : 세부 프로젝트를 식별하는 정보를 기입합니다. 프로젝트 명과 동일하게 작성해도 무관합니다.
- Package name: 그룹과 Artifact를 설정하면 자동으로 입력됩니다.
- Project SDK : JDK 버전을 설정합니다.
- JAVA : 자바 언어 버전을 설정합니다.
- Packaging : 애플리케이션을 쉽게 배포하고 동작하게 할 파일들의 패키징 옵션입니다.
JAR (Java Archive)
JAR는 Java 클래스 파일(.class), 관련된 라이브러리 및 자원들, 메타데이터를 포함하는 파일 포맷입니다.일반적으로 Java 애플리케이션을 패키징하고 배포하는 데 사용됩니다.JAR 파일은 독립적으로 실행 가능한(즉, 'java -jar' 명령을
사용하여 실행할 수 있는) Java 애플리케이션을 만드는 데 일반적으로 사용됩니다.Spring Boot에서는 내장 서버(Tomcat, Jetty 등)를 포함하여 모든 의존성을 하나의 JAR 파일에 패키징하는 방식을 채택하였습니다. 따라서 Spring Boot 애플리케이션은 'java -jar' 명령 하나로 쉽게 실행할 수 있습니다.
WAR (Web Application Archive)
WAR는 웹 애플리케이션을 패키징하는 데 사용되는 파일 포맷입니다.JSP, Java Servlet, Java 클래스, XML, libraries(JAR 파일), 웹 서버에서 호스팅하는 데 필요한 리소스 등을 포함합니다.WAR 파일은 웹 컨테이너(예: Tomcat)나 Java EE 서버(예: WildFly)에 배포됩니다.일반적으로 Spring Boot는 JAR 패키징 방식을 권장하지만, 기존의 Java EE 서버에 배포해야 하는 경우나 특정한 이유로 WAR 패키징을 해야 하는 경우에는 WAR를 선택할 수 있습니다.
결론적으로, JAR와 WAR 둘 다 Java 프로젝트를 패키징하는 방법이지만, 그 사용 용도와 배포 방식에 차이가 있습니다. 그 중에서도 Spring Boot는 "make jar not war"라는 철학을 가지고 있어서, 가능하면 JAR 패키징 방식을 사용하는 것을 권장합니다. 하지만 상황에 따라서 WAR 패키징 방식을 선택해야 할 경우도 있습니다.
next 버튼을 누르면 프로젝트에 사용할 의존성을 추가 합니다.
의존성은 개발 초기에 이렇게 추가할 수도 있고 개발을 진행하는 중에도 추가할 수 있습니다.
지금 설정은 Maven, JDK 17, JAVA 17 선택 / Lombok, Spring Configuration Processor, Spring Web 추가 하겠습니다.
스프링 버전이 낮은 단계로 생성되지 않는다면 추후 프로젝트 생성 후 pom.xml 또는 build.gradle파일에서 수정가능합니다.
프로젝트 생성하다 Spring Web 빼먹어서 pom.xml 파일에 추가하고 오른쪽 상단에 M 표시 버튼 뜨면 새로고침 해주시면 됩니다.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
스프링 공식 사이트에서 프로젝트 생성하기.
위에서 언급했던 내용들을 설정해주고 의존성 추가해주고 다운받아서 압축풀고 IDE로 실행하시면 됩니다.
pom.xml(Project Object Model) 살펴보기.
Maven의 핵심 부분인 pom.xml(Project Object Model) 파일은 Maven 프로젝트의 기본 설정 파일입니다.
이 파일에는 프로젝트 구성, 의존성, 플러그인, 목표 빌드 프로파일 등의 프로젝트와 관련된 모든 정보가 포함됩니다.
빌드 관리 도구.
빌드관리 도구는 JVM이나 WAS가 프로젝트를 인식하고 실행할 수 있게 우리가 작성한 소스코드와 프로젝트에 사용된 파일들(.xml, .jar, .properties)을 빌드하는 도구입니다.
개발 규모가 커질수록 관리 할 라이브러리가 많아지고 라이브러리 간 버전 호환성을 체크해야 하는 어려움이 발생하는데,
빌드 관리 도구를 이용하면 이 같은 문제를 해결할 수 있습니다.
Maven.
아파치 메이븐은 자바 기반 프로젝트를 빌드하고 관리하는데 사용하는 도구로
초창기 자바 프로젝트의 대표적 관리 도구였던 Ant를 대체하기 위해 개발되었습니다.
메이븐의 가장 큰 특징은 pom.xml 파일에 필요한 라이브러리를 추가하면 해당 라이브러리에 필요한 라이브러리까지 함꼐 내려받아 관리한다는 점입니다.
Maven의 대표 기능
- 프로젝트 구조와 메타데이터 관리
Maven은 프로젝트의 구조와 메타데이터를 표준화하고 관리하는 역할을 합니다.
이는 프로젝트의 일관성을 유지하고 이해하는데 도움이 됩니다.
- 의존성 관리
Maven은 프로젝트의 의존성을 자동으로 다운로드하고 관리합니다.
pom.xml 파일에 의존성을 선언하면, Maven은 이를 해석하고 필요한 라이브러리를 다운로드합니다.
- 빌드와 테스트: Maven은 빌드와 테스트를 자동화하는 기능을 제공합니다.
이를 통해 개발자는 코드 작성에 집중하고, 빌드와 테스트는 Maven에 맡길 수 있습니다.
- 배포: Maven은 생성된 아티팩트(JAR, WAR 등)를 배포하는 기능을 제공합니다.
이는 원격 저장소로 배포할 수 있으며, 이를 통해 다른 프로젝트에서 해당 아티팩트를 쉽게 사용할 수 있습니다.
Maven의 생명주기
Maven의 생명주기는 미리 정의된 일련의 단계(phase)를 포함하며,
이 단계들은 순서대로 실행됩니다. Maven 생명주기의 주요 단계는 다음과 같습니다.
clean: 이전 빌드가 생성한 모든 파일을 제거 합니다.
validate: 프로젝트가 올바른지 확인하고 필요한 모든 정보가 사용 가능한지 확인합니다.
compile: 프로젝트의 소스 코드를 컴파일합니다.
test: 단위 테스트를 수행하고, 실패하지 않았는지 확인합니다. 이 단계는 테스트를 실패해도 빌드가 계속됩니다.
package: 컴파일된 코드를 JAR 또는 WAR와 같은 배포 가능한 형태로 패키징합니다.
verify: 패키징된 코드를 실행하여 유효한지 일정 기준을 총족하는지 통합 테스트를 수행합니다.
install: 패키징된 코드를 로컬 저장소에 설치하여, 다른 로컬 프로젝트에서 사용할 수 있게 합니다.
deploy: 패키징된 코드를 원격 저장소에 배포합니다.
site: 메이븐의 설정 파일 정보를 기반으로 프로젝트의 문서 사이트를 생성합니다.
site-deploy: 생성된 사이트 문서를 웹 서버에 배포합니다.
각 생명주기 단계는 이전 단계가 성공적으로 완료된 후에 실행됩니다.
예를 들어, mvn package 명령을 실행하면,
Maven은 먼저 validate, compile, test 단계를 실행한 다음 package 단계를 실행합니다.
Hello World 출력하기.
컨트롤러 작성하기
com.example.hello 를 선택하고 하위 controller 패키지 생성 후 패키지 안에 HelloController.class 생성 해줍니다.
컨트롤러에 포함된 로직에서는 애플리케이션의 사용자 또는 클라이언트가 입력한 값에 대한 응답을 수행합니다.
특별한 경우를 제외한 모든 요청은 컨트롤러를 통해 진행되어야 합니다.
스프링 MVC에서 컨트롤러는 사용자의 요청을 처리하는 핵심적인 역할을 담당합니다. MVC(Model-View-Controller) 패턴에서 "Controller"에 해당하는 부분이며, 다음과 같은 작업을 수행합니다:
요청 처리: 컨트롤러는 클라이언트로부터 들어오는 HTTP 요청을 받아 처리합니다. 각 요청은 보통 하나의 메소드에 매핑되며, 이 메소드를 액션(action)이라고도 부릅니다. 이 메소드는 요청에 대한 작업을 수행하고, 그 결과를 반환합니다.
데이터 검증: 컨트롤러는 사용자로부터 받은 데이터의 유효성을 검증하는 작업을 수행합니다. 이는 데이터 바인딩(Data Binding) 과정에서 이루어지며, 유효하지 않은 데이터에 대해 적절한 에러 메시지를 반환할 수 있습니다.
모델과의 상호작용: 컨트롤러는 모델(Model)과 상호작용하여 데이터를 읽고 쓰는 작업을 수행합니다. 모델은 일반적으로 데이터베이스와 연결된 서비스 또는 DAO(Data Access Object) 등이 될 수 있습니다.
뷰 선택: 컨트롤러는 처리 결과를 사용자에게 보여줄 뷰(View)를 선택하는 역할도 합니다. 컨트롤러는 뷰 이름을 반환하고, 이를 스프링의 View Resolver가 실제 뷰로 변환하여 클라이언트에게 응답으로 보냅니다.
따라서, 스프링 MVC에서 컨트롤러는 사용자의 요청을 받아 처리하고, 그 결과를 사용자에게 반환하는 중요한 역할을 수행합니다. 이 과정에서 컨트롤러는 모델과 뷰, 그리고 그 외의 여러 스프링 구성요소와 상호작용하게 됩니다.
- 컨트롤러 코드 작성하기
package com.example.hello.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello World";
}
}
생성된 컨트롤러에 위와 같은 코드를 작성하고 다시 실행합니다.
실행 후 하단에 Tomcat started on port(s): 8080 (http) with context path ''를 확인할 수 있습니다.
이는 8080번 포트를 통해 웹 서버가 열린 것을 로그로 확인할 수 있습니다.
서버 변경을 하고 싶다면 application.peroperties 파일에서 server.port = 사용할 번호를 입력하시면 됩니다.
인터넷 브라우저에 http://localhost:8080/hello 를 입력하면 위와 같은 화면을 볼 수 있습니다.
웹 브라우저를 통한 동작 테스트는 간편하지만 상세한 응답을 확인할 수 없어
Talend API Tester 크롬 확장프로그램 또는 포스트맨 등의 프로그램을 사용합니다.
여기서는 포스트맨을 통해 결과를 확인해보겠습니다.
body
headers
'BACKEND > SPRING' 카테고리의 다른 글
05. API를 작성하는 다양한 방법 - POST, PUT API 만들기 (0) | 2023.07.30 |
---|---|
05. API를 작성하는 다양한 방법 - GET API 만들기 (0) | 2023.07.30 |
트랜잭션과 spring 트랜잭션 알아보기 (0) | 2023.07.27 |
03. 개발 환경 구성 - JDK 및 IDE 설치 (0) | 2023.07.23 |
02. 개발에 앞서 알면 좋은 기초 지식 - REST API (0) | 2023.07.22 |