TIL ... 3주차 day 11 - Spring 2일차... 22.05.21

BYEONGMIN CHOI·2022년 5월 21일
0

TIL(Today I Learned)

목록 보기
7/24

Spring 프로젝트의 개발 프로세스를 익숙해지기 위해 간단한 프로젝트를 계속해서 따라하고 있는 중이다.

이번 주차의 팀과제는 기본적인 개념을 잡을 수 있게 키워드를 찾아 정리하는 과제이므로 과제를 하며 정리 했던 개념들을 정리해 볼려한다.

JPA & ORM

JPA : 자바의 ORM기술에 대한 API 표준 명세

ORM : Object Relational Mapping 으로 객체와 DB의 테이블을 맵핑을 이루는 것을 말한다. 객체가 테이블이 되도록 맵핑시켜주는 것. ORM을 이용하면 SQL Query가 아닌 직관적인 코드로 데이터를 사용할 수 있다.

MVC 패턴

MVC패턴은 Model-View-Controller의 약자로서 개발을 할 때 3가지 형태로 역학을 나누어 개발하는 방법론

  • Model

    • 어플리케이션이 무엇을 할 것인지 정의하는 부분, DB와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다룬다.
  • View

    • 사용자에게 시각적으로 보여주는 부분(UI)
  • Controller

    • Model이 데이터를 어떻게 처리할지 알려주는 역활, 사용자에 의해 클라이언트가 보낸 데이터가 있으면 모델을 호출하기전에 적절히 가공하고 모델을 호출

    • 모델이 수행을 완료하면 그 결과를 가지고 View에 전달

MVC를 사용하는 이유

  • 사용자가 보는 페이지, 데이터 처리, 그리고 이 2가지를 중간에서 제어하는 컨트롤, 이 3가지로 구성되는 하나의 애플리케이션을 만들면 각각의 기능에 집중할 수 있다.
  • 유지보수성, 애플리케이션의 확장성, 유연성이 증가, 중복코딩의 문제점을 줄일 수 있는 효과를 가질 수 있다.

Spring

Controller

Controller은 MVC에서 C에 해당 하며 주로 사용자의 요청을 처리 한 후 지정된 뷰에 모델 객체를 넘겨주는 역할

  • 대규모 프로젝트의 경우 A, B, C 서비스 등등이 있다면, 하나의 클래스로 처리하는 것보다 A-Controller, B-Controller, C-Controller 로 나누어 작업할 수 있다.
  1. @Controller(Spring MVC Controller)

    전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용합니다.
    하지만 @ResponseBody 어노테이션과 같이 사용하면 RestController와 똑같은 기능을 수행할 수 있습니다.

  1. @RestController(Spring Restful Controller)Permalink

    RestController는 Controller에서 @ResponseBody 어노테이션이 붙은 효과를 지니게 됩니다.

    주용도는 JSON/XML형태로 객체 데이터 반환을 목적

Service

클라이언트의 요청은 Controller에 의해 받아지고 Controller는 요청을 처리하기 위해 Service를 호출한다. Service는 알맞은 정보를 가공하여 Controller에 전달한다.

Service는 알맞은 정보를 가공하는 비지니스 로직을 수행하고 데이터베이스에 접근하는 JPA를 이용해 결과값을 받아온다.

Repository : Entity에 의해 생성된 DB에 접근하는 메서드 들을 사용하기 위한 인터페이스


REST API - PUT과 PATCH는 어떤 차이점이 있고 어떤 경우에 사용하면 좋을까?

메서드설명
PUT데이터를 새 정보로 통째로 교체 한다.
PATCH데이터의 특정 필드를 수정할 때 사용한다.

기존 DB에 있는 데이터가 아래와 같다면

{
	"id": 1,
	"title" : "test",
	"body" : "contents"
}
  • PATCH 요청
{
	"title" : "변경된 test"
}

→ 결과

{
	"id": 1,
	"title" : "변경된 test",
	"body" : "contents"
}

  • PUT 요청
{
	"title" : "변경된 test"
}

→ 결과

{
	"id": 1,
	"title" : "변경된 test"
}

왜 PUT을 사용하는가 ? \rightarrow PUT은 전체 데이터를 다시 한번 더 입력하면서 입력된 정보에 대해 확인을 하며 데이터의 멱등성을 보장한다. 따라서 중요한 데이터를 다루는 곳이라면 반드시 멱등성이 보장되는 PUT 요청을 사용하는 것이 맞는거 같다.

  • PATCH의 경우 API를 어덯게 구현하느냐에 따라 멱등성이 보장될 수도 있고 아닐수도 있다.
    <보장이 안되는 경우>
PATCH users/1
{
    $increase: 'age',
    value: 1,
}

API가 호출될 때마다 나이가 1씩 증가하기 때문에 멱등성을 보장하지 않는다.


RDBMS

RDB (Relational DataBase)

  • 관계형 데이터 모델에 기초를 둔 데이터 베이스
  • 모든 데이터를 2차원의 테이블 형태로 표현

RDBMS ( Relational DataBase Management System)

  • RDB를 생성하고 수정하고 관리할 수 있는 소프트웨어
  • 관계형 모델을 기반으로하는 DBMS 유형
  • RDBMS의 테이블은 서로 연관되어 있어 일반 DBMS보다 효율적으로 데이터를 저장, 구성 및 관리 할 수 있다.
  • 정규화를 통해 데이터의 중복성을 최소화하며 트랜잭션을 수행하는 것이 더 쉽다.

    • DB정규화
      • 1차 정규화 : 원자 값을 가져야한다.
      • 2차 정규화 : 완전 함수적 종속이어야 한다.
      • 3차 정규화 : 이행적 함수 종속이 없는 것(기본키 이외의 다른 컬럼이 그외 다른 컬럼을 결정할 수 없는 것.)
      • BCNF : 3차정규형을 만족하면서 모든 결정자가 후보키 집합에 속한 정규형

    • 트랜잭션 : 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용하는 단위
    • 트랜잭션의 특징 ( ACID)
      • 원자성(Atomicity) : 회복성 보장, commit/roll back, 트렌젝션은 분해가 불가능한 논리적 최소 단위로 실행 전체가 승인되거나 취소 되어야함. ex) 은행 계좌에서 출금기능을 사용할 때 출금 기능이 오류로 인해 완료되지 않으면 rollback을 통해 취소 되어져야함. 즉 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한 다는 것.

      • 일관성(Consistency) : 트랜잭션이 진행되는 동안에 데이터베이스가 변경 되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는 것이 아니라, 처음에 트랜잭션을 진행하기 위해 참조한 데이터베이스로 진행된다. 이렇게 함으로 써 각 사용자는 일관성 있는 데이터를 볼 수 있는 것이다.

      • 고립성(Isolation) : 독립성은 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 경우에 어느 하나의 트랜잭션이라 도 다른 트랜잭션의 연산을 끼어들 수 없다. 하나의 특정 트랜잭션이 완료될 때 까지, 다른 트랜잭션이 특정 트랜잭 션의 결과를 참조할 수 없다.

      • 지속성(Durability) : 지속성은 트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 한다는 점 이다.

  • MSSQL, MySQL, Oracle이 RDBMS의 몇가지 예
profile
스스로 성장하는 개발자가 되겠습니다.

0개의 댓글