티스토리 뷰
[Server] 데이터 중심의 세상과 객체 지향 프로그래밍(Data-Oriented and Object-Oriented Programming)
망나니개발자 2024. 11. 12. 10:001. 데이터 중심의 세상과 객체 지향 프로그래밍
(Data-Oriented and Object-Oriented Programming)
[ 데이터 중심의 세상 ]
21세기는 두말 할 필요 없이 데이터가 중심인 세상이다. 많은 데이터들이 기록되고 수치화되며, 데이터를 분석하여 얻은 결과는 수 많은 의사결정의 근거가 된다.
이렇듯 데이터 중심의 세상이 되면서, 프로그래밍 세계에도 변화가 도래했다. 마이크로서비스 아키텍처가 등장하고 데이터가 중심이 되어 서비스들 간에 데이터를 교환하는 것이 상당히 중요해졌다. 이를 위해 자바는 대표적으로 Ember라는 프로젝트를 통해 언어를 고도화하여 생산성을 높이고자 하였고, 그 과정으로 데이터를 손쉽게 모델링할 수 있도록 도와주는 record 클래스 등이 등장하게 되었다. 심지어 이러한 데이터 중심으로 프로그래밍을 해야 한다는 데이터 지향 프로그래밍(data-oriented programming)이라는 개념도 등장하기 시작했다. 하지만 우리가 사용하는 프로그래밍 언어는 객체 지향 언어인데, 이러한 변화의 흐름에 맞춰서 우리는 어떻게 개발을 해야 하는지 고민해볼 필요가 있다.
[ 데이터 중심의 세상과 객체 지향 프로그래밍 ]
객체지향 설계는 서로 의존하면서 협력하는 객체들의 공동체를 구축하는 것이라고 볼 수 있다. 외부의 간섭을 최대한 배제하고 메시지를 통해서만 협력하는 자율적인 객체들의 공동체를 만들어 훌륭한 객체지향 설계를 얻을 수 있다. 협력하는 객체들 사이의 의존성을 적절하게 조절함으로써 변경에 용이한 설계를 만드는 것이다. 하지만 각각의 데이터 관리 주체가 분산되고 데이터를 주고 받는 세상이 되면서 객체 지향 설계에서 강조했던 협력하는 객체들의 공동체를 구성하는 것에서 조금씩 멀어지고 있다.
실제로 자바 언어 개발진들은 힘의 균형이 이동하고 있으며, OOP의 강점이였던 복잡한 엔티티나 바운더리 등이 덜 중요해지고 OOP의 약점이었던 순수한 데이터와 같은 것들이 더욱 중요해진 시대라고 얘기했다. 이를 위해 비즈니스 엔티티와 처리를 모델링하기 위해 클래스를 사용하는 것에서 데이터를 모델링하기 위해 클래스를 사용하도록 변화중(Data Oriented Programming)인 상황이라고 설명했다. 따라서 객체 지향 프로그래밍(OOP, Object-Oriented Programming)는 과거 모놀리스에 번영했는데, 오늘날 프로그래밍 단위는 점점 작아지고 있으며 교환되는 것이 객체가 아닌 순수 데이터에 가까워진 것이다. 관련 영상은 여기에서 참고할 수 있다.
객체들이 협력하는 공동체를 구축하는 것은 현대의 프로그래밍 시대에서 다소 멀어진 개념이라고 볼 수 있지만, 그럼에도 불구하고 객체에게 올바른 역할과 책임을 부여하는 것은 앞으로도 변하지 않고 중요하게 남을 것이다. 이에 대한 자세한 포스팅은 여기에서 참고할 수 있다.
따라서 우리는 2가지 스타일을 혼용하여 개발할 수 있어야 하는데, 먼저 계층 혹은 서비스 간에 데이터 전달이 필요한 지점에는 데이터를 용이하게 주고받을 수 있도록 데이터가 중심인 방향으로 프로그래밍할 수 있어야 한다. 대부분의 언어에서는 이를 위한 클래스 타입을 제공하기 때문에 이를 활용해주면 된다. 그 다음으로 객체에게 역할과 책임을 부여해야 하는 지점에는 객체가 중심인 방향으로 프로그래밍을 할 수 있어야 한다. 현대에서도 객체 지향 프로그래밍은 매우 중요하며, 필요한 순간에 적용할 수 있도록 하나의 무기로서 준비해야 한다.
'Server' 카테고리의 다른 글
[Server] 객체에게 역할과 책임을 부여하는 객체 지향 프로그래밍(Object-Oriented Programming) (3) | 2024.11.05 |
---|---|
[Server] 진짜 중복과 가짜 중복의 구분(중복 여부를 판단하는 기준) (4) | 2024.10.22 |
[Server] 비즈니스 정책과 입력 데이터, 서로 다른 데이터 검증 및 유효성 검사(Validation) (7) | 2024.10.01 |
[Server] Redis와 LuaScript(레디스와 루아스크립트)를 활용한 슬라이딩 윈도우 구현하기 (0) | 2024.05.07 |
[Redis] 레디스가 제공하는 분산락(RedLock)의 특징과 한계 (7) | 2023.10.10 |