프레임워크와 프로그래밍 언어의 관계

최석우·2022년 2월 13일
0

웹 개발

목록 보기
2/3

시작하기 전에..

웹 개발을 시작하기 전에도 필자는 다양한 프로그래밍 언어를 접해왔었다. 고등학교때는 C/C++로 알고리즘 문제풀이를 했었으며 java로 객체지향에 대한 내용을 간략하게 배웠었다. 대학교에 진학하고서도 java로 자료구조에 대한 개념을 정리하였고 matlab, r과 같은 통계를 위한 언어들도 간단하게 사용해본 적이 있었다. (사실 대학교에서는 다양한 프로그래밍 언어로 코딩하는 방법을 가르치기보다는 좀 더 원론적인 접근을 선호한다; 이를테면 컴퓨터의 구조, 전기전자회로, 논리설계)

내가 배워온 내용들에서는 도저히 웹 개발 혹은 앱 개발이 어떻게 이루어지는지 이해를 할 수 없었다. 매번 #include 혹은 public static void main 이런 것들만 치면서 콘솔창에만 내용들을 띄웠는데 대체 그것들로 웹사이트를 어떻게 만들어냈을까?

프레임워크란?

사실 내가 매번 띄우던 #include, 혹은 main 어쩌고 하는 함수들로도 충분히 웹 개발은 구현이 가능하다. 아니, 사실 가능한 정도가 아니라 그것들로 이미 만들어져 있다. 극단적으로는 만약 우리가 Jeff Dean과 같은 천재라면 주말동안 커피를 홀짝이며 C언어로 간단한 웹 개발들을 하고 있었을 수 있다. 하지만 우리는 그와 같은 천재가 아니기 때문에 프레임워크의 도움이 필요한 것이다.

In computer programming, a software framework is an abstraction in which software, providing generic functionality, can be selectively changed by additional user-written code, thus providing application-specific software. It provides a standard way to build and deploy applications and is a universal, reusable software environment that provides particular functionality as part of a larger software platform to facilitate the development of software applications, products and solutions. Software frameworks may include support programs, compilers, code libraries, toolsets, and application programming interfaces (APIs) that bring together all the different components to enable development of a project or system. - wikipedia/software framework

위키피디아에 정의된 소프트웨어 프레임워크는 위와 같다. 프레임워크는 하나의 일반화되고 추상화 된 코드의 집합이다. 웹 프레임워크로 살펴보면, 많은 웹 개발자들은 다들 자신만의 웹 사이트를 제작하고자 할 것이지만 그것에 필요한 요청과 응답에 대한 내용, 혹은 데이터베이스에 접근하는 방식 등 공통적으로 활용되는 함수가 너무도 많이 포함되어 있다. 따라서 프레임워크가 이러한 것들을 일반화하여 주고, 사용자들은 자신이 선택적으로 코드를 작성하여 특정 기능을 하는 소프트웨어를 만들 수 있게 되는 것이다.

[출처: https://dev.to/mahipalnehra7/top-frameworks-for-web-development-2020-5c9o]

프레임워크를 디자인하는 개발자의 목표는 작업하려는 환경에서 필요로 하는 표준적인 로우레벨 세부 사항을 미리 구현해두어 개발자들이 개발의 더 세부적인 내용에 집중할 수 있도록 하는 것이다.

우리가 자동차를 운전할 때 엔진의 물리적인 작동 원리를 모르더라도 시동을 걸고, 악셀을 밟으면 차가 움직인다. 만약 모든 사용자들이 자동차를 타고 밖을 다니기 위해서 자동차를 처음부터 만든다고 생각해보면 사용자들은 도로 수칙을 이해하고 지도를 읽으며 목적지로 가는 행동에 집중하기보다는 당장 굴러갈 엔진과 바퀴가 잘 연결되는지 끙끙 앓을 것이다. 이처럼 우리는 프레임워크의 작동 방식과 제어 흐름을 이해한다면 해당 프레임워크의 세부적인 내용을 잘 모르더라도 훨씬 쉽게 우리의 목적지에 도달할 수 있게 된다.

웹 프레임워크는 http 요청을 파싱하여 응답하는 일련의 형식을 미리 구현해두었기 때문에 우리는 단지 그 툴에 익숙해지는 조금의 시간을 거치게 된다면 더 핵심이 되는 내용에 집중할 수 있게 된다. 비트코인의 가격을 예측하여 제공하는 홈페이지는 가격예측이 가장 핵심이 되는 개발요소이지, 부차적인 요청/응답 혹은 데이터베이스 처리 과정을 구현하는 것이 중요한 부분은 아니다. 다만 우리는 "코드의 생산성을 높이기 위해서" 프레임워크를 선택한 것임을 명심해야 한다. 프레임워크 자체가 개발의 완벽한 필수라고 생각할 필요는 없다. 어떤 곳에서는 자체적인 프레임워크를 선택할 수도 있을 것이다. 다만 커뮤니티가 형성되고 프레임워크의 개선과 버그 픽스가 (내가 굳이 관리하지 않더라도) 지속적으로 이루어지기 때문에 프레임워크의 사용이 개발에 훨씬 이득이 되는 것이다.

프레임워크와 프로그래밍 언어의 관계

둘의 관계는 복잡하지 않다. 프레임워크는 특정 프로그래밍 언어로 작성된 코드의 집합이다.

위의 코드는 python으로 작성된 웹 프레임워크인 django 코드의 일부분이다. 엄청나보이지만, 사실 파이썬으로 작성된 수많은 코드일 뿐이다. 물론 프레임워크 코드를 작성하는 것이 쉬운 일이라는 것은 절대 아니지만 프레임워크가 언어와 뭔가 엄청난, 특별한 관계를 가지고 있지는 않다는 것을 이야기하고 싶었다.

그렇다면 이런 생각이 들 수는 있다.

"라이브러리와 프레임워크의 차이점은 뭘까?"

사실 프레임워크도 "import django.urls" 처럼 라이브러리를 사용하듯이 사용하면 된다. 미리 작성된 코드를 사용한다는 점도 동일하다. 다만 가장 큰 차이점이라고 하면, 프레임워크는 코드를 작성하는 일련의 과정이 "내맘대로"가 아닌 약간의 규칙이 존재한다는 것이다. 파이썬의 프레임워크 장고의 경우로 예를 들어보면,

pip install django #django 설치
django-admin startproject helloworld #django 프레임워크를 사용하는 파일구조 생성

위의 코드를 실행시켜 장고를 사용하는 프로젝트를 생성해야 한다. (장고의 규칙)

helloworld/
    manage.py
    helloworld/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

실행 후에는 다음과 같은 폴더 구조를 가지게 된다. 그 후, manage.py 파일을 커멘드라인을 통해 실행시킨다. (장고의 규칙)

django manage.py runserver

위의 간단한 과정처럼 프레임워크에는 그것 나름의 규칙들이 존재한다. 특정 프레임워크를 사용하여 개발을 하려고 한다면, 그 개발자는 프레임워크의 규칙들을 지켜가면서 코딩을 하게 된다.

글을 마치며

코딩은 많이 해봤었지만, 프레임워크라는 것을 접해본 적은 없었기 때문에 개발을 시작하기 전에는 막연한 두려움에 쌓여있었다. 하지만 한번 경험한 이후로는 생각보다 별 것 없다는 느낌을 많이 받았다. 세간에 많이 뿌려진 코딩 부트캠프를 통해 개발자로 만들어주겠다는 여러 광고 글들을 보면 다들 java-spring으로 백엔드 프로젝트해보기, 혹은 javascript-react로 프론트엔드 개발자 되기 등 어려운 용어들로 잘 모르는 사람들을 현혹한다는 느낌을 많이 받았다. 사실 개발은 본질적으로 프레임워크에 종속적이면 안된다. 더 나아가서는, 프로그래밍 언어에 종속되어서도 안된다고 생각한다. 우리가 만들고자 하는 것에 가장 편리하고 쉬운 언어를 선택하고, 그 언어로 개발하기 위해서 필요한 프레임워크를 익히고 만져보는 것이 올바른 수순이다.

나와 함께 개발을 하기로 한 친구들과 회의할 당시에 나는 python을 거의 해본 적 없는 상태였다. 하지만 python의 매우 직관적인 코드 구조와 django라는 프레임워크에 매력을 느껴 시작하기로 마음 먹었으며, django에서 제공하는 프론트 툴을 사용할 수 있었지만 우리는 해당 프레임워크를 api의 형태로 사용하기로 정하고, 프론트엔드는 더 다이나믹한 것을 그릴 수 있는 react를 선택하였다. 이 프로젝트가 끝나고 다음이 있다고 한다면, 그때에도 django를 하리라는 보장은 없을 것이다. 그때 그 프로젝트에 더 어울리는 프레임워크가 있다고 하면 그것을 골라 사용할 것이다.

너무 세간에 있는 많은 프레임워크를 시도해보려고 전전긍긍 하지 않아도 좋다. 아이폰을 쓰는 사람은 안드로이드 핸드폰의 뒤로가기 기능은 몰라도 된다. 안드로이드 폰 쓰는 사람은 아이폰이 뒤로가기 키가 전혀 구현되어있지 않다는 사실을 몰라도 된다. 어차피 핸드폰은 전화기능을 제공하고 유투브, 카카오톡 다 사용할 수 있다. 그냥 조금 익숙해지기만 하면 되지 않는가? django, spring, ruby on rails, vue, angular 다 똑같은 것들을 구현했으며 비슷비슷한 기능들을 가지고 있다. 다만 그것들을 구현한 언어가 다르고 지향하는 방식이 다를 수 있다. 그 프레임워크를 선택했다면 공부는 필연적인 것이리라. 오히려 프레임워크와 언어를 초월하여 개발자로서 갖출 수 있는 특별한 능력들을 고민해보는 것이 아마 자신의 가치를 크게 올리는 행동이지 않을까 생각한다.

profile
SNU computer science & engineering

0개의 댓글