Go 1.14 릴리즈

Golang 2020. 2. 26. 10:10

Go 1.14 Release

Introduce

최신 1.14버전 릴리즈 됐습니다. Go 1.13 이후 6개월만 입니다. 대부분의 변경사항은 toolchian, runtime, libraries의 도구들입니다. 항상 그랬덧이 거의 모든 파일들이 컴파일 되고 실행될 것입니다.

Go 1 사양으로 작성된 프로그램은 해당 사양의 수명 기간 동안 변경없이 올바르게 컴파일 및 실행됩니다. 무한정의 시점에서 Go 2
스펙이 발생할 수 있지만, 그 때까지 Go 1의 향후 "포인트"릴리스 (Go 1.1, Go 1.2 등)가 발생하더라도 현재
작동하는 Go 프로그램이 계속 작동해야합니다.

go command에서 모듈지원 명령어를 production에서 사용할 수 있고, 종속성을 관리하기 위한 go 모듈로 이전(Migration)하는 것이 좋습니다. 만약 go toolchian 에서 이전작업에 문제가 있다면 알려 이슈들 알려주시기 바랍니다.

언어의 변화

인터페이스 overlapping의 제안에 따라, Go 1.14 는 이제 중복되는 메서드 집합이 있는 인터페이스를 포함할 수 있습니다. 내장된 인터페이스의 메서드는 이미 있는 메서드와 동일한 이름과 동일한 서명을 가질 수 있습니다. 이렇게 하면 일반적으로 다이아몬드 모양의 내장 그래프(imbedding graphs)에서 발생하는 문제를 해결할 수 있습니다. 인터페이스에서 명시적으로 선언된 방법은 이전처럼 고유해야 합니다.

Ports

Darwin

Go1.14는 MacOS10.11 ElCapitan에서 실행되는 마지막 릴리스입니다. GO1.15는 macOS10.12 Sierra이상이 필요합니다.

Go1.14는 MacOS에서 32비트 바이너리를 지원하는 마지막 Go릴리즈입니다(darwin/386MacOS10.15(Catalina)부터 MacOS에서 더 이상 지원되지 않습니다. Go는 64비트를 계속 지원합니다.darwin/amd64

Go1.14는 iOS, iPadOS, watch2S및 tvOS(의 32비트 바이너리를 지원하는 마지막 Go릴리즈가 될 것입니다.darwin/armport. Go는 계속해서 64비트를 지원합니다.darwin/arm64port

Window

Windows의 Go바이너리는 이제 DEP(데이터 실행 방지)를 사용하도록 설정되었습니다.

WebAssembly

js.Value 객체를 통해 Go에서 참조 된 JavaScript 값을 가비지 수집 할 수 있습니다.

js.Value값은 더 이상 == 연산자를 사용해서 비교할 수 없으며, 대신에 equai 메서드를 통해서 배교해야 합니다.

js.ValueIsUndefined,IsNull그리고.IsNaN와 같은 메서드를 가지고 있습니다.

RISC-V

Go1.14에는 Linux에서 64비트 RISC-V에 대한 실험적 지원 포함(GOOS=linux,GOARCH=riscv64)성능, 조립 구문 안정성 및 정확성은 현재 진행 중인 작업이라는 점에 유의하십시오.

FreeBSD

Go는 이제 FreeBSD12.0 이상에서 64비트 ARM아키텍처를 지원합니다(freebsd/arm64)

Native Client (NaCl)

Go1.13 릴리스 노트에 명시된 바와 같이 Go1.14는 NativeClient플랫폼(GOOS=nacl).

Illumos

런타임은 이제 runtime.NumCPU 및 기본값 GOMAXPROCS에 대한 영역 CPU 캡 (zone.cpu-cap 자원 제어)을 참조합니다.

Tools

Go command

vendoring

기본 모듈에 최상위 vendor 디렉토리가 있고 go.mod 파일이 go 1.14 이상을 지정하면 go command의 기본값은 -mod=vendor로 설정되어 해당 플래그를 수행합니다. 새로운 플레그 -mod=mod는 go command이 대신 vendor 디렉토리가 없는 경우, 같이 모듈 캐시에서 모듈을 로드합니다.

-mod=vendor를 설정하면 (명시 적으로 또는 기본적으로) go command는 기본 모듈의 vendor / modules.txt 파일이 go.mod 파일과 일치하는지 확인합니다.

go list -m은 더 이상 vendor디렉토리에 패키지를 제공하지 않는 전이 종속성을 자동으로 생략하지 않습니다. -mod=vendor가 설정되고 vendor/modules.txt에 언급되지 않은 모듈에 대한 정보가 요청되면 명시적으로 실패합니다.

Flags

go get 명령은 더 이상 -mod 플래그를 허용하지 않습니다. 이전에는 플래그 설정이 무시되었거나 빌드가 실패했습니다.

go.mod 파일이 읽기 전용이고 최상위 vendor 디렉토리가없는 경우 -mod=readonly가 기본적으로 설정됩니다.

-modcacherw는 새로 작성된 플래그가 모듈 캐시에 새로 작성된 디렉토리를 읽기 전용으로 만드는 대신 기본 권한으로 유지하도록 지시하는 새로운 플래그입니다. 이 플래그를 사용하면 테스트나 다른 도구가 실수로 모듈의 확인 된 체크섬에 포함되지 않은 파일을 추가 할 가능성이 높아집니다. 그러나 go clean -modcache 대신 rm -rf를 사용하여 모듈 캐시를 제거 할 수 있습니다.

-modfile=file은 go command이 모듈 루트 디렉토리에있는 파일 대신 go.mod 파일을 읽고 쓸 수 있도록 지시하는 새로운 플래그입니다. 모듈 루트 디렉토리를 판별하려면 go.mod라는 파일이 여전히 있어야하지만 액세스 할 수는 없습니다. -modfile이 지정되면 대체 go.sum 파일도 사용됩니다. 경로는 .mod 확장자를 자르고 .sum을 추가하여 -modfile 플래그에서 파생됩니다.

환경변수(Environment variables)

GOINSECURE는 특정 모듈을 원래에서 직접 가져올 때 go command이 HTTPS 연결을 요구하지 않고 인증서 유효성 검사를 건너 뛰도록 지시하는 새로운 환경 변수입니다. 기존 GOPRIVATE 변수와 마찬가지로 GOINSECURE의 값은 쉼표로 구분 된 glob 패턴 목록입니다.

모듈 외부 명령(Commands outside modules)

GO111MODULE=on을 설정하여 모듈 인식 모드를 명시 적으로 활성화하면 go.mod 파일이 없을 때 대부분의 모듈 명령의 기능이 더 제한됩니다. 예를 들어, go build, go run 및 기타 빌드 명령은 표준 라이브러리에서 패키지를 빌드하고, 명령행에서 .go 파일로 지정된 패키지만 빌드 할 수 있습니다.

이전에는 go command으로 각 패키지 경로를 최신 버전의 모듈로 확인했지만, 모듈 경로 나 버전은 기록하지 않았습니다. 이로 인해 느리고 생산성이 떨어지는 빌드가 발생했습니다.

호환되지 않는 버전(+incompatible versions)

최신 버전의 모듈에 go.mod 파일이 포함되어 있으면 해당 버전을 명시적으로 요청하거나 이미 요구하지 않는 한 go get은 해당 모듈의 호환되지 않는 major version으로 더 이상 업그레이드되지 않습니다.
go list는 버전 제어에서 직접 patch할 때, 해당 모듈에 대해 호환되지 않는 major version을 생략하지만, proxy에서 보고하는 경우 포함 할 수 있습니다.

go.mod 파일 유지 관리(maintenance)

go mod tidy 이외의 go command는 더 이상 주 모듈의 다른 (전이) 종속성에 의해 암시 된 간접 종속성 버전을 지정하는 require 지시문을 더 이상 제거하지 않습니다.

변경 사항이 외형적일 경우 go mod tidy 이외의 go command는 더 이상 go.mod 파일을 수정하지 않습니다.

-mod=readonly가 설정되면 go command이 없거나 오류로 인한 go command가 더 이상 실패하지 않습니다.

모듈 다운로드(Module downloading)

go command는 이제 모듈 모드에서 Subversion 저장소를 지원합니다.

go command에는 이제 모듈 프록시 및 기타 HTTP 서버의 일반 텍스트 오류 메시지 스니펫(snippets)이 포함됩니다. 오류 메시지는 유효한 UTF-8이고, 그래픽 문자와 공백으로만 구성된 경우에만 표시됩니다.

Testing

go test -v는 이제 모든 테스트의 끝이 아닌 t.Log 출력을 스트리밍합니다.

Runtime

이 릴리스에서는 지연된 함수를 직접 호출하는 것과 비교하여 대부분의 지연 사용성능에서 오버헤드가 거의 발생하지 않습니다. 결과적으로 이제 지연은 성능에 중요한 코드에서 오버헤드 걱정없이 사용될 수 있습니다.

go routine은 이제 비동기적으로 선점(preemption) 할 수 있습니다. 결과적으로 함수 호출이 없는 루프는 더 이상 스케줄러를 교착 상태로 만들거나 가비지 콜렉션을 크게 지연시키지 않습니다. 이는 windows / arm, darwin / arm, js / wasm 및 plan9 / *를 제외한 모든 플랫폼에서 지원됩니다.

선점(preemption) 구현의 결과로 Linux 및 macOS 시스템을 포함한 Unix 시스템에서 Go 1.14로 빌드 된 프로그램은 이전 릴리스로 빌드 된 프로그램보다 더 많은 신호를 수신하게됩니다. 즉, syscall 또는 golang.org/x/sys/unix와 같은 패키지를 사용하는 프로그램은 EINTR 오류와 함께 더 느린 시스템 호출이 실패함을 의미합니다. 이러한 프로그램은 이러한 방식으로 이러한 오류를 처리해야 하며, 시스템 호출을 다시 시도하기 위해 반복 될 가능성이 높습니다. 이에 대한 자세한 정보는 Linux 시스템의 man 7 signal 또는 다른 시스템의 유사한 문서를 참조하십시오.

페이지 할당자는보다 효율적이며 높은 값의 GOMAXPROCS에서 Lock경합(lock contention)이 크게 줄어 듭니다. 이는 병렬로 빠른 속도로 대규모 할당을 수행 할 때, 대기 시간이 짧고 처리량이 높을 때 가장 두드러집니다.

시간에 의해 사용되는 내부 타이머 time.After,
time.Tick,
net.Conn.SetDeadline 및 친구들은 Lock경합이 적고 컨텍스트 스위치가 적어 더 효율적입니다. 이는 사용자가 눈에 띄게 변경하지 않아야 야기할 수 있는 성능향상입니다.

Core library

새로운 바이트 시퀀스 해싱 패키지

Go 1.14에는 바이트 시퀀스에서 해시 함수를 제공하는 새로운 패키지 hash/maphash가 포함되어 있습니다. 이러한 해시 함수는 임의의 문자열 또는 바이트 시퀀스를 부호없는 64 비트 정수의 균일 한 분포에 매핑해야하는 해시 테이블 또는 기타 데이터 구조를 구현하는 데 사용됩니다.

해시 함수는 충돌에 강하지만 암호화적으로 안전하지는 않습니다.

주어진 byte sequence의 해시 값은 단일 프로세스 내에서 일관성이 있지만, 프로세스마다 다릅니다.

Library 사소한 변경사항 (Minor changes to the library)

항상 그렇듯이 호환성에 대한 Go 1 약속을 염두에두고 라이브러리에 대한 다양한 사소한 변경 및 업데이트가 있습니다.

crypto/tls

SSL 버전 3.0 (SSLv3)에 대한 지원이 제거되었습니다. SSLv3은 TLS보다 먼저 암호화 된 프로토콜입니다.

GOLSBUG 환경 변수를 통해 TLS 1.3을 더 이상 비활성화 할 수 없습니다. Config.MaxVersion 필드를 사용하여 TLS 버전을 구성하십시오.

Config.Certificates 필드를 통해 여러 인증서 체인이 제공되면 이제 피어와 호환되는 첫 번째 인증서 체인이 자동으로 선택됩니다. 이를 통해 예를 들어 ECDSA 및 RSA 인증서를 제공하고 패키지가 자동으로 최상의 인증서를 선택할 수 있습니다. Certificate.Leaf 필드를 설정하지 않으면 이 선택의 성능이 저하됩니다.

새로운 CipherSuitesInsecureCipherSuites 함수는 현재 구현 된 암호 스위트 목록을 리턴합니다. 새로운 CipherSuiteName 함수는 암호 스위트 ID의 이름을 리턴합니다.

새로운 (* ClientHelloInfo) .SupportsCertificate(* CertificateRequestInfo) .SupportsCertificate 메소드는 피어가 특정 인증서를 지원하는지 여부를 표시합니다.

tls 패키지는 더 이상 레거시 NPN (Next Protocol Negotiation) 확장을 지원하지 않으며 이제 ALPN 만 지원합니다. 이전 릴리스에서는 두 가지를 모두 지원했습니다. API 변경 사항이 없으며 응용 프로그램이 이전과 동일하게 작동해야합니다. 대부분의 다른 클라이언트와 서버는 표준화 된 ALPN을 위해 NPN 지원을 이미 제거했습니다.

RSA-PSS 서명은 이제 TLS 1.2 핸드 셰이크에서 지원 될 때 사용됩니다. 이는 대부분의 응용 프로그램에는 영향을 미치지 않지만 RSA-PSS 서명을 지원하지 않는 사용자 지정 Certificate.PrivateKey 구현은 새 Certificate.SupportedSignatureAlgorithms 필드를 사용하여 비활성화해야합니다.

Config.GetConfigForClient가 설정된 경우 Config.CertificatesConfig.GetCertificate는 모두 nil 일 수 있습니다. 콜백이 인증서 나 오류를 반환하지 않으면 unrecognized_name이 전송됩니다.

새로운 CertificateRequestInfo.Version 필드는 클라이언트 인증서 콜백에 TLS 버전을 제공합니다.

새로운 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 상수는 이전에 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305TLS_ECDLY_305와 같이 암호화 그룹의 최종 이름을 사용합니다.

crypto/x509

Certificate.CreateCRL은 이제 Ed25519 발급자를 지원합니다.

debug/dwarf

debug/dwarf 패키지는 이제 DWARF 버전 5 읽기를 지원합니다.

새로운 메소드 (* Data) .AddSection은 입력 파일에서 DWARF 데이터로 임의의 새로운 DWARF 섹션 추가를 지원합니다.

새 메소드 (* Reader) .ByteOrder는 현재 컴파일 단위의 바이트 순서를 리턴합니다. 위치 설명과 같은 기본 순서로 인코딩 된 속성을 해석하는 데 사용될 수 있습니다.

새로운 메소드 (* LineReader) .Files는 라인 리더에서 파일 이름 테이블을 리턴합니다. 이것은 AttrDeclFile과 같은 DWARF 속성의 값을 해석하는 데 사용될 수 있습니다.

encoding/asn1

비 정렬 화는 이제 새로운 TagBMPString 상수로 표시되는 ASN.1 문자열 유형 BMPString을 지원합니다.

encoding/json

Decoder type은 현재 디코더 위치의 입력 스트림 바이트 오프셋을 반환하는 새로운 메소드 InputOffset을 지원합니다.

Compact는 더 이상 문서화 된 기능이 아닌 U + 2028 및 U + 2029 문자를 이스케이프하지 않습니다. 올바른 이스케이프에 대해서는 HTMLEscape를 참조하십시오.

문서화 된 동작을 더 밀접하게 따르기 위해 숫자는 더 이상 잘못된 숫자를 허용하지 않습니다. 프로그램이 빈 문자열과 같은 유효하지 않은 숫자를 허용해야하는 경우 유형을 비 정렬 화자로 랩핑하십시오.

go/build

컨텍스트 유형에는 빌드에 대한 작업 디렉토리를 설정하는 데 사용할 수있는 새 필드 Dir이 있습니다. 기본값은 실행중인 프로세스의 현재 디렉토리입니다. 모듈 모드에서는 메인 모듈을 찾는 데 사용됩니다.

go/doc

새로운 기능 NewFromFiles는 * ast.File 목록에서 패키지 문서를 계산하고 예제를 적절한 패키지 요소와 연관시킵니다. 새로운 정보는 패키지, 유형 및 기능 유형의 새 예제 필드와 예제 유형의 새 접미사 필드에서 사용할 수 있습니다.

io/ioutil

TempDir는 이제 이름에 예측 가능한 접두사와 접미사가있는 디렉토리를 만들 수 있습니다. TempFile과 마찬가지로 패턴에 '*'가 포함되어 있으면 임의의 문자열이 마지막 '*'을 대체합니다.

log

새로운 Lmsgprefix 플래그는 행 시작 부분이 아니라 로그 메시지 직전에 선택적 출력 접 두부를 출력하도록 로깅 기능에 지시하는 데 사용될 수 있습니다.

math

새로운 FMA 함수는 x * y 계산의 중간 반올림없이 부동 소수점에서 x * y + z를 계산합니다. 여러 아키텍처가 추가적인 성능을 위해 전용 하드웨어 명령어를 사용하여이 계산을 구현합니다.

math/big

GCD 방법은 이제 입력 a와 b가 0 또는 음수가되도록합니다.

math/bits

새로운 기능인 Rem, Rem32 및 Rem64는 몫이 넘칠 때도 나머지 계산을 지원합니다.

mime

.js.mjs 파일의 기본 유형은 이제 application/javascript가 아닌 text/javascript입니다. 이것은 응용 프로그램 / 자바 스크립트를 더 이상 사용하지 않는 것으로 취급하는 IETF 초안에 따릅니다.

mime/multipart

새로운 Reader 메서드 NextRawPart는 인용 인쇄 가능한 데이터를 투명하게 디코딩하지 않고 다음 MIME 부분을 가져올 수 있도록 지원합니다.

net/http

새로운 헤더 메소드 값을 사용하여 표준화 된 키와 연관된 모든 값을 페치 할 수 있습니다.

새 전송 필드 DialTLSContext를 사용하여 프록시되지 않은 HTTPS 요청에 대한 TLS 연결을 작성하기위한 선택적 다이얼 기능을 지정할 수 있습니다. 이 새로운 필드는 DialTLS 대신 사용할 수 있으며 이제는 더 이상 사용되지 않습니다. DialTLS는 계속 작동하지만 새 코드는 DialTLSContext를 사용해야하므로 더 이상 필요하지 않은 전송으로 다이얼을 취소 할 수 있습니다.

Windows에서 ServeFile은 이제 2GB보다 큰 파일을 올바르게 제공합니다.

net/http/httptest

새로운 서버 필드 EnableHTTP2는 테스트 서버에서 HTTP/2 enabling를 지원합니다.

nett/textproto

새로운 MIMEHeader 메서드 Values를 사용하여 표준화 된 키와 관련된 모든 값을 가져올 수 있습니다.

os/signal

Windows에서 CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT 및 CTRL_SHUTDOWN_EVENT 이벤트는 이제 Control-C 및 Control-Break이 syscall.SIGINT 신호를 생성하는 방법과 유사하게 syscall.SIGTERM 신호를 생성합니다.

plugin

플러그인 패키지는 이제 freebsd/amd64를 지원합니다.

reflect

StructOf는 이제 StructField 요소에서 PkgPath 필드를 설정하여 내 보내지 않은 필드로 구조체 유형 작성을 지원합니다.

runtime

runtime.Goexit는 더 이상 재귀적 panic/recover을 통해 중단 할 수 없습니다.

macOS에서 SIGPIPE는 Go Runtime이 초기화되기 전에 설치된 신호 처리기로 더 이상 전달되지 않습니다. macOS는 스레드가 닫힌 파이프에 쓰지 않고 SIGPIPE를 기본 스레드에 전달하기 때문에 필요합니다.

runtime//pprof

생성 된 프로파일에는 더 이상 인라인 마크에 사용되는 의사 PC가 포함되지 않습니다. 인라인 함수의 심볼 정보는 pprof 도구가 예상하는 형식으로 인코딩됩니다. 최근 릴리스에서 소개 된 회귀에 대한 수정 사항입니다.

strconv

NumError 유형에는 변환에 실패한 이유를 검색하는 데 사용할 수있는 Unwrap 메소드가 있습니다. 이것은 오류가있는 NumError 값 사용을 지원합니다. 기본 오류가 strconv.ErrRange 또는 strconv.ErrSyntax인지 확인합니다.

sync

경쟁이 치열한 Mutex를 잠금 해제하면 CPU가 해당 Mutex를 기다리는 다음 Go Routune으로 직접 전달됩니다. 이는 많은 CPU 수의 머신에서 고도로 경쟁적인 Mutex의 성능을 크게 향상시킵니다.

Testing

테스트 패키지는 이제 T.Cleanup 또는 B.Cleanup을 각각 호출하여 테스트 또는 벤치 마크가 완료된 후 호출되는 정리 기능을 지원합니다.

text/template

text/template는 괄호로 묶은 인수를 함수로 사용할 때 오류를 올바르게보고합니다. 이것은 {{if (eq .F "a") 또는 (eq .F "b")}}와 같은 잘못된 경우에 가장 일반적으로 나타납니다. {{if 또는 (eq .F "a") (eq .F "b")}}로 작성해야합니다. 잘못된 사례는 예상대로 작동하지 않았으며 이제는 오류로보고되어 기능하지 않음을 주장 할 수 없습니다.

unicode

시스템 전체에서 유니 코드 패키지 및 관련 지원이 유니 코드 11.0에서 유니 코드 12.0으로 업그레이드되어 4 개의 새로운 스크립트와 61 개의 새로운 이모티콘을 포함한 554 개의 새로운 문자가 추가되었습니다.

'Golang' 카테고리의 다른 글

Go 1.14 릴리즈  (0) 2020.02.26
json 설정파일 읽어오기  (0) 2018.04.17
고랭 1.9 업데이트  (0) 2017.09.06
Golang | 최신버전으로 업그레이드 할 때 주의점  (0) 2016.08.23
golang | strings 패키지  (0) 2016.08.12
[Golang] mysql, mariadb 원격접속 허용하기  (0) 2016.07.29
블로그 이미지

부들잎

안녕하세요

Tag go, Golang, 고랭

댓글을 달아 주세요

Try...

라즈베리파이 1년전도 운영을 했었다. 블로그도 올려보고 이력서 홈페이지도 올려봤다. 주위에 쓴만한 서버들이 너무 많아져서 이제는 잘 사용하지 않다가 집에서 DB 서버나 만들어서 테스트 할까 다시 OS 설치를 해야 했다.

https://www.raspberrypi.org/downloads/ 에서 Raspbian, Ubuntu, 다양한 것들이 눈에 띄였는데, 뭘할까 고민하다 데스크탑에서 잘 사용하고 있는 Fedora운영체제를 설치하기로 했다.

ARM 아키택쳐로 구성 된 이미지 파일을 손쉽게 구할 수 있었다. ... 여기 문서을 참조

사용용도에 맞춰서 Server용으로 설치했다. (가벼울꺼라 생각했어....)

설치방법은 라즈베리파이 공식페이지 여기로 이동

After install

기본 메모리 사용량

설치하고 난 후에 htop로 기본으로 돌아가고 있는 메모리의 량이 raspbian에 비해서 100mb정도 많았다. 아무래도 fedora는 ARM으로 포팅만 되서 나온거라 그런지 조금 무거운 게 아닐까 의심이 든다.

메모리카드의 한계

라즈베이파이의 메모리의 한계를 알게 되었다. micro SD카드로 돌아가는 운영체제다 보니, 상당히 느리고, 스로들 걸리는 시간이 자주 있었다.

torrent서버를 돌려서 메모리 카드에 저장을 하는데 자꾸 다운이 되거나 멈춰버린다. 아무래도 메모리의 최대 전송량의 한계를 넘어서서 멈춰버리는 것 같다. 속도제한을 하지않으면 멈춰버린다.

결론

라즈베리파이에서 운영체제에서 오는 이득은 package 관리 체계의 차이 밖에 없을 것 같다.

1. raspbian 을 사용하자
2. “시간은 금이라구 친구”

최적화 되어 있는 OS를 사용하자. 기본 운영체제가 조금 달라져도 익숙해지는 것은 금방이다.

ps. 하루동안 재미 있었다.

블로그 이미지

부들잎

안녕하세요

댓글을 달아 주세요

nginx 에서 사용방법 중에 sites-availablesites-enabled로 가상 홈페이지를 관리하는 것이 있다.
일반적으로 ln -s심볼릭을 사용해서 설정을 공유한다. 그런데 이게 미묘한 차이로 날려먹는 경우가 있어서 다시 기억하고자 글을 남긴다.

폴더의 사용정의

sites-available/

설정을 저장하는 곳이다. 여기에 설정을 만든 것은 실제로 nginx에 반영되지는 않습니다. 반영하기 위해서는 sites-enabled에 설정파일을 복사 또는 심볼릭링크를 걸어줍니다.

sites-enabled/

sites-availiable에 작성한 설정을 적용하기 위한 폴더.

sudo ln -s /etc/nginx/sites-available/example.comc.conf /etc/nginx/sites-enabled/

ln -s 명령어에서 앞에 원본파일에 대한 폴더명을 전부 적어야 한다.

상대적인 주소로 인식하지 않기 때문에 반드시 폴더명을 다 적어 준다.

설정이 제대로 적용이 되었는지 테스트

$ sudo nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful

테스트 시 문제가 없다면 nginx 를 재시작해서 적용하자

$ sudo nginx -s reloador$ sudo systemctl restart nginx

sites-availablesites-enabled폴더가 없을 때

centos7의 기본 패키지로 설치를 했을 때 위와 같은 폴더가 생성이 안되어 있는 경우가 있다. 이 때는 직접 설정을 추가 해 주자.

# /etc/nginx/nginx.confhttp {    ....    include /etc/nginx/conf.d/*.conf;    include /etc/nginx/sites-enabled/*.conf; ## 저는 여기 추가 했어요.}

위와 같이 추가하고 nginx 재시작

nginx -s reload
블로그 이미지

부들잎

안녕하세요

댓글을 달아 주세요

타오나스를 구매하고 난 뒤에 시롤로지 시스템을 매번 업그레이드 할때마다 수작업 하는게 싫어서 opensource 로 되어 있는 나스 운영 시스템을 사용하기로 했다.
그 와 중에 freenas 라는 시스템이 눈에 들어왔고 일단 설치해서 사용하는 도중에 JAIL이라는 VM 시스템이 있어서 이를 통해 다양한 시스템을 올려보고 있는 상황이이었다. 그런데 이게 서비스가 돌아가는 시스템이 익숙한 시스템이 아닌지라 공부를 할 필요가 있었다.

minidlna 를 통해서 부모님 집에 파일을 올려주고 있는데, 이게 rwxrwx---권한으로 파일이 올려지는 것이다. 그리고,, dlna 권한은 이 dataset 의 폴더 권한이 없었다.

이를 해결하기 위해서 공부시작.

이렇게 freebsd와 jail 에 대해서 알아간다.

시작

데이터셋에 있는 데이터에 접근하기 위해서는 다음과 같은 설정이 되어야 합니다.

  1. dataset/folder 에 접근할 수 있게 마운트

  2. data folder 의 쓰기 권한

플러그인 jail 에서 접근할 수 있는 dataset 만들기

dataset은 jail 외부에 구성을해서 정기적인 snapshot 또는 백업 환경을 구성해 주는 것이 좋습니다. 이를 jail 에서 마운트 해서 사용하는 것입니다.
일반적으로 jail 에서는 외부의 파일에 접근 할 수 없습니다.

jail 에 dataset 연결하기

Mount points를 통해서 접근하게 설정할 수 있습니다.

Imgur

다음 문서를 참조해서 설정을 합시다.

Permission 설정

플러그인에서 파일에 접근하기 위해서는 4가지 방법이 있습니다.

모든 파일와 폴더는 UNIX Permision level, UID 소유권한(ownership), GID 권한(ownership)을 가지고 있으며, 사용자/그룹 구성원을 권한을 결정합니다. 기본 UNIX 권한은 FreeBSD의 가이드 북에 설명되어 있습니다.

Value Permission Directory Listing
0 No read, no write, no execute ---
1 No read, no write, execute --x
2 No read, write, no execute -w-
3 No read, write, execute -wx
4 Read, no write, no execute r--
5 Read, no write, execute r-x
6 Read, write, no execute rw-
7 Read, write, execute rwx

JAILFreenas HOST는 user/group 에 대한 정보를 공유하지 않습니다.
에직 매핑되어 있는 사용자가 있으면 그 정보가 공유 됩니다.

jail 사용자 영역(plugin) 내에 실행 중인 프로세스는 jail 의 user/group 설정에 따라 파일 파일/폴더 에 읽고 쓸 수 있습니다.

가본적으로 대부분의 플러그인은 특정 UID를 가진 특정 사용자로 실행되며 데이터 디렉토리라고 하는 구성(Configuration)/db/logs 를 유지합니다.

절대 감옥 데이터 세트의 소유권 또는 권한 수준을 변경하지 마십시오.

여기에 포함된 운영시스템과 앱 파일들이 수정되면 시스템이 제대로 동작하지 않을 수 있습니다. 오직, dataset의 소유권한과 권한수준만 변경하시기 바랍니다.

사용자 쓰기 가능

plugin 기본 사용자로 UID 가 일치하는 FreeNas WebUI 사용자를 추가합니다.

dataset/folder 소유권을 새로 추가한 사용자로 변경하십시오.

UIDcat /etc/passwd 명령어를 통해서 알 수 있습니다.

nomad:*:472:472:Nomad Daemon:/var/tmp/nomad:/usr/sbin/nologinminio:*:473:473:Minio Daemon:/var/tmp/minio:/usr/sbin/nologinnetdata:*:302:302:NetData Daemon:/var/cache/netdata:/usr/sbin/nologin

에 있는 302:302 에서 앞에 숫자

사용자 쓰기 가능

  • 이게 잘 작동함

jail안에서 dataset/folder 소유권한이 일치하는 UID 가진 사용자를 추가히십시오.

pw useradd -n USER -u UID -d /nonexistent -s /usr/sbin/nologin

jail 에서 플러그인이 실행되는 사용자를 변경하고 data 디렉토리의 소유권한을 변경합니다.

service 플러그인 onestopchown -R USER:GROUP /var/db/PLUGINsysrc '플러그인_user=USER'service 플러그인 start

그룰 쓰기 가능 추가

그룹쓰기가 가능하도록 dataset/folder의 소유권한을 변경합니다.

jail 에서 일치하는 GID를 가진 그룹을 dataset/folder의 그룹 소유자로 추가 합니다.

pw groupadd -n 그룹 -g GID

jail 에서 플러그인이 실행되는 사용자를 새로 추가 된 그룹에 추가합니다.

pw groupmod 그룹 -m 사용자

다른 쓰기 가능

  • 잘 안됨

dataset/folder 에 다른쓰기 권한을 변경합니다.
smb 를 통해서 파일을 추가할 때 사용자의 기본 user/group 으로 파일이 저장이 된다.
dlna 에서 권한이 없어서 dlna에서 파일을 읽을 수 없는 상태가 된다.

결론

jail안에서 HOST에 있는 그룹(gid)을 추가해서 서비스(dlna)를 그 그룹에 추가 했다

# meida group 생성pw groupadd -n media -g 8888888pw groupmod media -m dlna

그런데 이렇게 하니 권한이 없다며 안되다.

이번에는 media 유저를 추가했다. 이것은 HOST의 media의 사용자 권한을 가져가는 것과 같다

pw useradd -n media -u 8888888 -d /nonexistent -s /usr/sbin/nologin

까지 설정 한 뒤에 /usr/local/etc/minidlna.conf의 설정해서 아래와 같이 실행하는 USER를 변경 해 줬다.

# specify the user account name or uid to run asuser=media

연구를 좀 더 해봐야 한다.

블로그 이미지

부들잎

안녕하세요

댓글을 달아 주세요

update : 2020.01.06

이번에 회사에서 지급 된 맥북 프로를 정리하면서 기존에 설치되어 있는 프로그램에 대해서 가록하고자 합니다. 무엇을 사용하고 있었는지 알고, 새로 맥북을 구매했을 때 바로 설치를 하기 위함입니다.

필수 설치 유틸

맥을 사용 있다면 반드시 설치해야되는 프로그램을 모았습니다. 시스템을 구축하는데 도움이 됩니다.

brew

macOS용 패키지관리자입니다. 맥에 설치 되는 대부분의 어플들을 brew를 통해서 간단히 설치 할 수 있습니다.

terminal에서 아래와 같이 입력하세요.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

AppCleaner

맥에 여러가지 app을 설치하고 난 뒤에 지울때 깔끔하게 삭제가 되지 않습니다. 이를 해결해 주는 앱이 Cleaner앱입니다. 무료/유료로 제공되는데 저는 이게 맘에 들어서 이것저것 사용하다가 잠시 이 것으로 정착 했습니다

CheatSheet

Command키를 누르고 있으면, 앱에 기본으로 설정되어 있는 단축키들을 보여줍니다. 단축키를 익히는데 상당히 많은 도움을 줍니다

Firefox

chrome이 너무 무거운 나머지 옮겨갔다. 개발에서도 깔금한 개발자화면을 제공해 줘서 chrome 보다 잘 사용하고 있다.

Language Switcher

영문 상위에서 운영체제를 사용하고 있는 입장에서 한글로 앱을 실행하기 위해서 커맨드를 입력하는 번거로움을 방지해 준다.

Magnet

Window에서 처럼 앱을 드레그 해서 이동할 때, 오른쪽 끝으로 이동하면 화면을 50:50 으로 앱 실행화면을 나눠준다.
얼마 안 하기 때문에 돈이 아깝지 않습니다.

The Unarchiver

압축파일 해제시에 생기는 파일이름 깨지는 것을 방지해 준다.

data cloud

OneDrive

Google Drive

dropbox

최고의 Sync 기능을 자랑한다. 2019년 6월 기준으로 요금을 올리면서 동시사용할 수 있는 기기 목록수도 줄였다. 다른 서비스로 옮기는 것이 어떨가 고민하고 있다.

개발도구

Postman

REST API 문서를 테스트하기 필수앱. 게다가 무료로 사용해도 충분한 기능을 사용할 수 있다.

OracleDataModeler

현재 사용하고 있는 DB가 Oracle 이기 때문에 이를 Model들을 파악하기 위해서 설치한 앱.

Visual Studio Code

말이 필요없는 코딩용 프로그램. MS에서 개발을 하였고, Window, Ubuntu, MacOS 거진 모든 OS에서 지원하고 있은 프로그램입니다.

Docker

말이 필요없는 가상화 프로그램

FileZilla

FTP 전송 필수앱.
과거에 CyberDuck(?)를 자주 사용했는데, window 와 macOS 에서 동시에 사용할 수 있고 자주 업그레이드되는 장점을 갖고 있습니다.
FTP 전송에서는 아직 다른 앱을 사용해 보지 않았습니다.

IntelliJ IDEA

JetBrains에서 판매하는 코딩 IDE. 유료로 제공되고 있지만, 한번 사용하면 다른 것들은 사용할 수 없다. 너무 많은 기능들과 최신 기술들을 빠르게 적용시켜주는 어플이다.

Sourcetree

Atlassian에서 제작한 git 소스 관리용 툴입니다. 애자일 개발 방식에 따른 소스 브런치 관리법이 적용하고자 하면 이를 사용해 보는 것이 좋습니다.

생산성

OmniFocus

최고의 일정관리앱.

Staiton

웹앱들을 모아놓고 실행관리 할 수 있는 앱

TogglDesktop

Time Tracker라고 해서 자신이 한 일을 일일히 시간대 별로 체크

Trello

칠판에 할 일을 작성하듯이 할 일과 스케쥴을 관리하는 앱. 개발 프로젝트를 기획, 트래킹을 하는데 필수적이다

Spark

메일을 관리앱. Android, iOS, macOS 을 지원하고, 메일을 사용하는데 이런 기능이 있어야 하나 싶은 기능들을 제공하고 있습니다.
기본메일함을 사용하는 것도 나쁘지 않은 선택이지만, 한번 사용해 보는 것을 권합니다.

Slack

개발자들간의 의사 소통을 위한 필수 앱이 되었다.

Pocket

브라우저에서 링크를 스크랩 하는 기능. google 계정으로 로그인이 가능.

Skitch

[PhotoScape X]가 나오기 전에 블로그에 수록 된 간단한 사진을 편집하기 좋았다. 단순한 그림에 표시하기 및 텍스트를 추가 하는데 좋다.

PhotoScape X (무료)

사진들을 일괄 편집할 수 있는 앱. Window에서도 제공하고 있다. 간편하게 사진들을 일괄편집 또는 이펙트를 적용하기 좋다.

OmniGraffle (유료)

간단한 그래프를 그리기 위해서 빠르게 작업할 수 있는 앱. 최근에 명함을 구성하는데 사용했는데, AI 처럼 다른 구조체와의 규칙성을 파악해서 알려주는 기능이 끝내준다.

OmniOutliner (유료)

아직 활용 능력이 미흡해서 잘 사용하고 있지는 못하다. 간단한 메모용도로 사용하고 있다. 자료가 쌓이면서 이를 저장해서 어디에 모아놓을지 전혀 생각을 못하고 있다.
확실한 용도를 생각 해 봐야 되겠다.

Notion (유료)

evernote와 같은 메모기능을 주를 이루고 있다. 하지만, Notion이라는 앱은 에버노트를 넘어 더 많은 다양한 기능들을 제공하고 있다.
4$의 유로 결제를 해야지만 더 많은 기능들을 제한 없이 사용할 수 있다.

Microsoft Teams (업무용)

Office 365를 구독해서 사용하면서 처음으로 첩하게 된 앱. 다른 사람들과 공동작업을 진행할 때 사용하기에 좋다. 무료로는 일정기능만 제공하기 때문에 부족한 점도 있지만, 깔끔한 영상통화와 파일을 공유하는 기능은 정말 깔끔하게 필요한 기능만을 제공하는 것 같다.
다른 3rd party 앱들도 연동해서 사용할 수 있기 때문에 확장성이 좋습니다.

Pages (무료)

최근에 성는이 좋은 맥을 사용하고 난 뒤에는 좋은 앱이라는 것을 알게 됨. 무료이기에 잘 이용하면 좋겠다.

office365를 사용하고 있어서 잘은 안 쓰지만, mac에서 잘 작동하는 것을 역시 pages다.

MacJournal (무료)

매일 블로그나 글을 작성하기 위해서 사용하던 프로그램.
현재는 무료로 기능을 제공하고 있다. app store에 유료로 배포하고 있었지만, 무료버전을 제공하고 있다.

매일 글을 적는 때에 일기장으로 사용할 수 있고, 브로그에 포스팅하는 기능도 가지고 있다.
하지만, 지금은 잘 사용하고 있지 않다.

DEVONThink

여러가지 인터넷에 돌고 있는 내용들을 수집하는데 최고의 어플입니다. 최근에 버전업이 안되고 있지만 많은 이용자들이 논문자료 정리용 앱으로 잘 사용하고 있는 것으로 알고 있습니다.
저는 블로그 글들을 모아놓은데 사용하고 있습니다.

단점 : 맥에서만 사용할 수 있다. 다양한 기기에서 호환이 안된다.

Microsoft Office

회사에서 이를 사용하지 않고 일을 할 수 있을까요?

Adobe

영상이나 그래픽 쪽 일을 한다면 필수적인 앱

취미/놀이

Movist (PRO)

맥에서 제공하는 최고의 동영상 재생기.
PRO 버전을 현재는 app store 정책 때문에 홈페이지에게 판매하고 있다.

반드시 구매하자

Steam

맥에서 게임을 즐기기 위해서는 필수아닌 필수 입니다.

Epic Games

요즈음 자주 무료로 풀고 있어서 라이브러리를 모으고 있습니다.

Battle.net

역사의 뒤안길로 가게 된 블리자드

기타 도구들

HapticKey

맥북 터치바에서 키를 누르면 진동을 발생시킨다.
vim을 자주 사용하는 입장에서 esc버튼을 누르면 이 것이 눌러졌는지 알수가 없다. 이를 진동을 통해서 알게 해 준다.

iStat Menus

맥을 상단바에 현재맥의 이더넷, 메모리, 램, CPU 등 다양한 정보를 제공한다. 100MB 정도의 메모리로 상주해 있으며, 현재 상태를 간결히 빠르게 볼 수 있는 점이 좋다.

Karabiner

한/영 키를 window 에서와 같이 오른쪽 command키 부분으로 하고 싶을 때, 또는 개인이 키보드의 키 설정을 변경하고 싶을 때 사용하자.
기본 설정으로 caps lock을 한영으로 사용했는데, 본인은 ctrlcaps lock를 바꿔놓고 사용을 하고 있다.

블로그 이미지

부들잎

안녕하세요

댓글을 달아 주세요

랩탑을 이용해서 일을 하다보니 일하는 장소가 자주 바뀌 때가 있다. 이 때에 자신을 위해서 자세를 신경 쓸 필요가 있다.
그래서 몇가지 컴퓨터를 사용하는데 있어서 주의해야 할 몇가지들을 남겨본다.

무릎에서 랩탑을 꺼내기

무릎에 노트북을 올려놓고 사용하는 자세는 몸을 웅크리게 만들고, 머리를 내밀어 화면을 응시하게 만듭니다. 이 자세는 척추에 무리를 주게 됩니다.

책상이 없이 작성을 해야 할 경우에는 컴퓨터가방이나 서류 가방에 올려놓고 화면을 올리시기 바랍니다.

모니터를 더 높이기

이상적인 랩톱 높이와 각도를 사용하면 목을 구부리거나 회전시키지 않고도 화면을 쉽게 볼 수 있습니다.
노트북을 책상 위로 몇 인치 위로 들어 올려 노트북 받침대 또는 두꺼운 책 더미와 같은 안정된 지지대 표면에 놓고, 똑바로 쳐다 보면 눈이 자연스럽게 화면의 3 분의 1에 닿아야합니다.

별도의 키보드와 마우스, 모니터에 투자하기

노트북을 장시간 작업하는 경우에는 다음 두가지 중 하나를 수행하는 것이 좋습니다.

  1. 별도의 키보드와 마우스를 사용하여 랩톱화면을 눈눞이에 올바르게 배치

  2. 눈높이에서 외장 모니터 사용 어깨와 팔이 긴장을 풀수 있는 높이에 카보드 놓기

팔꿈치는 90도 각도로 몸에 꼭 맞아야하며, 타이핑 할 때는 속목이 중립에 있어야 합니다. 이 자세는 어깨를 둥글게하고 목 근육을 잡아 당기는 것을 방지합니다.

노트북 화면 업그레이드

노트북은 휴대하기 쉽고, 사용하기 쉽도록 설계되어있지만, 화면은 사용자에 맞지 않을 수 있습니다. 화면이 작을수록 텍스트와 개체가 보이도록 목에 긴장을 하게 됩니다. 화면에서 글을 자주 읽을 경우에 글꼴을 늘릴 수도 있습니다.

발 올려놓기

팔과 손목을 편안하게 놓을 수 있도록 의자를 들어야 하는 경우 다리의 각도를 확인하세요. 발은 바닥에 평평해야 하고 무릎은 엉덩이와 고른 높이에 있어야 합니다.
엉덩이가 너무 높거나 평평해야하고, 무릎은 엉덩이와 고른 높이에 있어야 합니다. 엉덩이가 너무 높거나 발이 바닥에 닿지 않으면 발밑을 지탱하기 위해 계단이나 블록을 사용하세요.
이를 통해 중립 요추를 유지하고 허리의 긴장을 줄일 수 있습니다.

인체 공학적 의자 찾기

노트북을 사용하는 동안 앉는 의자의 유형이 중요합니다.

완전히 조절가능하고, 요추 지지대가 있는 모든 사무실 의자가 좋지만 제대로 지지되지 않으면 요추에 무리가 올 수 있습니다. 의자에 기대어 앉으면 요추 지지대가 허리에 자연스러운 곡선을 유지하는 데 도움이 됩니다.

목과 머리의 위치는 귀가 항상 앞이 아닌 어깨 위에 있어야 합니다.

휴식 취하기

전화에 30분 마다 잠깐 휴식을 취하도록 알림을 설정하세요.

화면에서 눈을 떼고 원거리에 있는 물체에 눈을 주시하기 바랍니다. 책상, 목 , 어깨, 팔, 다리, 스트레칭과 같은 간단한 스트레칭을 하세요. 1시간 마다 책상을 두고 걸어다니면서 혈액이 흐르고, 근육이 느슨해 지도독 하세요.

걸을 수 없다면 최소한 서서 스트레칭하고 움직이세요. 사람은 언제나 움직이는 존재이며 하루종일 가만히 앉아있을 수 없습니다.

일어나기

노트북으로 장기간 시간을 보내는 사람들의 경우 의자에 앉아있지 않고, 일어나서 두시간 정도 시간을 보내십시오. 목에 무리를 주지 않으면서 별도의 키보드와 뫄우스와 멀티 설정이 필요합니다.

서서 일하는 책상이 인기있는 옵션 중 하나 입니다.

가볍에 이동하기

일반적으로 회사와 집을 오가며 랩톱을 사용하는 경우 여분의 세팅장비를 사용하여 자리에 잡아두는 방식으로 사용하세요.

가방을 한쪽으로 매지 않는 것이 좋습니다. 너무 무겁다면 캐리어를 이용하는 것도 한 방법입니다.

자세 관련 앱 사용하기

노트북에 사용해서 자세를 모니터링하고 유용한 알림 메세지를 제공하는 기능들을 사용해 보세요. 다음과 같은 다양한 기능을 수행하는 지원을 받을 수 있습니다.

노트북 카메라를 사용해서 자세를 감시하고 언제나 똑바로 똑바로 앉아야 하는지 알려주고, 책상에서 간단한 스트레칭을 지도 해 줍니다.

웨어러블 기기는 당신의 척추 자세를 측정하고 당신의 전화나 태블릿 앱으로 데이터를 보냅니다.

참고 : https://www.spine-health.com/video/video-6-tips-improve-posture-while-sitting

블로그 이미지

부들잎

안녕하세요

댓글을 달아 주세요