일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- SQLD
- 프로그래밍
- 랜섬웨어
- 그래프데이터베이스
- 사이버보안
- 정보보안
- go
- 보안솔루션
- Golang
- 정리
- Neo4j
- neo4j성능
- 자격증
- cypher
- 보안 분석
- 데이터모델링
- 해킹
- 보안
- 위협 탐지
- IT보안
- 사이버 보안
- Database
- 공부
- concurrency
- GraphDB
- 시험
- security
- graph
- 그래프 데이터베이스
- 정보보안기사
- Today
- Total
목록programming/golang (8)
Jamie the programmer

Go 언어를 사용해 프로젝트를 진행하다 보면, 패키지, 모듈, 그리고 워크스페이스라는 개념을 자주 접하게 된다.이 글에서는 이 세 가지 개념을 각각 살펴보고, 최신 Go 개발 환경에서 어떻게 사용하는지 간단히 정리해보자.1. Go 패키지(Package)1.1 패키지란?Go에서 **패키지(package)**는 코드의 물리적, 논리적 묶음을 의미한다.모든 Go 소스 파일은 반드시 package 키워드로 시작하며, 같은 디렉터리에 있는 소스 파일들은 같은 패키지로 묶인다.// mypackage.gopackage mypackagefunc Hello() { println("Hello from mypackage!")}1.2 패키지의 특징소문자로 시작하는 식별자(함수, 변수 등)는 패키지 내부에서만 접근 가능 ..

대규모 트래픽을 다루는 서버나 API에서는 Rate Limiting(속도 제한)이 매우 중요하다.보안 관점에서도, 무차별 암호 대입 공격(Brute Force)이나 Dos/DDoS 공격과 같은 악의적 트래픽을 효과적으로 제한하기 위해서는 Rate Limiting이 필수적이다.또한, 계정 도용 방지, API Key 남용 방지, 자원(네트워크, CPU, DB 등) 보호 등 다양한 측면에서 보안 강화를 기대할 수 있다.Go 언어에서는 표준 라이브러리에 포함된 확장 패키지 golang.org/x/time/rate와, 오픈소스로 제공되는 go.uber.org/ratelimit 라이브러리가 대표적이다. 이 글에서는 이 두 라이브러리가 구현하고 있는 대표적인 알고리즘인 Token Bucket과 Leaky Bucket..

1. Rate Limiting이란?*속도 제한(Rate Limiting)*은 리소스에 대한 접근을 일정 시간당 특정 횟수로 제한하는 메커니즘을 말한다.예: API 요청, 디스크 I/O, 네트워크 트래픽 등주요 목적서비스의 품질 유지: 지나치게 많은 요청이 몰려와도 안정적으로 처리악의적 공격 방어: 무차별 암호 대입 공격(Brute force)이나 Dos/DDoS 등 방지공정성(Fairness): 특정 사용자나 특정 작업이 과도하게 자원을 사용하지 않도록 제어시스템 부하 관리: 지나친 트래픽으로 인한 시스템 장애 예방Go에서는 고루틴(goroutine), 채널(channel), 그리고 **티커(ticker)**를 활용하여 쉽게 Rate Limiting 기능을 구현할 수 있다.예시 자료: Go By Exam..

Go 언어로 프로그래밍할 때, 여러 고루틴이 동시에 동작하다 보면 언제, 어떻게 안전하게 종료시킬지 고민하게 된다. 단순히 프로세스를 종료하는 것이 아니라, 자원 해제, 데이터 무결성 보장, 작업 마무리 등 여러 요소를 고려해야 하는데, 이를 "Gracefully 하게 죽인다"라고 표현한다.그럼, Gracefully 하게 죽인 다는 기준은 무엇일까?안전한 자원 해제: 열려있는 파일, 데이터베이스 연결, 네트워크 소켓 등 모든 자원을 올바르게 닫아야 한다.데이터 무결성 유지: 진행 중인 작업이나 처리 중인 데이터가 중간에 끊겨 데이터 불일치나 손실이 발생하지 않아야 한다.예측 가능한 종료: 고루틴이 종료될 때, 어떠한 예외 상황 없이 명시된 절차에 따라 종료되어야 한다.이 글에서는 두 가지 방법을 살펴본다..

1. 중첩을 피하고 에러를 먼저 처리하라✅ 핵심 로직을 깊게 중첩하지 않도록 에러를 먼저 처리// Bad: 중첩이 깊어지는 코드func process(value int) error { if value > 0 { if value = 100 { return errors.New("value must be less than 100") } if value%2 != 0 { return errors.New("value must be even") } return nil}2. 중복을 피하라✅ 반복되는 코드를 함수로 추출하여 재사용// Bad: 중복 코드 발생func printHelloWorld() { fmt.Println("Hello, World!")}func printHelloUser(name string) { ..

1. UML Diagram1.1. GraphvizGitHub - ondrajz/go-callvis: Visualize call graph of a Go program using Graphviz# Latest releasego install github.com/ofabry/go-callvis@latest# Development versiongo install github.com/ofabry/go-callvis@mastergo-callvis 적용 사례1.2. PlantUMLGitHub - jfeliu007/goplantuml: PlantUML Class Diagram Generator for golang projectsgo get github.com/jfeliu007/goplantuml/parsergo i..

◎ 실전 Go 프로젝트에 투입되기 전에 사전에 알아야할 Go 언어의 기본 및 필수 개념을 설명해 드립니다. ¶ 이번 글에서 다룰 내용은 다음과 같습니다. 1. 문자열 2. 구조체 3. 함수 4. 메서드 이어지는 다음글 [Golang] 기본적으로 알아야할 기초 지식 part3 에서는 고루틴, 채널, 컨텍스트 를 다루겠습니다. 1. 문자열 1.1. 문자열 변환 문자열은 유니코드 문자의 코드값을 정수로 표현한 값(rune 또는 int32)의 시퀀스이므로, []rune (또는 []int32)으로 변환할 수 있습니다. 1바이트로 표현할 수 있는 아스키 문자열은 []byte(또는 []uint8)로 변환할 수 있다. 아스키가 아닌 문자열을 []byte로 변환하면 잘못된 코드값으로 변환될 수 있으니 주의해야 합니다. ..

◎ 실전 Go 프로젝트에 투입되기 전에 사전에 알아야할 Go 언어의 기본 및 필수 개념을 설명해 드립니다. ¶ 이번 글에서 다룰 내용은 다음과 같습니다. 1. GOROOT 2. GOPATH 3. GOMODULE 4. 패키지 5. 포인터 6. 타입별 "zero value" 7. 인스턴스 이어지는 다음글 [Golang] 기본적으로 알아야할 기초 지식 part2 에서는 문자열, 구조체, 함수, 메서드 를 다루겠습니다. 1. GOROOT - go sdk를 설치한 디렉토리를 나타냅니다. - 자바에 비유를 들자면 JAVA_HOME 에 해당한다고 볼 수 있을 것 같습니다. 2. GOPATH - Go 프로젝트의 import 위치를 잡아줍니다. - 소스코드를 찾는 위치 결정 뿐만 아니라 모듈을 다운로드 하는 장소도 결정..