[Spring] 기초 Spring 6주차

Yuri·2025년 1월 22일

Spring

목록 보기
8/21

🧑‍🏫 목표

  • Layered Architecture와 데이터베이스의 기본 개념을 이해하고, MySQL 설치와 SQL 작성 실습을 통해 데이터베이스 시스템의 작동 방식을 익힌다.

Layered Architecture

  • 기존의 MVC 패턴에서 Controller는 역할이 무수히 많다.
    1. 요청에 대한 처리
    2. 예외처리
    3. View Template 응답 or Data 응답
    4. 비지니스 로직 처리
    5. DB 상호작용
  • 문제점
    • Controller에서 요청에 대한 모든 처리를 수행한다. 즉, 책임이 너무 많다.
    • 기능 추가, 수정, 삭제 등의 유지보수가 힘들어진다.
    • 코드의 재사용성이 떨어진다. 메서드로 분리하여도 메서드를 호출하는 중복 코드가 발생한다.
  • Layered Architecture 구조
  • Presentation Layer: 요청을 받고 응답하는 역할
  • Business Layer:
    • 비지니스 로직 수행
    • Repository Layer에 전달
    • 일반적으로 하나의 비지니스 로직은 하나의 트랜잭션으로 동작
  • Repository Layer: 데이터베이스와 연동
  • 용어 설명
    • DTO(Data Transfer Object)
      • 계층간 데이터 전달을 위해 사용되는 객체이다.
    • Model
      • Entity
        • 추후 숙련주차에 배울 JPA와 관련이 있다.
        • JPA에서는 Entity라는 형태로 데이터를 반환한다.
    • DAO(Data Access Object)
  1. Controller : @Controller, @RestController
  2. Service: @Service
  3. Repository: @Repository
  4. DTO: 계층간 데이터 전달을 위해 사용

Database

여러 사람이 공유하고 사용할 목적으로 한 곳에서 관리되는 데이터의 조직화된 집합으로, 데이터를 소프트웨어에서 효율적으로 관리하기 위한 저장소이다. 데이터베이스 관리 시스템(DBMS)에 의해 제어된다.

  • DBMS의 주요 기능

    1. 데이터 정의
      • 데이터베이스 구조를 정의할 수 있는 기능을 제공한다.
    2. 데이터 관리
      • 데이터를 물리적으로 저장하고, 관리하는 역할을 수행한다.
      • 데이터를 저장하기 위한 최적화된 구조와 파일 시스템을 관리합니다.
      • 사용자가 데이터를 다룰 수 있도록 쿼리 언어(SQL)을 제공한다.
    3. 데이터 보안
      • 사용자 권한 관리, 암호화, 감사 로그 등을 통해 데이터를 보호한다.
    4. ✨트랜잭션 관리
      • DBMS는 여러 사용자가 동시에 데이터에 접근할 때, 데이터의 일관성을 유지하기 위한 트랜잭션 관리 기능을 제공한다.
      • ACID 속성 보장
        • Atomicity: 트랜잭션의 모든 작업이 성공적으로 완료되거나, 실패 시 모든 작업이 롤백
        • Consistency: 트랜잭션이 데이터베이스를 일관된 상태로 유지
        • Isolation: 동시에 실행되는 트랜잭션 간의 영향을 최소화
        • Durability: 트랜잭션이 완료된 후 데이터의 변경 사항은 영구적으로 저장
    5. 백업 및 복구
      • DBMS는 데이터 손실에 대비해 백업 및 복구 기능을 제공한다.
      • 정기적인 백업을 통해 데이터를 보호하며, 장애 발생 시 데이터 복구가 가능하다.
    6. 동시성 제어
  • DBMS의 종류

    1. 관계형 DMBS(RDBMS) 중요!
      • 가장 많이 사용하는 데이터베이스

      • 데이터를 테이블 형태로 구조화하여 저장하고 관리하는 시스템이다.

      • 테이블 간의 관계를 이용해 데이터를 연결한다.

        ex) Oracle, MySQL, PostgreSQL, Microsoft SQL Server

    2. 비관계형 DBMS(NoSQL)
      • 테이블이 아닌 key-value, document, graph 등의 다양한 형태로 데이터를 저장하고 관리한다.

      • 스키마가 고정되지 않고, 대규모 데이터 처리와 높은 확장성을 제공한다.

        ex) MongoDB, Cassandra, Redis

    3. 다중 모델 DBMS
      • 하나의 데이터베이스 관리 시스템에서 여러 데이터 모델을 지원하는 시스템이다.

      • 동일한 DBMS에서 관계형 데이터뿐만 아니라 문서형, 그래프형 데이터를 함께 관리할 수 있다.

        ex) Amazon DynamoDB, Microsoft Azure Cosmos DB

    트랜잭션(Transcation)

    데이터베이스에서 하나의 논리적인 작업 단위를 뜻하며 트랜잭션으로 묶여있는 작업들은 모두 성공적으로 완료되거나 하나라도 실패하면 전체가 취소된다.

RDBMS

관계형 데이터베이스 RDB(Relational DataBase)를 관리할 수 있는 소프트웨어로 데이터를 테이블 형식으로 관리한다. RDBMS는 데이터 간의 관계를 정의하고, 이러한 관계를 바탕으로 복잡한 Query를 실행할 수 있는 기능을 제공한다.

  1. 테이블
  • RDBMS에서 데이터는 테이블이라는 구조에 저장되며 행(row)과 열(column)로 구성된다.
  • 열(column)은 데이터의 속성(유일한 이름)을 나타내고 타입(데이터 유형)을 가진다.
  • 행(row)은 관계된 데이터의 묶음을 의미하고 tuple 또는 record라고 한다.
  • 데이터 무결성
    • 테이블은 특정 규칙과 제약 조건(기본 키, 외래 키, 유니크 등)을 통해 데이터를 저장함으로써 데이터의 무결성(정확성, 일관성, 유효성)을 유지한다.
  1. 관계 (Relationships)
  • 테이블 간의 관계는 외래 키(Foreign Key)를 통해 설정된다.
  • RDBMS는 다양한 유형의 관계를 지원한다.
    • 1:1 관계: 한 테이블의 한 행이 다른 테이블의 한 행과만 연결된다.
    • 1:다 관계: 한 테이블의 한 행이 다른 테이블의 여러 행과 연결된다.
    • 다:다 관계: 두 테이블의 여러 행이 서로 연결될 수 있다.
  1. SQL (Structured Query Language)
    • RDBMS에서 데이터를 정의하고, 관리하기 위한 표준 언어이다.
    • 데이터를 생성(Create), 읽기(Read), 갱신(Update), 삭제(Delete)하는 작업을 수행한다.
  2. 키 (Keys)
  • 기본 키(Primary Key)
    • 테이블 내에서 각 행을 고유하게 식별하는 열 또는 열의 조합이다.
    • 기본 키는 중복되지 않으며, NULL 값을 가질 수 없다.
  • 외래 키(Foreign Key)
    • 한 테이블의 열이 다른 테이블의 기본 키를 참조하여 두 테이블 간의 관계를 설정하는 데 사용된다.
    • 테이블 간의 데이터 무결성을 유지할 수 있다.
  • 유일 키(Unique Key)
    • 기본 키와 유사하지만, 하나의 테이블에서 여러 개가 존재할 수 있다.
    • 중복된 값을 허용하지 않지만, NULL 값은 허용할 수 있다.
  1. 트랜잭션(Transaction)
    • RDBMS는 트랜잭션이라는 단위를 통해 데이터베이스 작업을 처리하며, 이를 통해 데이터의 일관성과 무결성을 유지한다.
    • 트랜잭션은 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)이라는 ACID 속성을 따른다.
      • Atomicity: 트랜잭션의 모든 작업이 성공적으로 완료되거나, 실패 시 모든 작업이 롤백
      • Consistency: 트랜잭션이 데이터베이스를 일관된 상태로 유지
      • Isolation: 동시에 실행되는 트랜잭션 간의 영향을 최소화
      • Durability: 트랜잭션이 완료된 후 데이터의 변경 사항은 영구적으로 저장
  2. 정규화 (Normalization)
  • 데이터의 중복을 줄이고, 일관성과 무결성을 유지하기 위해 데이터를 구조화하는 프로세스이다.
  • 여러가지 정규화 단계가 있으며, 각 단계는 데이터 중복을 줄이고 이상 현상을 방지하는 데 목적이 있다.
  1. 데이터 무결성 (Data Integrity)
    • 엔터티 무결성
      • 각 테이블의 기본 키(PK)가 중복되지 않고 NULL 값이 아닌 상태를 유지한다.
    • 참조 무결성
      • 외래 키(FK)를 통해 참조되는 데이터가 유효성을 유지하도록 보장한다.
    • 도메인 무결성
      • 각 열이 정의된 데이터 타입과 제약 조건에 따라 유효한 값을 유지하도록 한다.
  2. 인덱스 (Index)
    • 특정 열의 검색 성능을 향상시키기 위해 사용된다.
    • 인덱스는 테이블의 데이터를 정렬하고, 효율적으로 접근할 수 있도록 지원한다.
    • 인덱스가 많아지면 삽입 및 수정 작업의 성능에 영향을 미칠 수 있다.

SQL(Structured Query Language)

SQL은 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 정의, 조작, 제어, 조회하기 위해 사용되는 표준 프로그래밍 언어이다.

  • SQL 종류
    1. DDL(Data Definition Language)
      • 데이터베이스 구조를 정의하는 데 사용된다.
      • CREATE
        • 새로운 데이터베이스 및 테이블을 생성한다.
      • ALTER
        • 기존 데이터베이스 및 테이블 구조를 수정한다.
      • DROP
        • 데이터베이스 및 테이블을 삭제한다.
    2. DML(Data Manipulation Language)
      • 데이터베이스의 데이터를 조작하는 데 사용된다.
      • INSERT
        • 데이터를 테이블에 삽입한다.
      • UPDATE
        • 테이블의 기존 데이터를 수정한다.
      • DELETE
        • 테이블의 데이터를 삭제한다.
    3. DQL(Data Query Language)
      • 데이터베이스에서 데이터를 검색하는 데 사용된다.
      • SELECT
        • 데이터를 조회한다. 특정 조건을 추가할 수 있다.
    4. DCL(Data Control Language)
      • 데이터베이스의 권한을 관리하는 데 사용된다.
      • GRANT
        • 사용자에게 권한을 부여한다.
      • REVOKE
        • 사용자의 권한을 회수한다.
    5. TCL(Transaction Control Language)
      • 여러 DML 작업을 하나의 논리적 단위로 묶어 트랜잭션으로 처리하는 데 사용된다.
      • COMMIT
        • 트랜잭션이 성공한 것을 데이터베이스에 알리고 모든 변경 사항을 영구적으로 저장한다.
      • ROLLBACK
        • 트랜잭션 중 발생한 모든 변경 사항을 취소하고, 데이터베이스를 트랜잭션 시작 시점의 상태로 되돌린다.

JDBC

Java 언어를 사용하여 DB와 상호 작용하기 위한 자바 표준 인터페이스로 데이터베이스 관리 시스템(DBMS)과 통신하여 데이터를 삽입(C), 검색(R) , 수정(U) 및 삭제(D)할 수 있게 해준다.

  • JDBC의 주요 특징
    1. 표준 API
      • 대부분의 RDBMS (관계형 데이터베이스 관리 시스템)에 대한 드라이버가 제공되어 여러 종류의 DB 대해 일관된 방식으로 상호 작용할 수 있다.
    2. 데이터베이스 연결
    3. SQL 쿼리 실행
    4. Prepared Statement
    5. 결과 집합 처리(Result Set)
      • 데이터베이스로부터 반환된 결과 집합을 처리할 수 있다.
    6. 트랜잭션 관리
      • JDBC를 사용하여 데이터베이스 트랜잭션을 시작, 커밋(성공) 또는 롤백(실패)하는 등의 트랜잭션 관리 작업을 수행할 수 있습니다.

정리

  1. Spring MVC 구조

    • 프론트 컨트롤러 : DispatcherServlet
    • 어댑터 패턴 : HandlerAdapter
    • View 응답 : View Resolver
  2. Layered Architecture

    • Controller의 역할을 분담한다.
    1. Controller
      1. 요청, 응답
    2. Service
      1. 비지니스 로직
      2. @Service
    3. Repository
      1. 데이터베이스 상호 작용
      2. @Repository
    4. DTO
      1. Layer간 데이터 전달
  3. Prepared Statement

    • query를 미리 준비한다.
    • Statement에 비해 성능면에서 뛰어나다.
    • 웹 보안을 유지할 수 있다.
  4. Persistence Framework

    • JDBC API를 사용한다.
    • Prepared Statement를 사용한다.
    • JDBC 처럼 복잡함이나 번거로움 없이 간단한 작업만으로 Database와 연동된다.
      • 자원 관리(Connection)를 자동으로 해준다.
    • SQL Mapper
      • JDBC Template
profile
안녕하세요 :)

0개의 댓글