[Spring] - Maven 방식 이해하기 (복습)

2020. 8. 26. 23:09개발공부/Spring

#Spring #Maven

코로나 확진이 거세지면서 정부 권고로 학원은 8월 휴강에 들어갔다. 학원 대처가 괜찮은 것이 4일 차까지 듣다가 끊긴 수업의 인강이용권을 무료로 배부해주고 다음 달에 현강을 들을 수 있게끔 조치해주었다.

정보처리기사 필기시험과 맞물리면서 Spring 기초 원리를 알 수 있었던 설치부터 Maven 프로젝트 내 폴더 기능들까지 1~2일 차 강의를 제대로 복습 못한 것이 못내 아쉬웠는데 휴강을 전화위복으로 삼고 개강 전까지 복습하는 시간을 가지기로 했다.

1. Spring 프레임워크의 특징

강의에서 예시를 부대찌개로 들었는데, Spring을 활용하면 넣고 끓이기만 하면 되는 레토르트 식품에 가깝고 반대로 개별 재료를 하나씩 사서 다듬고 육수를 우려내고 등등 A to Z까지 수작업으로 해야되는 과정과 대조되는 개념이다.

 - 의존성(Dependency Injection)

 하나의 객체가 다른 객체에 의존성을 지닐 수 있다. 예를 들어 객체가 연예기획사라면 소속된 연예인이 반드시 있어야 하고 그 기획사는 연예인에 대해 의존적이라고 볼 수 있다. 이처럼 객체들도 내부 속성에 다른 클래스 객체를 포함하고 있는 경우가 있는데, 포함한 객체에 대해 의존적이라고 말할 수 있다. Spring에선 빈번하게 발생되기에 대표적인 특징 중 한 가지이다.

 - 관점중심프로그래밍(Aspect-Oriented Programming)

제대로 들은 것인지는 모르겠으나 Spring에선 필요한 모듈, 라이브러리를 XML에 직접 입력해서 사이트로부터 IDE가 다운로드 받는다.(Maven 방식) 또다른 방식인 Gradle은 조금 더 편리하다고 하는데 강의가 Maven 중심이라 그까진 다루지 않는다. 예전에 두 가지 방식 차이를 구글링 했을 땐 Gradle이 효율적이라고 했었던 게 기억이 난다.

 - 제어의 역행(Inversion of Control)

 Java에서 객체 사용하려면 필요할 때 생성해서 메서드를 호출하거나 생성자를 호출했었다. 하지만 Spring이 가지고 있는 특징 제어의 역행으로 사용할 객체(<Bean>)를 미리 컨테이너에 등록시켜 두고 필요할 때 자동적으로 호출해주는 기능이 있다. 참고 그림은 하기 참조

 

2. 그 외 기록할 것들

폴더의 기능 혹은 역할

- src/main/java : .java 확장자나 Java 클래스, 인터페이스를 저장하는 폴더
- src/main/resources : Spring 설정 파일(Maven은 xml)을 저장하는 폴더
- src/test/java, resources : 테스트(TDD, 단위테스트)하는 폴더
- JRE System Library : Java 라이브러리
- src -> main : static한 파일들(IMG, HTML, CSS)
- pom.xml : 설정의 핵심파일, 라이브러리 다운 받기 위한 설정 진행

Maven xml을 다운받으려면 Maven Repository에 들어가서 원하는 라이브러리 검색 후 주소를 복붙해서 xml 파일에 붙이면 된다. pom.xml 파일엔 핵심적인 파일을 다운받고, 원하는 클래스에 주입할 객체를 넣으려면 resources 폴더에 직접 xml 파일을 만들어서 다운로드 받을 코드를 복붙해도 된다.

Class 생성 시 package 네이밍 관례는 Maven 프로젝트 만들 때 입력한 [GroupID.ArtifactID] 조합이다.