Home 사람을 사랑한 기술
Post
Cancel

사람을 사랑한 기술

이번에 newlecture님의 유튜브를 통해 Servlet & JSP를 공부하고 있었다. 그러다 슬슬 데이터베이스와의 연동이 필요한 시점이 오게 되었다. 그래서 위의 강의는 잠시 멈춰놓고 Oracle SQL을 먼저 시청하고 이어서 배우기로 했다. 그런데 문득 고민에 빠지게 되었다.

“내가 Servlet을 통해 무언가를 만드려하니 데이터베이스도 배워야하네?”
“어라.. 그럼 난 데이터베이스 말고 다른 사전지식이 충분한 상태인가?”

그래서 나는 JAVA 프로그래밍에 있어서 중요한 OOP(객체지향)에 대해서 Oracle SQL과 함께 배우기로하며 이 책을 접하게되었다.

사람을 사랑한 기술

1. 신기술은 이전 기술의 어깨를 딛고

이 책에서 말하는 신기술은 Spring Framework를 예로 들고있다. 스프링이 어느 날 뚝 떨어진 기술이 아니라 이전 기술들이 제시한 철학과 기법을 정반합의 논리로 정제하고 거름삼아 새로운 철학과 기법을 더해 나타난다고 한다. 그러면서 스프링을 이해하려면 이전의 어떤 기술들을 이해하고 있어야할까에 대한 질문을 던진다.

나는 이 질문에 대한 답을 OOP라고 답하였다.
하지만 이는 저자의 입장에서 만점짜리 답은 아니였다.
(저자가 생각하는 만점짜리 답은 기계어/어셈블리라고 한다)

이 질문과 만점짜리 답을 확인하며 당혹스러웠다. 어셈블리를 잠시 배운적은 있다만 “스프링에서 어셈블리?” 라는 느낌이였다. 하지만 이는 다음 내용을 읽지 않고 먼저 생각하였기 떄문에 든 생각이였다. 내가 생각하는 저자가 전하고자 하는 말은 신기술을 만들기 위해서 이전의 기술들이 얼마나 중요한지 이해하고 이전 기술에 대해 소홀하지 말고 감사하자인 것 같다.

2. 기계어에서 객체 지향 프로그래밍 언어로

해당 글에서는 0과 1로 이루어진 기계어로 프로그래밍을 하다가 저수준의 어려움에 어느 한 천재가 기계어를 일상용어에 대칭시켜 니모닉(Mnemonic) 대칭표를 만들었고 이렇게 하여 나온것이 어셈블리(assembly)라고 하며 자존심이 있었던 회사들이 서로 다른 기계어 서로 다른 니모닉 사용으로 인하여 프로그래머들의 번거로움이 표현되며 C언어가 등장하면서의 감동과 추구하던 이상향에 대해서 설명하고 언어의 발전과정에 대해서 소개한다.

  • One Source: 하나의 소스 파일만 작성
  • Multi Object: 기종마다 하나씩 기계어 목적 파일을 생성
  • Use Anywhere: 모든 컴퓨터에서 실행 가능

간략하게 C언어는 위 삼단논법을 통해 하나의 소스코드 파일로 모든 컴퓨터에서 실행 가능하게끔 하려고했다. 하지만 운영체제들의 서로 다른 특성들 때문에 결국에 ‘Fix Source’로 자리잡게 되었지만 어셈블리어를 하나의 기계용에서 다른 기계용으로 작성하는 수고에 비하여 어느정도 수정하는 정도는 무척이나 편했을 것이라고 생각한다.

이 후 객체 지향 개념을 도입한 C++가 등장하였고 역사에 한 획을 그었다고 한다. 객체 지향 개념을 도입함으로써 인간적인 사고의 프로그래밍을 할 수 있게 되었다. 포인터 연산은 초보자들의 수문장격이지만 어셈블리어를 사용해왔던 프로그래머들 입장에서는 그 또한 얼마나 감사한 존재였을까 생각하게 된다. 숨겨진 비밀로는 C++은 순수 객체 지향 개념에 충실한 언어이긴 하지만 객체 없는 프로그래밍을 할 수 있었기에 객체 지향 지원 언어라고 글쓴이의 생각을 밝혔다.

그럼 JAVA는 어떻게 프로그래머들을 이롭게하였을까?
자바는 JDK, JRE, JVM을 사용하여 ‘Write Once Use Anywhere’을 실천함으로써 개발자를 사랑하였다고 소개한다. 회사는 기종별로 컴파일러를 가지고 있을 필요없이 JDK를 통해서 하나의 목적 파일을 만들고 실행 환경에 맞는 JRE을 통해서 Use Anywhere을 가능하게하였다. 또한 포인터 계산을 하지 않게 해주어 조금 더 쉽게 프로그래밍을 할 수 있게끔 하였다.

이렇게 발전과정을 쭉- 들여다보면 프로그램 언어 분야에서 기술이 개발자들을 어떻게 더 편하게 해주었는지 알 수 있었다. 그리고 지금 느끼는 우리의 불편함이 미래의 프로그래머들은 어떻게 바라볼것인지 너무나 궁금해지는 내용이었다.

3. 당신은 CBD, SOA가 어려운가?

CBD(Component Based Development)
애플리케이션을 의미 있는 단위로 구분하고 개발하여 결합해 완성시키는 방법론이자 기법이다.

SOA(Service Oriented Architecture)
실제 현실의 업무를 기준으로 개발하자는 사상이라고한다.

과거에도 분명 이 같은 블록화 개발, 서비스 지향적인 개발이 존재했었다고 한다. 다만 어느 날 누군가 블록화 개발에 CBD, 서비스 지향적인 개발에 SOA라고 이름을 붙히며 시작되었고 너도 나도 CBD 한다, SOA를 한다 난리법석이였다고 설명한다. 그러다보니 본질이 혼란스러워졌고 우리는 그 혼란속에서 본질을 잘 살펴서 얻을건 얻고 버릴 것은 버리는 선별능력을 갖춰야한다고 한다.

개념제품
OOPJAVA, C#
CBD?
SOA?
?Spring Framework

CBD, SOA가 어려운 이유는 개념은 있으되 그것을 대표하는 제품이 없거나 사용해본 제품이 없으니 뜬구름이여서라고 한다. 예로 좌측에는 개념 우측에는 제품을 두고 위의 표를 보았을 때 제품으로 넣을만한게 없고 설명할 메타포도 없어서라고 한다. 그리고 스프링은 개념이 비어있는데 무엇을 넣고싶은지 질문을 던졌다.

“OOP겠지..?”

배워본적이 없으며 그저 들어보았을 때 이렇다고 하니 이거겠지란 답변밖에 할 수 없었다. 글쓴이도 OOP가 모범답안이라고 하며 생략된 것으로는 IOC, DI, AOP, PSA, WEB, ORM, OXM, Security….. 등 아주 많은것들이 있었다. 그러면서 스프링 프레임워크를 학습하기 가장 힘든 이유는 OOP 자체를 잘 모르거나 오해하고 있기 때문이다라고 하였다. 스프링을 쉽다고 말하는 이들은 OOP 기본기가 갖춰있기 때문이라고 하며 그들은 스프링 프레임워크야 말로 정말 단순하고 유연하며 쉽고 강력하다라고 한다.

스프링은 방대한 규모에도 불구하고 자기 철학을 통해 일관성 있는 방식으로 거듭하고 있다고 한다. 그리고 끈 이론처럼 스프링을 지배하고 있는 근원적인 요소가 있는데 IOC/DI, AOP, PSA라고 하는 스프링 삼각형이다. 스프링 삼각형은 POJO(Plan Old Java Object)에 세 가지 유형의 진동을 줌으로써 거대한 프레임워크를 완성시킨다고 한다.

이 후 스프링에 대한 아름다움을 여러가지로 설명을 해 주는데 이는 책의 내용으로 알기보다는 직접 배워보고 몸소 느껴보고싶다.

This post is licensed under CC BY 4.0 by the author.