공부하면서 애매하게 알고있던 개념이나 용어를 정리할 것이다.
환경변수(environment variable)
우리가 띄우는 프로세스들은 크게보면 os라는 프로그램에 의해 실행되는 자식 프로세스들이다. 여기서 환경변수는 os 입장에서 해당 프로세스를 실행시키기 위해 참조하는 변수라고 보면 된다.
통합개발환경(IDE=Integrated Development Environment)
소프트웨어 개발에 관련된 모든 작업, 즉 패키지 인클루딩, 문서 편집, 컴파일, 디버그, 원격 서버 액세스, 바이너리 배포 등을 하나의 프로그램 안에서 모두 처리하는 환경을 제공하는 툴을 말한다. 대표적으로 Visual Studio, Visual Studio Code, IntelliJ IDEA, Android Studio, PyCharm 등등이 있다.
코드스니펫(code snippet = 코드조각)
재사용 가능한 소스코드나 텍스트의 작은 부분을 일컫는 프로그래밍 용어다. 쉽게말해 자동완성기능이다. 필자의 다른 포스팅에 있는 sout -> System.out.println()같이 sout같은 것을 말한다.
인코딩(Encoding)
어떤 값을 다른 값으로 변환하는 작업을 말한다. (코드화, 암호화)
ASCII 코드
문자를 사용하는 대부분의 장치에서 사용하는 미국정보교환표준부호이다. 7비트로 구성되어있고, 총 128개의 문자로 구성되어있다.(출력 불가능한 제어문자 33개, 출력 가능한 문자 95개) 출력 가능한 문자들은 52개의 영문 알파벳 대소문자와 10개의 숫자, 32개의 특수문자, 1개의 공백 문자로 이루어진다.
숫자는 48~57, 알파벳 대문자는 65~90, 소문자는 97~122이다. (알파벳 26개)
프레임워크(Framework)
떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조며, 소프트웨어 발에 있어 하나의 뼈대 역할을 한다. 라이브러리와의 차이점은 명확하지 않다.(해외에서도 갑론을박을 펼치는 듯)
프레임워크는 여러 기능을 가진 클래스와 라이브러리가 어떠한 결과물을 구현하고자 합쳐진 형태라고 볼 수 있다. 재사용 가능한 수많은 클래스들과 라이브러리들을 융합한 채로 처음부터 제공해 주기 때문에, 여러 개의 표준을 만들지 않아도 돼서 개발자의 피곤함을 덜어준다.(프레임워크가 좀더 큰 개념인가..?)
예를 들어, 웹 프레임워크(Spring)는 웹 서버를 구현하기 위해 만들어진 프레임워크로 페이지 구현, DB 관리, 유저 인증, API 서버, 라우팅, 사이트맵, 세션 관리 등 여러 기능이 들어있어야할 것이다. 각 기능을 보유한 라이브러리들을 한데 묶어 담은 것이 바로 프레임워크라고 보면 된다.
만든사람이 라이브러리라고 하면 라이브러리이고 프레임워크라고 하면 프레임워크로 불리는 듯 하다.
라이브러리는 내 코드가 라이브러리를 호출해서 사용하고, 프레임워크는 프레임워크가 내 코드를 사용하도록 한다.
프레임워크는 내 코드를 어떻게 호출하는지만 알아도 사용할 수 있다.
라이브러리(Library)
소프트웨어의 구성요소 중 한가지로, API를 기반으로 대상 환경(플랫폼)에서 바로 실행될 수 있도록 모듈화된 프로그램 모음이다. 많은 라이브러리가 있으며, 이를 잘 활용하여 개발에 필요한 시간과 노력을 줄일 수 있다.
Windows에서 자주 볼수 있는 런타임 라이브러리의 확장자는 보통 .dll이다. Java의 경우 .jar 형태로 배포되는 경우도 있다.
라이브러리 사용시 라이선스가 사용 가능한 것인지 검토해봐야 한다.
대표적인 라이브러리로 OpenGL, STL, DirectX, OpenCV, Numpy, Pandas, jQuery, React 등등이 있다.
API(Application Programming Interface)
프로그램을 작성하기 위한 일련의 부(Sub) 프로그램, 프로토콜 등을 정의하여 상호 작용을 하기 위한 인터페이스 사양을 말한다. (이를 실제로 구현한 것은 라이브러리라 한다) 잘 설계된 API는 프로그램 개발을 쉽게 만들어준다. API는 여러 기업과 개발자들이 서로의 프로그램이 호환되도록 합의한 원칙이다. 즉, 소스 코드 수준에서 정의되는 인터페이스라고 할 수 있다.
기업에서 제공하는 API들은 대개의 경우 '기업의 서버와 개발자 본인의 프로그램 간의 상호 작용'을 위한 프로토콜을 의미하는 경우가 많다. 단, 웹에서 데이터를 전송하기 위한 목적으로 사용되는 'REST API'와는 다르며, 일반인은 물론이고 현직 개발자들도 서로 종종 혼동하기 때문에 주의가 필요한 듯 하다.
기업의 경우, 복잡한 프로그램일수록 개발자가 개발하는 프로그램은 그 프로그램 단독으로 돌아가는 경우가 많지 않으며 이미 개발되어있는 무수한 여러 애플리케이션들과 소통하는 경우가 대부분이므로 각 기업들은 개발자가 개발한 프로그램의 코드를 작동함에 있어 자체 애플리케이션과 실시간으로 상호작용할 내용이 있다면 이를 위해 '소통 창구'라 할 수 있는 자체 API를 만들어 배포하는 것이다. 서로 다른 프로그램끼리 통신을 하는 경우 보통 API를 이용해서 통신을 한다고 보면 된다. (프로그램 간의 연결 매개체, 중재자)
개발자는 배포된 API를 받고 이를 자신의 코드에 추가함으로써 원하는 기능을 구현할 수 있다. 말하자면 운용중인 애플리케이션에 적법한 절차를 걸쳐 허락을 맡고 구현물을 받아오거나 새로운 요소를 삽입, 수정할 수 있는 것이다. 여러 기업에서 자사의 API를 이용해서 개발하라고 유도하고 있다.
REST API(Representational State Transfer API)
REST는 보다 다양한 분야에 쓰일 수 있도록 '네트워크'와 '웹'에 맞춰진 API 통신 아키텍처이다. 즉, REST는 API를 활용함에 있어서 그 API가 가져야할 디자인 철학, 혹은 미덕, 알기쉽게 말하자면 필수요소라고 볼 수 있다. 이해가 쉽고 관리가 쉬운 API 작성하는 방법론이라고 보면 된다. (public, private, partner(미리 정해둔 놈만 쓰는 API)가 있다.)
이러한 REST를 잘 지키는 API를 RESTful API라고 한다.
여기서의 API는 위에서의 API와는 조금 의미가 다르다. REST API는 네트워크에서 웹 프로토콜을 통해 GET/POST 등의 형태로 필요한 인수를 전달받으면 거기에 맞는 결과값을 JSON, XML 형식인 '데이터'를 받아오기 위한 것이고 프로그램에서의 API는 '코드', 나아가 코드뭉치인 라이브러리를 받아오기(import하여 특정 함 사용) 위해 쓰는 것이다.
'전적 검색 사이트'나 '로그 조회 사이트'를 떠올리면 이해하기 쉽다. 그것들은 게임사가 제공하는 외부 API를 기반으로 돌아가는 사이트이다. 이와같이 상대적으로 웹이라는 접근성이 좋은 부분을 다루는 만큼 위 API보다 좀더 넓게 사용된다고 한다.
API 서버
API 서버는 규격화 되어 있는 서버라고 보면 된다. 대표적으로 데이터베이스를 대신해서 규칙들(로그인하기, 상품정보 보기, 결제하기 등)이 정의되어 있어요. 클라이언트는 데이터베이스가 아닌 API 서버와 통신해서 기능을 수행한다. 이 경우, 웹 <-> API서버(데이터 받아오고 가공해서 제) <-> 데이터베이스 형태로 진행된다고 생각하면 된다.
보통 고객용 API 서버와 관리자용 API 서버는 따로 개발한다고 한다.(다루는 데이터가 다르다고 함)
닷넷 프레임워크(.NET Framework)
마이크로소프트사에서 제공하는 윈도우 프로그램 개발 및 실행환경이다. 네트워크 작업, 인터페이스 등의 많은 작업을 캡슐화하여 코딩의 효율성을 증대시킨 것이다. .NET의 특징은 CLS(닷넷 프레임워크의 언어가 반드시 지켜야 하는 언어 스펙)을 따르는 언어라면 어떠한 언어라도 닷넷 프레임워크에서 실행 가능하며 CLR이라는 가상 기계 위에서 작동하기 때문에 플랫폼에 독립적이며 코딩(특히 윈도우 프로그램)을 하는데 더 편한 환경을 제공해준다.
윈도우는 마이크로소프트사에서 제작하였고 그렇기에 C#는 윈도우 프로그램개발에있어 최적의 효율을 자랑한다는 장점이 있다.
.NET Core - 윈도우 외의 운영체제가 닷넷을 사용할 수 있도록 하는 프로젝트이다. 라이선스는 MIT 라이선스 및 아파치 라이선스이다. .NET Standard를 통해 .NET Framework, Xamarin, Mono에 호환된다.
.NET Standard - .NET Framework와 .NET Core의 표준이다. .NET Standard 기반 라이브러리의 경우 모든 .NET 기반 프로젝트에서 사용할 수 있다는 장점이 있다.
Xamarin - C#과 .NET Framework를 리눅스에서도 쓸 수 있게 해주는 Mono 프로젝트에서 시작된 프레임워크이다.
데이터 무결성(Data Integrity)
데이터 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미한다. 여기서 정확성이란 중복이나 누락이 없는 상태를 뜻하고, 일관성은 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태를 뜻합니다.
만약 데이터베이스에서 데이터 무결성 설계를 하지 않는다면 테이블에 중복된 데이터 존재, 부모와 자식 데이터 간의 논리적 관계 깨짐, 잦은 에러와 재개발 비용 발생 등과 같은 문제가 발생할 것이다.
Deprecated
자바언어에서 자주 쓰이는 용어로 명령 혹은 문장이 나중에는 쓰이지 않게 될 것이라는 뜻이다. 쉽게 말해 다른 것으로 대체되었거나 될 수 있으니 주의해서 사용하라는 말이다.