스프링부트 강좌 15강(블로그 프로젝트) - maven이란
1. Maven이란?
상황: 프로젝트 이름이 blog이다. 필요한 라이버리리가 Ojdbc 라면, 오라클 드라이버를 사용하기 위해 첫번째로 오라클 사이트에서 ojdbc를 다운을 받는다. blog 프로젝트의 lib 폴더를 만들고 이 폴더에 ojdbc 복사를 한다. copy 후에 프로젝트가 얘를 인식할 수 있도록 빌드를 해야 한다.
내 프로젝트에서 특정 클래스가 필요하면 임포트 해서 사용할 수 있는 것이다.
프로젝트는 insta이다. lib폴더를 만든다. ojdbc를 똑같이 카피해서 집어넣는다. 그 다음 빌드를 해야 한다.
그럼 ojdbc는 총 2개가 되는 것이다. 그럼 만약 카피하지 않고, lib 폴더도 없게 하는 것이다.
그리고 어떤 폴더를 만든다. c드라이브에 lib라는 폴더를 만들고 카피를 여기로 하는 것이다. 그리고 빌드를 여기 폴더를 연결해놓고 한다. 그러면 하나의 파일을 두 프로젝트에서 사용할 수 있다. 프로젝트 외부에 두면 조금 더 편리할 것이다.
근데 내 컴퓨터에 있는 것인데 , 만약 이 프로젝트를 배포해야 한다면?..
리눅스에 insta 를 배포하고자 하면..
리눅스는 /home/yuri/lib/ojbc.jar 를 만들어 얘를 빌드 해야 한다. 굉장히 복잡하고 번거로움...
외부에 두게 되면 장점은 파일 하나로 양쪽에서 사용할 수 있다. 단점은 배포하게 되면 또 연결해야 한다.
만약 mysql 라이브러리를 다운받고 싶다. jsoup (자바로 html을 파싱할 수 있는)를 다운 받고 싶다.
1. 프로젝트 내부로 옮긴다
2. 외부 폴더에 두고 사용한다.
각각의 사이트에 가서 다운받게 되면 매우 불편하다. 그래서 이렇게 하면 어떨까?
중앙 저장소를 하나 만든다. 이 저장소에 jsoup, lombok, ojdbc, gson 등등.. 이 라이브러리들은 각각의 특정 회사에서 만들었을 것이다.
각각의 사이트에 가서 다운을 받아야 한다. 이것을 이렇게 하지 않고 중앙저장소에 넣어놓는 것이다.
중앙저장소, 파일서버가 될 것이다.
프로젝트는 중앙저장소에 접근해서 다운받으면 된다. 이때 pom.xml이라는 파일을 만든다. 여기다가 내가 다운받아야 할 라이브러리들을 기술해놓는다.
등등.. 기술만 해놓으면 프로젝트가 시작될 때, pom.xml을 maven이라는 프로젝트 관리도구가 얘를 읽어서 필요한 것들을 중앙저장소에서 자동으로 다운받는다. 내 프로젝트에 다운받는 게 아니라 .m2라는 폴더가 있다. 이 폴더를 만들고
.이 앞에 붙어있으면 윈도우에서는 숨김 폴더를 의미한다. reposityory라는 폴더를 만들고, 그 내부에 다운받아진다. 그럼 다 다운받고 자동으로 빌드까지 해준다.
한마디로 프로젝트에서 라이브러리를 관리할 때 pom.xml에 필요한 것들을 적어놓으면 된다.
리눅스에 배포할 때 어떻게 해야 할까? 그럼 pom.xml이 똑같이 있을 것이니까 자동으로 관리가 된다. (Maven 설치 해야 함)
스프링부트 강좌 16강(블로그 프로젝트) - lombok세팅 및 사용해보기
C:\Users\yurilee.m2\repository
메이븐이 관리하고 있는 라이브러리들이다. 특정하게 어디서 다운받는 게 아니라 pom.xml에 기술하면 자동으로 다운이 되는 폴더이다.
C:\Users\yurilee.m2\repository\org\projectlombok\lombok\1.18.12
여기의 lombok-1.18.12.jar 파일을 실행시켜야 한다. 실행을 해서 내 tool이 인식할 수 있게 해야 한다.
빌드라는 것은 임포트 하여 사용할 수 있게 해주는 것이다. tool 자체가 lombok을 인식할 수 있게 해야 한다.
설정관련해서 질문있습니다.
maven에서 pom.xml에 필요한 기술들을 적으면 다운로드 및 빌드까지 된다고 말씀해주셨는데,
롬복은 왜 따로 수동 설치해야 하나요?
혹시 다른 기술들도 이렇게 수동으로 설치하는 경우들이 자주 있나요? (만약 그렇다면, 어떤 건 수동으로 설치하고 어떤 건 자동으로 되는지 찾아보거나 외운 상태여야 하는 거죠?)
lombok을 sts툴이 인식하지 못해서 컴파일을 못해요. 그래서 툴이 인식할 수 있게 plug-in을 설치해야되요.
소스도 정상이고 빌드 패스도 잘 걸려있어서 아주 정상인데 툴 자체가 인식을 못해서 설치하는거에요ㅎㅎ
getter과 setter을 동시에 만들고 싶으면 data를 import 해주면 된다.
생성자를 만들고 싶으면 @AllArgsConstructor 을 사용할 수 있다.
public class Member {
private final int id;
private final String username;
private final String password;
private final String email;
}
앞에다가 final을 붙여서 한번 쓰고,
원래 데이터베이스에 있는 값을 들고와서 집어넣을 것이기 때문에 데이터가 변경되지 않게 final로 잡아준다.
왜? 불변성 유지를 위해, 데이터베이스에서 들고 온 값을 변경할 일이 없기 때문에..만약에 비밀번호를 변경해야 할 일이 있으면?
lombok을 쓰면 어노테이션 하나로 builder 패턴을 만들어 준다. 얘의 장점은? 생성자의 순서를 고려할 필요가 없다.
내가 생성자를 통해서 넣을 때는
Member m = new Member(1, "ssar","1234", "email");
이렇게 무조건 순서를 지켜야 한다. 하지만 빌더를 사용하면 그럴 필요가 없다~~
public String lombokTest() {
Member m = Member.builder().username("sarr").password("1234").email("ssar@nate.com").build();
System.out.println(TAG+"getter : "+m.getUsername());
m.setUsername("cos");
System.out.println(TAG+"setter : "+m.getUsername());
return "lombok test 완료";
}
이 글은 유투버 겟인데어의 스프링 부트 강좌를 바탕으로 정리한 내용입니다.