개발에 앞서 알면 좋은 기초 지식

김하영·2023년 5월 20일
0

출처: 스프링 부트 핵심 가이드 - 장정우 지음
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=296591989

1. 서버 간 통신

  • 하나의 애플리케이션으로 통합해서 개발

    • 문제점: 유지보수 할때마다 사이트 작업중이라는 팻말 걸고 작업 / 개발에 보수적인 입장 / 서비스 자체의 규모가 커져 서비스 구동하는데 걸리는 시간이 길어짐
    • 해결 : 마이크로 서비스 아키텍쳐
  • 마이크로 서비스 아키텍쳐(MSA)

    • 서비스 규모를 작게 나누어 구성한 아키텍쳐
    • 애플리케이션을 기능별로 나눠서 개발
    • 각 서비스간에 통신해야하는 경우 발생 -> 서버간 통신
  • 서버 간 통신

    • 한 서버가 다른 서버에 통신을 요청하는 것
    • 한대는 서버, 한대는 클라이엌트가 되는 구조
    • 대표 프로토콜 : HTTP/HTTPS

    2. 스프링 부트의 동작 방식

    스프링 부터에서 spring-boot-starter-web 모듈을 사용하면 기본적으로 톰캣을 사용하는 스프링 MVC구조를 기반으로 동작한다.

    서블릿은 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술이다. 일반적으로 서블릿은 서블릿 컨테이너에서 관리한다. 서블릿 컨테이너는 서블릿 인스턴스를 생성하고 관리하는 역할을 수행하는 주체로서, 톰캣은 WAS의 역할과 서블릿 컨테이너의 역할을 수행하는 대표적인 컨테이너다.

    서블릿 컨테이너의 특징은 다음과 같다. 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리한다. 서블릿 객체는 싱글톤 패턴으로 관리되며, 서블릿 컨테이너는 멀티 스레딩을 지원한다.

    스프링에서는 Dispatcher servlet이 서블릿의 역할을 수행한다. 일반적으로 스프링은 톰캣을 임베드해서 사용한다. 따라서 서블릿 컨테이너와 Dispatcher servlet은 자동 설정된 web.xml의 설정값을 공유한다.

    <Dispatcher Servlet의 동작과정>

  1. Dispatcher servlet으로 http request가 들어오면 Dispatcher servlet은 핸들러 매핑을 통해 요청 URI에 매핑된 핸들러(controller)를 탐색한다.

  2. 핸들러 어댑터로 컨트롤러를 호출한다.

  3. 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView로 응답을 가공해 반환한다.

  4. 뷰 형식으로 리턴하는 컨트롤러를 사용할때는 뷰 리졸버를 통해 뷰를 받아 리턴한다.

    3. 레이어드 아키텍쳐

    레이어드 아키텍펴란 어플리케이션의 컴포넌트를 유사 관심사를 기준으로 레이어로 묶어 수평적으로 구성한 구조를 의미한다.
    <레이어드 아키텍쳐 기반 설계 특징>

  • 각 레이어는 가장 가까운 하위 레이어의 의존성을 주입받는다.

  • 각 레이어는 관심사에 따라 묶여 있으며, 다른 레이어의 역할을 침범하지 않는다.
    - ㄴㅇㄹ

    • 각 컴포넌트의 역할이 명확하므로 코드의 가독성과 기능 구현에 유리하다.
    • 코드의 확정성도 좋아진다.
  • 각 레이어가 독립적으로 작성되면 다른 레이어와의 의존성을 낮춰 단위 테스트에 용이하다.

    <레이어드 아키텍쳐를 스프링에 적용한 모습>
    스프링은 MVC 구조로 controller와 view는 프레젠테이션 계층, model은 비즈니스와 데이터 접근 계층으로 구분할 수 있다. 세분화 하면 서비스를 비즈니스 계층에 두어 엔티티와 같은 도메인 객체의 비즈니스 로직을 조합하도록 하고, 데이터 접근계층에는 DAO(스프링 jpa에서는 repository)를 배치에 도메인을 관리한다.

  • 프레젠테이션 계층
    • 클라이언트와의 접점이 됨
    • 클라이언트로부터 데이터와 함께 요청을 받고 처리 결과를 응답으로 전달하는 역할
  • 비즈니스 계층
    • 서비스(service) 계층이라고도 함
    • 핵심 비즈니스 로직을 구현하는 영역
    • 트랜잭션이나 유효성 검사 등의 작업도 수행
  • 데이터 접근 계층
    • 데이터베이스에 접근해야하는 작업 수행
    • Spring data JPA에서는 DAO 역할을 리포지토리가 수행하기 때문에 리포지토리로 대체 가능

4. 디자인 패턴

profile
백엔드 개발자로 일하고 싶어요 제발

0개의 댓글