알고리즘이란 입력(input)받은 자료를 출력(output)형태로 만드는 "처리과정"을 의미하며 입력값으로 출력값을 얻기위한 어떤 명령들이 수행되어야 하는지에 대한 "규칙들의 순서적 나열"을 말한다.
알고리즘 평가
알고리즘을 평가할때는 정확성이 제일 중요하지만 이와 함께 효율성에 대한 평가도 중요시한다. 같은 입력값으로 같은 출력값을 내는 두 알고리즘을 비교하여 보다 적은 노력과 시간을 들이는 것이 중요하기 때문이다.
1000장의 전화번호부 사이에서 Mike Smith를 찾아보자.
한장 한장 살펴보는 알고리즘
이름 순이라는 규칙에 따라 Mike Smith가 앞부분에 위치한지 뒷부분에 위치한지 인지하며 전화번호부의 반절을 버리고 이 2번 행동을 반복하는 알고리즘
1번이 Mike Smith를 찾기위해 페이지를 넘기는 행동을 500번 넘게 하고 있을때 2번은 1000 페이지 중 Smith가 없는 500페이지 버리기 > 나머지 500페이지 안에서 Smith가 없는 250페이지 버리기 > ... 이 행동을 반복하다 단 10번째에 Mike Smith씨를 찾아내버린다.
두가지를 비교해보면 둘다 언젠가 Mike Smith씨를 찾겠지만 들이는 노력과 시간이 차이가 완전히 다르다는 걸 알 수 있다. 그럼 당연히 선택되는 알고리즘은 2번인 것이다.
의사코드
알고리즘을 표현하는 방식 중 의사코드에 대해 알아보자.
의사코드는 작동의 논리를 프로그래밍 언어가 아닌 사람의 일반적인 언어를 사용해 코드를 흉내내어 알고리즘을 표현하는 방식으로 이를 통해 필요한 행동이나 조건을 잘 설정하여 컴퓨터가 수행해야 하는 일을 절차적으로 파악할 수 있게 해준다.
Mike Smith를 찾는 알고리즘을 다음과 같이 의사코드로 표현할 수 있다.
1 전화번호부를 든다
2 전화번호부를 가운데를 편다
3 페이지에서 Mike Smith를 찾는다
4 만약 Smith가 이 페이지에 있다면
5 Mike를 찾아 전화한다
6 그렇지 않고 만약 Smith가 앞 페이지에 있다면
7 앞 페이지의 가운데를 편다
8 3번 줄로 가서 다시 실행한다
9 그렇지 않고 만약 Smith가 뒷 페이지에 있다면
10 뒷 페이지의 가운데를 편다
11 3번 줄로 가서 다시 실행한다
12 그렇지 않다면
13 그만둔다
이 의사코드를 기능에 따라 나누면
함수(Function)
빨간색으로 강조된 부분을 함수(Functions)라 한다. 여기서는 사람이 해야할 동작을 알려주는 동사지만 컴퓨터 입장에서도 해야할 동작을 알려주는 것 또한 함수라고 합니다.
콘솔. 로컬 장치(호스트)에 붙어있어 직접 명령어를 작성할 수 있는 입출력 장치. 물리적 터미널로 볼 수 있다.
D
용어
뜻
링크
DSL
Domain Specific Language : 도메인 특화 언어 특정 영역을 타켓팅하고 있는 언어 즉, 특정 영역에 최적화된 프로그래밍 언어 Java 등의 언어는 특정 영역이 아니라 다양한 영역이 가능하기에 DSL에 해당되지 않는다 ( ex) DB에 데이터를 참조하기 위한 목적으로 사용되는 SQL ) ( groovy DSL , Kotlin DSL (일반 Kotlin이랑 다른듯 하다)
Domain
소프트웨어로 해결하고자하는 문제 영역
온라인서점 사이트에서 책을 조회하고 구매한다고 가정하자. 개발자 입장에서 온라인서점은 구현해야할 소프트웨어의 대상이 된다. 온라인서점 소프트웨어는 상품의 조회, 구매, 결제등의 기능을 제공해야한다. 이때 온라인 서점은 소프트웨어로 해결하고자하는 문제 영역, 즉 도메인(domain)에 해당된다. 한 도메인은 다시 하위 도메인으로 나눌 수 있다. 예를 들어 '온라인 서점' 도메인은 다시 주문, 결제, 배송같은 하위 도메인을 가진다.
프로그램의 기본 구조(뼈대) 의미. 원하는 기능 구현에만 집중하여 빠르게 개발할 수 있도록 기본적으로 필요한 기능이 모여져 있는 것. 라이브러리와 비교했을때 사용자가 제어를 해야하는 라이브러리와 달리 프레임워크는 프레임 워크 자체가 흐름을 제어하여 사용자는 프레임워크가 원하는 방식으로 이를 이용해야한다는 차이점이 있다.
문자 포맷팅 방법 중 하나로 f"" (에프 큰따옴표2개(또는 작은따옴표2새) 사이의 문자열) 방식으로 사용 문자열 사이에 변수를 사용할 수 있도록 하는 문법 파이썬만 가지고 있는 기능인 듯 하다.
G
용어
뜻
링크
H
용어
뜻
링크
Host
네트워크에 연결된 모든 종류의 장치를 노드(Node)라고 부르는데, 노드 중에서도 네트워크 주소(IP 주소)가 할당된 애들을 호스트(Host)라고 부른다.
I
용어
뜻
링크
IDE
Integrated Development Environment : 통합 개발 환경 프로그램 개발을 위한 작업들을 하나의 프로그램 안에서 처리할 수 있는 환경을 만들어 제공하는 소프트웨어
Impl
Implements의 약자로 인터페이스를 의미하지만 이 단어가 접미사로 붙어 있는 경우는 그 인터페이스의 구현 클래스라는 의미
IMAP
Internet Messaging Access Protocol
J
용어
뜻
링크
JDK
Java Developer Kit. 자바를 이용한 개발을 할때 필요한 여러 도구들을 모아서 제공하는 개발자용 자바 ( Oracle JDK, Open JDK, Open JDK 구현체들 ( zulu, Adpot, Corretto 등 종류가 많다)
K
용어
뜻
링크
Kernel
커널. 단어 뜻 자체는 알맹이, 핵심이라는 뜻으로 운영체제의 핵심부로 컴퓨터 자원들을 관리하는 역할로 직접적으로 사용자와 상호작용을 하지 않는다. 사용자와 상호작용을 위해서는 쉘이 필요하다.
L
용어
뜻
링크
Library
라이브러리. 프로그래밍에서 필요한 기능들을 모아 묶어놓은 코드 묶음. 활용가능한 단순 도구들의 집합.
M
용어
뜻
링크
mimetype
Multipurpose Internet Mail Extensions의 약자. 간단히 말하면 파일 변환을 의미한다. 이 단어가 생길 당시엔 이메일과 함께 보내는 파일을 텍스트 문자로 변환하여 전달하기 위해 만들어졌기 때문에 Mail이란 단어가 들어갔지만 지금은 웹을 통해 여러 형태의 파일을 전달하는데 사용되어 지고 있다.
N
용어
뜻
링크
NoSQL
Not Only SQL. 관계형 데이터베이스를 사용하지 않는다는 뜻이 아니라 오직 관계형만 사용하는 SQL과는 달리 다양한 유형의 데이터베이스를 사용하는 것을 의미한다.
O
용어
뜻
링크
OS
Operating System / 운영체제 PC에 설치되어 하드웨어를 제어하고 소프트웨어를 위한 시스템 환경을 제공하는 시스템 소프트웨어 ( Windows, Mac OS, Linux, Unix 등이 있다)
P
용어
뜻
링크
Prompt
프롬프트. 사용자의 명령을 받아들일 준비가 되었음을 모니터에 나타내는 표시를 의미한다. 보통은 $, %, # 등으로 표시
PR
Pull Request Git hub에서 자신의 작업 내역을 바로 merge하지 않고, 프로젝트에 내 작업내역을 merge해달라고 요청하는 것
Port
네트워크를 통해 데이터를 주고받는 프로세스를 식별하기 위해 호스트 내부적으로 프로세스가 할당받는 고유한 값. 기본적으로는 같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수 없다. 그러나 같은 프로세스가 같은 포트를 가지고 여러 개의 소켓을 열 수 있다.
Q
용어
뜻
링크
R
용어
뜻
링크
repo
repository : Git 저장소
RDS
S
용어
뜻
링크
src
source의 약자
SQL
Structured Query Language. 구조적 쿼리 언어 관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어
Shell
쉘 혹은 셀. 운영체제의 커널과 사용자 사이 다리 역할로 명령어 해석기(CLI, Command Line Interpreter). 터미널 안에서 사용자로부터 명령을 받으면 그 명령을 해석하고 프로그램을 실행해 주는 프로그램
SSE
Server Sent Event 약자. 일반적으로 이벤트가 클라이언트에서 서버로 흐르는 것과 달리 서버에서 클라이언트로 푸쉬되는 기술을 말하며 서버의 데이터를 실시간으로 Streaming하는 기술이다. 쉽게 말하자면 서버에서 데이터가 변하면 클라이언트 요청없이 클라이언트로 보내는 기술.
양방향인 Websocket과 달리 한방향으로 데이터를 준다.
Socket
소켓. 프로세스가 네트워크를 통해서 데이터를 받기 위한 실제적인 창구 역할을 한다. 그러므로 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써보내거나 소켓으로부터 데이터를 읽어들여야 한다. 소켓을 열기 위해선 호스트에 할당된 IP 주소, 포트 넘버, 프로토콜(Protocol) 등이 필요하며, 이 세 가지가 소켓을 정의한다.
S3
SMTP
Simple Mail Transfer Protocol
SSL
T
용어
뜻
링크
Terminal
터미널. 로컬 뿐만 아니라 원격 접속이 가능한 콘솔이 터미널이다. 쉘을 실행하기 위한 포장 프로그램으로 윈도우의 cmd, 맥의 terminal 등에 해당
TLS
U
용어
뜻
링크
URI
Uniform Resource Identifier : 통합 자원 식별자 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스
URL
Uniform Resource Locator: 흔히 웹 주소을 일컫는다. URL도 URI의 하위 개념 중 하나로 네트워크 상에서 자원이 어디에 위치해 있는지 알려주기 위한 규약이다.