[Spring] 빈과 의존관계

0

스프링

목록 보기
1/1
post-thumbnail

서론

스프링 개발자라면 다 아는 정보, 나만 모르지 않게 해주는 포스팅.
오늘은 스프링 빈을 등록하고 의존관계를 설정하는 방법에 대해 알아보고자 합니다.

포스팅에 앞서 몇가지 미리 준비된 상황이 있습니다.

Consumptions

  1. memberService와 memberReposiroty를 생성
  2. 멤버 객체도 생성
  3. 서비스를 통해서 멤버를 타입
  4. repository로 저장
  5. reppository로 부터 원하는 데이터를 꺼내올수 있다.

회원가입을 하고 회원가입된 결과를 html로 뿌려주는 과정에서 controller와 view template이 필요하다.

의존관계

memberController가 memberService를 통해서 회원가입을 하고 memberService를 통해서 결과를 조회할 수 있는 기능을 만들고자 한다.
이를 스프링스럽게 해보자.

package hello.hellospring.controller;

import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService){   //오류발생, memberService가 스프링 빈으로 등록되어 있지 않음
        
        this.memberService = memberService;
    }

}

[코드 1]

그러면 다음과 같은 에러가 나옵니다.

자세히 보면, MemberController안에는 memberService타입의 빈이 없다는 내용의 오류 문구가 나옵니다.

이는 MemeorymemberRepository, memberService에 각각 @Repository, @Service를 추가하면서 해결할 수 있고, Controller, Service, Repository라는 정형화된 패턴을 구현할 수 있습니다.

더 구체적으로는,
Controller를 통해서 외부요청을 받고, Service에서 비즈니스 로직을 만들고 Repository에서 데이터를 저장하게 됩니다. 그림으로는 아래와 같습니다.

[그림2- 스프링 빈 등록 이미지]


[코드 1]을 보면, ControllerService@Autowired를 통해 연결됩니다.
이렇게 되면, 스프링 빈에 등록되어있는 memberService객체를 넣어줍니다.

이것이 DI(Dependency Injection)이자 본 단원의 핵심 개념입니다.

참고
스프링은 스프링 컨테이너에 스프링 빈을 등록할 때 기본적으로 싱글톤(singleton) 패턴으로 등록합니다. 즉, 유일하게 하나만 등록합니다.

profile
스스로 질문을 던지고 고민하는 소프트웨어 엔지니어

0개의 댓글