SpringBoot 블로그 만들기 - Maven설명과 Lombok 설치

정원·2022년 11월 17일
0

SpringBoot

목록 보기
6/34

2022.11.17 Maven설명과 Lombok 설치

Maven이란?


프로젝트의 전체적인 라이프사이클을 관리하는 관리도구이다.

프로젝트 객체모델(Project Object Model: POM) 이라는 개념을 바탕으로 프로젝트의 의존성관리, 라이브러리관리, 프로젝트 라이프사이클 관리 기능등을 제공하는 프로젝트 관리도구이다. 플러그인을 기반으로 소스코드로부터 배포 가능한 산출물을 만들어내는 빌드 기능을 제공한다.

빌드란? build

소스코드 파일을 컴퓨터에서 실행 할 수 있는 독립 SW가공물로 변환하는 과정, 결과물 이다.
즉, 작성한 소스코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원 등 (.xml, .jpg, .jar, .properties ..)을 JVM이나 WAS가 인식할 수 있는 구조로 패키징 하는 과정 및 결과물이라고 할 수 있다.

빌드도구 build tool

프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램이다.
계속해서 변동되는 라이브러리 추가, 버전 관리 등의 어려움을 해소하고자 등장했다.
ex) Maven, Ant, Gradle .. 등이 있다.

메이븐 특징

  • 필요한 라이브러리를 특정문서(pom.xml)에 정의만 해주면
    내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리 작동에 필요한 하위 라이브러리까지 네트워크를 통해서 자동으로 다운받아준다.

  • 중앙 저장소를 통한 자동 의존성 관리를 한다.
    중앙 저장소는 라이브러리를 공유하는 파일서버이고,
    저장소는 아파치재단에서 운영관리하는 저장소를 사용할 수도 있고 별도의 사설 저장소를 사용할 수도 있다.

  • 프로젝트 전체내용에 대한 기술 및 설정을 담당하는 pom과 라이브러리관리에 대한
    dependency / repository 관리 모델 그리고 컴파일, 테스트, 패키징 등의 빌드생명주기를 다루는 라이프사이클 및 관련 플러그인들과의 연동을 다루는 부분으로 구성된다.

메이븐 아키텍쳐

프로젝트 객체 모델 POM

Project Object Model.
프로젝트의 구조와 내용을 설명하고 있으며
pom.xml 파일에 프로젝트 관리 및 빌드에 필요한
버전 및 설정관리, 빌드환경, 라이브러리 저장소 및 의존성 등 환경설정 정보들을 기술한다.

메이븐 디렉터리 구조.

메이븐은 bast practices을 기반으로 정규화된 디렉터리 구조를 제공하고 있으며
모든 소스파일들은 /src 디렉터리 이하에, 빌드된 output은 /target 디렉터리 밑에 위치한다.

의존성 관리.

  • 메이븐은 POM에서 선언된 dependency설정으로 빌드 및 배포시 필요 라이브러리들을 관리하고 로컬 및 원격 저장소에서 선언된 라이브러리들을 다운받아 사용한다.

  • 개발자는 프로젝트에 사용할 라이브러리를 직접 업로드하지 않고
    pom.xmldependency로 정의만 해두면 메이븐이 repository에서 검색해서 자동으로 추가해준다. 심지어 참조하는 모든 라이브러리 까지 찾아서 추가해준다.

의존성 추가 ex)

의존성 분석 순서

  1. 로컬 저장소에서 의존성 확인
  2. 원격 저장소 리스트에서 의존성 확인
  3. 1과 2가 실패하면 의존성 에러 보고

의존성<dependency> 필수 선언 항목

  • <groupId>: 부분적인 프로젝트나 조직에서의 라이브러리 집합을 식별하기 위해 제공한다.
  • <artifactId>: 프로젝트의 실제 이름으로 groupId와 합쳐져 프로젝트 식별에 쓰인다.
  • <version>: 선언한 의존성 artifact의 버전으로 프로젝트 내에서 사용하는artifcat의 일관성을 추구할 수 있다.

Lombok 설치

파일경로 : C:\Users\jwons.m2\repository\org\projectlombok\lombok\1.18.24

lombok.jar git bash 열어서 파일 실행

jwons@DESKTOP-P2E2D4J MINGW64 ~/.m2/repository/org/projectlombok/lombok/1.18.24
$ java -jar lombok-1.18.24.jar

Speccify location... 선택 -> 사용할 툴 선택 후 Select -> install

Lombok 사용 예시

  • @Data : @Getter + @Setter
  • @NoArgsConstructor : 기본생성자
  • @AllArgsConstructor : 모든필드값을 갖는 생성자
  • @RequiredArgsConstructor : final이 붙은 필드값을 갖는 생성자
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Member {
	private final int id;
	private String username; //수정이 필요한 값은 final을 붙이면 안된다.
	private final String password;
	private final String email;
}

HttpControllerTest.java

@RestController
public class HttpControllerTest {
	
	private static final String TAG = "HttpControllerTest : ";
	
	@GetMapping("/http/lombok")
	public String lombokTest() {
		Member m= new Member(1,"won","1234","jwo@nate.com"); //@AllArgsConstructor
		System.out.println(TAG+"getter : "+m.getId()); //getter
		m.setId(5000);
		System.out.println(TAG+"setter : "+m.getId()); //setter
		return "lombok test 완료";
	}

브라우저에서 요청

콘솔 확인 완료

lombok @Builder

Member.java 에서 @AllArgsConstructor 지우고 생성자 직접 생성.

생성자위에 @Builder 어노테이션 붙이기.

@Builder
public Member(int id, String username, String password, String email) {
	this.id = id;
	this.username = username;
	this.password = password;
	this.email = email;
}

HttpControllerTest.java
만약 id는 시퀀스로 증가하게 두고 다른 필드값만 넣어주고 싶을 때는
원하는 필드값만을 가지는 생성자를 다시 생성해야 한다.
하지만 생성자에 @Builder 어노테이션을 붙이면 id는 자동증가하고 원하는 필드값만 전달이 가능하다.
순서를 지키지 않아도 된다. 👍

Member m = Member.builder().원하는필드값.계속추가가능.마지막에.build();
	@GetMapping("/http/lombok")
	public String lombokTest() {
//		Member m = new Member("won","1234","jwo@nate.com");
		Member m = Member.builder().username("won").password("1234").email("jwo@nate.com").build();
		System.out.println(TAG+"getter : "+m.getId());
		m.setId(5000);
		System.out.println(TAG+"setter : "+m.getId());
		return "lombok test 완료";
	}

0개의 댓글