[KT AIVLE SCHOOL] 빅프로젝트 개발과정 - spring 빈

2025. 7. 29. 13:24·KT에이블스쿨

스프링 빈

  • Spring 컨테이너가 관리하는 자바 객체
  • 빈은 인스턴스화 된 객체를 의미하고, 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 함
  • 스프링 빈의 사용 이유 중 가장 큰 이유는 스프링 간 객체가 의존관계를 관리하도록 하는 것이 목적

 

의존관계

 

지금까지 member service, repository를 만들고 member객체를 만들어 가입, 저장, 불러오기 기능의 로직들을 만들었다. 이제는 화면을 붙여 사용자가 보는 화면에 HTML을 뿌리려고 한다. 이를 위해서는 member controller이 필요하다. member controller은 member service를 통해 데이터를 조회할 수 있어야 한다. 이러한 것을 member controller가 member service를 의존하는 관계에 있다고 한다. 

 

 

 

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

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

 

 

 

 

MemberController에서는 MemberService가 필요하고, MemberService는 MemberRepository가 필요하다.

 

 

이에 따라 MemberController가 생성될 때 MemberController에 MemberService객체를 주입하고, MemberService가 생성될 때는 MemberRepository 객체를 주입한다.

 

 

 

 

 

 

 

MemberController.java

package hello.hello_spring.controller;

import hello.hello_spring.survice.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class MemberController {
    // private final MemberService memberService = new MemberService();
    // 스프링 컨테이너에 하나만 등록하자
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService){
        this.memberService = memberService;
    }
}

 

MemberController에서는 MemberService를 주입받는다.

@Controller 를 통해 컨트롤러가 스프링 빈에 등록된다. 

 

 

이 상태에서는 코드가 오류가 난다

MemberController가 MemberService를 통해 기능을 수행해야 하므로 @Autowired를 통해 스프링 컨테이너에 있는 MemberService를 가져와야 하는데, 스프링 컨테이너에 MemberService가 스프링 빈으로 등록되어 있지 않아서 MemberService도 등록하는 과정을 진행해야 한다. 

 

 

MemberService.java

@Service
public class MemberService {
    private final MemberRepository memberRepository;

    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
    ...
}

 

 

 MemberRepository.java

@Repository
public class MemoryMemberRepository implements MemberRepository {
    private static Map<Long, Member> store = new HashMap<>();
 	...
 }

 

 

컴포넌트 스캔 원리

  • @Component 애노테이션이 있으면 스프링 빈으로 자동 등록된다.
  • @Controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.
  • @Component를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다.
    : @Controller, @Service, @Repository

 

 

 

 

 

 

 

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

SpringConfig.java

package hello.hello_spring;

import hello.hello_spring.repository.MemberRepository;
import hello.hello_spring.repository.MemoryMemberRepository;
import hello.hello_spring.survice.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}

 

 

  • @Configuration : 이 클래스가 스프링 애플리케이션의 설정을 정의하는 클래스임을 나타냄
  • @Bean : 스프링 컨텍스트에서 관리할 빈을 정의하는 메서드 위에 사용
    • memberService() : MemberRepository를 생성하는 MemberRepository() 메서드를 호출하여 MemberService 생성
    • MemberRepository() 메서드에서 반환된 MemoryMemberRepository 객체는 MemberService의 생성자에 전달되어 MemberService 객체를 초기화할 때 주입
  • memberRepository() : MemoryMemberRepository 객체를 생성하여 반환
반응형

'KT에이블스쿨' 카테고리의 다른 글

취준생활, 끝  (0) 2025.10.06
[KT AILVE SCHOOL] 에이블 마지막  (0) 2025.10.06
[KT AIVLE SCHOOL] 5차 미니프로젝트  (0) 2025.07.04
[KT AIVLE SCHOOL] DevOps  (1) 2025.06.19
[KT AIVLE SCHOOL] Cloud Native Application  (0) 2025.06.09
'KT에이블스쿨' 카테고리의 다른 글
  • 취준생활, 끝
  • [KT AILVE SCHOOL] 에이블 마지막
  • [KT AIVLE SCHOOL] 5차 미니프로젝트
  • [KT AIVLE SCHOOL] DevOps
알리시아코
알리시아코
  • 알리시아코
    CODiary
    알리시아코
  • 전체
    오늘
    어제
    • 분류 전체보기 (162)
      • Spring (5)
      • 프론트엔드 (2)
      • KT에이블스쿨 (37)
      • 졸업프로젝트 (4)
      • JAVA (24)
      • 파이썬 기초 (13)
      • 데이터베이스 (7)
      • 알고리즘 (3)
      • git (0)
      • Fastapi (0)
      • 취업준비(원서) (0)
      • 컴퓨터 네트워크 (27)
      • 안드로이드 앱 (1)
      • 운영체제 (0)
      • LINUX (4)
      • 시스템프로그래밍 (13)
      • 엑셀 (1)
      • 책 (1)
      • 컴퓨터구조+운영체제 (4)
      • 자료구조+알고리즘 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
알리시아코
[KT AIVLE SCHOOL] 빅프로젝트 개발과정 - spring 빈
상단으로

티스토리툴바