미래의 나에게 작성했던것 같은 글이 보여서 정리해서 올려봅니다.
지금 나의 상황이 그때와는 달라서 그런지, 지금의 제 생각과 다른 점들도 보이네요. ^^
기록이란 이런점이 재미있는것 같습니다.
아래 내용은 2000년부터 2012년 즈음까지 Windows 기반의 개발환경에서 개발하던 시절의 이야기입니다.
당시 저는 스마트폰이 아닌 Feature Phone 에서 RTOS를 base로 Middleware 에 해당하는 UI Framework 과 Application Framework을 개발했었습니다.
우리 팀은 새로운 피쳐를 개발하고 상품화하고, 어플리케이션 개발팀을 지원하고, 다시 신규 기능을 추가하고, 상품화하고 개선하고를 반복했었습니다.
그러다 Smart Phone 개발로 넘어가서 자체 OS 기반으로 UI Framework을 개발을 하던 시점입니다.
이 글을 써놓은 시점정확히 언제인지는 기억나지 않네요 ^^; 다만 마지막 수정 시점이 2012년 이었습니다.
당시 팀의 구성은 OS 개발팀과 Application 개발팀이 회사 내에 존재하며 모든 S/W를 팀내에서 소화해 내던 시절이었습니다.
스마트폰 개발로 넘어가면서 부터는 외부 개발자들도 늘어나긴 했지만, 소수일 뿐이고 모든 소프트웨어 개발은 내부에서 이뤄진다 보면 되는 상황이었죠.
2012년 어느날.
프로젝트의 성격과 팀의 규모에 따른 개발 전략...
Visual Studio .Net, Boland Java, JDK , National Rose , OOP , Design patten,
Direct X ,OpenGL? ,Oracle , My SQL, Clear case ...
위의 단어들은 프로그래머라면 상당히 많이 자주 들어본 단어일것이다.
현재 수많은 개발자들을 위해 많은 통합환경과 개발 툴들이 나와있다.
고민해봐야 할것은 "이것들이 모두 정말 프로그래머를 위한 개발툴일까?" 하는 것이다.
만약에 프로그래머들을 상대로 돈벌이를 하는 회사들이 프로그래머의 주머니를 털려고 만들어 놓은 소프트웨어일수도 있지않을까????.
본질은 프로그래머를 위한게 아니라 소프트웨어를 개발하는 팀에게 추진하는 프로젝트 완료를 빠르게 할수 있도록 도와주는 상품들 이라는 것이다. 프로그래머를 대상으로 하는 프로그램이라기 보다는 프로젝트를 상대로 하는 프로그램인것이다.
소프트웨어를 개발하는데 있어서 좋은 툴을 이용해 빨리 개발을 완료 하는것이 가장 좋은 방법일 것이다.
그렇다면 저기 위에서 나열된 툴들 중(더많은 툴들이 있을테니 그 툴들을 포함해서) 어떤것이 가장 좋은 툴일까?
자,, 지금부터 제가 예기하고자 하는것은 툴을 예기하자는 것이 아닙니다.
프로젝트의 본질에 대해서 좀더 고찰이 필요하다는 것을 예기하고 싶은 것입니다.
예를 들면 , 단일 2~3사람의 프로그래머가 Scheduler를 제작하는 것이라고 하면 익숙한 툴 좋은 툴을 선택해서 별 고민 없이 진행해 나가면 됩니다.
10~20명 정도의 개발자가 Web 기반에서 Com을 이용한 File sharing & Digital contents를 판매하기 위한 Client Server 소프트웨어를 제작한 구성한다고 하면
National Rose , Visual Studio , My SQL, Visual Interdev, 등 여러 툴들이 필요할것이다.
그렇다면,
20명정도 되는 개발자들이 OS와 같은 플랫폼을 만들고 그 위에 올릴 여러개의 Application을 제작 하는 70명정도의 프로그래머가 있는 프로젝트가 있다고 하면, 어떤 툴을 사용해야 할까?
이경우는 좀 특별한 경우가 될 것이다.
왜냐 하면 첫번째와 두번째는 특정 시스템 위에서 동작하는 어플리케이션 개발에 관한 이야기 이기 때문에 어플리케이션은 용도나 목적에 따라 툴을 선택할 수 있고,?어플리케이션의 설계를 변경, 유지보수 기능 및 성능 개선등 많은 부분에서 툴의 도움을 받을 수 있다.
하지만 세번째의 경우는 툴을 논하는 것 보다는 전체 시스템의 설계에 모든 중심을 둬야 한다. 이 시스템이 적용될 Base Chip set과 Compiler ,Device의 목적과 목적에 따른 플랫폼 서비스의 종류와 확장형식, 어플리케이션구동형식(Task나 Thread 또는 단일 Task UI), Device Layer, 그리고 Application Service layer등 시스템 전반에 걸친 설계가 필요한 것이다.
즉,20명의 플렛폼 개발자가 취해야할 사고의 영역이 바로 System 전반의 설계와 구현에 촛점을 맞춰져야 한다.
이를 바탕으로 디자인이 끝나는 시점에서 플렛폼 개발자들은 좀더 사고 영역을 넓힐 필요가 있다. 바로 70명의 Application 개발자들을 위해서이다.
20명의 개발자들중 Application 구동형식과 API부분을 맡은 프로그래머라면 적어도 이런 고민은 해봐야 한다 . " 만약 어플리케이션 개발자가 개발경험이 거의 없는 프로그래머 초년생이라면?" 이라는 고민은 해봐야 한다. 또, "어떻게 하면 개발 기간을 단축시킬수 있을까?" 라는 것도 역시 함께 고민해야 한다.
Microsoft도 이런 고민을 많이 하고 있기 때문에 선택권을 줬다.
Visual C++ 을 쓸것인지Visual Basic을 쓸것인지, Win32 API를 쓸것인지, MFC를 쓸것인지, Com을 쓸것인지 Socket을 쓸것인지... 등등의 선택권이 주어지도록 했다.
그렇다고 70명의 앱 개발자 위해 통합 IDE(Visual C++, Visual Basic)를 새로 개발하여 제공한다는 것은 배보다 배꼽이 더 큰 경우일 것이다.
현재 취할 수 있는 최선은 대응책은 어플리케이션개발에 너무 세세한 것까지 신경쓰지 않도록 개발 architecture및 flow , library등을 제공 하는 것이다.
커스텀 가능한 통합 IDE에 우리 어플리케이션을 개발할 수 있는 환경을 추가하는 것이다.
UI Layout까지도 제공을 하게 되면 Application 개발자들은 적어도 System 전반에 적용되는 common U 부분에 대해서 고민이 덜어 질 것이다.
또 Flow manager 등의 모듈을 제공한다면?Workflow상 UI전환을 어떻게 해야 할 것 인지에 대해 정해진 룰을 따르면 될것이다.
따라서 화면 구성이나 플로우 전환을 위해 어떻게 할 것인지등에 대한 것 보다는 기능상 구현을 우선시 할 수 있게 된다.. Win32든 MFC든 UI를 위한 부분이 너무 많이 Application에 영향을 주어 Architecture가 복잡해지는데, 위 처럼 UI에 대한 작업이 줄어들면 줄어든 만큼 어플리케이션 구동에 대한 Architecture는 간단해진다.
뛰어난 어플리케이션 개발자에게 어떤 선택을 주어야 할까?
[Programming의 자유도를 높이는것.. 관연 약인가 독인가?]
서론치고는 너무 길어졌는데요.
제가 주장하고자 하는 바는 system을 개발하면서 application영역을 모두 application 개발자에게 떠넘겨서는 안된다는 것입니다.
무슨 말이냐 하면 application 개발자의 역량에 의해 application의 질이 좌우되도록 모든것을 떠 넘겨 놓게 되면 프로젝트 전반에 걸쳐 많은 문제를 야기하게 될것 입니다.
각 application간의 밸런스도 문제가 되고 ,소프트웨어의 질과 유지보수 관계에도 많은 문제가 발생하게 됩니다.
위에서도 잠깐 언급했지만 우리는 현실적으로 항상 경험이 많고 우수한 어플리케이션 개발자와 일하지는 않는다는 것입니다.
경험이 적은 소프트웨어 개발자와 일 하게 된다는 것을 염두해 두고 Application개발자에게 제공되어야 하는 서비스가 뭔지를 결정해야 합니다.
혹, 어떤분들은 "만약 어플리케이션 개발자가 아주 유능하고 천제적이며 경험있는 사람이라면 어떻게 하시겠습니까?" 라고 질문 할수도 있습니다.
어떻게 해야 할까요? 이사람에게는 "당신은 유능하니 마음대로 하십시오" 라고 해야 할까요?.
제 경험상 유능한 사람일수록 자기가 가지고 있는 노하우나 기존의 프로그래밍 습관을 유지하려고 합니다. 어떻게 보면 현재 구성하려는 시스템을 흐트러 트릴 가능성이 많다는 것이죠.
물론 모든 유능한 개발자가 그렇다는 것은 아닙니다. 하지만 우리는 혼자서 소프트웨어를 개발할 수 있는 시대에 있지 않습니다.
우리가 시스템을 설계하고 개발한 후 다른 협력업체에 인터페이스를 오픈하고 우리의 시스템 위에서 어플리케이션을 개발하도록 할때가 많습니다.
유능하든 그렇지 않든 시스템을 전반적으로 이해하지 못한 상태에서 개발에 들어가야 하는 것이 어찌보면 현실 일 것입니다.
즉,어플리케이션 개발자가 매우 유능하다면 스스로 어플리케이션의 문제점이나 System의 핸디켑을 해결하기 위해서 다양한 방법을 시도 할 것입니다. 이부분이 때로는 유지보수에 어려움을 만드는 계기가 되기도 한다는 것이죠.
유능한 개발자들에게는 그들만의 영역을 따로 주는 것이 좋습니다. 그들이 가지고 있는 노하우가 System의 일부로 스며들수 있도록 System Layer의 작업환경을 주는것이죠.
또, Application의 core 영역에서 개발하도록 하는 것도 하나의 방법입니다.
"System을 개발하면서 application영역을 모두 application 개발자에게 떠넘겨서는 안된다는 것입니다."
이말은 System이 Application에게 System에 영향을 주지 않는 범위의 틀을 제공해야 한다는 것입니다. 그리하여 유능한 개발자든 아닌든 그 틀 안에서 자신의 역량을 펼치도록 만들고 , 제한하는 것입니다.
프로그래밍의 자유도는 틀 안에서만 허용이 되어야 한다고 생각됩니다.
회고
그 시절에는 개발자의 역량이 시스템에 꽤 많은 영향을 미쳤던것 같습니다. 그사람이 없으면 할수 없었던 일도 있었으니까요.
하지만 반면에 어플리케이션 개발은 가능하겠지만 혼자서 시스템을 만들수도 없었죠.
지금(2025년)에 와서 생각해본다면, 상황이 많이 바뀌었죠.
어플리케이션 중심 => 서비스 중심
OS위 에서 독립적(Stand alone)으로 동작 => 온라인 서비스를 기반으로 데이터를 쌓고 정보를 가공 제공하는 형태 (MSA, cloud, iot..)
하나의 언어로 개발 => 서비스기반의 다양한 언어와 다양한 플랫폼으로 구성 (html/css, python, nodejs, react, nextjs ....)
단일 플랫폼에서 동작 => 서비스가 기본적으로 다양한 플랫폼을 지원 (android, iOS, web)
통합 IDE의 부재 => 다양한 개발환경 (android studio, visual studio code, electron ....)
AI 의 발달..
이제는 개발자의 역량과 실력에 따라 더 좋은 대우와 어려운 미션이 부여되는 것은 맞겠지만, 그것이 플랫폼 영역을 의미하는 것은 아니게 되었네요.
하지만 한가지 공통된 것은 그 개발자의 위치는 시스템(서비스)내에서 영향력이 큰 곳으로 배치되기는 해야 겠죠. 그리고 본인이 원하는 일이여야 할것이고요.
시대가 바뀌어서 본인의 역량 뿐만 아니라 의지에 따라서 결과물이 크게 달라지는 시대입니다.
[참고]
'개발 Note > it 이야기' 카테고리의 다른 글
PlantUML 에디터: 로컬에서 돌리기 (0) | 2024.02.27 |
---|---|
AWS dynamodb 와 aurora RDB 비교 (0) | 2023.07.11 |
[Windows Tip] appwiz.cpl (0) | 2022.11.10 |
미디어파이프(Mediapipe)를 활용한 AI Web페이지 개발하기 (0) | 2022.05.31 |
DevOps 선택하기... (0) | 2022.05.25 |