-
객체 지향 프로그래밍(Object Oriented Programming)
컴파일러와 객체 지향 프로그래밍 객체(Object) 를 지향(Oriented) 하는 프로그래밍은 코딩을 작성할 때 사용할 수 있는 하나의 패러다임, 더 일반적으로는 하나의 글쓰기 장르라고 볼 수 있다. 잠시 객체 지향 프로그래밍을 접어두고, 코딩이 어떻게 동작하는지부터 생각해보자. 어떤 프로그래밍 언어를 쓰더라도 코드는 컴파일러를 거쳐서 수행된다. 사람이 작성한 코드를 기계어로 번역하는 작업이 필요한 것인데, 이때 코드는 위에서부터 아래로 한 줄씩 코드를 읽고, 번역하고, 내용을 수행한다. 화가가 그림을 그려서 파는 작업을 위의 문단의 내용만 갖고서 코드로 표현하면 다음과 같다. var 화가 지갑 = 0 va... Read More
-
포트와 인바운드, 아웃바운드 규칙
포트(port) 란? 네트워크에서 사용되는 port 는 불어 porte = 문(door)/관문(gateway) 에서 유래된 것으로 알려져있다. port 는 의미 그대로 문(door)이자, 논리적인 단위로서 IP를 통해 접속한 컴퓨터에서 어떤 곳으로 연결할지 구분시키는 역할을 한다. 다음은 클라이언트가 IP만 가지고 접속했을 때 모습으로, 컴퓨터는 클라이언트가 자신에게 접속했다는 것은 인지하지만 어떤 응답을 해줘야 하는지 모르는 상태이다. 다음은 클라이언트가 IP와 포트를 함께 사용해서 접속했을 때 모습으로, 컴퓨터는 클라이언트가 언급한 포트를 listen 해서 80번 포트에 해당하는 서버를 ... Read More
-
문과생이 적어보는 유클리드 호제법 (a.k.a GCD 알고리즘)
문과생이 적어보는 유클리드 호제법 (a.k.a GCD 알고리즘) 유클리드 호제법 == 나눗셈 알고리즘으로 최대 공약수 구하기 작성자 : 뉴원 (Newon) 유클리드 호제법이란 두 정수 a, bᅠᅠ|ᅠᅠ a 와 b 의 최대공약수 𝒹 ᅠᅠ|ᅠᅠ a / b 했을 때 나오는 나머지 𝛾 ᅠᅠ|ᅠᅠ 이 있을 때 𝒹 = gcd(a, b) = gcd(b, 𝛾) 가 성립함을 의미한다. 이때 gcd(a, b) 는 a 와 b 사이의 최대공약수를 뜻한다. 이때 𝒹 = gcd(a, b) = gcd(b, 𝛾) 를 확장해서 𝛾´이 b를 𝛾로 나누었을때의 나머지라고 한다면 𝒹 = gcd(a, b) = gcd(... Read More
-
문과생이 적어보는 백트래킹(재귀와 DFS 를 곁들인)
문과생이 적어보는 백트래킹(재귀와 DFS 를 곁들인) 들어가기에 앞서서, 해당 글은 기본적인 문법 (for, while, print, 입력받기, 배열)에 대해서 알고 있음을 전제로 합니다. 만약 기본적인 문법을 모르는 상태라면 반복문과 출력, 배열, 입력받기에 대해서 먼저 이해한 후 다시 찾아와주세요. :) 이 글은 백트래킹만 언급하는 것이 아니라 재귀함수부터 백트래킹까지 모든 내용을 차례대로 다룹니다. 그 과정에서 약간의 자료구조(Stack), 명령형 프로그래밍과 선언형 프로그래밍의 차이, DFS 를 재귀로 구현하는 이유 등에 대해서 언급합니다. 예제에서 C언어와 Kotlin 을 섞어서 사용하고 있... Read More
-
Certbot을 활용한 HTTPS 적용과 리다이렉트
목표 Ubuntu OS 기반 Nginx 웹 서버에 certbot 을 활용하여 https를 적용시킨다. http 접속을 https 로 리다이렉트한다. Certbot을 설치하기 전에 Certbot 을 설치하는 방법은 다양하지만, 현재 Let`s encrypt 1 의 공식입장은 snap 패키지2를 활용해서 설치하는 방법이다. 참고로 Shell 명령어인 certbot-auto 를 활용한 방법은 더 이상 지원하지 않고 있으며, 삭제를 권하고 있다. snap 패키지를 사용하므로 ubuntu 16.04 이상 버전이여야 한다. 혹여나 다른 OS와 다른 웹서버에서 설치하고 싶다면 여기를 통해 원... Read More