2021/02 10

[Mac] Apple Silicon M1 Mac에서 Karabiner, 해머스푼 없이 우측 커맨드로 한영 전환하기

[Mac] M1 Mac에서 재부팅 또는 시스템 종료할 때 커널 패닉이 발생하는 현상 (tistory.com) 초기에 올렸던 글 이후로도 m1 mac에서 Karabiner을 사용하면 아직까지 Kernel Panic 등이 발생하고 있습니다. 13버전이 나왔음에도 아무런 진전이 없는 것으로 보아 m1을 포기하고 있는 것은 아닌지 하는 걱정도 드네요. 현재 저는 애플에서 제공하는 네이티브한 방법으로 오른쪽 Command 키를 한영 키로 사용하고 있습니다. Clien에서 SkyHyunmi 님이 올려주신 글을 참고 부탁드립니다. /User/Shared/bin 디렉토리를 생성합니다. $ mkdir -p /Users/Shared/bin 해당 디렉토리에 userkeymapping파일을 생성합니다. $ printf &#3..

Apple/Mac 2021.02.26

[OS] fallocate 이용해 더미 파일을 만들자.

fallocate 명령은 특정 이름을 갖는 특정 크기의 파일을 만드는 명령어입니다. sftp 명령어를 통해 Network Bandwidth 등을 측정할 때 사용할 더미 파일을 만들 때 사용할 수 있습니다. 사용법은 매우 단순합니다. $ fallocate -l $size $filename 예를 들어, 크기가 3G이고 이름이 File_3G인 파일을 만들고자 한다면 다음과 같이 사용할 수 있습니다. $ fallocate -l 3G File_3G 만약 다른 단위의 크기로 만들고자 한다면, G 대신 K, M, T 등을 이용하여 다양한 단위의 크기로 생성할 수 있습니다.

IT/OS 2021.02.25

[SQL/SQLite] SQLite의 5가지 자료형

[SQL/SQLite] SQLite의 5가지 자료형 SQLite는 파일이나 메모리에 데이터를 저장하는 작고 가벼운 DB입니다. 일반적으로 많이 사용하는 PostgreSQL, MySQL 등의 DB 시스템은 정적 자료형 시스템을 이용하고 있습니다. 정적 자료형 시스템이란, 특정 칼럼에 저장할 수 있는 자료형이, 해당 칼럼을 생성할 때 지정한 자료형만 저장 가능한 시스템입니다. 한편, 다른 DB 시스템과는 달리 SQLite는 동적 자료형 시스템을 사용하고 있습니다. 따라서, SQLite로 생성한 테이블의 칼럼에 저장된 값은 특정 자료형에 제한되지 않습니다. 예를 들어, INTEGER 타입의 칼럼을 선언하였더라도, 해당 칼럼에는 TEXT, BLOB 등의 모든 종류의 자료를 저장할 수 있고, SQLite는 이를 ..

IT/SQL 2021.02.24

[Go/Golang] Golang에서 Windows 파일 경로 지정하기

Golang에서 Windows 파일 경로 지정하기 Go를 이용해 파일을 다루는 방법 중에서도 Windows를 사용하는 경우에 적합한 방법을 소개합니다. Go의 path/filepath 모듈은 백슬래시를 처리할 수 있어 Windows OS의 파일 경로를 다룰 수 있습니다. path/filepath 모듈은 다음과 같이 사용할 수 있습니다. 예제 코드 package main import ( "fmt" "path/filepath" ) func main() { filePath := "C:\\Users\\user\\workspace\\main.go" dir, file := filepath.Split(filePath) fmt.Println("DIR :", dir) fmt.Println("FILE :", file) v..

IT/Go 2021.02.23

[Go/Golang] Raw(`) string과 Interpreted(") string의 차이점을 알아보자

Golang에서 String을 표현하는 방법에는 두 가지가 있습니다. Double Quote (") - Interpreted string 첫 번째는 흔히 사용하는 쌍따옴표(double-quote, ") 방식입니다. Go에서는 쌍따옴표로 열리고 닫힌 string을 Interpreted string이라 부릅니다. 예를 들자면 이렇습니다. interpretedString := "interpreted string" Backtick (`) - Raw string 두 번째는 역따옴표(backtick, `) 방식입니다. 역따옴표로 열리고 닫힌 string은 Raw string이라 합니다. 예를 들자면 이렇습니다. rawString := `raw string` 차이점 Interpreted string double qu..

IT/Go 2021.02.22

[Go/Golang] go test 실행 시 gcc 에러가 발생하는 경우(mac, windows, linux)

vscode로 testing을 수행하다 -v 옵션을 주는 방법을 찾을 수가 없어서, windows 터미널에서 wsl을 켜고 go test -v를 수행했는데 에러가 발생했다. cgo: exec gcc: exec: "gcc": executable file not found in $PATH 이런 에러가 발생하는 경우, 간단하게 해결 가능하다. CGO이기 때문에 GCC로 컴파일 등을 해야하는데, GCC가 없어서 발생하는 에러이기 때문이다. 다음의 패키지를 설치해주자. sudo apt-get install -y build-essential

IT/Go 2021.02.19

[Go/Golang] go get 과 go install 은 어떻게 다른 것일까?

go install vs. go get Golang을 사용하다보면 go get 명령과 go install 명령을 자주 마주친다. 이참에 차이를 알아보고자 정리해보았다. go install은 local에서 작업할 때 이용하는 명령어이다. 예를 들어, 어떤 라이브러리를 사용하고자 하는데 몇몇 이유로 인해 해당 라이브러리에 수정이 필요한 경우 다음과 같은 워크플로우를 가져갈 수 있다. go get -d library - 라이브러리를 다운로드만 받음. 다운로드 받은 library에 필요한 수정 사항을 반영 go install library - 로컬 버전의 라이브러리를 설치. 정리하자면, go get 명령어는 외부에 위치한 패키지를 다운로드 받고 수정하는 것은 불가능하다. 따라서 go get은 go install..

IT/Go 2021.02.19

[Go/Golang] Go 1.16 부터 io/ioutil 패키지가 deprecated 됩니다.

오늘 Go 1.16이 릴리즈 되고 나서 릴리즈 노트를 읽던 중에 io/ioutil이 지원 중단될 예정이라는 걸 보았다. (참고 : Go 1.16 Release Notes - The Go Programming Language (golang.org)) 릴리즈 노트에는 다음과 같이 기록되어 있다. The io/ioutil package has turned out to be a poorly defined and hard to understand collection of things. All functionality provided by the package has been moved to other packages. The io/ioutil package remains and will continue to wo..

IT/Go 2021.02.18

[Go/Golang] Go 1.16 정식 Release! Apple Silicon Mac Native 지원

드디어 Go 1.16이 릴리즈 되었다! 가장 눈에 띄는 것부터 짚어 보자면, Go 1.16 부터는 Apple Silicon Mac의 ARM64 아키텍처를 네이티브로 지원하여, 더 이상 Rosetta를 이용하지 않아도 된다. Go 1.16 부터는 Go module을 디폴트로 사용하게 되었다. 2020 Go Developer Survey에 따르면 이미 Go 개발자의 96%가 Go module을 사용하는 쪽으로 전환하였다는 답변을 했다고 한다. Go 1.16은 기존 버전보다 최대 25% 더 빠르고 메모리를 15% 적게 사용하게 되었다고 한다. 이외에도 다양한 수정사항이나 발전사항이 있으니 추후 포스팅에서 작성해봐야겠다! 그동안 Go 1.16 RC 를 사용해오던 유저로서, 정식 버전을 사용할 수 있게 되어 너무..

IT/Go 2021.02.18

[Go/Golang] Go Slice에서 중복 제거 하기(struct 활용)

Python에서 중복을 제거할 땐 원소의 위치가 중요하지 않다면, 셋으로 변환한 후, 다시 리스트로 변환해주면 중복을 제거할 수 있다. Go에서는 이런 트릭은 따로 존재하지 않는다. 따라서 직접 로직을 구현해야 한다. (요즘 Go에 푹 빠져서 살고 있는데, 이런 점이 매력인 것 같다) 아래는 String 타입의 Slice에서 중복을 제거하는 코드이다. 다른 자료형의 Slice라면 해당 자료형에 알맞은 코드를 구현하면 된다. Go의 Slice에서 중복을 제거할 땐, 보통 map을 이용한다. 처음 마주치는 item을 map에 넣고, 후에 다시 마주치는 경우, 해당 item을 skip하는 방식이다. 이 때, map의 value 타입을 bool을 사용하지 않고 struct{} 로 생성하는 점이 독특한데, 이는 ..

IT/Go 2021.02.14