백엔드 2

다람·2023년 6월 5일
0

벡엔드

목록 보기
2/2

Restful API에 대해 설명하세요

Restful API는 HTTP 통신을 rest 설계 규칙을 잘 지켜 개발한 API를 Restful한 API라고 한다.
Rest 설계 규칙은 URI는 정보의 자원만 표현해야 하며, 자원의 상태와 행위는 HTTP Method에 명시하는 걸 말한다.

프레임워크와 라이브러리의 차이점

제어 흐름에 대한 주도권이 누구에게, 어디에 있는가에 있다.
프레임워크는 전체적인 흐름을 가지고 있고, 개발자는 그 안에서 라이브러리에 대한 흐름을 가지고 있다.
여기서 개발자의 제어권을 프레임워크에 넘김으로서 신경써야할 것을 줄일 수 있는데 이것을 제어의 역전이라 한다.

Call By Value, Call By Reference 차이점

Call By Value (값에 의한 호출)
인자로 받은 값을 복사하여 처리하는 방식
장점 - 값을 복사하여 처리하기 때문에 원래의 값이 보존
단점 - 복사하기 때문에 메모리 사용량 증가

Call By Reference (참조에 의한 호출)
인자로 받은 값의 주소를 참조하여 직접 저장해 값에 영향을 주는 방식
장점 - 복사하지 않고 직접 참조하기에 빠르다
단점 - 직접 참조를 하기에 원래의 값이 영향을 받는다

Java에서 어느 부분에 각각 해당하는가?
Java는 기본적으로 모든 전달 방식이 Call By Value
기본형 변수나 참조형 변수 모두 자기 자신이 갖고 있는 값을 복사해 전달하기 때문!

절차지향 프로그래밍과 객체지향 프로그래밍의 차이점

절차지향 프로그래밍

  • 물이 위에서 아래로 흐르는 것처럼 순차적인 처리를 중요시하는 프로그래밍 기법
  • 대표적인 언어로 C언어
  • 컴퓨터의 처리 구조와 유사해 실행 속도가 빠르다
  • 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다

객체지향 프로그래밍

  • 실제 세계의 사물들을 객체로 모델링하여 개발을 진행하는 프로그래밍 기법
  • 대표적인 언어로 Java
  • 캡슐화, 상속, 다형성 등과 같은 기법 이용할 수 있다
  • 절차지향 언어보다 실행 속도가 느리다

동적 쿼리란 무엇이고 언제 동적 쿼리를 사용하나?

동적 쿼리란 실행시에 특정 조건이나 상황에 따라 쿼리 문장이 변경되어 실행되는 쿼리문

컴파일 시 SQL문장을 확정할 수 없는 경우에 사용한다.
실행 시점에 따라 where 절 조건이 달라질 때 사용한다.
쿼리문이 변하냐 변하지 않느냐에 따라 정적쿼리/동적쿼리가 된다

TDD (Test-Driven-Development)의 개념에 대해 설명하세요

작은 단위의 테이스 케이스를 작성하고 그에 맞는 코드를 작성하여 테스트를 통과한 후 상황에 맞게 리팩토링하는 테스트 주도 개발 방식을 말한다.

반복적인 단계가 진행되면서 자연스럽게 코드의 버그가 줄어들고 코드는 간결해진다는 장점

TDD는 3가지 과정을 거친다
1. Red - 어떠한 기능을 검증하는 테스트가 실패하는 코드를 작성하고 실제로 실패하는지 확인한다
2. Green - 어떠한 기능을 검증하는 테스트가 통과하는 코드를 작성하고 실제로 성공하는지 확인한다
3. Refactor - 앞에 실패하는 테스트와 성공하는 테스트를 모두 검증했다면 작성한 코드를 깨끗하고 가독성 좋게 고친다.
4. Repeat - 이 세 가지 과정을 반복하여 프로그램을 완성한다

테스트 코드를 작성해야 하는 이유?

  • 기능의 추가, 변경, 삭제로 인한 영향도를 쉽게 파악 가능
  • 예상하지 못한 오류에 대한 피드백 위해
  • 좋은 설계로 작성되게끔 코드 유도
  • 기능 정의의 문서의 역할
  • 실수를 줄여준다

스프링 계층


1. 프레젠테이션 계층

  • 클라이언트의 요청 및 응답을 처리
  • 서비스계층과 데이터 엑세스 계층에서 발생하는 exception을 처리
  • @Controller 어노테이션을 사용하며 컨트롤러 클래스가 이 계층에 속한다
  1. 서비스 계층
  • 비즈니스 로직 처리와 비즈니스와 관련된 도메인 모델의 적합성 검증
  • 트랜잭션 관리
  • 프레젠테이션 계층과 데이터 엑세스 계층 사이를 연결하는 역할로서 두 계층이 직접적으로 통신하지 않도록 한다.
  • @Service 어노테이션을 사용해 작성된 서비스 구현 클래스가 이 계층에 속한다
  1. 데이터 엑세스 계층
  • mybatis를 주로 사용하는 계층
  • dao 인터페이스와 @Repository 어노테이션을 사용하여 작성된 dao 구현 클래스가 이 계층에 속한다
  • 데이터 베이스에 데이터를 crud하는 계층
  1. 도메인 계층
  • db의 테이블과 매칭될 클래스
  • entity 클래스라고도 부른다.
  1. dto
  • 각 계층간 데이터 교환을 위한 객체
  • domain, vo라고도 무른다
  1. dao
  • db에 접근하는 객체
  • 서비스 계층과 db를 연결하는 고리 역할
  1. entity 클래스
  • 도메인이라고도 부름
  • 실제 db 테이블과 매칭될 클래스

Domain 클래스와 DTO 클래스를 분리하는 이유?
--> 뷰 계층과 DB 계층의 역할을 분리하기 위해

DDD(도메인 주도 설계)에서 얘기하는 계층과 각각의 역할에 대해 설명하세요

  • 표현계층 (Presentation layer)
    사용자의 요청에 대해 해석하고 응답하는 일을 책임지는 계층 (controller)
    client로부터 request를 받고 response를 return하는 API 정의

  • 응용계층 (Application layer)
    비즈니스 로직을 정의하고 정상적으로 수행될 수 있도록 도메인 계층과
    인프라스트럭처 계층을 연결해주는 역할을 하는 계층 (service)
    transaction관리, DTO 변환, 모듈간의 연계를 진행

  • 도메인계층 (Domain layer)
    비즈니스 규칙, 정보에 대한 실질적인 도메인에 대한 정보를 가지고 있으며
    이 모든 것을 책임지는 계층 (entity)
    엔티티를 활용하여 도메인 로직이 진행
    업무 상황을 반영하여 상태를 제어하는 역할에 집중하는 계층

  • 인프라스트럭처계층 (Infrastructure layer)
    외부와의 통신(ORM, DB, NOSQL)을 담당하는 계층 (Repository)
    해당 계층에서 얻어온 정보를 응용 계층 또는 도메인 계층에 전달하는 것을주 역할로 담당

MSA (Microservice Architecture)에 대해 설명하세요

단일 프로그램을 모듈별로 구분하여 작은 서비스의 조합으로 구축하는 방법
모든 시스템의 구성요소가 한 프로젝트에 통합되어 있는 Monolithic Architecture(모놀리식 아키텍쳐)의 한계점을 극복하고자 등장

장점

  • 일부 서비스에 장애가 발생해도 전체 서비스에 영향을 끼치지 않는다
  • 각각의 서비스들은 서로 다른 언어와 프레임워크로 구성될 수 있다
  • 서비스의 확장이 용이하다

단점

  • 서비스가 분리되어 있어 테스트나 트랜잭션 처리 등이 어렵다

  • 서비스 간에 API로 통신하기 때문에 그에 대한 비용이 발생한다

  • 서비스 간의 호출이 연속적이기 때문에 디버깅 및 에러 트레이싱이 어렵다

    <> Monolithic Architecture : 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태

단점

  • 부분 장애가 전체 서비스의 장애로 확대될 수 있다.
  • 부분적인 *Scale-out(여러 server로 나누어 처리하는 방식)이 어렵다.
  • 서비스의 변경이 어렵고, 수정 시 장애의 영향도 파악이 힘들다.
  • 배포 시간이 오래 걸린다.
  • 하나의 FrameWork 언어에 종속적
profile
안녕

0개의 댓글