2023-09-27 작성

스프링부트 개발환경 구성하기 (4) 메이븐 Local Repository 설정

📢 2024년 2월 기준으로 포스팅 내용을 업데이트하였습니다.

포스팅 순서는 아래와 같다.

 

스프링부트 프로젝트 구조


중요한 부분 1. BasicBoardApplication.java

package com.company.basicBoard;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BasicBoardApplication {

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

}

지난 포스팅에서 따로 서버를 설치하지 않았는데도 내장톰캣으로 프로젝트 실행이 되었다. 스프링부트는 별도의 서버 설정 없이 이 파일의 main()을 실행하는 것만으로도 내장된 톰캣 서버를 이용해서 프로젝트를 실행할 수 있다. 이때 파일명은 "프로젝트명 + Application"으로 자동 생성된다.
위 소스에서 @SpringBootApplication 어노테이션은 스프링 부트 애플리케이션의 시작점을 나타낸다.

중요한 부분 2. src/main/resources 패키지

  • static 폴더 : HTML, CSS, JavaScript, 이미지 같은 정적 파일들을 보관하는 경로
  • templates 폴더 : 타임리프 같은 템플릿 경로
  • application.properties : 애플리케이션 내의 설정 파일이다. 스프링부트는 기본적으로 XML을 이용하지 않고, 프로젝트의 설정을 하도록 생성한다. 별도 설정이 필요한 경우 application.properties 에 작성하여 사용할 수 있다. 표현식은 .properties 또는 .yml 방식으로 쓸 수 있다.

중요한 부분 3. BasicBoardApplicationTests.java

이름 뒤에 Tests가 붙어서 예상할 수 있지만 각종 테스트할 때 사용할 수 있다.

중요한 부분 4. pom.xml

  • 스프링부트 프로젝트 생성시 3.2.3 버전으로 선택했기 때문에 parent 태그의 버전도 동일한 3.2.3 버전이다. 부모에 대해 정의된 버전을 기반으로 jar파일을 다운로드되므로, 의존성의 버전을 따로 정의할 필요가 없다! 그래서 <dependency> 태그들을 보면 version이 따로 명시되지 않는다.
  • spring-boot-starter로 시작하는 라이브러리가 있으면 스프링부트 프로젝트임을 확인할 수 있다. starter는 애플리케이션에 포함할 수 있는 "의존성들의 세트"라고 보면 된다. 예를 들어 Spring JPA를 사용하여 개발하려면 spring-boot-starter-data-jpa 의존성을 추가하면 된다.
  • 개발하면서 추후 필요한 의존성들이 있다면 Maven Repository 사이트 등에서 원하는 의존성 검색한 뒤 <dependency> 태그를 이용하여 추가하면 된다.
  • 아래는 pom.xml 원본이다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	
	<!-- 스프링부트 프로젝트 버전(3.2.3) parent -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.2.3</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	
	<!-- 프로젝트 기본 정보 -->
	<groupId>com.company</groupId>
	<artifactId>basicBoard</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>basicBoard</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>17</java.version>
	</properties>
	
	<!-- 의존성 관리. 이때 버전은 parant에서 관리한다 -->
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

 

참고로 pom.xml에서 아래같이 상단 링크에서 빨간줄 오류 난다면 https -> http로 바꾸면 오류가 발생하지 않는다.

Maven Repository 기본 저장소

이제 메이븐 저장소에 대해 알아보자. 기본 메이븐 저장소는 C:\User\사용자\.m2\repository 경로에 위치하여 각종 라이브러리를 관리한다. 메이븐을 통해 다운로드한 라이브러리들이 모두 이 경로에 저장된다. 

아래처럼 프로젝트의 Maven Dependencies 폴더를 펼쳐보면, 메이븐을 통해 의존성 관리되는 라이브러리들이 엄청 많다. 라이브러리가 실제 저장된 경로도 명시되어 있다.

만약 의존성의 실제 저장된 경로를 찾아보고 싶다면 groupId 태그로 찾아가면 된다. 예를 들어 아래 의존성의 실제 경로를 찾아가보자.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

 

C:\User\사용자\.m2\repository 폴더에서 org -> springframework -> boot -> spring-boot-starter-web 폴더로 들어가 보자. 아래처럼 3.2.3 버전의 jar 파일이 존재함을 알 수 있다.

Maven Repository 로컬로 변경하기

기본 Maven Repository는 C:\Users\사용자\.m2라는 폴더에서 관리하고 있는 것을 확인했다. 나는 이것도 dev 폴더에서 관리하도록 메이븐 저장소를 로컬 저장소로 바꿀 것이다. dev 폴더에서 관리하길 원하지 않는다면 이 단계는 넘어가도 된다.

  • 기존 경로 -> C:\Users\사용자\.m2\repository
  • 변경 경로 -> C:\dev\repository

참고로 외부망이 막힌 환경, 즉 offline 환경에서는 메이븐 사이트에서 의존성을 가져오지 못하므로, 필요한 의존성을 미리 다운로드한 뒤 로컬 저장소로 변경하여 사용하곤 한다.

1. C:\dev에서 repository 폴더를 생성한다.
2. settings.xml 파일을 다운받는다.

settings.xml
0.00MB

 

메이븐에서 로컬 저장소로 설정하기 위해서는 settings.xml 라는 환경설정 파일이 필요하다. 다만 파일이 없으니까 직접 만들었다.

3. 파일을 열어서 <localRepository> 내용을 본인의 로컬 저장소 경로로 변경한다.

<settings>
	<localRepository>C:\dev\repository</localRepository>
</settings>

4. C:\dev\repository 경로에 settings.xml 파일을 넣는다.
5. 설정한 Local Repository 경로로 변경한다. 

STS 메뉴에서 [Window] > [Preferences] > [Maven] > [User Settings]를 클릭한다. 별다른 설정을 하지 않았다면 기존 경로는 아래와 같을 것이다.

User Settings 란 옆에 있는 [Browse]를 클릭하여 방금 만든 settings.xml를 선택한다. 그러면 하단의 Local Repository 란도 자동 세팅되는 것을 확인할 수 있다. 새로운 저장소 위치로 변경했다면 [Apply]를 눌러 변경사항을 적용한다.

그러면 새로운 저장소 위치로 변경되면서 내가 설정한 경로로 바뀌는 것을 확인할 수 있다. 이렇게 메이븐 로컬 저장소까지 설정 완료하였다.

다음편 가기 >> 스프링부트 개발환경 구성하기 (5) DB 설계와 REST API 설계