1. 프로젝트 설치 및 살펴보기
https://github.com/jiwon3346/spring-petclinic
스프링을 시작하기에 좋은 예제라고 한다.
다음 주소를 clone하거나 다운로드 받고 프로젝트를 실행시키자.
이때, 주의사항은 jdk를 1.8버전 이외의 버전에서는 호환상의 문제가 발생할 수 있으므로 1.8버전을 꼭 확인하고 사용하길 바란다.
이후에 실행하도록 하자 실행 방법은 다음과 같다.
실행 방법은 첫번째로 오른쪽의 plugin 부분에서 wro4:run 혹은 spring-boot:run 을 더블 클릭하거나 콘솔창에서 실행할 수 있다.
또 다른 방법으로는 어플리케이션의 루트 디렉토리의 main메소드를 실행시키는 것이다.
실행 후에 의존 파일을 설치할 동안 기다리면 다음과 같은 화면이 뜨면서 실행이 되는 것을 볼 수 있다.
프로젝트의 구조는 다음과 같다.
2. 프로젝트로 살펴보는 IoC( Inversion of Control )
번역하면 제어의 역전이다.
IoC가 적용된 OnwerController이다.
OwnerRepositry클래스의 owners객체가 선언되어 있는데,
어디에도 owners의 인스턴스를 생성하지 않고, 생성자가 생성될때 인스턴스를 넘겨 받는다.
컨트롤러는 결국 OwerRepository를 직접 생성해서 관리 하지 않고 바깥쪽에서 받아 다루게 된다.
이것을 제어가 역전되었다고 한다고 한다.
그리고 이러한 객체들을 관리하는 것을 Bean이라고 한다.
3. 프로젝트로 살펴보는 Bean
스프링 IoC컨테이너가 관리하는 객체
Bean의 정의는 다음과 같다.
IoC로 관리되어지는 객체들을 Bean이라고 한다고 한다.
위에선 OwnerController가 Bean이다.
Bean 객체가 되기 위해선 Component라는 어노테이션이 정의되어야 하는데, 이는 SpringBoot에서는 SpringBootApplication에서 관리되어지고 있다
ComponentScan이 보이는가?
해당 메소드에 속한 @Component를 스캔하여 처리한다.
이때 Onwer에서는 @Controller가 그 역할을 하는데 이는 @Contorller가 @Component 를 가지고 있기 때문이다.
빈을 한번 사용해보자
SpringBootApplication 안에 @Bean 어노테이션이 선언된 메소드 하나를 생성ㅎ앴다.
이는 곧 Bean객체로 관리되어 진다.
컴포넌트 어노테이션이 있는 @RestConroller라는 어노테이션이 선언된 클래스를 생성했다.
그리고 실제 Bean객체를 사용하려면
@Autowired를 사용하여 선언한다.
example Bean객체를 가져오고 다른 어떠한 할당이나 인스턴스를 불러와 사용하는 것 없이 바로 사용되었다.
실제로 /context Url에 들어가보면 example이 리턴되었다.
빈 의존성 주입에 대해 조금만 더 알아보자
빈의 의존성을 주입하기 위해서는
@Autowired 혹은 @inject 어노테이션을 이용하여야 한다.
그런데 위 코드에서는 그런 어노테이션이 선언되어 있지 않는데, 만약 어떤 빈이 하나의 생성자만 가지고 빈에서 그 생성자의 객체타입과 같은 타입이 있다면 선언해주지 않아도 된다고 한다.
물론 선언해주어도 상관없다.
3. 프로젝트로 살펴보는 AoP
IoC와 마찬가지로 Spring이 가지는 특징이다.
AoP는 메소드를 주요기능과 부가기능으로 구분짓고, 부가 기능들을 어노테이션을 활용하여 재사용 할 수 있게 해주는 프로그래밍 기법이다.
은행의 기능중에 계좌이체 대출승인 이자계산등이 있을 수 있다.
각각의 기능들은 다른 부가적인 기능들을 가지고 있는데, 이를 일일이 메소드를 추가하는 것이 아니라, 어노테이션을 통해서 쉽게 만들어 줄 수 있다.
어떤 주요기능을 요청했을때, 얼마나 시간이 걸렸는지 로그에 찍는 어노테이션을 생성하고자 한다.
이 때, Around를 이용하여 어노테이션을 연결 해주고 그에 의해 동작하는 기능들을 작성하였다.
이때, 시간을 새기 위해선 자바 라이브러리에 있는 stopWatch를 이용하였다.
어노테이션을 생성한 후에 다음과 같이 기능에 어노테이션을 작성해주었다.
'BackEnd > Spring' 카테고리의 다른 글
Tiles설치 및 사용하여 html 템플릿 관리하기 (0) | 2019.06.03 |
---|---|
JSP-Servelet 게시판 제작하기 (1) (0) | 2019.05.31 |
전자정부프레임워크 설치 및 세팅하기(3) (0) | 2019.05.26 |
전자정부프레임워크 설치 및 세팅하기(2) (0) | 2019.05.26 |
전자정부프레임워크 설치 및 세팅하기(1) (0) | 2019.05.26 |