RESTful API, 적절한 관심사 분리, Setter 무분별 사용, NoSQL과 RDBMS, 객체지향 프로그래밍이란

앞고기랑 소금·2024년 8월 27일

스파르타 TIL

목록 보기
30/43

30일차

RESTful API

  • 단순성
    HTTP 메서드(GET, POST, PUT, DELETE)와 URI를 사용하여 자원을 명확히 표현하고, 직관적으로 이해할 수 있습니다.

  • 유연성
    JSON, XML 등 다양한 데이터 형식을 지원하여 클라이언트와 서버 간의 데이터 교환이 용이합니다.

  • 확장
    상태 비저장(stateless) 방식으로 서버의 부하를 줄이고, 클라이언트와 서버를 독립적으로 확장할 수 있습니다.

  • 캐싱
    HTTP 캐싱 메커니즘을 활용하여 성능을 향상시키고, 서버 요청을 줄일 수 있습니다.

  • 표준화
    HTTP 프로토콜과의 호환성으로 웹과의 연동이 쉽고, 다양한 클라이언트와 서버 간의 상호운용성이 높습니다.

  • 유지보수 용이
    클라이언트와 서버 간의 명확한 역할 분리로 인해 시스템의 유지보수와 확장이 용이합니다.

적절한 관심사 분리

  • 유지보수 용이성
    코드와 기능이 명확히 구분되면, 특정 부분을 수정하거나 업데이트할 때 다른 부분에 영향을 주지 않고 작업할 수 있습니다.

  • 재사용성
    잘 정의된 모듈이나 컴포넌트는 다른 프로젝트나 부분에서 재사용할 수 있어 개발 효율성을 높입니다.

  • 가독성 향상
    각 모듈이 특정 기능만 담당하므로 코드를 이해하고 읽기가 쉬워집니다. 이는 코드의 가독성을 높이고, 협업 시 효율적인 작업이 가능합니다.

  • 테스트 용이성
    관심사가 분리된 시스템에서는 특정 기능이나 모듈만 독립적으로 테스트할 수 있어, 버그를 찾고 수정하기가 더 수월합니다.

  • 팀 협업 강화 팀원들이 독립적인 모듈을 개발하고 수정할 수 있어, 개발 작업을 병렬로 진행하기 용이합니다.

  • 확장성과 유연성
    시스템의 특정 기능이나 모듈을 독립적으로 개선하거나 교체할 수 있어, 전체 시스템의 확장성과 유연성이 향상됩니다.

Setter 무분별 사용

  • 캡슐화 손상
    객체의 내부 상태를 외부에서 직접 수정할 수 있게 되면, 객체의 상태를 일관되게 유지하기 어려워집니다. 이는 객체 지향 프로그래밍에서 중요한 원칙인 캡슐화를 해칩니다.

  • 불변성(Immutable)
    객체의 어려움: 객체를 불변으로 만들려는 경우, setter 메서드를 사용하면 객체 상태가 변경될 수 있어 불변성을 유지하기 어렵습니다.

  • 객체의 일관성 위협
    setter를 통해 객체의 상태를 직접 변경할 수 있기 때문에, 객체가 항상 유효한 상태를 유지하는 것을 보장하기 어려워집니다. 예를 들어, 값의 범위나 상태가 일관되지 않게 될 수 있습니다.

  • 디버깅과 유지보수 어려움
    객체의 상태가 언제, 어떻게 변경되었는지 추적하기 어렵습니다. 이는 버그를 찾고 수정하는 데 어려움을 줄 수 있습니다.

  • 클래스의 책임 모호화
    클래스가 자신의 상태를 직접 제어하지 않고 외부에서 직접 상태를 변경할 수 있게 되면, 클래스가 자신의 책임을 명확히 하지 않게 됩니다. 이는 설계의 명확성을 떨어뜨립니다.

  • 변경에 대한 의존성 증가
    클래스의 내부 구현 세부사항이 외부에 노출되면, 클래스의 내부 구조나 정책을 변경할 때 외부 코드의 변경이 필요할 수 있습니다. 이는 유지보수의 어려움을 초래할 수 있습니다.

NoSQL과 RDBMS

NoSQL (비관계형 데이터베이스)

  • 특징

    • 비구조화된 데이터
      테이블이 아닌 다양한 데이터 모델(문서, 그래프, 컬럼 패밀리 등)을 지원합니다.
    • 스키마 유연성
      스키마가 고정되어 있지 않으며, 데이터 구조가 동적으로 변경될 수 있습니다.
    • 쿼리 언어
      SQL과는 다른 쿼리 언어를 사용하거나, 쿼리 기능이 제한적일 수 있습니다.
    • CAP 이론
      일관성(Consistency), 가용성(Availability), 파티션 내구성(Partition Tolerance) 중 두 가지를 보장하는 특성을 갖습니다.
  • 장점

    • 확장성
      수평 확장이 용이하여 대규모 데이터와 높은 트래픽을 처리할 수 있습니다.
    • 유연성
      다양한 데이터 모델을 지원하며, 스키마가 유연하여 데이터 구조 변경이 용이합니다.
    • 성능
      빠른 읽기/쓰기 성능을 제공하며, 대량의 비정형 데이터를 효과적으로 처리할 수 있습니다.
  • 단점

    • 일관성 문제
      일부 NoSQL 데이터베이스는 일관성 보장을 약하게 하여 데이터의 일관성이 문제가 될 수 있습니다.
    • 표준화 부족
      다양한 NoSQL 시스템이 서로 다른 쿼리 언어와 API를 사용하므로 학습 비용이 발생할 수 있습니다.
  • 사용 예시

    • 소셜 미디어, 로그 분석, IoT 데이터, 대규모 사용자 데이터 처리 등 스키마가 자주 변경되거나 대량의 비정형 데이터를 다루는 애플리케이션.

RDBMS (관계형 데이터베이스 관리 시스템)

  • 특징

    • 구조화된 데이터
      데이터가 테이블 형태로 구조화되어 있으며, 각 테이블은 행과 열로 구성됩니다.

    • 스키마 기반
      데이터의 구조를 정의하는 스키마가 사전에 설정되어 있어 데이터의 무결성을 보장합니다.

    • SQL 쿼리
      데이터를 검색하고 조작하는 데 SQL(Structured Query Language)을 사용합니다.

    • ACID 트랜잭션
      원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability) 보장을 통해 트랜잭션의 신뢰성을 높입니다.

    • 정규화
      데이터 중복을 줄이기 위해 정규화 과정을 거칩니다.

  • 장점

    • 데이터 무결성
      강력한 스키마와 ACID 트랜잭션으로 데이터 무결성을 보장합니다.
    • 복잡한 쿼리
      SQL을 사용하여 복잡한 쿼리와 조인을 쉽게 수행할 수 있습니다.
    • 표준화
      널리 사용되는 표준화된 언어(SQL)와 데이터베이스 설계 패턴을 따릅니다.
  • 단점

    • 스케일링 어려움
      수평 확장(서버를 추가하는 방식)보다는 수직 확장(서버의 성능을 높이는 방식)에 적합합니다.
    • 유연성 부족
      스키마 변경이 어려울 수 있으며, 데이터 모델의 유연성이 제한될 수 있습니다.
  • 사용 예시

    • 금융 시스템, ERP, CRM 등 데이터 무결성과 복잡한 쿼리가 중요한 애플리케이션.

결론
RDBMS는 데이터 무결성과 복잡한 쿼리 처리가 중요한 경우 적합하며, NoSQL은 대규모 데이터와 높은 확장성, 유연성이 요구되는 경우에 적합합니다. 데이터베이스 선택은 애플리케이션의 요구 사항에 따라 달라집니다.

객체지향 프로그래밍이란

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 설계와 구현의 패러다임 중 하나로, 데이터와 그 데이터를 처리하는 메서드를 객체라는 단위로 묶어 개발하는 방법론입니다.
객체지향 프로그래밍은 코드의 재사용성과 유지보수성을 높이기 위해 데이터를 객체 단위로 묶고, 클래스를 통해 이를 정의하며, 상속과 다형성으로 기능을 확장하는 접근 방식을 제공합니다. 이는 복잡한 소프트웨어 시스템을 보다 체계적이고 효율적으로 설계하고 구현하는 데 유리합니다.

  • 장점
    • 재사용성
      클래스와 객체를 재사용할 수 있어 개발과 유지보수가 용이합니다.
    • 유지보수성
      코드가 모듈화되어 있어 특정 부분을 변경해도 다른 부분에 영향을 미치지 않습니다.
    • 확장성
      기존 클래스를 상속받아 새로운 클래스를 쉽게 만들 수 있어 기능을 확장하기 용이합니다.

0개의 댓글