일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Golang
- 시험
- concurrency
- 보안
- 위협 탐지
- 정보보안기사
- 해킹
- SQLD
- 정보보안
- Database
- 그래프 데이터베이스
- cypher
- 보안솔루션
- 보안 분석
- 정리
- 그래프데이터베이스
- 데이터모델링
- GraphDB
- IT보안
- neo4j성능
- Neo4j
- 사이버 보안
- 공부
- go
- 사이버보안
- security
- 자격증
- graph
- 프로그래밍
- 랜섬웨어
- Today
- Total
목록programming (32)
Jamie the programmer

✍️ "내 코드, 어떻게 공유해야 할까?" 오픈소스 라이선스 A부터 Z까지 한 번에 정리합니다! 1. 오픈소스 라이선스가 뭐죠?오픈소스 라이선스는 남의 코드를 사용하거나 수정할 때 지켜야 할 규칙입니다.예를 들어, "이 코드를 쓰려면 원작자 이름을 밝혀라" 또는 "수정한 코드도 공개해라" 같은 조건을 정해 놓은 것이죠.잘못 선택하면 법적 분쟁이 생길 수 있으니 꼭 이해하고 선택하세요! 2. 핵심 용어 3초 만에 이해하기카피레프트 (Copyleft):"내 코드를 쓰면 너의 코드도 공개해야 해!"예시: GPL 라이선스 → 강한 카피레프트. 코드 일부만 사용해도 전체 프로젝트 공개 의무.특허 조항:"내 코드를 쓰다가 특허 문제 터지면 나도 보호해 줄게!"예시: Apache 2.0 → 특허 소송 시 라이선스 ..

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..
labelCount, relTypeCount, propertyKeyCount, nodeCount, relCount, labels, relTypes, stats 조회CALL apoc.meta.stats() 모델 데이터 한눈에 보기CALL apoc.meta.graph 모든 relationship 타입 조회MATCH () 모든 라벨 조회CALL db.labels() 특정 노드의 라벨 조회MATCH (a: {name:'Jane Doe'})RETURN distinct labels(a)