일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바
- 시스템콜
- 알고리즘
- 백준
- 자바스크립트
- defee
- TiL
- 사이드프로젝트
- 코드트리
- 소켓
- 크래프톤 정글
- 모션비트
- 큐
- CSS
- pintos
- Flutter
- 4기
- 오블완
- Java
- 나만무
- JavaScript
- 티스토리챌린지
- 핀토스
- 크래프톤정글
- Vue.js
- 스택
- HTML
- 리액트
- userprog
- corou
- Today
- Total
미새문지
24.08.23 day52 캡슐화, 미들웨어 본문
캡슐화(Encapsulation)
캡슐화는 객체지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 데이터를 보호하고 객체의 내부 구현을 외부로부터 숨기는 방법을 의미한다.
주요 특징
- 데이터 보호
- 캡슐화는 객체의 내부 상태를 보호하기 위해 데이터를 외부에서 직접 접근하지 못하게 하며, 이렇게 하면 데이터를 잘못된 방식으로 수정하거나 접근하는 것을 방지할 수 있다.
- 정보 은닉
- 객체의 내부 구현을 외부에 숨기고, 객체와 상호작용할 수 있는 공개된 메소드만을 통해 접근하도록 한다.
- 이는 객체의 복잡성을 줄이고, 객체가 변경될 때 외부 코드에 미치는 영향을 최소화할 수 있다.
- 인터페이스 제공
- 캡슐화를 통해 객체는 내부 데이터를 직접 공개하지 않지만, 필요한 경우 데이터를 처리할 수 있는 메소드를 외부에 제공한다.
- 이러한 메소드를 통해 외부에서는 객체의 데이터를 간접적으로 접근하고 조작할 수 있다.
예시
class Person:
def __init__(self, name, age):
self.__name = name # __ (double underscore)로 private 변수 선언
self.__age = age
def get_name(self):
return self.__name
def set_name(self, name):
self.__name = name
def get_age(self):
return self.__age
def set_age(self, age):
if age > 0:
self.__age = age
else:
print("Invalid age")
# 사용 예
person = Person("Alice", 30)
print(person.get_name()) # Alice
print(person.get_age()) # 30
person.set_age(25)
print(person.get_age()) # 25
위 예시에서, Person 클래스의 __name과 __age 변수는 외부에서 직접 접근할 수 없도록 캡슐화되어 있다.
대신 get_name, set_name, get_age, set_age와 같은 메서드를 통해서만 접근이 가능하며, 이를 통해 데이터의 무결성을 유지하고, 객체 내부의 구현 방식을 외부에 노출시키지 않게 된다.
장점
- 보안성: 데이터에 대한 무분별한 접근을 막아 데이터의 무결성을 유지한다.
- 유지보수성: 객체의 내부 구현이 변경되더라도, 외부 인터페이스는 동일하게 유지할 수 있어 코드의 유지보수가 용이해진다.
- 코드의 가독성: 내부 구현이 숨겨져 있기 때문에 코드를 사용하는 입장에서는 객체의 동작을 쉽게 이해할 수 있다.
결론적으로, 캡슐화는 객체의 내부 상태와 동작을 외부로부터 보호하면서, 객체 간의 상호작용을 정의하는 중요한 OOP 원칙이다.
미들웨어(Middleware)
미들웨어는 애플리케이션과 운영체제, 데이터베이스, 네트워크 등의 하위 시스템 간의 중간에서 데이터를 중계하고, 다양한 서비스를 제공하는 소프트웨어이다.
미들웨어는 서로 다른 소프트웨어 컴포넌트나 애플리케이션 간의 통신과 데이터 관리, 인증 등을 처리하며, 시스템의 복잡성을 줄이고 통합을 쉽게 할 수 있다.
미들웨어 솔루션의 유형은 다양한 요구에 따라 여러 가지로 분류될 수 있다.
1. 메시지 지향 미들웨어(Message-Oriented Middleware, MOM)
- 기능: 서로 다른 시스템이나 애플리케이션 간의 메시지를 교환할 수 있게 해주는 미들웨어이다. 비동기식 통신을 지원하며, 메시지 큐를 통해 메시지를 전달한다.
- 예시: RabbitMQ, Apache Kafka, IBM MQ
- 사용 사례: 금융 거래 시스템, 주문 처리 시스템 등에서 비동기적으로 대량의 데이터를 처리할 때 사용
2. 원격 프로시저 호출(RPC) 미들웨어
- 기능: 네트워크를 통해 다른 주소 공간(다른 컴퓨터)에서 프로그램의 함수를 호출할 수 있게 해주는 미들웨어이다. RPC는 로컬 함수 호출처럼 보이지만, 실제로는 네트워크를 통해 호출이 이루어진다.
- 예시: Apache Thrift, gRPC, Java RMI
- 사용 사례: 분산 시스템에서 서로 다른 서비스 간의 통신을 단순화하는 데 사용
3. 데이터베이스 미들웨어
- 기능: 여러 데이터베이스 시스템에 걸쳐 데이터를 통합하고, 데이터베이스와 애플리케이션 간의 상호 작용을 관리하며, 이 미들웨어는 데이터 액세스를 추상화하여 애플리케이션이 다양한 데이터베이스 시스템과 상호작용할 수 있게 한다.
- 예시: JDBC (Java Database Connectivity), ODBC (Open Database Connectivity)
- 사용 사례: 다양한 데이터베이스 시스템에서 데이터를 조회하고 조작해야 하는 엔터프라이즈 애플리케이션에서 사용
4. 애플리케이션 서버 미들웨어
- 기능: 애플리케이션 로직을 처리하는 서버 환경을 제공하는 미들웨어이며, 사용자 요청을 처리하고, 데이터베이스와 상호작용하고, 웹 서버와의 통신을 관리한다.
- 예시: IBM WebSphere, Oracle WebLogic, Apache Tomcat
- 사용 사례: 대규모 엔터프라이즈 애플리케이션, 웹 애플리케이션, ERP 시스템 등에서 사용
5. 웹 미들웨어(Web Middleware)
- 기능: 웹 애플리케이션이 클라이언트(웹 브라우저)와 서버 간에 데이터를 주고받을 수 있도록 중계 역할을 한다. 또한 세션 관리, 인증, 로드 밸런싱 등의 기능을 제공하기도 한다.
- 예시: Nginx, Apache HTTP Server, Microsoft IIS
- 사용 사례: 웹 애플리케이션에서 클라이언트와 서버 간의 통신을 관리하며, 대규모 트래픽을 처리하는 데 사용
6. 트랜잭션 처리 미들웨어(Transaction Processing Monitor, TP Monitor)
- 기능: 트랜잭션 기반의 애플리케이션을 지원하는 미들웨어이며, 트랜잭션의 시작, 처리, 완료를 관리하고, 여러 시스템에 걸쳐 있는 트랜잭션을 원자적으로 처리할 수 있게 한다.
- 예시: CICS, Tuxedo, Microsoft Transaction Server
- 사용 사례: 은행, 보험사 등의 금융 시스템에서 트랜잭션을 일관성 있게 처리하기 위해 사용
7. 오브젝트 미들웨어(Object Middleware)
- 기능: 분산된 객체 간의 상호작용을 지원하는 미들웨어이며, 객체 지향 프로그래밍의 개념을 네트워크로 확장하여, 분산 환경에서 객체 간의 통신을 쉽게 할 수 있게 한다.
- 예시: CORBA (Common Object Request Broker Architecture), Java EE
- 사용 사례: 이기종 시스템 간의 통합을 위해 분산 객체 간의 상호작용을 지원하는 시스템에서 사용
8. 포털 미들웨어(Portal Middleware)
- 기능: 여러 출처의 데이터를 통합하여 사용자에게 일관된 웹 인터페이스를 제공하는 미들웨어이며, 여러 애플리케이션과 데이터 소스에 접근할 수 있는 단일 진입점을 제공한다.
- 예시: Liferay, IBM WebSphere Portal
- 사용 사례: 기업 포털, 사용자 맞춤형 대시보드 등에서 다양한 정보와 서비스에 대한 통합된 접근을 제공하는 데 사용
'개발 TIL' 카테고리의 다른 글
24.08.27 day54 작업 일지 (0) | 2024.08.27 |
---|---|
24.08.26 day53 작업 일지 (2) | 2024.08.26 |
24.08.22 day51 작업 일지 (0) | 2024.08.22 |
24.08.21 day50 공용 컴포넌트 작성 방식 (0) | 2024.08.21 |
24.08.20 day49 로그인 UI (0) | 2024.08.20 |