30일차
단순성
HTTP 메서드(GET, POST, PUT, DELETE)와 URI를 사용하여 자원을 명확히 표현하고, 직관적으로 이해할 수 있습니다.
유연성
JSON, XML 등 다양한 데이터 형식을 지원하여 클라이언트와 서버 간의 데이터 교환이 용이합니다.
확장
상태 비저장(stateless) 방식으로 서버의 부하를 줄이고, 클라이언트와 서버를 독립적으로 확장할 수 있습니다.
캐싱
HTTP 캐싱 메커니즘을 활용하여 성능을 향상시키고, 서버 요청을 줄일 수 있습니다.
표준화
HTTP 프로토콜과의 호환성으로 웹과의 연동이 쉽고, 다양한 클라이언트와 서버 간의 상호운용성이 높습니다.
유지보수 용이
클라이언트와 서버 간의 명확한 역할 분리로 인해 시스템의 유지보수와 확장이 용이합니다.
유지보수 용이성
코드와 기능이 명확히 구분되면, 특정 부분을 수정하거나 업데이트할 때 다른 부분에 영향을 주지 않고 작업할 수 있습니다.
재사용성
잘 정의된 모듈이나 컴포넌트는 다른 프로젝트나 부분에서 재사용할 수 있어 개발 효율성을 높입니다.
가독성 향상
각 모듈이 특정 기능만 담당하므로 코드를 이해하고 읽기가 쉬워집니다. 이는 코드의 가독성을 높이고, 협업 시 효율적인 작업이 가능합니다.
테스트 용이성
관심사가 분리된 시스템에서는 특정 기능이나 모듈만 독립적으로 테스트할 수 있어, 버그를 찾고 수정하기가 더 수월합니다.
팀 협업 강화 팀원들이 독립적인 모듈을 개발하고 수정할 수 있어, 개발 작업을 병렬로 진행하기 용이합니다.
확장성과 유연성
시스템의 특정 기능이나 모듈을 독립적으로 개선하거나 교체할 수 있어, 전체 시스템의 확장성과 유연성이 향상됩니다.
캡슐화 손상
객체의 내부 상태를 외부에서 직접 수정할 수 있게 되면, 객체의 상태를 일관되게 유지하기 어려워집니다. 이는 객체 지향 프로그래밍에서 중요한 원칙인 캡슐화를 해칩니다.
불변성(Immutable)
객체의 어려움: 객체를 불변으로 만들려는 경우, setter 메서드를 사용하면 객체 상태가 변경될 수 있어 불변성을 유지하기 어렵습니다.
객체의 일관성 위협
setter를 통해 객체의 상태를 직접 변경할 수 있기 때문에, 객체가 항상 유효한 상태를 유지하는 것을 보장하기 어려워집니다. 예를 들어, 값의 범위나 상태가 일관되지 않게 될 수 있습니다.
디버깅과 유지보수 어려움
객체의 상태가 언제, 어떻게 변경되었는지 추적하기 어렵습니다. 이는 버그를 찾고 수정하는 데 어려움을 줄 수 있습니다.
클래스의 책임 모호화
클래스가 자신의 상태를 직접 제어하지 않고 외부에서 직접 상태를 변경할 수 있게 되면, 클래스가 자신의 책임을 명확히 하지 않게 됩니다. 이는 설계의 명확성을 떨어뜨립니다.
변경에 대한 의존성 증가
클래스의 내부 구현 세부사항이 외부에 노출되면, 클래스의 내부 구조나 정책을 변경할 때 외부 코드의 변경이 필요할 수 있습니다. 이는 유지보수의 어려움을 초래할 수 있습니다.
NoSQL (비관계형 데이터베이스)
특징
장점
단점
사용 예시
RDBMS (관계형 데이터베이스 관리 시스템)
특징
구조화된 데이터
데이터가 테이블 형태로 구조화되어 있으며, 각 테이블은 행과 열로 구성됩니다.
스키마 기반
데이터의 구조를 정의하는 스키마가 사전에 설정되어 있어 데이터의 무결성을 보장합니다.
SQL 쿼리
데이터를 검색하고 조작하는 데 SQL(Structured Query Language)을 사용합니다.
ACID 트랜잭션
원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability) 보장을 통해 트랜잭션의 신뢰성을 높입니다.
정규화
데이터 중복을 줄이기 위해 정규화 과정을 거칩니다.
장점
단점
사용 예시
결론
RDBMS는 데이터 무결성과 복잡한 쿼리 처리가 중요한 경우 적합하며, NoSQL은 대규모 데이터와 높은 확장성, 유연성이 요구되는 경우에 적합합니다. 데이터베이스 선택은 애플리케이션의 요구 사항에 따라 달라집니다.
객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 설계와 구현의 패러다임 중 하나로, 데이터와 그 데이터를 처리하는 메서드를 객체라는 단위로 묶어 개발하는 방법론입니다.
객체지향 프로그래밍은 코드의 재사용성과 유지보수성을 높이기 위해 데이터를 객체 단위로 묶고, 클래스를 통해 이를 정의하며, 상속과 다형성으로 기능을 확장하는 접근 방식을 제공합니다. 이는 복잡한 소프트웨어 시스템을 보다 체계적이고 효율적으로 설계하고 구현하는 데 유리합니다.
장점