본문 바로가기
책/크로스플랫폼 핵심 모듈 설계의 기술

1장 크로스 플랫폼으로 개발하라.

by 정선한 2023. 6. 13.
728x90
반응형

 C++ 언어가 어려운 이유,
개발자에게 여러 운영체제 자원들(CPU, 메모리, 디스크)을 자유롭게 이용할 수 있는 C언어를 탑재하고 있기 때문이다.

C언어는 어셈블리를 내장한 극단적인 최적화도 가능하며 커널 레벨의 함수도 사용할 수 있다. 그 이유는 운영체제의 코드 또한 C언어로 작성되어 있기 때문이다.
C언어로 개발된 모듈은 라이브러리화되어 자바, C#, 스크립트 언어들과 결합할 수 있으며 플랫폼 간 호환성도 좋다.

C언어의 생산성을 보완하고 기존의 막강한 기능을 지원하기 위해 개발된 언어가 C++ 이므로, C++은 C언어의 장점ㅇ를 가진 채 생산성을 확보하기 위한 많은 기능을 탑재한 언어가 되었다.
기능이 많아졌다 = 많은 것을 알아야 한다. -> 어렵다.

C++ : C언어 * [예약어 문법] * [OOP] * [STL] * [템플릿]
C++은 4가지 언어의 집합체이다. 라는 표현이 있을 정도로 각 4개의 영역은 많은 배움의 노력이 필요하다.

C++을 정복하면 무엇을 해야하는가?

"핵심 모듈 개발"
핵심모듈은 상당히 정교하고 다양하게 개발되어야 한다. 그런 의미에서 C++은 핵심 모듈을 개발하기에 최적화된 언어라고 볼 수 있다.

핵심 모듈이란? 사전적 정의 : 소프트웨어 개발에서 가장 의미 있는 모듈
핵심 모듈은 목적과 생명력, 진입장벽이라는 세 가지 특성을 가지고 있어야 한다.

"목적"
핵심모듈의 목적은 다양하다. 예를 들면, '남들과 차별화된 기능을 수행하는 모듈'일 수 있고 '기능은 평범하나 남들과 차별화된 성능을 가진 모듈'일 수 있다.
- 모듈을 개발할 때 고려하는 3요소 : 가독성, 성능, 평이성
단, 각 요소들은 서로 트레이드-오프 적인 요소가 있어 모든 요소를 다 갖추기에는 현실적인 어려움이 있다. 또한 가독성이나 성능을 모두 확보하기 위해 새로운 문법이나 기술을 도입해야 하는 경우도 있다.
- 3요소를 모두 획기적으로 달성하는 방법 : 하드코딩 (코딩 가이드에서는 바람직하지 않다고 설명하는 코딩방법)

"생명력"
하드코딩의 가장 큰 문제는 생명력이다.
하드코딩으로 확보한 성능은 점점 무너질 수밖에 없으며 그 이후 성능, 가독성 모두에 영향을 준다. 하드코딩은 처음에는 완벽한 해결법을 제시한 것 같아도 긴 여정과 같은 소프트웨어 개발에서 하루살이와 같은 생명력을 가진다.
생명력은 얼마나 오랫동안 유지보수 할 수 있는 상태를 잘 유지하느냐 이며, 모듈이 가장 건강한 상태는 가동성과 성능, 기술 평이성이라는 세 가지 요소가 모두 최상위의 상태를 유지하는 것이 아닌 적정 선에서 잘 관리되는 것을 말한다.

"진입장벽"
핵심 모듈은 일정 수준 이상의 기술적 난이도를 갖출 수밖에 없다. 이러한 난이도는 C++의 진입장벽을 높인다. 이는 장애물일 수 있지만 한편으로는 개발자가 왜 개발을 잘해야 하고, 왜 설계를 잘해야 하는지를 알려주는 이정표와 같다.
핵심 모듈에 대한 진입 장벽을 많이 경험해 보면 아무리 상이한 분야의 프로젝트일지라도 대부분이 공통된 기술들이고, 가이드인 경우가 많다.

아키텍트란?
일반적으로 '코더'가 아닌 '아키텍트'가 되어야 한다고 많이 이야기한다. 하지만 아키텍트에 대한 고정관념에서 벗어나야 한다. 우리는 아키텍트를 신처럼 생각하는 경우가 있지만 그들은 신이 아니다.
아키텍트는 경력이나 실력에 상관없이 누구나 될 수 있으며, 아키텍트는 '설계자'이다. 그러므로 프로젝트의 문제점을 잘 아는 사람은 어디선가 새로 온 아키텍트가 아닌 프로젝트의 구성원인 우리들이다.

한 프로젝트의 구조를 설계할 때, 가장 중요한 것은 눈에 선히 보일 정도로 보든 문제를 구체적이고 정확하게 도출할 수 있는지, 그리고 그것을 회피할 방안을 고안할 수 있는지이다.
"만약 내가 프로젝트 전체를 설계해야 한다면 지금 내가 개발하는 모듈은 어떤 모습이어야 할까?"를 고안할 수 있어야 한다.

흔히 설계와 개발을 숲과 나무에 비유한다. 나무를 보는 사람도 숲을 볼 줄 알아야 하고, 숲을 보는 사람도 나무들을 볼 줄 알아야 진짜 문제를 파악할 수 있다.

크로스 플랫폼으로 개발하라.
크로스 플랫폼이란, 말 그대로 여러 플랫폼에 걸쳐있다는 뜻으로 하나의 플랫폼에 구애받지 않고 여러 플랫폼에서 동작할 수 있는 것을 의미한다

"런타임 기법과 컴파일 기법"
런타임 기법의 예 : JVM 기법.
컴파일 타임 기법 : 운용하려는 플랫폼에서 직접 소스코드를 빌드하여 바이너리를 생성하는 기법. 한 번 작성한 코드를 각 플랫폼에서 컴파일될 수 있도록 만드는 기법으로 코드 수준에서 플랫폼 종속적인 코드를 분기하여 처리하여야 한다
컴파일 타임 기법 예 : 구글의 크롬 브라우저

크로스 플랫폼은 개발된 결과물을 다르게 하는 것이 아니라 '개발 과정에서의 효율성'을 찾는 기법이므로 겉으로 구분하기는 어려운 부분이다. 다만 분명한 것은 빠른 시간에 모든 플랫폼에 배포를 할 수 있다는 가장 분명한 특징이 있다.

"디바이스와 개발 인력"
디바이스 관점에서의 크로스 플랫폼 개발
PC 뿐만이 아닌 스마트폰에서도 동작하는 솔루션에 대한 요구가 늘어나는 요즘의 환경. 따라서 아이폰과 안드로이드, 윈도우, 리눅스, 맥 등의 추가적인 솔루션 개발을 요구하는 경우가 늘어났다.
개발해야 할 코드가 늘어나는 것뿐만이 아닌 같은 동작의 코드를 여러 번 작성해야 한다는 부담이 존재한다. 또한 개발자 역시 사람이기에 늘어나는 반복적인 업무에 실수도 늘어날 것이며 이는 소프트웨어의 품질과도 직결된다.

개발인력 관점에서의 크로스 플랫폼 개발
흔히 개발자 그룹을 나눌 때, 백엔드 - 미들웨어 - 프론트엔드로 구분하곤 한다. 또한 핵심모듈은 백엔드에 속한다. 
백엔드 개발자들이 선정된 이후에는 그들이 개발 및 지원하는 플랫폼이나 개발 언어에 따라 미들웨어와 프론트엔드 개발자가 결정되는 것이 일반적이다. 따라서 백엔드 모듈이 어떤 플랫폼에 종속적이라면 해당 솔루션은 그 플랫폼에 종속적인 상태로 개발이 될 수밖에 없다.
따라서 다양한 플랫폼에 제공하기 위해 백엔드 개발자들은 요즘 많이 쓰이는 크로스 플랫폼 언어를 사용하여 개발을 하게 되는 경우가 늘고 있다.

정리
크로스 플랫폼은 디바이스와 개발자들을 통합할 수 있는 궁극의 장점을 지닌 기법으로 계속해서 진화하는 디바이스와 커져가는 소프트웨어의 규모에서 개발자들이 살아남기 위해서는 크로스 플랫폼 개발 기법을 받아들여야만 한다.

728x90
반응형

' > 크로스플랫폼 핵심 모듈 설계의 기술' 카테고리의 다른 글

2장. 개발기법 (#2)  (1) 2023.06.17
2장. 개발기법 (#1)  (1) 2023.06.16