- RESTful한 API설계의 장점
- 개념
- RESTful : REST원칙을 따르는 API 설계 방식으로, HTTP프로토콜을 기반으로 자원을 정의하고 그 자원에
대한 상태 정보를 주고받는 방식 - 자원(Resource) : URI로 식별되는 개체
- 표현(Repesentation) : 클라이언트가 자원에 접근할 때, 자원의 상태를 JSON, XML등의 형식으로 전송
- 무상태성(StateLessness) : 서버는 각 요청을 독립적으로 처리, 클라이언트의 상태를 서버에 저장하지 않음
- 캐시 가능(Casheable) : HTTP의 캐싱 메커니즘을 사용해 응답을 클라이언트 측에 저장 가능(성능최적화)
- 계층화 구조(Layerd System) : 클리언트와 서버 사이에 프록시, 게이트웨이 등을 중간 계층으로 배치해
시스템의 확장성을 높일 수 있음
- RESTful : REST원칙을 따르는 API 설계 방식으로, HTTP프로토콜을 기반으로 자원을 정의하고 그 자원에
- 장점
- 확장성 : Stateless(서버가 클라이언트의 상태를 저장하지 않는 것)특성을 가지므로 클라이언트와 서버 간의
결합도가 낮다. - 유연성 : 다양한 데이터형식을(JSON, XML, HTML) 주고받을 수 있음
- 직관성 : URI를 통해 자원을 명확하게 식별할 수 있으며, HTTP메서드를 이용해 직관적으로 API 설계 가능
- 성능 : HTTP의 캐싱 메커니즘(이전의 응답을 임시로 저장하여 재사용)을 활용해 성능을 향상시킬 수 있음
- 표준화된 인터페이스
- 확장성 : Stateless(서버가 클라이언트의 상태를 저장하지 않는 것)특성을 가지므로 클라이언트와 서버 간의
- 개념
- 적절한 관심사 분리의 필요성
- 유지 보수성 증가 : 각 기능이 명확히 분리하여 전체 시스템에 미치는 영향을 최소화
- 코드 재사용성 : 기능별로 분리된 코드 모듈은 다른 프로젝트나 시스템에서 사용 가능
- 가독성 개선 : 각 구성 요소가 한가지 책임만 맡고 있으면 코드가 간결해짐
- 디버깅 및 테스트 용이 : 문제가 발생한 영역을 쉽게 파악하고, 개별 테스트 가능
- Setter를 무분별하게 사용하면 안 되는 이유
- 캡슐화 위반 : 객체 내부 상태가 외부에서 쉽게 접근 할 수 있어 객체의 무결성이 깨질 수 있음
- 객체 일관성 저하 : 특정 값이 잘못 설정되거나, 예상치 못한 변경이 발생한 경우 객체의 일관성이 무너질 수 있음
- 변경 추적 어려움 : Setter로 값이 변경될 경우 그 변경이 언제, 왜 일어났는지 추적이 어려움
- 결합도 증가 : 객체 내부 상태가 외부에 의해 변경되면 객체간의 결합도가 증가함
- NoSQL과 RDBMS에 대한 설명
- NoSQL
- 비관계형 데이터베이스로, 구조화된 스키마가 없거나 유연한 스키마를 가짐
- 대규모 데이터 처리와 빠른 읽기/쓰기 작업에 최적화
- 수평 확장이 용이하여, 클러스터링을 통해 쉽게 확장 가능
- 다양한 데이터 모델 제공(문서형, 키-값, 열, 그래프)
- RDBMS
- 관계형 데이터베이스로, 명확한 스키마와 테이블 간의 관계를 기반으로 데이터 관리
- SQL을 사용하여 데이터를 조회 및 조작
- ACID속성(원자성, 일관성, 고립성, 지속성)을 보장하여 데이터의 무결성을 중요시함
- 수직 확장을 주로 사용하여 서버 성능을 높임
- NoSQL
특징 | RDMBS | NoSQL |
데이터 구조 | 고정된 스키마 | 유연한 스키마(문서, 키-값, 그래프 등) |
확장성 | 수직적 확장(하드웨어 성능향상) | 수평적 확장(서버, 데이터베이스 추가) |
쿼리 언어 | SQL | 데이터베이스마다 다름 |
ACID지원 | ACID 트랜잭션 보장 | 대부분 Eventuallyu Consistent |
데이터 유형 | 정형 데이터 | 비정형 또는 반정형 데이터 |
유연성 | 스키마 변경이 어렵고 제한적 | 스키마 유연성이 높므 |
속도 | 복잡한 쿼리와 트랜잭션에 최적화 | 대량의 데이터를 빠르게 처리 가능 |
- 객체지향 프로그래밍이란 무엇이고 활용 방법
- 객체지향 프로그래밍(OOP)
- 상태(속성)와 행위(메서드)를 갖는 독립적인 단위인 '객체'를 기본 단위로 구성하여 설계하고 구현하는 방법
- 원칙
- 캡슐화 : 객체 내부의 상태를 보호하고, 외부에서 필요한 부분만 공개
- 상속 : 기존 클래스의 속성과 메서드를 상속받아 새로운 클래스를 생성
- 다형성 : 동일한 메서드가 다양한 객체에서 다르게 동작할 수 있음
- 추상화 : 복잡한 내용을 감추고, 필요한 인터페이스만 제공
- 활용 방법
- 복잡한 문제를 객체 단위로 나누어 해결
- 객체 간의 협력을 통해 시스템을 모델링하고 설계
- 코드의 재사용성과 유지보수성을 높이며, 확장성과 유연성을 제공
- 객체지향 프로그래밍(OOP)
'이론공부' 카테고리의 다른 글
기술면접 준비(2) (1) | 2024.09.30 |
---|---|
프록시(Proxy)란? (0) | 2024.09.05 |
혼자공부하는 컴퓨터 구조와 운영체제 Ch1~5 (0) | 2024.06.14 |
개발로드1. 인터넷의 작동원리 (0) | 2024.05.09 |
자료구조 - 힙(heap) (0) | 2024.03.18 |