Onik Lab.

시스템을 구축한다면 - (5) Framework, Design Pattern, Programming Language

October 05, 2020 | 4 Minute Read • 0 Comments

지난 글:

시스템을 구축한다면 - (1) 사전 고려 사항

시스템을 구축한다면 - (2) DBMS

시스템을 구축한다면 - (3) Network

0. Intro

일단 시스템을 구축하기 위해서는 그에 맞는 환경을 구축하고 설정하는 것이 우선이겠죠. 물론 앞선 글에서의 사전 고려사항과 같이 예산, 인원, 기간을 고려해서 그에 맞는 환경을 구축하는 것이 중요한 일입니다만, 어떤 환경에서의 구축이 필요할 지에 대해서는 어느 정도 준비는 갖춰지지 않을 수 없다고 볼 수 있습니다.

흔히들 Infrastructure(이하 Infra, 인프라)를 구축하기 위해서 고려해야 할 요소는 일반적으로 다음과 같습니다.

  • 애플리케이션 서버(Application Server: AP)
  • 데이터베이스 관리시스템(Database Management System: DBMS)
  • 네트워크 및 방화벽(Network and Firewall)
  • 보안(Security)
  • 프레임워크, 디자인 패턴 및 언어(Framework, Design Pattern, Programming Langauge)
  • 저장소(Storage)
  • 도메인(Domain)
  • 형상관리(Configuration Management)

물론 그 외에도 다른 요소들이 있을 수 있습니다만, 일반적으로는 위 범주에서 이루어진다고 볼 수 있습니다.

이번에 쓸 글은 위 요소 중 사용 모델 및 언어를 주제로 써 보겠습니다. 4번이 빠져 있는데, 4번은 AP에 대한 내용으로, 이 부분은 작성 중인 글이 다른 PC에 있는 관계로 해당 부분을 완성한 다음에 등록하겠습니다.

1. Framework

고전적 방식의 시스템은 프레임워크라는 자체가 존재하지 않았습니다. 이유는 너무나도 간단합니다. 언어를 가지고 만들기만 하면 되었다고 생각했기 때문일까요.

하지만 시스템이 대형화되고 구조도 복잡해지다 보니까 어떤 일정한 형식이나 틀을 필요로 하게 되었고, 기본적인 틀만 갖추면 쉽게 프로그램을 개발하고 시스템을 구축할 수 있는 프레임워크가 등장하게 된 셈이죠.

대표적인 프레임워크를 들자면 수도 없이 많지만, Java 언어 기반의 Spring Framework와 Python 언어 기반의 Django, Flask 등을 들 수 있겠습니다. 실제로 제가 집필했던 서적도 Django Framework로 웹 애플리케이션을 개발했던 내용을 든 것이고요.

그래서 프레임워크를 선정할 때에는 어떤 시스템을 구축할 것인가, 그리고 어떤 언어로 개발할 것인가를 먼저 결정해야 될 것이고, 이 프레임워크를 사용했을 때 시스템을 더욱 편리하게 만들 수 있을 것인가를 확인할 수 있습니다.

최근에는 Front-end / Back-end로 나누어서 개발하기 때문에 각각의 영역에 맞는 프레임워크를 선정하는 것도 필요하겠네요.

2. Design Pattern(모델)

디자인 패턴이라는 것이 어찌되고보면 생소할 수도 있습니다만, 간단히 설명하자면 프로그램을 개발할 때 공통적으로 발생하는 문제에 대한 재사용 가능한 솔루션이라고 사전적으로는 언급되어 있습니다.

이 부분은 Java를 비롯한 객체지향 프로그래밍이 등장하면서 나온 개념이라고 봐도 좋은데, 기존의 함수 단위의 프로그래밍에서 클래스 단위로 프로그램이 만들어지면서, 특정 상황에 대해서 이러한 패턴을 가지고 만들면 좋을 것 같은데라는 것에서 착안한 것으로 볼 수 있습니다.

이는 모델(Model)하고도 빼 놓을 수가 없겠는데요. 대표적인 모델인 MVC(Model-View-Controller) 패턴만 보더라도 화면 상에 나타내는 부분, 비즈니스 로직을 처리하는 부분, 데이터를 표현하는 부분으로 분리하여 어떤 기능을 구현한다고 할 때 각각의 영역 별로 분리해서 구축한다면 유지보수도 용이해지고 대규모 프로젝트의 경우에는 나누어서 개발할 수 있다는 장점도 당연히 존재합니다.

어떤 디자인패턴을 사용하라는 것은 시스템의 성격이나 구조에 따라서 다르기 때문에 직접 설명하기는 어렵습니다만, 특정 상황에 맞게 적절히 사용한다면 될 것 같습니다.

3. Programming Language

1) 개요

사실은 이 부분이 가장 중요할 것 같습니다.

2000년대 초반 가장 많이 사용했던 웹 프로그래밍 언어로는 PHP가 있었습니다. Apache-Tomcat 서버를 설치한 후에 HTML 코드에 PHP 코드를 삽입해서 화면을 나타냈던 기억을 그 당시 프로그래밍을 했던 사람이라면 다 한번 씩은 가지고 있을 법한 기억이기도 하겠네요.

그 때는 웹 디자이너와 웹 프로그래머로 구분하여 이미지나 아이콘 등을 만드는 것은 디자이너가 하였고, 프로그래머는 HTML, CSS, JS를 포함하여 PHP 코드까지도 모두 짜는 역할을 했었죠.

그리고 시간이 지나면서 Front-end와 Back-end로 영역이 분리가 되었는데, 이는 HTML5 표준이 등장하고 Javascript 언어 자체 기능이 JQuery를 필두로 해서 ES6 문법이 등장하면서 화면 상에 나타내는 기능 중 자체적으로 처리 가능한 부분은 Front-end에서 구현하고, 실제 비즈니스 로직을 처리하는 부분을 Back-end에서 구현할 수 있게끔 나누어진 것이죠.

그래서 프로그래밍 언어도 결국은 Front-end 언어와 Back-end 언어로 구분해서 개발하게 된 것이고요.

2) Front-end

일단 Front-end 언어는 Javascript 기반으로 어떤 것을 사용하느냐에 달린 문제입니다. SPA가 등장하면서 고전 방식인 JQuery를 그대로 이용할 것이냐, 아니면 SPA 방식의 언어를 사용할 것이냐. 그 중에서도 Angular, React, Vue.js 등 다양한 JS 기반 언어가 등장하면서 Front-end 언어 선택도 중요한 고려사항이 된 것이죠.

선정 기준은 간단하게 각각의 장단점이 있기 때문에 개발 플랫폼이나 활용도 등을 고려하면 될 것으로 전망되고요. 단 어떤 것을 사용하더라도 웹 표준 규격에 맞게 작성해야 한다는 것도 중요 요소입니다.

또한 Back-end쪽에 프레임워크가 있듯이, Front-end에서는 템플릿(Template)이라는 것이 존재하기 때문에 개발 템플릿을 선정하거나 혹은 자체적으로 만들어서 재활용할 수 있는 방향으로 결정한다면 거기에 맞게 화면 개발은 훨씬 용이해질 것입니다.

3) Back-end

Back-end는 대부분 Java Spring Framework 기반의 시스템을 많이 사용합니다. 그 외에도 Python Django/Flask 등의 시스템을 구축하는 경우도 최근 들어서 늘어나고 있고요. 물론 이들 프레임워크만 있는 것은 당연히 아닙니다. PHP 언어 기반 Laravel 이라던가 기타 등등..(사실 Java/Python 외에는 잘 모릅니다)

어찌되었든 위에서 밝혔듯이 어떤 언어를 사용하느냐에 따라 어떤 프레임워크를 사용하는 지 결정된다고 봐야 할텐데, 이 부분을 결정하는 것은 현재 개발자의 프로그래밍 지식도 중요하겠지만, 사실 프로그래머들은 어떤 언어를 사용하더라도 크게 적응하는데 문제가 없다고 볼 수 있기 때문에 구축하려는 시스템에서 유지보수를 가장 용이하게 할 수 있고 적합하다고 판단되는 언어로 선택하는 것이 맞을 것 같습니다.

또한 Front-end도 마찬가지겠지만, 개발 언어를 사용할 때에는 구현하고자 하는 기능에 대한 라이브러리 호환도 상당히 중요합니다. 예를 들어 인공지능(AI)로 된 시스템을 뭔가 구현하고자 할 때에는 Python 언어 기반이 더욱 적합할 수 있고, 그 외에는 Java 언어 기반의 시스템이 적합할 수도 있고. Database 연동, 보안 등등 여러 가지 고려사항을 거쳐서 선정을 하면 될 것으로 생각됩니다.

4. 마치며

생각보다는 별 내용은 없었습니다. 다만 간단한 체크리스트 정도로 글을 써 봤고요. 고려해야 할 사항을 요약하면 아래 정도로 표현 가능합니다.

  • 어떤 시스템을 구축할 것이고, 거기에 가장 적합한 언어 및 프레임워크는 무엇인가?
  • Front-end / Back-end에서 사용할 템플릿 및 프레임워크는 무엇이 될 것인가?
  • 라이브러리, 보안, DB 연동 등 다양한 측면 고려
  • 개발하고자 하는 코드의 구조에 맞는 디자인 패턴 및 모델은 무엇을 사용할 것인가.

이상 글 마치겠습니다.