이번 포스팅에서는 리눅스 머신에 postfix설치 설정 및 letsencrypt를 사용한 SSL 설정을 하겠습니다.

postfix를 설치하고 설정까지 마치면 SMTP프로토콜(메일발송 프로토콜)을 이용할 수 있습니다.

앞으로의 작업은 모두 라즈베리파이에서 이루어 지는 작업입니다.

자 그럼 시작하도록 하겠습니다ㅋㅋ

제일 먼저 라즈베리파이에 로그인을 합니다,

apt install postfix

그 다음 위와 같은 명령어를 입력하여 postfix를 설치해 줍니다.

최초 설치시에 위와 같은 화면을 보게 되는데, System mail name:을 입력하는 곳에 메일을 보낼 도메인(저는 당연히 mast3r.com이겠죠?)를 입력해 줍니다.

dpkg-reconfigure postfix

설치가 완료된 이후에 위의 명령어로 postfix에 대한 설정을 다시 구성하도록 합시다.

dpkg-reconfigure postfix명령어를 입력 하게되면 3번째 옵션부터 설정해야합니다.

제일먼저 시스템관리자의 계정을 입력하는 옵션입니다.

저는 pi계정으로 시스템을 관리하기 때문에 pi를 입력하였습니다.

다음으로는 도착지 설정입니다. postfix가 최종 목적지로 사용할 도메인명을 적어주시면 됩니다.

저는 mast3r.com과 mail.mast3r.com을 최종 목적지로 추가 하였습니다.

나머지 위의 옵션 부분에서는 똑같이 따라하시면 됩니다.

postconf -e 'home_mailbox = Maildir/'

위의 명령어는 기본 홈 메일박스를 Maildir/로 설정하는 명령어입니다.

(기본적으로 mbox와 Maildir방식이 있는데 Maildir로 설정합니다. 간단하게 설명하면 사용자마다 다른 폴더를 생성한다)

이후 SMTP에서 SASL을 사용하기 위한 설정들입니다

(SASL은 Simple Authentication and Security Layer의 약자로 SMTP를 사용할 때 인증사용을 위한 설정이라고 간단하게 알아두면 될듯합니다.[틀리면 알려주세요!!])

다음은 master.cf에서의 주석해제입니다. 붉은 네모에 있는 줄들의 주석을 해제해줍니다.

다음은 SSL인증을 위한 Letsenctpt설치입니다! apache2와 letsencrypt를 설치합니다.

apache2는 letsencrypt에서 인증서를 발급할 때 인증을 위하여 필요하기 때문에 같이 설치 합니다.

두 패키지가 설치 된 이후에 인증을 위해서 systemctl stop apache2로 아파치를 중지시켜줘야 합니다

certbot certonly --agree-tos -email [email] -d [mail.[domail]]

위 명령어를 입력하고 나오는 옵션의 2번째 옵션을 선택하여 인증서를 발급받습니다.

성공적으로 발급받게 되면 위와같이 Congratultations!이라는 메세지가 나오게 됩니다.

다음은 인증서 자동 갱신 방법입니다.

crontab -e 

위 명령어로 root에 대한 crontab을 변경해주도록 합시다.

crontab의 맨 아래로 가서 위와같이 해당 줄을 추가해주도록 합시다.

간단하게 설명 하자면 매월 1일 01시 00분에 apache2를 종료시키고 03분에 인증서를 갱신시킨다라는 명령어 2줄입니다.

위는 생성된 인증서를 이용해서 SMTP를 설정하는 명령어들입니다.

모든 설정이 완료되었으면 systemctl restart postfix라는 명령어를 입력하여 postfix를 재시작하도록 합니다.

728x90

안녕하세요 여러분~ 이번에는 라즈베리파이와 도메인을 이용해서 나만의 메일버서를 구축해보려고 합니다.

 

구축전에 준비물은, 라즈베리파이,자신이 등록한 도메인,DDNS와 포트포워딩을 지원하는 공유기,입니다.

(저는 RPI3에 Raspbian, 도메인은 mast3r.com, 공유기는 IPtime A3004NS로 진행합니다)

생각보다 준비물이 많네요...;;;

 

포스팅은 총 4단계로 나누어서 진행하구요, 이 글애는 메일서버구축을 위한 사전준비를 포스팅 하려고 합니다.

최대한 쉽게 따라오실 수 있게 노력했으니 도움이 됐으면 좋겠습니다.!

 

자 이제, 시작해보겠습니다.

공유기에 라즈베리파이를 물리고 전원을 켜줍니다.

켜준 뒤 첫번째로 세팅할 곳은 공유기입니다.

제일 처음 공유기에 로그인을 해주시고(보통 192.168.0.1로 접속하시면 됩니다)

고급설정 -> 네트워크 관리 -> 내부 네트워크 설정에 들어갑니다.

들어가시면 현재 라즈베리파이가 잘 연결되어 있으며 할당되어 있는 IP는 192.168.0.6인걸 확인 할 수 있습니다.

 

다음으로는 포트포워딩 설정입니다.

고급 설정 -> NAT/라우터 관리 -> 포트포워드 설정에 들어갑니다.

안에 들어가시면 위 사진과같이 설정이 되어있어야 합니다.

설정 하는 방법은 간단한데 밑에 보이는 규칙이름에 임의의 이름을 넣고 내부 IP주소,

곧 아까 확인한 192.168.0.6를 입력하면 됩니다.

그리고 외부포트와 내부포트는 각각 사진의 있는 값을 따라서 적으시면 됩니다.

 

2번의 ssh2룰은 외부에서 내부로 도메인을 사용해 ssh로 접속할때 쓰기위한 룰입니다

3번룰은 2단계에서 Letsencrypt를 사용해서 인증서를 만들때 웹서버 인증이 필요하기 때문에 필요한 룰입니다.

4,5번룰은 SMTP에서 사용하는 포트를 포워딩 해주는 룰입니다.

6~9번까지의 룰은 IMAP/POP3에서 사용하는 포트들을 포워딩 해주는 룰입니다.

 

포워딩을 마친 뒤에 고급 설정 -> 특수기능 -> DDNS설정이라고 써진 메뉴를 들어갑니다.

이 페이지 붉은색으로 네모쳐진 곳에 두가지 값을 입력해야하는데, 호스트 이름은 DDNS의 이름을 입력하는 칸이고

사용자 ID는 사용하시는 이메일 주소를 넣으시면 됩니다.

호스트이름에 넣으시는 이름이 곧 외부에서 내부로 접속할때 사용되는 DDNS이름이 됩니다!

2칸을 모두 채워주시고 생성버튼을 누르면 위 사진과 같이 DDNS가 등록되게 됩니다.

이렇게 따라와 주셨으면 공유기 설정은 모두 마쳤습니다!

 


이제 도메인을 세팅할 차례입니다.

저는 hosting.kr에서 도메인을 구입했습니다. 

hosting.kr의 서브도메인 설정화면은 위 사진과 같으며, 총 3개의 서브도메인이 보이지만... 

www도메인은 제 웹서버 도메인이므로..생략해도 됩니다 ㅋㅋ

 

최상위 도메인(아무것도 없는 도메인)에는 A레코드로 아까 만든 DDNS에 대한 IP,

(cmd에서 ping [ddns 주소]하면 실제 IP를 확인할 수 있습니다.) 

mail서브도메인에서는 CNAME으로 아까 생성했던 DDNS 주소를 입력하고 적용합니다.

여기까지 오셨으면 도메인 세팅도 끝났습니다!.


이제 라즈베리파이를 세팅할 차례입니다.

저는 putty를 사용하여 제 rpi에 접속하였습니다. 접속시 실제 도메인을 사용하여 로그인하였습니다. Host Name에는 도메인이름을 Port에는 아까 공유기에서 포트포워딩해준 포트 60001번을 넣고 Open을 눌러 접속합니다.

그리고 pi/raspberry로 로그인을 합니다. (이 계정과 비번은 기본 세팅이니 꼮 변경해주시기 바랍니다!!!!변경필쑤!!)

로그인을 한 뒤 아래 명령어를 입력 해 루트계정으로 작업을 실행합니다(매번 sudo를 치기 귀찮기 때문이죠...후훗)

sudo su

참고로 현재 상태에서는 root계정에 대해 비밀번호가 걸려있지 않기 때문에 반드시 비밀번호를 설정해주시기 바랍니다!!! 제발요.. 꼭 해주세요...

root계정으로 접근한 뒤, 아래의 명령어를 입력하여 시스템을 최신버전으로 업데이트 해줍니다.

apt update; apt upgrade -y

이 단계는 옵션입니다. 저는 개인적으로 VIM을 선호하기때문에 라즈베리파이에 설치해 줍니다.

apt install vim 

 

다음으로는 host이름을 변경합니다.

vim /etc/hostname
#이 명령어로 hostname 파일을 열고

dd
#raspberrypi 를 지워줍니다

i
#입력모드로 전환합니다. 

mast3r.com
#자신의 도메인주소를 적어줍니다

esc
#esc버튼을 눌러 입력모드를 나갑니다

:wq
#위 명령을 입력하여 저장 후 닫습니다.

다음은 /etc/hosts파일을 변경해야합니다.

 

위에서 했던 것 처럼 값을 변경/입력해줍니다. 변경할 값은 127.0.1.1 을 도메인 이름으로 변경하고 새 줄에는 DDNS대한 IP주소를 삽입 후 도메인을 입력하면 됩니다! (제 IP는 가렸습니다. 소중하니까요..ㅋㅋ어차피 ping때리면 나오는데.. 왜가렸을까)

어쨋든! 이렇게 하시면 기본설정은 끝났습니다.

이제 실제 이메일에 사용될 계정을 만들어보도록 하겠습니다.

 

이렇게 간단할 수가....

useradd linux
usermod -G mail linux
usermod -s /usr/sbin/nologin linux
passwd linux

이 4문장만 입력하시면 나중에 실제로 사용될 이메일 계정이 만들어지는 겁니다.

vim /etc/passwd
vim /etc/group

계정을 만든 뒤에 위의 파일을 열어서 실제로 계정이 추가됐는지 확인할 수 있습니다.

 마지막으로

chown :mail /home
chmod 775 /home

 /home의 그룹을 mail로 변경하고 775권한을 주는 이유는 postfix에서 Maildir형식으로 메일 디렉토리를 구성할 것이기 때문입니다.(즉 이메일 계정이 생성될 때 마다 /home/[user]/Maildir이 생성됩니다)

모든 명령을 마친 이후에 

reboot

리부팅을 해주면 모든 사전준비가 끝나게 됩니다.

따라오시느라 고생하셨습니다! 두번째 글에서는 Postfix설치 및 설정, letsencrypt를 이용한 SSL/TLS 설정을 포스팅 하도록하겠습니다.

728x90

이번에 풀어볼 문제는 bWAPP의 A1-Injection Section의 제일 첫번째 문제인 HTML Injection -REflected(GET) 문제입니다!!

문제풀이를 위해 기본페이지에서 위 사진과 같이 로그인을 한다. (ID:bee PW:bug) 밑에 보이는 난이도는 기본으로 low로 설정되어 있으니 바꾸지 말고 로그인한다.

로그인 후에는 위와같이 어떤 취약점을 공략할지 리스트가 나오게 되는데, 제일 처음에 보이는 HTML Injection - REflected(GET)을 선택하고 밑의 HACK버튼을 클릭한다.

①에서 First name:에 hello, Last name:에 world를 입력하고 GO버튼을 누르면 아래에 Welcome hello world, 즉 사용자가 입력한 결과를 출력한다. ②를 확인해보면 사용자가 입력했던 값들이 URL로 넘어가는 것으로 GO를 누르면 HTTP GET방식으로 서버에 요청을 보낸다는 것을 확인 할 수 있다.

만약 GO 버튼이 사용자가 입력한 값을 모두 출력한다면, 입력칸에 HTML TAG를 사용한다면 어떻게 될까?

위 사진같이과 같이 현재 LOW레벨에서는 사용자 입력값에 대한 sanitizing이 적용되지 않아서 사용자가 입력한 값을 모두 그대로 출력하게 된다! 사용자 입력값이 완벽한 HTML TAG이기 때문에 출력되는 값은 HTML TAG가 적용된 TEXT가 나오게 된다!

우측 상단의 security level을 Medium으로 바꾸고 똑같이 LOW에서 했던 것 같이 HTML TAG를 입력해보면 이번에는 HTML TAG가 적용되지 않고 사용자 입력 String이 그대로 출력되게 된다.

왜 그런것일까...?

Medium 레벨에서는 입력 값에 대해서 HTML관련 Character가 있으면 해당 문자를 Escaping처리를 하는 함수가 있다는 것을 추측 할 수 있다.

예를들어 < 가 입력되면 sanitizing기능은 이 문자를 %3C로 변환 시킨다.

그렇다면 어떻게 해야 이 Sanitizing기능을 우회할 수 있을까?

에초에 Sanitizing에 걸리지 않는 문자들로 HTML TAG를 Encoding하게된다면? 예를들어 원래는 <를 입력해야하지만 %3C로 변환하여 입력한다면? %3C는 HTML Character가 포함되어있지 않기 때문에 escaping 되지 않은 채로 출력 되게 된다.

 위 사진은 Fiddler라는 툴을 이용하여 <h1>hello</h1>를 Encoding 한 사진이다. 위의 결과 값을 복사하여 First name칸에 복사를 하게되면 아래 사진과 같이 sanitizing을 우회하여 HTML TAG를 적용 시켰음을 확인할 수 있다.

 

728x90
The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?

해석

13195의 소수인 약수는 5, 7, 13과 29 이다

600851475143의 가장 큰 소수인 약수는 무엇인가

 

 

코드는 다음과 같다

public static void main(String[] args){
		long target = 600851475143L;
		long ans = find_P(target);
		System.out.println(ans);
	}
	
static int find_P(long target){
	long buf = target; 
	int ans=2;
	
	while(buf > ans){
	    if(buf % ans == 0){
	        buf = buf/ans;
	    }
	    else{
	        ans++;
	    }
	}
	return ans;
}

 

이 문제를 푸는데 핵심은 BruteForce 방법을 이용하지 않고 문제를 풀 수 있느냐를 물어보는 것 같다

(혹시나 BruteForce를 사용한다고 해도 설마 loop의 range를 주어진 수 전체로 두지는 않겠지...?

소수인 약수는 는 주어진 수의 0.5배를 넘을 수 없다! 

예를 들어 주어진 수가 10이라 하면 5이상의 소수는 절대 10의 약수가 될 수 없다는 것을 바로 알것이다)

 

1~5번째 줄은 main method를 돌리는 거라 크게 볼건 없고

 

7~20번째 줄까지 살펴 보면 된다 

 

8번째 줄에서 'target' parameter를 buf 로 복사하는 이유는 Call by value 형식으로 변수가 넘어오기 떄문이기도 하고

주어진 수를 소수인 약수로 계속하여 갱신하기 때문이다

 

9번째 줄의 'ans' 변수는 소수를 저장하는 변수이다 

 

11번째 줄에서는 buf가 ans보다 클 경우 안의 코드를 실행하는데,

ans는 계속 늘어나는 소수이고, buf는 ans로 나눠지지 않을 때까지 나눠지는 수이기 때문에

마지막에 최종 제일 큰 소수가 ans에 할당되면 while문을 탈출하게 된다. 

 

12번째줄의 if 문에서 만약 ans로 buf를 나눌수 있으면 buf를 나눈다

그렇지 않으면 15번째 줄 else문에서 ans를 증가시킨다

 

여기서 포인트는 어떠한 수이던 간에 소수인 약수는 단 한번밖에 나오지 않기 때문에 이런식으로 값을 구할 수 있다. 

예를들어 81이라는 숫자는 3의 4승인데, 3이 4번 곱해져서 그렇지 소수인 약수는 3밖에 없다,

 

위 코드는 일종의 제일 큰 수를 저장하는 기능이 있는 소인수 분해코드라고 보면 된다. 

728x90

'Programming > ProjectEuler' 카테고리의 다른 글

ProjectEuler 2  (0) 2021.01.04
ProjectEuler 1  (0) 2021.01.04

2번문제

Each new term in the Fibonacci sequence is generated by adding the previous two terms. 
By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

By considering the terms in the Fibonacci sequence whose values do not exceed four million, 
find the sum of the even-valued terms.

해석 : 

피보나치 수열의 다음 수열은 이전의 두 수열을 더한 합과 같다

1과 2로 시작하여 처음 10번째까지의 수열은 다음과 같다:

 

1, 2, 3, 5, 8, 13, 21, 34, 55, 89

 

4백만이 넘지 않는 피보나치 수열이 있다고 가정할때 

짝수인 피보나치의 수열을 합을 구하여라

 

코드는 아래와 같다 

     public static void main(String []args){
        int sum = 0;
		int f1 = 1;
		int f2 = 1;
		while(f1<4000000){
			f1 = f1 + f2;
			f2 = f1 - f2;
			if(f1%2==0){
				sum=sum+f1;
			}
		}
		System.out.print(sum);
     }

문제가 물어보는 것은 피보나치 수열을 짤 수 있느냐를 물어보는 것 같다. 

 

int buf =0;
int f1 = 1;
int f2 = 1;
	while(true){
		buf = f2;
		f2 = f1+f2;
		f1 = buf;
	}

 

1번째 줄은 임시 변수

2번째 줄의 f1은 피보나치 첫번째 수열인 1
3번째 줄의 f2는 피보나치 두번째 수열인 1이고

 

나머지는 일반적으로 간단하게 생각할 수 있는 변수를 3개를 사용하여 계속해서 피보나치 수열을 만들어가는 방법이다

(코드는 돌리지 마시길.. 무한 루프임ㅋㅋ)

 

하지만 조금 생각해보면 만들어질 새운 피보나치 수열은 현재 변수 2개로 만든다!

 

int f1 = 1;
int f2 = 1;
	while(true){
		f1 = f1 + f2;
		f2 = f1 - f2;
	}

위 코드를 잘 보면

 

4번째 줄에서 하는 작업은 피보나치의 다음 수열을 현재 두개의 변수로 생성한다

 

이게 핵심인데 피보나치 수열을 이항하면 F[n-1] = F[n] - F[n-2]와 같은 식이 나오는데

피보나치의 다음수열에서 이전전 수열을 빼면 이전 수열이 나온다는 소리이다. 

 

4번째줄에서 f1변수는 F[n]을 저장하였고 f2변수는 F[n-2]를 저장하고 있기 때문에 둘이 빼면 F[n-1]을 얻을 수 있다!!!

 

말로 설명하니까 햇갈릴수도 있는데, 직접 수를 대입해서 몇번만 해보면 이해갈것이다. 

 

 

문제 조건이 짝수인 피보나치인 수를 더하는 것이기 때문에 mod operation으로

홀수를 걸러주면서 더해주면 답이 나온다!

728x90

'Programming > ProjectEuler' 카테고리의 다른 글

ProjectEuler 3  (2) 2021.01.05
ProjectEuler 1  (0) 2021.01.04

이번 포스팅에서는 golang의 Hello world에 관해서 알아보겠습니다

 

package main // 1. Package Definition

import "fmt" // 2. Package import

func main() {// 3. Method definition
    fmt.Println("Hello, World.")
}

1. Package definition

  • 해당 소스파일이 속하는 package를 나타냅니다
    • main package는 독립적으로 실행할 프로그램으로 작성 시 package명을 main으로 설정합니다

2. Package import

  • fmt 라는 데이터의 I/O를 위한 함수들이 들어있는 패키지를 import 합니다
    • fmt package를 제외하고 표준 라이브러리에는 100개 이상의 패키지가 존재한다고 합니다
  • 패키지 사용시 문법은 import "[package name]" 으로 적습니다. 꺽쇠, 중괄호, 대괄호 다 필요 없구요! 따옴표 사이에 이름만 적어주시면 됩니다. (이 부분은 C에서 넘어오신 분이면 헷갈리실 것 같습니다 보통 import 하실 때 표준라이브러리가 아닌 파일을 import 할때 사용하는 방식이고 표준라이브러리를 import할 경우 꺽쇠를 사용하니까요 ㅎㅎ)

3. Method definition

  • 함수 선언에는 func 키워드를 붙여 함수를 선언 및 정의합니다. 
  • 여기서는 main package 에서 main함수를 선언 및 정의하여 독립적으로 구동가능하게끔 코딩되었습니다
  • 내용은 fmt package의 내부 method인 Println을 사용해 Hello, world. 를 출력하는 것 입니다. 

 

helloworld에서 문법 및 주의사항!

문장이 한줄에 두개이상 나오는 경우 외에는 문장끝에 세미콜론을 붙이지 않습니다.

func main() {
	
    // 두 문장이 한 줄에 있기 때문에 구분하기 위해 세미콜론을 붙였습니다. 
    // 두 번째 문장은 뒤에 더이상 내용이 없기 때문에 세미콜론을 붙히지 않습니다. 
    fmt.Println("Hello, 세계"); fmt.Println("Hello, World")
}

 

함수 여는 중괄호가 func 키워드와 같은 줄에 있지 않으면 Syntax Error 발생

// Syntax Error 발생! 중괄호( { ) 는 반드시 func키워드가 오는 줄에 위치해야 합니다 
func main() 
{
    fmt.Println("Hello, 세계")
}

// 옳은 예제
func main(){
   fmt.Println("Hello, 세계")
}

 

실행!

위의 hello world 예제 소스를 helloworld.go 파일로 저장해 준 뒤 , 해당 파일이 있는 곳에서 아래와 같은 명령어로 컴파일 해줍니다. 

 

go build helloworld.go

 

컴파일이 완료 되게 되면, 리눅스는 helloworld, 윈도우는 helloworld.exe라는 바이너리가 생성됩니다.

 

해당 바이너리 혹은 실행파일을 실행하게 되면 helloworld가 출력됩니다! 

 

helloworld 빌드 및 실행

 

 

 

728x90

'Programming > golang' 카테고리의 다른 글

golang이란?  (0) 2021.01.03

1번문제이다

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

해석하자면 다음과 같다

만약 10 이하의 자연수 중에서 3과 5의 배수를 나열한다면 3,5,6,9 가 될것이고, 이들의 합은 23이다

1000이하의 수에서 3과 5의 배수들의 합을 구하여라 

 

코드는 아래와 같다 

package Euler;

public class Euler1 {
	public static void main(String[] args){
		int a = 0;
		for(int i = 0; i<=1000; i++){
			if(i%3==0||i%5==0){
				a = a+i;
			}
		}
		System.out.print(a);
	}
}

 

이 문제의 핵심은 3과 5의 공배수인 15의 배수의 처리를 어떻게 할것이냐를 물어보는 것 같다. 

 

15를 2번 더하지만(3에서 한번 5에서 한번) 않으면 쉽게 풀 수 있다. 

 

그냥 진짜 프로그래밍의 기초를 물어보는 것 같은 문제이다 

 

코드설명 : 

 

5: a 는 3과 5의 배수를 더하기 위한 변수

6: 0 ~ 1000까지 

7: 만약 i가 3이나 5로 나누어 떨어질경우 

8: 그 수를 더한다 

 

 

728x90

'Programming > ProjectEuler' 카테고리의 다른 글

ProjectEuler 3  (2) 2021.01.05
ProjectEuler 2  (0) 2021.01.04

GO 마스코트 'Go Gopher' 

go? golang?

Golang은 구글이 2009년에서 처음 발표하고 이후 2012년 3월에 정식 발표된 오픈소스 컴파일 프로그래밍 언어입니다

go와 golang은 같은 go programming language를 뜻합니다만, 이름이 이름이라 go로 검색할 경우 포켓몬고 등 '고'를 가지고 있는 다른 키워드가 검색되는 경우가 있어 검색에서는 golang이라는 키워드로 검색하는 경우가 많습니다 

 

golang의 특징

bmc blogs(www.bmc.com/blogs/go-vs-java/)에 따르면

golang은 

    1. 정적 타입 검사가 이루어지는 server-side 언어이며, 

    2. C언어와 비슷한 언어구조를 채택하였으며,

    3. Java와 같이 Garbage Collector를 사용해 메모리 누수를 막음

    4. 컴파일러의 속도가 매우 빠르고 실행속도도 빠르다  

라고 합니다, 한마디로 가볍고 빠르면서 서버 빌딩하기 좋은 슈퍼 짱짱언어입니다. 

 

타 언어와 차이점

다른 언어와 golang의 여러 차이점이 있지만, 제일 큰 차이점이라고 한다면 

    1. GoRoutine(고루틴) 이라고 불리는 비동기 메커니즘이 존재하고

    2. Generic을 지원하지 않는 점과(단 배포될 go 2.x 에서는 Generic이 있다고 합니다)

    3. 키워드의 종류가 25가지 밖에 되지 않는다는점(반복문은 For loop 한 가지만 존재!!!!)

      (프로그래밍에서 키워드는 프로그램에서 이미 예약된 언어로 ' if '와 같은 변수이름은 이미 예약되어있기 때문에

      사용이 불가능합니다)

       

golang의 25가지 키워드 종류

 

 

실제 사용된 프로젝트 

golang을 통해 서비스 되는 서비스 종류에는 

그 유명한 "Docker" 와 "Kubernetes"가 있습니다.

컨테이너 서비스 도커

 

컨테이너 오케스트레이션 서비스 쿠버네티스

이 외에도 넷플릭스, 클라우드플레어, 엘론 머스크의 SpaceX에서도 사용된다고 합니다 

 

 

golang을 사용을 권장하는 노래;; Frozen의 Let it go의 가사를 바꿔서 불렀다...

 

그래서?

스택오버플로우 설문 2020 에서 사랑받는 언어 5위, 배우고 싶은 언어 3위에 링크된 언어 Go를 사용해 

여러 예제와 문제들을 풀어볼 생각입니다. 

최대한 읽기 쉽게 풀어낼 생각입니다. 

혹시 읽으시다 잘 모르겠거나 잘못된 부분 알려주시면 바로바로 수정할 계획이오니 많이 댓글 남겨주세요!

 

 

감사합니다!

 

728x90

'Programming > golang' 카테고리의 다른 글

golang: Hello world  (0) 2021.01.04

+ Recent posts