NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    기타 1부 - 개발자라면 알아야 하는 기본 원칙. (Basic principles that developers should know…

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. S사에서 진행중인 프로젝트에서 팀원이 한명 이탈했네요. 입사한지 얼마 안되었지만 더 좋은 곳으로 간다고하니 보내줄수밖에 없었습니다. 중소기업에서 대기업으로 이직할 수 있으면 망설이지 않고 가는게 좋죠^^; 오늘 할 이야기는 개발자가 알아두면 좋을만한 내용들입니다. 경력이 있는 개발자가 이 글을 보면, 이미 업무에 적용하고 있는 내용이라고 느낄겁니다. "네 맞아요^^;" 우리는 이미 아래 설명하는 내용들을 본능적(?)으로 적용하고 왔던것입니다. 다만, 정리가 안되었을 뿐이죠. 처음 코딩에 입문하시는 분은 아래 내용을 잘 적용시키면 고퀄리티의 코드를 만들 수 있을겁니다.

    ※ 이 글은 가볍게 읽어보세요~ 개인적인 경험에 기반하여 적는 내용이다보니 지극히 주관적일수도 있습니다.

    eNy304y.png

     

     

    객체 지향 개발(OOA, OOD, OOP) 방법론은 많은 분들이 알고 있는 익숙한(?) 개념입니다. OOP(Object Oriented Programming: 객체 지향 구현)를 잘 모르더라도 이미 본능적으로 적용해서 사용하고 있죠. 하지만, 여기서 한번 더 성장하려면 SOLID와 DKY에 대해 제대로 알고 적용시키는게 좋습니다. 이런 개념들을 몰라도 개발하면서 먹고 사는데 아무런 불편함이 없긴하지만요^^;

     

    대부분은 3-Tier(DB, Server, Client) 환경에서 개발하고 있을겁니다. 물리적으로 분리되어 있지만, 클라이언트에서 논리적으로 분리되어 처리되기도 합니다. 제가 일하는 곳들은 대부분 데이타베이스가 Oracle이고, Application은 자바(Server)입니다. 클라이언트는 C#이고, End-user가 설치해서 사용하는 방식이죠. 웹의 경우에는 2-Tier인 경우가 많습니다. 웹브라우저에서 동작하기 때문에 설치할 클라이언트가 없습니다. 아무튼, 시스템을 구성하는 방법은 여러가지가 있는데요. 엔터프라이즈급 프로젝트가 아니라면 1-Tier 또는 3-Layer로 구성하기도 합니다. 개발 단계에서는 보편적으로 OOP를 3단계로 진행합니다.

     

    1. 객체 지향 분석(OOA: Object Oriented Anaysis)

    시스템을 개발할 때 요구사항을 분석해서 데이터 모델을 만듭니다. 업무 또는 기능별로 객체 모델을 만들고, 정적 구조와 관계를 설정해줍니다. 이 때 각각의 객체들이 주고 받아야 하는 인터페이스를 정리하고, 공유합니다. 사실 이부분이 가장 어려운거 같습니다. 엔터프라이즈급 시스템을 운영하는 대기업에서 복잡한 시스템을 분석하고, 데이터를 정리한다는게 쉬운건 아니죠. 그렇다고, 고객이 잘 알려주는것도 아니거든요. 알아서 잘(?) 해주길 바라는데... 이런 압박감이 견디기 힘든 스트레스로 다가오기도 합니다.

     

    2. 객체 지향 설계(OOD: Object Oriented Design)

    SOLID는 객체 지향 설계에서 반영해야 하는 아주 중요한 개념입니다. 하지만, 빠듯한 일정에서 충분히 고민할 시간이 없다는게 문제입니다. 그렇다보니 난개발이 진행되고, 마지막에는 스파게티 소스가 되는일이 비일비제합니다. S사의 주력 제품을 생산하는 시스템도 이런것들이 적용되어 있지 않으니까요. 더 충격적인건~ 이런 시스템을 관계사들이 벤치마킹해서 도입한다는거죠. 아무튼~ 이 시점에 시스템과 프로그램 설계를 구체화합니다. 시스템 설계 단계에서 성능 최적 방안, 문제 해결 전략, 자원 분배등이 결정됩니다. 프로그램 설계는 구현에 필요한 상세 내역을 작성하고, 서드파티 제품과 미들웨어 통신을 어떻게 할것인지 정의해야 합니다. 개발자 입장에서 설계 단계에 SOLID를 적용해야 한다는 것입니다.

     

    3. 객체 지향 구현(OOP: Object Oriented Programming)

    1번과 2번에서 설계한 객체 모형들을 특정 프로그래밍 언어로 작성하는 단계입니다. 클래스, 인터페이스, 인헤리턴스(Inheritance: 상속)를 모두 포함하는 언어를 사용하는게 좋겠지만, 웹의 경우 한계가 존재합니다. 지금은 Angular+TypeScript로 가능하긴 합니다만~ Java나 C#만큼 편리한건 아닙니다. 그렇다고해서 구조적 프로그래밍 언어로 개발하면 안되는건 아닙니다. 개발이 시작되면 이 부분에서 DKY(Dry Kiss Yagni)를 적용합니다.

     

    이외에도 가독성은 높이고 중복성과 복잡성을 낮추는 규칙들도 존재합니다. SonarQube를 통해 정적 분석을 돌려보면, 코드에서 복잡성이 어떻게 계산되는지 확인할 수 있습니다. 몇가지 대표적인것들로는 맴버를 최소화하고 속성을 사용해야하며, 배너형 주석은 금지하고 Documentation에 충실해야 합니다. Git과 같은 형상 관리 도구가 잘 되어 있음에도 더이상 사용하지 않는 코드들을 주석으로 남겨놓는 일은 없어야겠습니다.

     

    다음에는 SOLID에 대해 좀 더 자세하게 알아보도록 하겠습니다. 참고로 제가 업으로 삼고 있는 산업군에서 개인적인 경험을 바탕으로 작성하다보니 다른 산업군에 현실적으로 부합하지 않을수도 있습니다. 하지만, 개발 방법론은 설계 및 코딩에 중요한 개념입니다. 물론, 작은 시스템에 OOP를 한다는건 낭비라고 생각합니다. 더이상 확장할 필요가 없는 시스템의 경우에는 함수형 언어로 빠르게 개발하는게 더 좋죠^^;

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.