MVC, 템플릿 엔진
- 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아서 처리
- 스프링 부트 템플릿엔진 기본 viewName 매핑
- resources:templates/ +{ViewName}+ .html
@ResponseBody 원리
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter 가 동작
- 기본 문자처리: StringHttpMessageConverter
- 기본 객체처리: MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
스프링 빈을 등록하는 2가지 방법
- 컴포넌트 스캔과 자동 의존관계 설정
- @Component
- Spring이 객체를 생성해 Spring Container에 등록함 (Spring bean으로 자동 등록)
- @Controller, @Service, @Repository 안에 존재하는 어노테이션
- @Autowired
- 의존성 주입(DI). 연관된 객체를 스프링 컨테이너에서 찾아서 넣어줌
- Controller - Service - Repository 연관관계 연결
- 생성자 1개만 있으면 생략 가능
- @Component
- 자바 코드로 직접 스프링 빈 등록
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
스프링 빈 등록 방식
- DI에는 필드 주입, setter 주입, 생성자 주입 3가지 방법 존재, 의존관계가 실행중에 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장
- 실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용, 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록
- @Autowired 를 통한 DI는 helloController , memberService 등과 같이 스프링이 관리하는 객체에서만 동작한다. 스프링 빈으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않음
- 스프링의 DI (Dependencies Injection)을 사용하면 기존 코드를 전혀 손대지 않고, 설정만으로 구현 클래스를 변경할 수 있음
스프링 통합 테스트
- @SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행
- @Transactional : 테스트 케이스에 이 애노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않음
JPA
resources/application.properties
spring.jpa.show-sql=true // JPA가 생성하는 SQL 출력
spring.jpa.hibernate.ddl-auto=none // JPA는 테이블을 자동으로 생성하는 기능을 제공하는데 none은 해당 기능을 끔
// create 를 사용하면 엔티티 정보를 바탕으로 테이블도 직접 생성
- JPA를 통한 모든 데이터 변경은 트랜잭션 안에서 실행해야 함 → Service 계층에 @Transactional 추가
Spring Data JPA
- 스프링 데이터 JPA가 JpaRepository를 상속하는 인터페이스를 스프링 빈으로 자동 등록해준다.
- 인터페이스를 통한 기본적인 CRUD
- findByName() , findByEmail() 처럼 메서드 이름만으로 조회 기능 제공
- 페이징 기능 자동 제공
AOP
- AOP: Aspect Oriented Programming
- 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 분리
- 회원가입, 회원 조회등 핵심 관심사항과 시간을 측정하는 공통 관심 사항을 분리
- 시간을 측정하는 로직을 별도의 공통 로직으로 만듦
- 핵심 관심 사항을 깔끔하게 유지가능
- 변경이 필요하면 이 로직만 변경하면 됨
- 원하는 적용 대상을 선택가능
AOP 적용 후
참고 강의:
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com
'Spring Boot' 카테고리의 다른 글
Spring Boot - MVC 기능 (0) | 2023.06.30 |
---|---|
Spring Boot - MVC 구조 (0) | 2023.06.25 |
스프링 핵심 원리 (0) | 2023.06.23 |
Spring Boot 예외 처리 (0) | 2023.01.22 |
Spring Boot (0) | 2022.12.27 |