Blog

[Spring]04 IntelliJ를 통한 스프링 프로젝트 초기 생성과 설정, 프로젝트 생성시 Dependency Injection(DI)이란?

Author
Summary
스프링 프로젝트 생성 첫 시작
Category
Study
Tags
Spring
Favorite
Memory Date
2023/08/25
Cross Reference Study
Related Media
Related Thought
Related Lessons
tag
날짜
작성자
진행상황
진행 전
태그구분
6 more properties
신규 프로젝트 생성>Spring Initializr를 통해 스프링 프로젝트 생성 마법사를 활용 할 수 있다.
이를 통해 초기 프로젝트 생성 시 기본적인 프로젝트 이름, 메인 언어, JDK 버전 등을 선택 할 수 있다.
프로젝트 이름과 폴더를 지정하고
메인 언어는 Java를 선택
빌드 자동화 툴은 Gradle - Groovy를 선택했다.
Gradle은 그루비를 이용한 빌드 자동화 시스템이다.
Groovy란 자바 가상 머신에서 작동하는 동적 타이핑 프로그래밍 언어이다.
JDK는 Homebrew 17버전을 선택했다.
추가적으로 필요한 라이브러리, 모듈 등 의존성(Dependencies)를 를 쉽게 찾고 자동으로 입력 해주는 역할을 한다. 원하는 라이브러리를 선택하여 추가 할 수 있고, 생성 시 기본적인 Spring Framework 라이브러리, 모듈등이 설치됨과 함께 추가된 Spring Web, Lombok의 라이브러리들도 설치되게 된다.
Dependency Injection에 대한 추가 공부
dependency란?
어떤 클래스 A가 다른 클래스(또는 인터페이스)B를 이용할 때 A가 B에 의존한다고 한다.
그럼 현재 프로젝트 생성에서 Dependencies를 설정한다는 의미는?
Dependency Injection(DI) 의존성을 주입한다는 것이다.
이는 프로그래밍에서 구성요소간 의존 관계가 소스코드 내부가 아닌 외부의 설정 파일 등을 통해 정의되도록 하는 디자인 패턴 중 하나.
따라서 현재 Spring Web, Lombok 의존성을 주입하는데, 외부 링크 등을 통해서 해당 라이브러리를 참조하게 될 것이다.(실제로 다운로드가 발생 된다.)
이를 통해 해당 프로젝트에서는 외부 라이브러리의 기능을 사용 할 수 있다.
그럼 내가 추가한 lombok, Spring Web 등 dependencies는 어디서 기록될까?
위 프로젝트 생성 마법사는 사실 GUI로 구성된 도움이다. 실제로 어디선가 외부 dependencies의 경로를 설정해 둔 곳이 있을 것인데, 이전 Eclipese로 할 때 기억나는 것은 pom.xml이었다. 지금은 어디서 그 설정을 하고있을까 궁금했다.
찾아본 결과 위 GUI 환경에서 의존성 주입을 선택하는 행위자체는 build.gradle이라는 빌드 툴 설정 파일에서 관리되고 있었다. pom.xml 은 이전에 사용했던 Eclipse에서 프로젝트가 빌드 툴을 Maven을 사용했기 때문에 Maven은 pom.xml 파일에서 의존성을 관리하던 것이다.
내가 원하는 외부 라이브러리들은 아래 경로에서 찾아왔었다.
그럼 Maven을 사용할 경우 pom.xml 의 의존성을 주입이 필요 할 때, 위 페이지에서 코드를 복사했왔었는데 gradle은 어디서 찾을 수 있을까? 팀원과의 소통을 통해서 찾아보던 결과 해당 페이지에서 gradle 탭이 존재하는 것을 확인했다.
Json 라이브러리를 추가하고 싶다고 가정 했을 때,
아래는 과거 Maven 빌드 툴을 사용 할 때, Maven에서 의존성 주입 할 때 pom.xml<dependencies> … <dependencies/> 태그 내부에 넣던 코드이다.
아래는 현재 Gradle 빌드 툴을 사용하고 있으며 의존성 주입 할 때 build.gradledependencies { … } 코드 내에 삽입할 코드이다.
실제로 해당 코드를 복사하여 build.gradle 에 추가해보고 해당 외부 라이브러리가 프로젝트에 추가되는지 살펴봤다.
소스코드를 입력하고 저장하자마자 해당 라이브러리가 자동적으로 다운로드되고, 결과 GUI툴에서도 내가 원하는json:20160810 버전의 라이브러리가 추가 되는 것을 확인 할 수 있었다.
추가적인 기능으로 ‘Auto Import’를 활성화 시켜서 앞으로 어떠한 클래스, 라이브러리 등을 작성 하면 자동으로 import java.util.*; 처럼 대상 기능 또는 메소드, 클래스 등에 대한 임포트문이 자동으로 생성 될 것이다. 하지만 자동이기 때문에 혹시나 잘못된(그럴일은 별로 없겠지만)으로 오류가 발생할수도 있으니 인지하고 있어야 한다.