SpringBoot 및 서버 이해
👉 레이어드 아키텍처 패턴
# New Data : 새로운 데이터를 처리하는 부분
# Service Logic : 서비스 로직을 처리하는 부분
# Old Data : 기존의 데이터를 이용하는 부분
Presentation 계층
사용자와 상호 작용 처리 계층
CLI, HTTP 요청, HTML 처리 등을 담당한다.
HTTP 요청 처리 및 HTML 렌더링에 대해 알고 있는 웹 계층
흔히 말하는 MVC (Model / View / Controller) 도 이 계층에 속한다.
URL을 매핑해서 특정 메서드가 해당 URL로 요청이 올 때마다 호출되게 프로그래밍 되게 하는 계층을 말하는 것이며, 스프링에서는 @Controller 어노테이션을 사용.
Domain(Business or Service) 계층
서비스/시스템의 핵심 로직
유효성 검사 및 계산을 포함하는 Business 논리 계층
애플리케이션이 수행해야하는 도메인과 관련된 작업들을 담당한다.
입력/저장된 데이터를 기반으로 계산
Presentation 계층에서 받은 데이터의 유효성 (Validation) 검사
어떤 Data Access 를 선택할지 결정
우리의 서버 프로그램이 복잡해지면, 비즈니스 로직을 수행하기 위한 별도의 계층(Layer)이 필요.
사실 더 이상적으로는 유능한 서버 프레임워크를 써서 Presentaion, Data Access계층에는 별로 할 일이 없고,
도메인 계층이 비대해지는게 가장 좋다. 스프링에서는 @Service 어노테이션을 사용.
Data Access(Persistence) 계층
DAO 계층
Database / Message Queue / 외부 API와의 통신 등 처리
데이터베이스 또는 원격 서비스에서 영구 데이터를 관리하는 방법을 분류하는 데이터 접근 계층
데이터 소스와의 소통을 해주는 계층이라고 생각하시면 될 것 같습니다. 스프링에서는 @Repository 어노테이션을 사용.
# Controller 예시 코드
@Controller // #1
public class ContentController {
private final ContentService contentService; // #2
@GetMapping("/content/{contentId}") // #3
public Content getContent(@PathVariable Long contentId) { // #4
Content content = contentService.getContent(requestDto); //#2-1
return "/contentPage";
}
@PostMapping("/content") //#5
@ResponseBody// #6
public Content createContent(@RequestBody ContentRequestDto requestDto) {
Content content = contentService.createContent(requestDto);
return content;
}
}
#1 : 이 자바 객체가 컨트롤러 역할을 하는 객체라는 것을 알려주는 어노테이션
#2 : 각각의 레이어는 “일반적으로” 자기와 인접한 레이어와 직접 소통한다, 이 경우 ContentService객체를 가지고 있어, 컨트롤러 단에서 서비스 단으로 새로 받아온 데이터를 전달하거나 서비스 로직을 호출 할 수 있다. (#2-1 처럼)
#3 : 특정 요청에 호출될 메서드를 지정해주는 어노테이션.
#4 : 해당 메서드에 넘기는 인자값을 손쉽게 넘기도록 위와 같은 어노테이션을 사용 할 수 있다. 이러한 어노테이션이 있으면 자동으로 일치하는 변수값을 메서드 호출되는 시점에 같이 넘겨준다.
#5 : #3과 #5가 다른 이유는 HttpMethod에 따라서 다른 Controller 메서드를 연결해줄 수 있기 때문, 같은 주소로 온 GET 요청과 POST을 나눠서 각각 처리하기에 용이하다.
#6 : 위의 메서드와 아래의 메서드는 이전에 배웠던, 뷰까지 같이 반환하느냐, 혹은 JSON 형식으로 데이터만 반환하느냐의 차이가 있다.
# Controller 예시 코드
@Service // #1
public class ContentService {
private final ContentRepository contentRepository; //#2
public ReturnDto getContent(Long id) {
ReturnDto returnDto = contentRepository.findById(id);
return returnDto; //#3
}
public Content createContent(ContentRequestDto contentRequestDto) {
Content content = new Content(contentRequestDto);
contentRepository.save(content);
return content;
}
}
#1 : 이 자바 객체가 서비스 역할을 하는 객체라는 것을 알려주는 어노테이션
#2 : 인접한 계층인 Repository 객체를 가지고 있다.
#3 : 이 부분 역시 인접한 계층으로 데이터를 전달하는 중.
# Repository 예시 코드
@Repository
public interface ContentRepository extends JpaRepository<Content, Long> {
}
#1 : 이 자바 객체가 서비스 역할을 하는 객체라는 것을 알려주는 어노테이션
#2 : 직접 사용하게 될 리포지토리 : SpringDataJpa 의 JpaRepository
# 스프링/스프링부트를 사용하는 이유 :
- 단순 반복작업부분이 많았던 Controller와 Repository쪽을 개발 관점에서 매우 쉽고 편하게 처리해줘 가장 중요한 핵심 비즈니스 로직인 Service 레이어에 더 집중 할 수 있도록 하게 해주기 떄문에
🙋♂️ 소감 :
오늘 스프링 수업이 본격적으로 시작되었다.
이 레이어드 아키텍처 패턴을 정확히 이해해야지 데이터를 주고 받고 일련의 과정들이 이해가 될 것 같다.
😈 아는 내용이라고 그냥 넘어가지 않기! 😈
'❤️🔥TIL (Today I Learned)' 카테고리의 다른 글
[TIL] 2022-12-07(28day) (0) | 2022.12.07 |
---|---|
[TIL] 2022-12-06(27day) (0) | 2022.12.05 |
[TIL] 2022-12-02(25day) (0) | 2022.12.02 |
[TIL] 2022-12-01(24day) (0) | 2022.12.01 |
[TIL] 2022-11-30(23day) (0) | 2022.11.30 |
댓글