스프링 웹개발 기초 (1)
1. 정적컨텐츠
html파일을 그대로 고객(웹브라우저)에게 전달
2.MVC와 템플릿엔진
모델뷰컨트롤러, 서버에서 html을 변경을해서 전달
3.API
제이슨 포맷으로 고객에게 전달
@RequestParam : 인자를 받아 처리한다.
@Controller : 나중에 공부
@GetMapping("hello") : .../hello 주소에 Get메서드를 사용한다.
@ResponseBody : html 바디부분에 직접 데이터를 넣는다.
데이터가 문자열로 들어오면 StringHttpMessageConverter가 동작하여 반환해줌
데이터가 객체로 들어오면 MappingJackson2HttpMessageConverter가 동작하여 제이슨으로 반환해줌
(이외에도 여러 라이브러리가있다)
백엔드 개발 - 회원 관리 예제
1. 비즈니스 요구사항 정리
2. 회원 도메인과 레포지토리 만들기
3. 회원 리포지토리 테스트케이스 작성
4. 회원 서비스 개발
5. 회원 서비스 테스트
1. 비즈니스요구사항 정리
컨트롤러 : 웹 MVC의 컨트롤러 역할 (외부 요청을 받는다)
서비스 : 핵심 비즈니스 로직 구현
레퍼지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
도메인 : 비즈니스 도메인 객체
2. 회원 도메인과 레퍼지토리 만들기
도메인은 기본 정보(ex. member, menu...)
리포지토리는 필요한 기능을 인터페이스로 구현
3. 회원 레포지토리 테스트케이스 작성
개발한 기능을 실행해서 테스트 할 때 main메서드를 통해 실행하거나 웹 애플리케이션의 컨트롤러를 통해
해당 기능을 실행한다. 이 방법은 준비하고 실행하는데 시간이 오래걸리고, 반복실행에 어려움이 있고,
여러가지 테스트를 한 번에 실행하기 어렵다는 단점이 있다.
자바는 이를 JUnit이라는 프레임워크로 테스트를 실행하여 극복한다.
테스트하고자 하는 메서드를 만들어 테스트해주는데
테스트가 여러개인 경우 각각의 메서드가 다 따로 작동하기 때문에
각 메서드는 서로 영향을 끼치면 안되는데 이를 해결하기 위해
@AfterEach 를 사용하여 각 메서드가 끝날 때마다 상태를 초기화 시켜줘야한다. (ex. 레퍼지토리 초기화)
++ @BeforeEach를 사용하여 메서드마다 공통 시작상태를 설정해 줄 수도 있다.
스프링 빈과 의존관계
스프링에서는 new 를 통한 객체를 생성하기보다 스프링컨테이너에 빈을 등록하여
스프링컨테이너에서 꺼내서 사용하는 방법을 주로 사용한다.
새로운 객체를 사용하고자 하는 곳에
@Autowired 를 붙여주면 스프링컨테이너에서 꺼내서 자동으로 연결해준다.
스프링 빈을 등록하는 2가지 방법
1. 컴포넌트 스캔
@Component를 붙여주면 스프링 빈으로 등록이 된다.
대부분의 어노테이션에 컴포넌트가 포함되어있다.(@Repository, @Controller, @Service...)
@Controller
public class SpringController{
private final SpringService springService;
@Autowired
public SpringController(SpringService springService){
this.springService = springService;
}
}
2. 자바 코드로 직접 스프링 빈 등록하기
config클래스를 만들고
클래스에 @Configuration 애너테이션을 달고
메서드에 @Bean 애너테이션을 달아 직접 등록한다.
@Configuration
public class SpringConfiguration{
@Bean
public SpringService springService(){
return new SpringService(springRepository());
}
@Bean
public SpringRepository springRepository(){
return new SpringRepository();
}
}
정형화된 컨트롤러, 서비스, 레포지토리 같은 코드는 컴포넌트 스캔을 사용한다.
반대로 정형화되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.
'공부 일지 > 프로그래밍 언어' 카테고리의 다른 글
[Security] JWT (0) | 2022.09.29 |
---|---|
[Security] 인증처리 흐름/컴포넌트 (0) | 2022.09.23 |
[Security] 기본 (0) | 2022.09.22 |
스프링 프레임워크 기본 (0) | 2022.08.28 |
스프링 웹개발 기초 (2) (0) | 2022.08.28 |