Maven과 라이브러리
프로젝트에 라이브러리를 적용하기 위해서는 어떤 과정을 거칠까?
라이브러리가 필요하면 일단 해당 사이트로 가서 라이브러리를 다운 받고, 다운 받은 파일을 내 프로젝트 내부에 복사하고 빌드 한다. 그러면 특정 라이브러리가 필요할 때 import해서 사용할 수 있다.
ex) 프로젝트 이름이 blog라면 필요한 라이브러리인 ojdbc(오라클) 드라이버를 사용하기 위해서 첫번째로
오라클 사이트에서 드라이버를 다운한 뒤 lib 폴더를 만들어 해당 파일을 복사한다.
복사 후에 프로젝트가 인식할 수 있도록 빌드를 한다.
다른 프로젝트에서도 해당 라이브러리를 사용한다면 그 프로젝트에 lib 폴더를 만들어 복사를 하고 빌드를 하는데,
이렇게 복사하지 않고 프로젝트 외부에 따로 폴더를 만들어 그 폴더를 복사하면 하나로만 연결하여 관리할 수 있어 편리할 것이다.
하지만 프로젝트 내부에서 들고있지 않기 때문에 배포하고 나서는(다른 운영체제에서 실행할 때) 내부에서 따로 폴더를 만들어 빌드를 해야하는 복잡한 과정이 생긴다.
라이브러리를 외부에 두면 장점 : 파일 하나로 다른 쪽에서도 사용할 수 있음
라이브러리를 외부에 두면 단점 : 배포하면 다시 연결해야 하고 필요한 라이브러리를 각각의 사이트에 가서 다시 다운받으려면 복잡하다.
이를 해결하기 위해 스프링에서는 파일을 관리하기 위한 파일 서버 역할을 하는 중앙저장소를 만들어서 jsop, lombok 등 다양한 사이트의 라이브러리를 넣어두고 프로젝트에서 사용하고 싶을 때마다 각각의 사이트에서 다운 받는게 아닌 중앙 저장소에 접근해서 다운 받는다.
파일을 다운 받을땐 porm.xml 파일에 내가 받아야하는 라이브러리를 기술하는데 이렇게 기술해놓으면 프로젝트가 시작될 때 porm.xml을 maven이 읽어서 자동으로 다운을 받고 빌드를 해준다.
즉, 라이브러리를 사용할 땐 form.xml에 라이브러리를 기술하고 maven이 다운 및 빌드를 하여 사용한다.
maven이 관리하는 라이브러리는 .m2 폴더에서 확인할 수 있으며
form.xml에 기술하면 자동으로 다운로드 되는 파일들이다.
lombok 라이브러리
@Data //getter + setter
@AllArgsConstructor //constructor
@RequiredArgsConstructor //final이 붙은 constructor
@AllArgsConstructor //전체 생성자
@NoArgsConstructor //빈 생성자
lombok 라이브러리를 빌드하고 @Data 어노테이션을 추가하면 getter와 setter를 자동으로 추가해주며
@AllArgsConstructor을 추가하면 생성자를 자동으로 생성하여 파라미터 값을 받을 수 있게 해준다
@GetMapping("/http/lombok")
public String lombokTest() {
Member m = new Member(1, "ssar", "1234", "email"); //@AllArgsConstructor
System.out.println(TAG+"getter : "+m.getId()); //@Data
m.setId(5000);
System.out.println(TAG+"getter : "+m.getId());
return "lombok test 완료";
}
Builder 패턴
정해진 생성자의 argument와 관계 없이, 오버로딩 없이 내가 넣고싶은대로 파라미터를 넣을 수 있는 기능이다.
생성자를 통한 순서를 지키지 않아도 되고 필드에 어떤 값이 들어가는지 몰라도 된다.
@Builder //아래에 설정된 입력값의 갯수와 관계없이 입력 가능함
//네 개의 입력값을 받는 클래스이다.
public Member(int id, String username, String email, String password) {
super();
this.id = id;
this.username = username;
this.email = email;
this.password = password;
}
@GetMapping("/http/lombok")
public String lombokTest() {
//Builder 패턴을 통해 원하는 입력값만 입력 가능
Member m = new Member.MemberBuilder().username("ssar").password("1234").email("ssar@nate.com").build();
System.out.println(TAG+"getter : "+m.getUsername());
m.setUsername("seo");
System.out.println(TAG+"getter : "+m.getUsername());
return "lombok test 완료";
yaml 설정
yaml 설정이란? 스프링 프로젝트를 설정한다는 것(스프링의 포트, 데이터베이스 연결, 인코딩 등등..전반적인 설정을 yaml 파일에서 한다 *예전엔 xml 파일에서 했었다)
가독성이 좋아진 장점이 있다
Xml과 Json 파일 포맷은 많이 들어보셨는지요?
아마 많이 쓰고 계실 걸로 생각 됩니다. 그럼 이런 포맷들은 왜 사용할까요?
그걸 먼저 설명드리면,
우리가 타 시스템 간에 데이터를 주고 받을 때 데이터 포맷에 대한 약속이 필요합니다.
혼자 시스템을 개발하거나 내부 시스템 끼리는 "1-김태민-강사,2-아무개-학생" 이라는 문자열을 만들어서 "-(하이픈)"을 파싱해서 순서대로 "1"은 일련번호, "김태민"은 이름, "강사"는 구분이라는 규칙과, ",(콤마)"는 리스트를 나타내는 구분자라는 규칙을 세울 수 있을 겁니다.
그럼 데이터를 내부 시스템에 전송할때 포맷에 대한 형태는 말로써 혹은 내부 문서로써 정의해 놓으면 되기 때문에 데이터 크기는 엄청 작아 질 수 있겠네요.
근데 문제는 타 시스템들과의 연동을 할때입니다.
내부에서 세운 규칙을 타 시스템들과 데이터를 주고 받을때다 문서로주고 받기도 번거롭고, 데이터 규칙에 대한 문서들이 많아지게 되는 문제가 있습니다.
그래서 Xml이나 Json과 같은 데이터 포맷을 정의하고 그 포맷에는 규칙도 있습니다.
아주 오래전부터 사용되었던 포맷은 Xml이겠네요
xml은 태그형식을 통해서 Key와 Value를 구분하고, 태그안에 태그를 넣어서 부모와 자식관계의 구조를 나타냅니다.
근데 위에 Object와 Array 부분은 표시를 해놨지만 Xml포맷상으로는 구분이 안되는 부분도 있습니다.
다음은 똑같은 내용의 Json 포맷입니다.
딱 봐도 간소해 보이네요. 좀 눈에 피로가 풀리는것 같습니다. ㅎ key값에 쌍따옴표가 있고
그리고 Object 일 경우 {} 로 감싸주고있고, Array일 경우 **[]**로 감싸주고 있어서 구분도 되고요.
Key도 아까 Xml처러 두번 들어가지 않아서 좋네요.
근데 {}, [], "" 이런 문자들이 지금은 좀 거추장스러워 보입니다.
(yaml 파일을 알기 전까진 몰랐지만요 ㅎ)
다음은 Yaml 입니다. 야믈이라고 보통 읽고요. yml 이라고도 씁니다.
안구정화가 되네요.
**(하이픈)**을 통해서 Array임을 알수가 있습니다. 들여쓰기 두칸 중괄호가 없음 키와 밸류 사이에 한칸 띄워야함
yaml을 몰라서 안쓴 사람은 있어도 한번 yaml을 쓰게되면 다른포맷은 불편하게 느껴지게 된다고 말씀드리고 싶네요.
출처 : https://www.inflearn.com/questions/16184
본 강의는 '메타코딩'님의 동영상 강의를 참고하였습니다.
출처 : https://www.youtube.com/playlist?list=PL93mKxaRDidECgjOBjPgI3Dyo8ka6Ilqm
'JAVA > Spring' 카테고리의 다른 글
JPA 테이블 생성하기, 연관 관계 (0) | 2022.02.17 |
---|---|
yml 파일 설정, jsp 파일 (0) | 2022.02.17 |
포스트맨 실습 : 데이터 요청하기 (0) | 2022.02.17 |
http의 요청방법과 통신방식, header와 body (0) | 2022.02.17 |
프로젝트 만들기 (0) | 2022.02.17 |