본문 바로가기
spring

Spring boot의 컨텐츠 rendering 동작 과정, 컴포넌트 스캔, 자동의존관계 설정

by 김선지 2024. 5. 15.

한번 그려봤다.

spring boot는 이렇게 다해준다.

 

1.정적(static)의 경우

설명은 다음과 같다.

    1. 톰캣 서버가 컨트롤러단에서 해당 도메인 + 컨텍스트패스 (요청)에 해당하는 응답이 있는지 찾는다.

    2. 해당 경로에 맞는 렌더링 파일이 있는지 찾는다. (index.html의 경우 static 디렉토리 바로 아래있기 때문에 인식 가능)

    3. 없을 경우 404를 렌더링해준다.

 

2.template engine 방식

렌더 해주는 과정에서 viewResolver가 model 추가 등 여러 동작을 수행하여 변환한 html을 전달해준다.

 

3.api 방식 (response body)

view같은 것 없이 http response의 body를 그대로 리턴해준다. (객체를 반환한다.)

 

 컴포넌트 스캔

패키지가 설정된 범위 안에서만 컨포넌트 스캔이 일어난다. (line 1)

@Component (@Controller, @Service, @Repository)의 경우 애노테이션을 붙이면 스프링 컨테이너가 해당 객체를 만들어서 등록(스프링 빈)한다. (singleton이기 때문에 효율적이다, 같은 빈이면 같은 인스턴스이다.)

 

@Autowired를 하면 스프링 컨테이너가 @Component로 만들어진 객체를 직접 주입해준다. (연결)

 

@Autowired를 통한 DI는 스프링이 관리하는 빈에서만 동작한다.

 

직접 스프링 빈 등록하기

// service, repository 애노테이션 사용하지 않을 때
// Controller는 컴포넌트 스캔으로 올라가고 service를 Autowired로 dependency injection 사용해야한다.
// 나머지 service, repository는 별도의 어노테이션 없음.

in ${packagePath}.springConfig

@Configuration
public class SpringConfig {
	
    @Bean
    public MemberService memberService() {
    	return new MemberService(memberRepository());
    }
    
    @Bean
    public MemberRepository memberRepository() {
    	return new MemoryMemberRepository();
        // MemoryMemberRepository는 MemberRepository Interface의 구현체이다.
        // 나중에 DB가 결정되면 return new DBMemberRepository(); 로만 바꿔주면 된다.
    }
}

// 정형화되지 않거나 상황에 따라 구현 클래스를 변경해야하면 설정을 통해 스프링 빈으로 등록해서 사용한다.

이유는 return 값의 생성자만 바꿔주면 되기 때문.

'spring' 카테고리의 다른 글

Spring Framework, 객체지향, SOLID  (0) 2024.05.20
AOP  (0) 2024.05.19
Spring security - Authorization  (2) 2024.03.08
Spring Security 기본  (0) 2024.03.03
Spring 용어 정의  (0) 2024.02.27