웹 개발 방법
정적 컨텐츠 – 파일을 그대로 웹브라우저에 내려준다
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 |
댓글