일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- go
- n8n
- 그래프 데이터베이스
- Database
- cypher쿼리
- 데이터모델링
- SQLD
- 고루틴
- 그래프데이터베이스
- cypher 쿼리
- basic golang
- cypher
- go best practices
- 자격증
- 엔터티
- apoc 라이브러리
- arangodb
- neo4j성능
- 프로그래밍
- token bucket
- Golang
- cypher팁
- 중심성 측정
- graph
- 쿼리프로파일링
- Neo4j
- 정리
- concurrency
- GraphDB
- 커뮤니티 탐지
- Today
- Total
목록2025/03/10 (6)
Jamie the programmer
1. 시스템 보안1.1. 정보 시스템의 범위 및 이해1.1.1. 단말 및 서버 시스템단말 시스템 (PC, 모바일, 프린터, IoT/IIoT 등)시스템 서버 (DB, DNS, E-mail, WEB/WAS, 파일서버, Cloud, 보안제품 등)1.1.2. 운영체제단말 운영체제 (Window, Linux, Android, iOS, Embeded OS 등)서버 운영체제 (Windows, Linux, Unix 등)1.1.3. 시스템 정보시스템 환경정보, 인증정보, 시스템/감사 로그 1.2. 시스템 보안위협 및 공격기법1.2.1. 시스템 보안위협관리적 보안위협: 보안설정, 권한설정, 내부자 위협 등기술적 보안위협: 보안취약점에 의한 도청, 정보유출‧변조, 비인가 접근 등1.2.2. 시스템 공격기법APT 공격, 알려..

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 Bu..

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) { ..