02강 스프링과 메이븐
- Spring을 사용하기 위해 Maven Build가 필요함!
- Spring을 프로젝트 할 때 기본적인 골격을 보통 Maven이라는 Build Tool 이 맞춰주게 됩니다.
- 스프링과 메이븐의 관계
- 자바 개발의 사실상 표준 빌드 툴!
- 이전에는 ANT 를 많이 사용. - XML 설정 파일을 사용!
- 메이븐 외에 groovy라는 언어로 설정을 하는 gradle 또한 등장함.
- 자바 개발의 사실상 표준 빌드 툴!
- 메이븐의 특징
- 외부 라이브러리 관리
- Convention over Configuration (CoC) 설정을 넘어선 규약!
- 보통 웹 어플리케이션 개발을 하다 보니 초기 설정을 하게 됩니다.
이 설정들이 하다 보니 모두 비슷한 설정을 하게 되고,
이 설정이 어느정도 협약,규약처럼 표준으로 자리 잡게 됩니다.
즉, Best Practice 가 표준으로 잡히게 되죠.
메이븐은 이러한 정의를 미리 해두어 설정(Config)보단 관례(Convention)을 따라서
여러 장점을 가져가는 것이 메이븐의 특징 중 하나입니다.
ex) 개발 디렉토리 구조, 빌드 단계 - 비교대상 cf) Node.js의 웹 프레임워크 Express - Configuration over Convention
개발자의 설정 자유도를 더 존중하는 프레임워크!
- 보통 웹 어플리케이션 개발을 하다 보니 초기 설정을 하게 됩니다.
- 의존성 관리를 자동으로 수행!
- Maven 중앙 저장소(Central Repository)를 제공하여 자바 라이브러리에 대한 편리한 관리 제공
- 어플리케이션을 개발하다보면 관리해야할 라이브러리 수가 수백 가지가 넘어가는 경우도 있는데
이에 대한 편리한 관리를 제공함. (라이브러리에 대한 충돌과 버전 관리 등도 자동으로! ) - 자바에서 관리하는 모든 라이브러리를 하나의 중앙 저장소에서 관리한다는 것이 포인트!
- POM.XML ... 메이븐의 메인 설정 파일
- root/pom.xml 이 있으면 이것은 메이븐 프로젝트임.
- 메이븐 프로젝트 명
- artifact ID 로 사용.
- 그룹 아이디
- 주로 프로젝트 생성 조직이나 기관의 도메인 명 역순으로 표기
ex) kr.co.company.
Top-level package 명으로 사용됨.
- 주로 프로젝트 생성 조직이나 기관의 도메인 명 역순으로 표기
- 버전
- 개발 버전을 의미하는 SNAPSHOT 버전 사용. ex) 0.0.1-SNAPSHOT
- cf) 배포 버전 ex) 1.0.0-RELEASE
- maven.apache.org
- STS 내 Maven 관련
- Spring Legacy Proejct 는 일부 스프링 프로젝트의 정해진 코드를 셋팅된 상태로 시작 가능.
- 생 프로젝트는 Dynamic Web Proejct/Maven Project !
- Maven이 관련된 프로젝트를 생성 시 pom.xml 에 설정되어 있는 라이브러리들을 즉시 다운 받음.
root/Maven Dependencies에 물리적으로 나타남. - pom.xml 내
- packaging - war : 웹 어플리케이션으로 만들어졌다는 의미
- Maven vs Gradle
- Gradle은 지금까지 자바 진영에서 많이 사용해온 Ant 빌드 툴과 Maven 빌드 툴의 단점은 버리고, 장점을 취한 빌드 툴입니다. 따라서 Ant와 Maven 빌드 툴의 기능을 모두 포함하고 있습니다.
- Ant의 가장 큰 장점을 들자면, 개발자가 자유롭게 빌드 단위(Ant에서는 target)를 지정하고 빌드 단위 간의 의존 관계를 자유롭게 설정할 수 있다는 것입니다.
하지만 자유도가 높다는 것은 잘 활용할 경우 좋은 도구가 될 수 있지만 그렇지 않을 경우 애물단지로 전락할 가능성이 있기에 단점이 될 수 있습니다. - Maven의 가장 큰 장점은 Convention over Configuration 전략에 따라 프로젝트 빌드 과정에 대한 많은 부분이 이미 관례로 정해져 있다는 것입니다.
따라서 Maven 기반 프로젝트를 경험한 개발자는 Maven을 기반으로 하고 있는 새로운 프로젝트에서도 쉽게 적응할 수 있습니다.
하지만 관례가 항상 좋은 것은 아니기에, 특수한 상황이 발생하는 경우에는 맞지 않는 경우도 발생합니다. 그래서 Maven의 관례에 거부감을 가지는 개발자들 또한 있겠죠. - Gradle은 Ant의 자유도와 Maven의 관례의 장점을 모두 흡수했습니다.
그리고 Ant와 Maven 빌드 툴 모두 가지고 있었던 가장 큰 단점인 XML에 대한 이슈도 Groovy라는 언어를 사용해 해결하고 있습니다.
03강 메이븐 Spring Project
- STS 로 스프링 프로젝트 생성
STS의 프로젝트 자동 생성 기능을 사용- Dynamic Web Proejct 생성 (원래 Spring 전용이 아닌 J2EE 를 만들기 위한 것임)
- Dynamic web module version 3.1로 설정
- apache tomcat 8.0 설치 후 설정
- 소스 디렉토리의 경로를 Maven Convention에 맞게 수정!
- src\main\java
src\main\resources
src\test\java
src\test\resources - 테스트 주도형 개발 TDD(Test-Driven Development)를 지향!
- src\main\java
- WebContent 란
- Web 의 root 정보들이라고 볼 수 있는 데이터들입니다.
src/main/webapp - 모든 J2EE 어플리케이션에선 web.xml 이 있어야 하며 모든 웹 어플리케이션의 설정파일입니다.
- Web 의 root 정보들이라고 볼 수 있는 데이터들입니다.
- Maven 프로젝트로 변환 방법
- 프로젝트 우클릭 -> Configure -> Convert to Maven Proejct
- 그룹 ID 설정
- Artifact ID 설정
- 버전 설정
- 을 통해 메이븐 프로젝트를 인식하고 변환함!
- 프로젝트 우클릭 -> Configure -> Convert to Maven Proejct
- 의존성(Dependency) 추가
- 메이븐 중앙 저장소에서 라이브러리 검색하여 ( https://mvnrepository.com )
- pom.xml 내 dependencies 내 태그로 추가 !
'Room 102. Back-end > Spring' 카테고리의 다른 글
[실전 개발자를 위한 Spring Framework ] 강의 - MVC 패턴 (0) | 2020.05.28 |
---|---|
[실전 개발자를 위한 Spring Framework ] 강의 - 계층 구조 (0) | 2020.05.25 |
[실전 개발자를 위한 Spring Framework ] 강의 - DI 개념 (0) | 2020.05.25 |
[실전 개발자를 위한 Spring Framework ] 강의 - IoC (0) | 2020.05.24 |
[실전 개발자를 위한 Spring Framework ] 강의 - Spring (0) | 2020.05.14 |