Notice
Recent Posts
Recent Comments
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
10-11 00:15
Archives
Today
Total
관리 메뉴

Developer_Neo

[Spring 입문] - 스프링 빈과 의존관계, 웹 MVC개발 본문

Spring

[Spring 입문] - 스프링 빈과 의존관계, 웹 MVC개발

_Neo_ 2022. 8. 4. 21:22
반응형

2022.08.03 - [Spring] - [Spring 입문] - 회원 관리 예제를 만들어 보자

 

[Spring 입문] - 회원 관리 예제를 만들어 보자

1. 비즈니스 요구사항을 정리 2. 회원 도메인 객체를 저장하고 불러올 수 있는 리포지토리 객체인 저장소 객체를 만들자 3. 회원 리포지토리가 정상 동작하는지 테스트 케이스 작성 4. 실제 비즈

devloper-dreaming.tistory.com

위에 해당하는 것에서 도메인과 레포지토리를 만들어 서비스로써 잘 작동되는지 TestCase를 작성해 알아보았다.
이제는 도메인과 레포지토리를 이용해 View로써 브라우저에 보낼 것을 작성해볼 것인데
그전에 먼저 Controller가 있어야하고, 이 Controller를 작성하는데 있어서 스프링 빈과 의존관계를 알아보자

스프링 빈과 의존관계

위에서 작성한 것을 토대로 Controller를 만들면, 이 Controller는 위에서 만든 Service를 통해 회원가입하고, 회원 조회를 해야한다. 이것을 서로 의존 관계에 있다고 하며, Controller가 Service를 의존한다고 한다.

 

스프링이 동작하게 되면 스프링 컨테이너가 생성되는데 여기에 이때 우리가 작성해둔 코드 중 @Controller 어노테이션이 있으면, 해당 Controller객체를 생성하여 넣어둔다. 이렇게 되면 해당 Controller를 스프링이 관리한다. 이렇기에 스프링과 관련된 Controller 등의 기능들이 동작하게 된다.

이것을 스프링 컨테이너에서 스프링 빈이 관리된다고 표현한다.

 

스프링 빈을 등록하는 2가지 방법

1. 컴포넌트 스캔과 자동 의존관계 설정 

컴포넌트 : @Component, @Repository, @Service, @Controller

우리가 작성한 클래스위에 위에 해당하는 컴포넌트 어노테이션을 설정하면 객체로 생성되어 스프링 빈으로써 스프링 컨테이너에 자동 등록한다

 

자동 의존관계 설정 : @Autowired

컴포넌트로 설정된 클래스들의 생성자에 위의 어노테이션을 설정하면, 스프링 빈으로써 생성된 객체들간의 의존관계들을 스프링이 주입해준다.(연결해준다)

 

스프링이 동작하고 우리가 작성한 코드 중 @Component 어노테이션이 설정되어 있으면, 해당 클래스들을 스프링이 객체로 생성하여 스프링 컨테이너내에  등록한다. 그리고 @Autowried 어노테이션은 스프링 컨테이너 내에 있는 스프링 빈들을 연결해준다.

 

위의 방법은 DI인 의존성 주입 중 생성자 주입을 이용하였다. 

DI에는 3가지 방법으로 필드 주입, setter주입, 생성자 주입이 있다.
필드 주입은 별로 안좋다고 한다.
setter주입은 setter생성시 접근제어자를 pubic으로 해야한다. 이때 public으로 설정되어있다면 누구나 이 메소드를 호출하여 내용을 변경할 수 있다. 하지만 의존관계를 중간에 바꾸는 이유도 없고 새로운 것으로 변경해 문제가 발생할 수 있어 필요하지 않다.
권장하는 것은 생성자 주입이다,.

이 방법은  주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드시 사용.


 

2. 자바 코드로 직접 스프링 빈 등록하기

위에서 작성한 컴포넌트 : @Component, @Repository, @Service, @Controller, 자동 의존관계 설정 : @Autowired들을 Controller클래스를 제외하고는 다 삭제한다.

그리고, Configuration할 파일을 하나 만들어 이곳에 빈으로써 등록을 하면 된다.

사용 어노테이션 : @Configuration, @Bean

단, Controller클래스는 건드리면 안된다.

이것은 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야하는 경우 사용


웹 MVC개발

초기에 URI에 localhost:8080치고 들어가면 index.html에 해당하는 것이 나왔는데 Controller가 우선순위를 가지니 Controller에 등록된 URI-path부터 찾아봅니다. 이때 "/"에 해당하는 것이 있다면 이것에 해당하는 메소드의 리턴값이 View로써 브라우저에 넘겨줍니다. 

MemberController 클래스
회원 가입

post요청을 보내야되는데 post요청은 html에서 form에 입력해서 등록을 누르면 어느 URI로 어떠한 HTTP요청을 보내야하는지 작성해두면 된다.

회원 목록 조회

 

 

 

반응형
Comments