본문 바로가기
spring/스프링

(정적,MVC,API) / 웹애플리케이션 계층구조 / 스프링빈이용

by ddanss 2023. 2. 28.
728x90

웹 개발 방법

정적 컨텐츠 파일을 그대로 웹브라우저에 내려준다

MVC와 템플릿 엔진 HTML을 그대로 주는게 아니라 서버에서 동적으로 바꿔서 주는것

API JSON으로 클라이언트 전달, 서버끼리 통신 내가 공부했던 React가 이거구만

 

 

스프링 부트 정적 컨텐츠 기능 (static content)

https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-bootfeatures.

html#boot-features-spring-mvc-static-content

 

 

MVC : Model, View, Controller

MVC,템플릿

웹 브라우저

-> localhost:8080/hello-mvc

2. 내장 톰켓 서버

3. 스프링 컨테이너

helloController

return: hello-template

model(name:spring)

4. viewResolver

templates/hello-template.html(Thymeleaf 템플릿 엔진 처리

5. HTML변환후

6. 웹 브라우저

 

getter, setter단축키 Alt+Inesrt

 

@ResonseBody

웹 브라우저

-> localhost:8080/hello-api

내장 톰켓 서버

스프링 컨테이너

helloController

@ResponseBody

return: hello(name:spring)

viewResolver 대신 HttpMessageConverter사용.

문자: StringHttpMessageConverter, 객체:MappingJackson2HttpMessageConverter

4. 형식에 맞는 걸로 변환

5. 웹 브라우저

 

회원관리 예제

비즈니스 요구사항

데이터 : 회원ID, 이름

기능 : 회원 등록, 조회

 

웹 애플리케이션 계층 구조

컨트롤러: MVC의 컨트롤러 역할

서비스 : 핵심 비즈니스 로직 구현

리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리

도메인 : 비즈니스 도메인 객체(회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨)

 

 

Controller : 외부 요청 받고

service : 비즈니스 로직 만들고

Repository : 데이터저장하고

 

 

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

컴포넌트 스캔과 자동 의존관계 설정 - @Component가 모두 포함됨

@controller, @Service, @Repository

자바 코드로 직접 스프링 빈 설정하기

@Configuration
public class SpringConfig {

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

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

* 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다)

* 따라서 같은 스피링 빈이면 모두 같은 인스턴스다. 설정으로 싱글톤이 아니게 설정할 수 있지만, 특별한 경우를 제외하면 대부분 싱글톤을 사용한다

 

* DI에는 필드 주입, setter주입, 생성자 주입 이렇게 3가지가 있다.

의존관계가 실행중에 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장

1. 필드주입

@Autowired private MemberService memberService;

변경하기가 힘들다

2. setter주입

@Auto wired

public void setMemberService(MemberService memberService) { this.memberService = memberService; }

누군가 이걸 호출할 때 public으로 열려있어야 한다. 그래서 노출이 되어있다.

한번 세팅되면 굳이 바꿀 일이 없다

잘못바꾸면 문제가 된다

 

 

* 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다

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

 

 

 

반응형

'spring > 스프링' 카테고리의 다른 글

제어의 역전, DI, 스프링 컨테이너  (0) 2023.03.08
SOLID  (1) 2023.03.07
객체지향과 다형성  (0) 2023.03.03
springboot jpa관련  (1) 2023.03.01
스프링 기본개념  (0) 2023.02.28

댓글