본문 바로가기
공부 일지/프로그래밍 언어

스프링 웹개발 기초 (1)

by Joshbla 2022. 8. 27.

 

스프링 웹개발 기초 (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