2022.11.17 Maven설명과 Lombok 설치
프로젝트의 전체적인 라이프사이클을 관리하는 관리도구이다.
프로젝트 객체모델(Project Object Model: POM) 이라는 개념을 바탕으로 프로젝트의 의존성관리, 라이브러리관리, 프로젝트 라이프사이클 관리 기능등을 제공하는 프로젝트 관리도구이다. 플러그인을 기반으로 소스코드로부터 배포 가능한 산출물을 만들어내는 빌드 기능을 제공한다.
소스코드 파일을 컴퓨터에서 실행 할 수 있는 독립 SW가공물로 변환하는 과정, 결과물 이다.
즉, 작성한 소스코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원 등 (.xml, .jpg, .jar, .properties ..)을 JVM이나 WAS가 인식할 수 있는 구조로 패키징 하는 과정 및 결과물이라고 할 수 있다.
프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램이다.
계속해서 변동되는 라이브러리 추가, 버전 관리 등의 어려움을 해소하고자 등장했다.
ex) Maven, Ant, Gradle .. 등이 있다.
필요한 라이브러리를 특정문서(pom.xml)에 정의만 해주면
내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리 작동에 필요한 하위 라이브러리까지 네트워크를 통해서 자동으로 다운받아준다.
중앙 저장소를 통한 자동 의존성 관리를 한다.
중앙 저장소는 라이브러리를 공유하는 파일서버이고,
저장소는 아파치재단에서 운영관리하는 저장소를 사용할 수도 있고 별도의 사설 저장소를 사용할 수도 있다.
프로젝트 전체내용에 대한 기술 및 설정을 담당하는 pom과 라이브러리관리에 대한
dependency / repository 관리 모델 그리고 컴파일, 테스트, 패키징 등의 빌드생명주기를 다루는 라이프사이클 및 관련 플러그인들과의 연동을 다루는 부분으로 구성된다.
Project Object Model.
프로젝트의 구조와 내용을 설명하고 있으며
pom.xml 파일에 프로젝트 관리 및 빌드에 필요한
버전 및 설정관리, 빌드환경, 라이브러리 저장소 및 의존성 등 환경설정 정보들을 기술한다.
메이븐은 bast practices을 기반으로 정규화된 디렉터리 구조를 제공하고 있으며
모든 소스파일들은 /src 디렉터리 이하에, 빌드된 output은 /target 디렉터리 밑에 위치한다.
메이븐은 POM에서 선언된 dependency설정으로 빌드 및 배포시 필요 라이브러리들을 관리하고 로컬 및 원격 저장소에서 선언된 라이브러리들을 다운받아 사용한다.
개발자는 프로젝트에 사용할 라이브러리를 직접 업로드하지 않고
pom.xml에 dependency로 정의만 해두면 메이븐이 repository에서 검색해서 자동으로 추가해준다. 심지어 참조하는 모든 라이브러리 까지 찾아서 추가해준다.
의존성 추가 ex)
파일경로 : 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
@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 완료";
}
브라우저에서 요청
콘솔 확인 완료
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 완료";
}