-
개발 용어를 모르는 개발자개발/개발용어 2016. 8. 22. 11:04
※ 본 포스팅은, 주변에서 쓰이는 개발용어들을 저의 주관적인 입장에서 작성한 포스팅입니다. 그렇기 때문에 용어는 조잡하더라도 풀어 쓰고자 합니다. 편협하거나, 틀린 내용이 있거나, 추가해주셨으면 하는 내용이 있다면 지적해주시면 감사하겠습니다.
- 온프레미스(on-premise)
간단하게는 '클라우드나 SaaS의 반대되는 개념' 이라고 설명할 수도 있겠지만, 최대한 사전지식이 없는 개발자도 이해하게 적어본다면(이후 모든 내용은 이런식으로 작성할 예정) 어떠한 소프트웨어가 구동될 때, 서버에서 구동되는 것이 아니라, 클라이언트에서 구동되는 방식. 즉, 소프트웨어를 원격으로 제어하는 방식이 아니라는 것이다. 클라이언트 자체에서 어떠한 내용이 구동되는 방식을 온프레미스라고 부른다. 반대개념으로는 오프프레미스(Off-premise)가 있습니다. on-premise를 그대로 직역하면 '전제 하에' 라는 뜻이 되는데, 개인적으로는 '클라이언트 측에 어떠한 소프트웨어가 설치되어야 한다는 기준 하에' 라는 의미라고 생각합니다. 사족이니 잊어주셔도 됩니다.
- 오프프레미스(Off-premise)
온프레미스(on-premise)의 반대개념으로 SaaS나 클라우드 컴퓨팅과 같은 것을 이릅니다. 즉, 네트워크로(즉, 랜선으로) 연결된 서버와 클라이언트가 있을 때, 구동되는 소프트웨어를 클라이언트가 아닌 서버에서 돌아가도록 하는 방식을 말합니다. 예를 들어 메일 서비스 같은 것은 특별히 우리가 무언가를 설치하지 않더라도 이용할 수 있습니다. 이러한 것처럼 특별히 클라이언트 쯕의 소프트웨어 설치 없이도, 서버에서 구동되는 소프트웨어로 작동 가능한 방식을 오프프레미스(off-premise)라고 합니다.
- gcc(GNU Compiler Collection)
gcc는 약자 그대로 GNU 프로젝트의 일환으로 만들어진, 컴파일러(좁은 의미로 프로그래밍 언어를 좀 더 하위의 기계어로 변경해주는 툴)들을 모아놓은 집합을 말합니다. 리처드 스톨만에 의해 만들어진 gcc는 원래는 C만을 위한 컴파일러였기 때문에 GNU C Compiler 로 불렸지만, 현재는 여러가지 언어들(Java를 비롯한 많은 언어들)의 컴파일러도 추가되었기 때문에 이렇게 해석됩니다.
- 쉘, 셸(Shell)
흔히들 쉘이라고 말하는 이것은, 하드웨어 - 커널 - OS 순으로 구조가 이루어져있을 때, 커널과 OS를 이어주는 인터페이스 역할을 해주는 프로그램이라고 보시면 될 것 같습니다. 그리고 이러한 작동을 위해 코딩된 텍스트를 보고, 쉘 스크립트라고 부르곤 합니다. 일반적으로 그래픽 형과 명령줄 형의 쉘로 나뉘는데, 일반적으로 우리가 윈도우즈에서 마우스를 통해 파일을 옮기거나 하는 행동들을 작업해주는 프로그램이 쉘이며, 이를 우분투와 같은 OS에서 진행할때는 이러한 작업을 커맨드 라인으로 입력이 가능하기도 한데 이 역시 쉘에 의해 작동됩니다. 커맨드 라인으로 입력할 경우가 바로 명령줄 형의 쉘입니다. 간단하게 생각하면, 직접적으로 운영체제의 기능을 작동시키는 것을 말합니다. 이 두가지 인터페이스를 GUI(Graphic User Interface)와 CLI(Command Line Interface)라고 부릅니다. 쉘의 종류는 유닉스가 제공하는 sh나 C 언어와 유사한 문법을 지닌 스크립트 언어로 작성된 csh 등 여러 종류가 있습니다.
- 아파치 스파크, 스팍(Apache Spark)
스파크는 오픈소스 플랫폼으로, 사실 한마디 말로 딱 정의하기는 어렵습니다.(너무 여러가지 툴들을 붙여놓은 것이라) 제가 이해한 것도 불완전한 것이라 설명을 드리기는 조금 어렵지만, 부족하나마 제가 이해한 것을 토대로 설명드리자면, 하둡과 같은 분산형 클러스터(컴퓨터 여러 대 붙여놓고 한 대처럼 사용하는 것) 플랫폼의 경우, 디스크 기반으로 수차례 조회하여 데이터를 관리하기 때문에, 속도가 매우 느립니다. 그리고 이를 시각적으로 보여주기 위해서는 또 다른 툴들이 많이 필요하죠. 그리고 이러한 문제들을 해결하고자 나온것이 스파크입니다. 스파크는 이러한 사용자들의 불편을 없애기 위해, 중간 과정을 모두 제거하고, 시각화 툴을 제공하며, 디스크 기반으로 조회하는 과정을 줄이고 메모리 위에 데이터를 올려놓고 작업을 진행하기 때문에, 실시간 데이터와 같은 부분을 처리할 경우에, 하둡과 다른 플랫폼들을 결합하는 경우보다 매우 빠르게 진행할 수 있습니다. 하둡 없이 단독으로 돌릴 수도 있지만, 기본적으로 하둡에 맞게 만들어진 측면이 없잖아 있기 때문에, 둘이 가장 궁합이 잘 맞다고 합니다. 사실 맵리듀스라던가 여러가지 중요한 요소들이 있지만, 이러한 부분에 대한 설명은 전체적인 이해를 어렵게 할 것 같아서 빼두었습니다.
- (유닉스/리눅스에서의) 데몬(Daemon)
여기서 말하는 데몬은 Demon이 아니라 Daemon으로, 수호신이라는 뜻이라고 합니다. 리눅스와 같은 운영체제에서는 백그라운드에서 돌아가는 프로그램을 말합니다. 쉽게말해 항상 프로그램의 뒤에서 무언가를 수행하고 있는 네트워크 프로그램이라고도 할 수 있을 것 같습니다. 그러니 리눅스 상에서 데몬으로 돌려야 한다라는 말은 곧, 백그라운드에서 프로그램된 코드가 상시 수행되도록 만드는 것을 말합니다.
- 컬(curl)
리눅스 개발을 하면서 처음 접해보았습니다. 다들 '컬'이라고만 부르지 그것이 무엇인지 사실 감도 잘 잡지 못했습니다. curl에 대해서 조금 찾아보니, 컬이라기보다는 'C + URL' 라는 말을 조합해서 만들어진 라이브러리의 이름이었습니다. 앞의 C는 C언어이고, 뒤의 URL은 우리가 익숙하게 아는 그 URL입니다. 물론 자세히 말한다면 단순히 라이브러리라고 할 수는 없을지 모르겠지만, 처음 접하는 사람에게는 그 정도의 이해라면 충분하다고 생각합니다. 이름의 어원을 보면 아시겠지만, 컬은 데이터 전송을 위한 부분을 제공하는 라이브러리입니다. 더 자세히 들어가면 어떠한 프로토콜을 제공하며, 어떠한 기능들을 가지고 있는지 하는 것들까지 시시콜콜한 이야기까지 따지고 들어야하지만, 여기서는 기본적인 용어의 이해를 돕기 위함이므로 이 정도의 설명만 하도록 하겠습니다.
- 크로스 컴파일(Cross Compile)
크로스 컴파일이라는 말만 들어서는 개인적으로 이해하기가 어려웠습니다. 컴파일이면 컴파일이지, 크로스가 붙으니 도통 알 수가 없었습니다. 천천히 찾아보니 크로스 컴파일이란 쉽게 말해서, 당장 해당 PC나 디바이스가 아니라 다른 하드웨어(예를 들면 임베디드와 같은) 에 넣어서 사용할 수 있도록 컴파일 한다는 의미였습니다. 다시 말해서 자신이 개발한 PC가 아니라 다른 장치에서 사용할 파일 만드는 일이라는 것이죠.
- 스트럿츠(Struts)
현재는 자바 기반의 웹 서비스 개발시, 대부분 스프링 프레임워크를 사용하고 있지만, 이전에는 스트럿츠라는 프레임워크를 주로 썼다고 합니다. 특별히 더 설명하기 보다는 그냥 자바 기반 웹 서비스를 만들때 사용하는 프레임워크의 일종이라고 생각하시면 편합니다.
- 데디케이티드/셰어드(Dedicated / Shared)
여러가지 곳에서 사용될수 있는 단어겠지만, 네트워크 서비스의 개념에서 사용될때 이 두 단어의 뜻은 의미 그대로, "전담"과 "공유"를 의미합니다. 좀 더 쉽게 말해서 각각의 클라이언트 세션에 대해 하나의 전용 서버가 대응하는 경우는 데디케이티드라고 부를 수 있고, 반면에 여러개의 클라이언트 세션에 대해 적은 수의 서버가 대응하는 경우를 셰어드라고 부를 수 있습니다.
- 마일스톤(Milestone)
프로젝트를 진행할 경우 말하는 마일스톤은 간단하게 일정이라고 생각하시면 편할 것 같습니다. '마일스톤을 정하고 진행하자' 라는 식으로 말한다면 구체적인 일정을 확립하는 정도라고 생각하면 됩니다.
- EL (Expression Language)
스크립트 언어의 한 종류로, <% %> 로 표현되는 언어를 말합니다. EL은 Java의 문법을 따르기 스크립트의 동적인 작업을 하기 위해서 사용하는 경우가 많은 듯 합니다. jsp 상에서 Java 문법처럼 보이는 내용을 <% %> 로 묶어 사용하는 경우를 볼 수 있는데, 이를 EL이라고 부릅니다.
- 레거시(Legacy)
단순히 뜻만 보자면 유산이라는 뜻입니다. 그렇지만 레거시라는 용어를 개발자들 사이에서는 과거의 프로그램이라는 의미 정도로 쓰입니다. 그것이 프로그램이 아니라 아키텍쳐인 경우에도 마찬가지로 레거시라고 한 번에 묶어 부르곤 합니다. 사용하기 편한 말임에는 틀림없으나 헷갈릴 여지는 있는 것 같습니다. 사장된 소스 코드를 말하는 디프리케이티드(Deprecated)와도 다른 뉘앙스로 이해하시는 편이 나을 듯 합니다.
- 보일러 플레이트(Boiler Plate Code)
보일러 플레이트, 혹은 보일러 플레이트 코드라고 불리는 이 용어는 크게 어려운 말은 아니고, 재사용 가능한 소스를 말합니다. 보일러 플레이트처럼 단단하고 튼튼하여 여러번 사용할 수도 있을 정도라는 의미라고들 하는데, 이 부분에 대한 것 보다도 프로그래밍에서 이 용어를 사용할 경우, 주로 자주 반복되어서 별도로 관리하는 편이 좋은 코드를 말합니다.
- 바닐라 JS (Vanilla JS)
프레임워크나 라이브러리를 사용하지 않고 순수한 자바스크립트로만 구현한 것을 두고 바닐라 JS 라고 부릅니다.
- RC, GA, M (라이브러리 버전)
라이브러리를 가져다 사용하다보면 종종 RC 버전이나 GA 버전, M 버전이라는 말을 듣게 됩니다. 각각의 의미는 RC (Release Candidate), GA (General Availability), M (Milestone) 의 약자로, RC 는 릴리즈 버전은 아니지만 사용할수는 있고, 안정성을 보장할 수는 없는 일종의 베타 버전을 의미하고, GA 는 이름 그대로 정식 테스트가 종료되어 안정적으로 사용할 수 있는 버전을, M 은 테스트 버전으로 개발자들로부터의 피드백 용이라고 할 수 있습니다.