Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

자주 사용되는 자료구조를 구현이아닌 이용을 할수 있는  신기방기한 녀석이 등장하였다. 우수한 개발자들의 역량이 자료구조 설계에 있었기때문에Stl을 반기지 안했으며 쓸데없는 stl과 비교하는 성능 벤치마크까지 하는것이 유행이였으나있었으며

이때 등장한 STL을 반가울리 없었으며, STL 과 성능 벤치마크까지 해서 자신의 자료구조의 성능을 증명하거나, 마지막까지 고수하였지만  

이 녀석의 등장으로 곧 템플릿+제네릭 프로그램이 유행을하였으며 프라이빗한 자료구조는 몽땅 대체되기 시작하였다. 

자료구조를 아주 잘 작성하는 개발자의 시대가 끝났다란것을 의미하기도 한다.

물론 이러한 개발자가 도메인개발까지 잘할수 있다란것은 별개의 문제이다.

...

Code Block
languagec#
themeEmacs
List<Person> persons = new List<Person>()
{
    new Person { PersonId = 1, car = "Ferrari" },
    new Person { PersonId = 1, car = "BMW" },
    new Person { PersonId = 2, car = "Audi"}
};


List<Result> results2 = persons
    .GroupBy(p => p.PersonId, 
             (k, c) => new Result()
                     {
                         PersonId = k,
                         Cars = c.Select(cs => cs.car).ToList()
                     }
            ).ToList();

이러한

코드를

작성할줄아는것이 마치

사용하는것이  고급개발자인것처럼

포장되는경우도

있다.

이것이

지원되지

않는

언어는

구닥다리

언어인것처럼

배척하기도한다.

하지만 수많은 도메인을 처리한 경험있는 개발자에 의해 작성된 코드들은 위와같이 우아한 방식을 사용하지 않고도

성공적인 프로젝트를 수행하였고 수익을 내고 있다. 

이러한 충돌은 항상 다른환경의 개발자 사이에 존재해왔으며

더 본질적이고 중요한 가치에대해 토론을 이야기를 하고 선택을 해야할것이다.


여기서 자바/닷넷  혹은 최근 핫한 스칼라등에서 위와같은 컨셉이 자신이 컨셉이  최근배운 언어스펙에서

먼저나왔고 나왔고 그것을 이용하는것만이 모던한 개발자이고 개발 이고 나머지는 아니라고 착각을 하는 부류의 개발자가 있다잘못된 정의를 내리는 경우를 보았다.

템플릿/람다/제네릭/함수형 그 컨셉이 메니지드 언어에 존재하지도 았을때-예를 들면 자바 4혹은 닷넷 프레임웍 2.0 이하

이미 오래전, 10년도 더 전에 C++에서 시도 되었고  Boost(https://www.boost.org/)로 집약이 되었다.


즉, 람다와 함수형 개발자체가 언어를 사용하는것이 모던한 개발이 아니란 말이다. 이것은 오래전부터 시도되었고시도 되고, c++에서는  진작에 구현되고

실험되었던 실험되던 녀석들이다. 다만 최근에와서 특정분야에 유행되기 시작하고, 전파되기 시작하면서 효율을 보이고 있을뿐이다.있으며

라이프가 길었던 언어(c#,java등)에서는 그 도입이 약간 늦고, 비교적 태생이 늦었던 언어들은 공격적인 버젼업을 하면서

그 도입이 빨랐을뿐이다.  


최근에는 자료구조가아닌 마이크로 웹 서비스를 위한 조금더 큰 덩치의 수많은 마이크로  서비스를 통해 분산처리되고 관리가 되는 어플리케이션 구성에 고민을 하고 있으며

그러한 관점에서 네이티브 언어인 C++에서 마땅히 쉽게 사용할수 있거나, 보편적(주위회사나 사람들이 많이 사용하는) 인

방식이 없기때문에 메니져드 언어 ( 스프링이나, ASP.net을 활용하기위해) 를 시도중에 있다.

모던한 개발은, 람다를 사용하는것을 의미하는것이 아니고 불필요한 구현을 최대한 줄이고 , 유용한 인프라 예를 들면 도커+aws

를 얼마나 잘활용하여 배포,테스트등에 사용된 시간과 비용을 줄이고 도메인에 집중할수 있는 마이크로한 개발이 아닐까? 정의해본다.

람다,함수형은 그 과정속에서 이용할수 있는 하나의 개발방식이고 전통적인 OOP를 배제하는것이 모던한 개발의 정의는 아닐듯 싶다. 

이와 관련하여, 최근 개발패턴은, 언어나 언어의 디자인 패턴중심이 아닌 마이크로서비스론이 대세가 되고 있으며

고전적인 개발면접 질문인 스레드모델을 얼만큼 알고 구현할줄 알어?  이러한것을 묻는 시대가 이미 종료되었다란 것입니다.  

어쨋든 다음 주제에 대해 지속적인 연구 활동을 시작하였으며, 이 둘은 따로 국밥이여서 상호베타적인것이 아닌

함께 균형을 맞추면서 알아가야 하는 주제입니다.시대에따라 달라 질수도 있지만 그러한 관점에서 모던한 개발에서 필요한것이 무엇인가? 다음과 같이 정리를 해봅니다.

  • 영속성 엔티티를 OOP를 통해 설계하는방법과, Aggregate,Repository를 작성하는 방법
  • 역압력 사용을 위한 스트림의 활용과 메시지큐의 활용 ( Akka,Kafka 등등)
  • 분산처리를 위한 라우팅설계와 클러스터활용
  • 전통적인 예외처리를 개선하는 패러다임의 활용 ( Let it Crash By Supervisor )
  • 도커를  통합 개발환경 구축과 유닛테스트 커버리지를 올릴수 있는 방안등등
  • .............................


그리고 이것은 다음과 같은 두가지 주제로 확장이 됩니다.

복잡한 도메인을 OOP를 통해 다룰수 있는 방법론(DDD)과

마이크로화된 서비스를 직접 생성하고 제어하는 인프라적 관점에서

실행가능한 마이크로서비스 Spring Boot Cloud for MicroService를

연구중에 있습니다. 


Next :

...