반응형

■ 기본 자료형

1. number

다른 글로벌 언어들은 정수에 경우 int, 소수에 경우 float 으로 구분하여 자료형을 갖지만

Lua에 경우 number로 모든 숫자를 포함한다.

local num = 10
print(type(num))

num = 3.14
print(type(num))
결과 : 
number
number

2. string

따옴표('') 또는 쌍따옴표("") 로 묶여 있는 문자열을 포함하며, 이중 대괄호 ([[ ]]) 로 묶으면 개행 또는 텝이 들어가 있는 문자열도 포함할 수 있다.

local str = "Hi.\njust do it."
print(str)

str = 'Hi.\njust do it.'
print(str)

str = [[
Hi.
just do it.]]
print(str)
결과 :
Hi.
just do it.
Hi.
just do it.
Hi.
just do it.

3. boolean

true 또는 false 의 값을 포함한다.

local bool = true
print("Type: "..type(bool)..", Value: ", bool)

bool = false
print("Type: "..type(bool)..", Value: ", bool)

bool = 3 > 1
print("Type: "..type(bool)..", Value: ", bool)
결과 : 
Type: boolean, Value: true
Type: boolean, Value: false
Type: boolean, Value: true

4. table

table은 중괄호({})로 묶어서 나타내며, 배열(Array), 맵(Map), 클래스(Class)에 역할을 수행할 수 있다.

 

* 배열일 경우 인덱스는 1 부터 해당 위치에 데이터를 핸들링 할 수 있으며, 맵과 같이 사용될 경우 맵은 인덱스 계산에서 제외된다.

local table = {"1", "2", "3", name ="hyunmin", 5}

-- 배열 : 데이터 취득시 맵 형식은 인덱스 계산에서 제외된다.
print(table[1]..table[2]..table[3]..table[4])
결과 : 
1235

 

* 맵일 경우 Key와 Value 형식을 갖으며, table은 다양한 타입을 함께 사용할 수 있다.

local table = {"1", "2", "3", name ="hyunmin", 5}

-- 맵 : .key  또는 ["key"] 를 통해 value값을 핸들링 할 수 있다.
print(table.name.."\t"..table["name"])
결과 : 
hyunmin hyunmin

 

* 클래스일 경우 해당 클래스에 함수를 생성하고 사용할 수 있다.

local table = {}

function table.add(a,b)
    print(a + b)
end

table.add(30,20)
결과 : 
50
반응형

'Programming Language > Lua' 카테고리의 다른 글

[Lua] 조건문 정리  (1) 2021.12.02
[Lua] 반복문(Loop) 정리  (0) 2021.12.02
반응형

■ 리액트 소스 노출 차단

React로 구현한 웹의 소스가 노출되는 것을 방지하지 않고 그대로 베포하게 되면,

크롬 웹 브라우저의 개발자 도구에서 쉽게 소스를 확인하거나 디버깅할 수 있다.

소스를 확인하거나 디버깅을 할 수 있다는 의미는 보안적인 부분에서 치명적인 문제가 아닐수 없다.

따라서 React로 개발한 소스가 노출되지 않도록 차단하는 작업을 진행

1. [.env] 파일 생성 후 내용 추가

GENERATE_SOURCEMAP = false

2. 프로젝트 빌드 후 반영

npm run build

3. 크롬 웹 브라우저 개발자 도구에서 확인

프로젝트내에 임의로 MainView.js 파일 생성하였지만 노출되지 않음을 확인할 수 있다.

반응형
반응형

■ 파일로 로그 관리

내장 패키지 log, os, time 를 활용하여

로그를 작성할 파일을 생성하고, 파일에 로그를 작성

 


■ 작업 내용

일별로 로그를 관리할 수 있도록 파일을 생성하고 로그 작성

func main() {
	// 현재시간
	startDate := time.Now().Format("2006-01-02")
	// log 폴더 위치
	logFolderPath := "./log"
	// log 파일 경로
	logFilePath := fmt.Sprintf("%s/logFile-%s.log", logFolderPath, startDate)
	// log 폴더가 없을 경우 log 폴더 생성
	if _, err := os.Stat(logFolderPath); os.IsNotExist(err) {
		os.MkdirAll(logFolderPath, 0777)
	}

	// log 파일이 없을 경우 log 파일 생성
	if _, err := os.Stat(logFilePath); os.IsNotExist(err) {
		os.Create(logFilePath)
	}
	// log 파일 열기
	logFile, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		panic(err)
	}
	defer logFile.Close()
	// log 패키지를 활요하여 작성할 경우 log 파일에 작성되도록 설정
	log.SetOutput(logFile)

	// log 작성
	log.Println("Test")
}

■ 결과

1. 로그 파일 생성 확인

2. 로그 확인

반응형
반응형

■ SMTP

간이 우편 전송 프로토콜(Simple Mail Transfer Protocol)의 약자. 이메일 전송에 사용되는 네트워크 프로토콜이다.

인터넷에서 메일 전송에 사용되는 표준이다. 1982년 RFC821에서 표준화되어 현재는 RFC5321에서 정의된 ESMTP(Extended SMTP; 확장 SMTP)로 2008년 갱신되었다. SMTP는 보안과 호환성의 문제로 그대로는 사용하지 않는 경우가 많다. 일반적으로 쓰이는 확장 프로그램은 SMTP-AUTH(송신자 인증 서비스), ESMTP(SASL을 이용한 보안 연결), MIME(non-ascii 데이터 전송 포맷)가 있다.

SMTP는 25/tcp와 587/tcp 포트를 사용하며 SMPTS는 465/tcp 포트를 사용한다.

출처 : 나무위키


■ Google Gmail SMTP 설정 방법

1. Gmail 설정 화면으로 이동

  • 설정(톱니바퀴 모양) 버튼 클릭
  • 모든 설정 보기 버튼 클릭

2. IMAP 엑세스 상태를 [IMAP 사용] 으로 수정

  • [전달 및 POP/IMAP] 탭으로 이동
  • IMAP 엑세스 상태를 [IMAP 사용] 으로 수정
  • 변경사항 저장 버튼 클릭

3. Google 계정 보안 설정 화면으로 이동

  • Google 계정 관리 화면으로 이동
  • [보안] 탭으로 이동
 

Google 계정

Google은 사용자마다 원하는 개인정보 보호 설정이 다르다는 사실을 인지하고 있습니다. 그래서 Google 계정에서는 사용이 간편한 컨트롤과 개인정보 보호 진단 같은 도구를 제공합니다. 이런 도구

www.google.com

4. Google에 로그인 [2단계 인증] 사용

  • [2단계 인증] 클릭

  • [시작하기] 버튼 클릭

  • 사용자의 전화번호 입력
  • 코드를 받을 방식 선택
  • [다음] 버튼 클릭

  • 인증코드 입력
  • [다음] 버튼 클릭

  • [사용] 버튼 클릭

5. Google에 로그인에 추가된 [앱 비밀번호] 생성

  • Google에 로그인 [앱 비밀번호] 클릭

  • 앱 선택에서 [기타(맞춤 이름)] 선택

  • 기기 이름을 사용자에 맞게 작성(*필자의 경우 GMAIL-SMTP)
  • [생성] 버튼 클릭

  • 자동 발급된 기기용 앱 비밀번호를 확인(* 비밀번호는 메일 발송시 필요하기 때문에 저장해둔다)
  • [확인] 버튼 클릭  


■ GO 언어에서 SMTP를 활용하여 메일 발송

  • 1 : 앱 비밀번호를 생성한 사용자의 이메일 주소
  • 2 : 앱 비밀번호
  • 3 : smtp.gmail.com [고정 값]
  • 4 : 발신자 주소
  • 5 : 수신자 주소 [복수 입력 가능]
  • 6 : 메일의 제목 
  • 7 : 메일의 형식을 지정할 수 있다. 예시로 html 본문을 발송하기 위해서 [Content-Type: text/html;\n] 로 설정하면 된다.
  • 8 : 메일의 본문
  • 9 : smtp.gmail.com:587 [고정 값]

소스 코드

func SendMail() {
	auth := smtp.PlainAuth("", "hyenmin@gmail.com", "fsdajklfdslak", "smtp.gmail.com")
	from := "hyenmin@gmail.com"
	to := []string{"hyenmin@gmail.com"} // 복수 수신자 가능

	// 메시지 작성
	headerSubject := "Subject: [제목] 메일 테스트 발송\r\n"
	headerBlank := "\r\n"
	body := "[본문] 메일 테스트 발송"
	msg := []byte(headerSubject + headerBlank + body)

	// 메일 보내기
	err := smtp.SendMail("smtp.gmail.com:587", auth, from, to, msg)
	if err != nil {
		log.Fatalln("Error")
		return
	}
	log.Fatalln("Success")
}
반응형
반응형

  nginx 서버 기동 명령어

서버 기동

sudo systemctl start nginx

서버 재기동

sudo systemctl restart nginx

서버 종료

sudo systemctl stop nginx
반응형

'Programming Language > Web Server' 카테고리의 다른 글

[Node JS] 노드(Node.js) 버전 변경  (0) 2021.04.23
반응형

1. 노드 버전 확인

커멘드(cmd) 창에서 명령어 실행

 

▶ 실행문

node -v

◀ 결과문

v[현재 노드 버전]

2. 노드버전매니저(nvm) 설치

2.1 nvm 설치 사이트로 이동

 

Releases · coreybutler/nvm-windows

A node.js version management utility for Windows. Ironically written in Go. - coreybutler/nvm-windows

github.com

2.2 nvm-setup.zip 파일 설치

  • nvm-setup.zip 파일 압축풀기
  • nvm-setup.exe 파일 실행
  • 설치 진행...


3. node 버전 변경

3.1 사용 및 설치가 가능한 node 버전 조회

▶ 실행문

nvm list available

◀ 결과문

3.2 변경하고자 하는 node 버전 설치

▶ 실행문

nvm install [node 버전]

예시) nvm install 14.16.1

3.3 로컬에 설치 되어 있는 node 버전 조회

▶ 실행문

nvm list

3.4 변경하고자 하는 node 버전으로 변경

▶ 실행문

nvm use [node 버전]

예시) nvm use 14.16.1

4. 변경된 node 버전 확인 

▶ 실행문

node -v

◀ 결과문

v[변경된 노드 버전]
반응형

+ Recent posts