기록/Spring framework

메이븐 프로젝트 POM.XML설정 및 코딩 오답.(최범균 스프링 5 프로그래밍 Chaptor 02, 2021,05,25)

최동훈1 2021. 5. 25. 01:44

우선, 스프링 프로젝트를 시작하기 위해서는 스프링의 객체를 생성해주고, 초기화해주는 종합적인 관리도구가 필요한데, 대표적으로, 메이븐,그레이들,엔트가 있다.

 

이 책에서는 메이븐으로 프로젝트를 시작하는 것을 다루고 있다.

우선 메이븐이나 그레이들이나 모두 동일한 폴더 구조를 사용한다.

C:\spring5fs\sp5-chap02\src\main\java 구조로 이루어져 있음.

 

메이븐 으로 프로젝트를 만들기 위해서는 POM.XML이라는 파일을 프로젝트의 루트폴더에 두어야 한다.

이유는 모든 메이븐 프로젝트는 프로젝트의 루트폴더에 POM.XML 파일을 가지는데, 프로젝트에서 필요한 설정정보(그룹ID,스프링 버전)등을 마크업 언어로 작성한다. 그레이들은 build.gradle이라는 설정파일을 루트파일에 두어야한다.

 

여기서 내가 한 실수가 있다. 메모장에 그냥 xml을 코딩한 다음, 바로 저장해 버린 것이다. (확장자명이 .xml 이라면 그냥 xml파일로 컴퓨터가 저장하는줄 알았다...)

그래서 윈도우cmd로 mvn compile 명령어를 실행하니, POM 파일을 찾을수 없다는 에러가 떴다. 그래서 notepad++ 라는 윈도우에서 제공하는 에디터를 사용하여 저장하니, 메모장에서 저장했던것 처럼 txt 텍스트 파일이 아닌, xml파일로 저장되서, 컴파일을 완료했다.

 

메이븐은 [사용자홈폴더]\.m2\repository 폴더를 로컬 리포지토리로 사용한다. 여기서 실제로 메이븐의 아티팩트(한개의 모듈)은 POM.XML에서 의존설정한, [그룹ID]\[아티팩트ID]\[버전] 폴더에 저장된다.

예) C:\Users\Work\.m2\repository\org\springframework\spring-context\5.0.2.RELEASE

 

또한 의존 전이란게 있는데, 메이븐을 콘솔창에서 컴파일하면, POM.XML에서 의존설정한 파일 이외에 그 아티팩트가 다시 의존하는 파일까지 한꺼번에 다 다운로드한다. 

 

스프링은 객체를 생성하고 초기화하는 기능을 제공하는데, @Configuration이란 애너테이션을 클래스 앞에 붙임으로서, 그 클래스가 스프링이 생성,초기화하는 객체(빈객체 라 부름)을 설정해주는 기능을 가진 클래스라는 것을 지정한다.

@Configuration 이라는 애너테이션이 붙은 클래스 는 @Bean 이라는 애너테이션을 붙인 메서드를 가지는데,  이 메서드 에서 반환하는 타입의 '객체'가 바로 스프링이 관리하는 '빈 객체'로 등록된다. 즉, @Bean을 붙인 메서드는 종합적으로 빈객체에 대한 '정보' 를 제공하는 메서드이다. 또한, 이 메서드의 이름은 빈 객체를 구분할 때 사용한다. 

중요한 것은 @Bean은 '빈 객체'로 스프링에 제공할 클래스의 타입을 반환한다는 점이다.

 

스프링에 빈 객체를 등록하려면 BeanFactory 인터페이스를 구현한, AnnotationConfigApplicationContext 클래스를 이용한다. 이 클래스의 생성자에 빈 객체의 설정(@Configuration 이 붙은 클래스)를 매개변수로 넘겨주면, 그 클래스에 구현된 빈 객체에 대한 정보에 따라 스프링에 빈 객체를 생성하고, 저장한다. 또한 AnnotationConfigApplicationContext에 구현된 static 메서드인 getBean 메서드를 통해서, 빈 객체 스프링으로 부터 제공 받을 수 있다. 또한 별도의 설정을 하지 않을 경우 디폴트값으로 스프링은 빈 객체를 생성할때, 한개의 빈 객체만을 생성한다(싱글톤), 여기서 같은 객체의 기준은 @Configuration 클래스에 구현된 @Bean 메서드의 이름이다.(앞서 설명했듯이 메서드의 이름으로 빈 객체를 구분하기 때문.

 

page 52 공부 완료.

오늘 하루 순 공부/실습 시간 2시간.