본문 바로가기
❤️‍🔥TIL (Today I Learned)

[TIL] 2022-12-05(26day)

by elicho91 2022. 12. 5.

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

댓글