스프링(Spring)

Spring Framework 설치, 스프링과 Maven, Maven Spring Project 생성, IoC, DI (Dependency Injection)

개발학생 2022. 9. 20. 19:21
반응형

 

*22년 4월 한 달간 한국이러닝협회의 '실전 개발자를 위한 Spring Framework'를 수강하고 정리한 내용입니다

 

 

 

1. Spring Framework 설치

(1) Java SDK 설치 확인

- 명령 프롬프트를 실행한 후, 커서에 “java -version” 입력

 

(2) Eclipse용 STS 설치

- STS (Spring Tool Suite): Spring에서 공식적으로 지원하는 IDE

- Spring의 공식 홈페이지 “https://spring.io” 접속 → 메뉴바에서 Project 클릭
  → 자신의 컴퓨터 운영체제에 맞는 Spring Tools 4 for Eclipse 설치
  → C드라이브 (로컬 디스크 C) 폴더 하위에 포함시키고 압축 풀기

(3) Tomcat (WAS) 설치

- STS에는 기본 Tomcat (기본 local 서버)이 있지만, 가장 많이 쓰이는 Tomcat을 별도로 설치하여 STS에서 기본 서버 대신 사용

 

 

2. 스프링과 Maven

(1) Spring의 시작/Maven

- 역할: 외부 라이브러리 관리

- Maven이 gradle과 상호 보완 관계는 아님

- Maven이 ANT를 완전히 대체하게 됨

 

- Convention over Configuration(CoC): 개발자들이 자주 쓰는 로직(Best Practice)에 대한 설정 (Convention)을 미리 정의해둠.
   별도로 설정하지 않아도 설정된 사항(관례)을 그대로 따라서 개발할 수 있음
   ***최근에는 개발자들이 개발환경 설정하는 걸 힘들어하고 개발 사이클이 짧아지는 경향이 있어서,
        Convention over Configuration이 더 유력함

   ***Node.js의 경우, 위와는 반대로 Configuration over Convention이므로 관례보다는 설정을 중요시 여김. 개발자의 창의와 자유 보장.

 

- Java 기반 Web 애플리케이션의 Best Practice를 따름: 개발 디렉토리 구조와 빌드 단계도 Convention하게 정의해둬서, 구조가 거의 유사함

 

(3) 의존성 관리를 자동으로 수행/POM.XML .. 메이븐의 메인 설정파일

- 라이브러리를 200개 이상 사용해야 할 때가 많은데, 이때 업데이트를 해서 버전이 바뀔 경우 의존성들이 충돌할 수 있음.

- 메이븐은 의존성을 하나의 중앙 저장소(Maven 중앙 저장소)에 모아두고 관리함.

- POM.XML에 프로젝트의 모든 정보가 담겨있음. 이 파일이 있으면 무조건 메이븐을 사용한 프로젝트

 

(4) 프로젝트 명/그룹 아이디/버전 설정

- 그룹 아이디: 위처럼 이름을 정해야, 다른 기관에서 만든 프로젝트와 충돌할 일이 없음

 

(5) Maven 3 버전 사용

1) Spring Starter Project - 스프링부트

2) Spring Legacy Project - 기존 스프링 프로젝트 생성 (일부 코드를 같이 생성해 줌)

3) Dynamic Web Project

- 처음부터 프로젝트를 본인이 직접 설정해야 함.

  스프링 프로젝트를 만들기 위한 프로젝트 템플릿은 아님. J2EE 웹 어플리케이션 만드는 템플릿임.

4) Maven Project - 처음부터 프로젝트를 본인이 직접 설정해야 함. 메이븐 프로젝트(pom.xml 파일).

 

3. Maven Spring Project 생성

(1) Maven 기반 Spring Project 설정 방법- 1. STS의 프로젝트 자동 생성 기능을 사용

- 웹 애플리케이션 형태로 된다면, 다이나믹 웹 프로젝트로 진행하는 것이 좋음

- 다이나믹 웹 모듈 버전(중요한 요소)을 3.1, Apache Tomcat을 설치하고 버전을 8.0으로 설정하면 Spring 4.n대 버전을 지원함

  ***직접 찾아본 결과, 다이나믹 웹 프로젝트가 없어서 Maven Project로 만들어야 할 것 같음

 

(2) Maven 기반 Spring Project 설정 방법- 2. 소스 디렉토리의 경로를 Maven Convention에 맞게 수정

- test용 경로: 중요함. test를 많이 해봐야 함. TDD 개발(생산성 있는 개발) 지원

 

(3) Maven 기반 Spring Project 설정 방법- 3. STS로 스프링 프로젝트 생성

- Maven Project로 전환하려면 위와 같이 버튼을 클릭하고 프로젝트 명, 그룹 아이디, 버전을 설정하면 된다.

 

(4) Maven 사용법- 1. 의존성(Dependency) 추가

- 라이브러리의 버전을 선택해야 함

 

(5) Maven 사용법- 2. Spring Dependencies 추가

- 라이브러리 버전에 맞는 Dependency 태그를 mvn 센드릭 repository에서 제공해줌.

- Dependency 태그를 그대로 복사해서 다음과 같이 ‘pom.xml’ 파일의 <dependency> 태그 안에 붙여넣으면,

  자동으로 라이브러리들을 관리해 줌.

 

 

4. IoC

(1) IoC(Inversion of Control 개념

- 파란색 원: 클라이언트, 초록색 원: 실제로 사용하는 객체
  → 원래 새롭게 객체 생성해서 사용해야 했는데,
       IoC인 경우 객체를 사용하고자 하는 클라이언트에서 자동적으로 객체를 일정 경로로 넣어줌 (dependency injection(의존성 주입))

 

(2) Ioc 컨테이너

- 스프링 프레임워크 자체가 IoC 컨테이너를 포함하고 있음

- 핵심: 객체에 대한 생성 및 생명주기 관리
  → 기존 방식으로는 객체를 만들었다가 사용이 끝나면 가비지 컬렉터에서 객체가 소멸되는 과정 반복

       (웹 애플리케이션은 요청이 많은 형태라 더 심각함. 요청마다 객체가 만들어진 후 소멸됨.

        컨테이너 미사용 시 부하를 견디기 위해 고사양의 서버가 필요)

 

(3) DL(Dependency Lookup)과 DI(Dependency Injection)

- DL: Dependency Lookup

    -> 스프링 컨테이너에 올라가 있는 있는 객체 중에서 우리가 사용할 객체를 클라이언트로 전달해야 함
        (클라이언트 입장에서는 객체를 찾는 것)

    -> 객체 ID나 TYPE으로 객체를 Lookup할 수 있음

 

- DI: Dependency Injection

  -> 객체들은 서로 의존 관계를 가지게 되는데, 이것을 자동적으로 참조시켜 줌
       (원래 A객체를 B객체에 주입시켜줘야 했음)
      → Setter, 생성자, 메소드 이름으로 Injection을 진행할 수 있음

 

- 빈 설정(Bean Definition) 정보: xml 형태의 파일에 들어 있음

 

(4) Spring IoC 관련 용어

- 자동 등록 기능: 컴포넌트 오토 스캔 + 어노테이션 기능 사용

- 컨테이너: Spring 컨테이너가 아니더라도, 빈이 모여 있는 곳이라고 생각

- Spring에서 context : Spring 컨테이너를 의미한다고 봐도 무방함.
  Spring context 단어가 들어간 파일이라면(sevlet context 등) 빈이 모여있고 관리되는 Spring 컨테이너를 의미

 

 

4. DI (Dependency Injection)

(1) DI의 개념

- 각 클래스간의 의존 관계를 선언적인 방법으로 처리할 수 있음

- 디자인 패턴의 관점: 컴포넌트 간의 결합도가 제거됨. 인터페이스가 선언되어 있으면 됨. 구현체는 그때그때 다르게 주입시킬 수 있음.

 

(2) DI의 유형

-위의 두 가지 유형이 가장 많이 쓰임

 

(3) Spring DI 컨테이너의 개념 (+Bean Factory와 Application Context)

- Spring 컨테이너 = 빈 팩토리 = 어플리케이션 콘텍스트 (인터페이스)

 

- getBean() 메소드는 Bean Factory에서 제공

- Application Context는 Bean Factory를 상속받아서 부가서비스를 추가로 제공하는 것

 

 

 

 

 

 

 

 

 

반응형