본문 바로가기

전체 글27

[Architecture] S3 버킷 검사 로직의 효율적인 설계: 다양한 패턴과 결합도 최적화 S3 버킷 내부를 검사하는 로직을 Java로 구현할 때, 다양한 설계 패턴과 결합도 개념을 적용하여 효율적이고 유지보수가 용이한 설계를 만들 수 있다. 이 글에서는 여러 설계 패턴을 소개하고, 강한 결합과 느슨한 결합의 개념을 적용하여 더욱 유연한 구조를 만드는 방법을 설명한다. 설계 목표코드의 복잡성 감소S3 관련 작업의 중앙화확장성 있는 구조 설계다른 모듈에서 쉽게 사용할 수 있는 인터페이스 제공결합도를 낮추어 유연성과 테스트 용이성 향상 설계 패턴 예시Facade 패턴public interface S3Operations { List listBuckets(); List listObjects(String bucketName); void analyzeBucketContents(String.. 2024. 9. 11.
[Security] AWS Security Hub: AWS CSPM 도구 AWS Security Hub는 클라우드 보안 상태 관리(CSPM) 도구로, 클라우드 환경의 보안 상태를 종합적으로 모니터링하고 문제를 해결한다. CSPM은 클라우드 인프라의 설정 오류를 탐지하고, 이를 통해 보안 위험을 최소화할 수 있다. Security Hub는 이러한 CSPM 기능을 통해 다양한 AWS 계정과 리전에서 일관된 보안 상태를 유지하도록 돕는다. 주요 기능1. 자동화된 보안 평가Security Hub는 AWS 모범 사례 및 산업 표준(CIS, PCI DSS, NIST 등)을 기반으로 자동화된 보안 점검을 제공한다. 이를 통해 계정과 리소스의 보안 상태를 주기적으로 평가하고, 보안 위협을 식별하여 우선순위를 정할 수 있다.2. 통합 보안 관리AWS 서비스 및 서드파티 보안 도구에서 수집된 .. 2024. 9. 4.
[Golang] Go 언어에서의 패키지 이름 짓기 (no under_scores or mixedCaps) Go 언어에서 패키지 이름은 코드의 가독성과 유지보수성에 중요한 역할을 한다. 패키지 이름은 간결하고 명확해야 하며, 공백이나 여러 어절을 사용할 수 없다. 이번 글에서는 Go 언어에서 패키지 이름을 짓는 방법과 그 중요성에 대해 알아본다. 패키지 이름의 중요성Go 코드의 조직화는 패키지를 통해 이루어진다. 패키지 이름은 해당 패키지의 내용과 목적을 쉽게 이해할 수 있도록 도와준다. 잘 지어진 패키지 이름은 클라이언트 코드가 패키지를 어떻게 사용해야 하는지 명확하게 나타내며, 패키지 유지보수자가 패키지의 내용을 관리하는 데에도 도움이 된다. 패키지 이름 짓기 규칙과 관습소문자 사용: Go의 패키지 이름은 모두 소문자로 작성되어야 한다. 대문자를 포함하는 패키지 이름은 권장되지 않으며, 일반적으로 사용되지.. 2024. 8. 7.
[Golang] Go 언어에서 제네릭 메서드를 지원하지 않는 이유 Go 언어는 제네릭을 도입하여 타입 파라미터를 사용할 수 있게 되었지만, 메서드에는 제네릭 타입 파라미터를 지원하지 않는다. 이 글에서는 Go 언어가 왜 제네릭 메서드를 지원하지 않는지, 그리고 그 결정의 이유와 대안에 대해 살펴본다. 제네릭 메서드란 무엇인가?제네릭 메서드는 메서드 자체에 타입 파라미터를 사용하는 것을 의미한다. 이는 제네릭 타입을 가지고 있는 메서드를 정의할 수 있다는 것을 뜻한다. 예를 들어, 아래의 코드는 Nop이라는 제네릭 메서드를 가지는 Empty라는 타입을 정의한 것이다:type Empty struct{}func (Empty) Nop[T any](x T) T { return x}이 메서드는 인자로 받은 어떤 타입이든 그대로 반환한다. 자바의 제네릭 메서드 예시자바에서는 .. 2024. 8. 7.
[Security] CSF Tools 소개 및 가이드 CSF Tools는 NIST 사이버 보안 프레임워크(CSF)와 개인정보 보호 프레임워크(PF)를 보다 이해하기 쉽게 만들기 위해 다양한 유용한 도구를 제공하는 웹사이트이다. 이 글에서는 CSF Tools의 주요 기능과 제공되는 보안 컴플라이언스 자료에 대해 소개한다.https://csf.tools/ Welcome to CSF Tools - CSF ToolsThis site contains a number of helpful tools that will make the NIST Cybersecurity Framework (CSF) and Privacy Framework (PF) more understandable and accessible. Some of those tools are outlined bel.. 2024. 8. 6.
[Security] 보안 공학 원칙 (SA-8: Security Engineering Principles) 조직은 주로 새로운 개발 정보 시스템이나 주요 업그레이드를 진행 중인 시스템에 보안 공학 원칙을 적용한다. 기존 시스템의 경우, 현재 하드웨어, 소프트웨어 및 펌웨어 상태를 고려하여 시스템 업그레이드 및 수정에 보안 공학 원칙을 적용한다. 이 글에서는 NIST(National Institute of Standards and Technology)에서 가이드하고 있는 SA-8 항목에 따라 보안 공학 원칙을 설명한다. 보안 공학 원칙 (Security Engineering Principles)NIST Special Publication 800-53 에서 보안 공학 원칙에는 다음과 같은 요소들이 포함된다:계층화된 보호 개발 (Developing Layered Protections): 여러 보안 계층을 구축하여 .. 2024. 8. 5.
[DevOps] Makefile을 활용한 CI/CD 효율 극대화 자동화가 중요한 연속 통합(Continuous Integration, CI) 및 연속 배포(Continuous Deployment, CD) 세계에서 Makefile을 적절히 사용하면 구현 및 인프라 엔지니어링의 효율이 크게 향상될 수 있다. 주로 C 및 C++ 같은 언어의 코드 컴파일에 사용되는 도구로 알려진 Makefile은 CI/CD 파이프라인의 다양한 작업을 단순화하고 자동화하는 데 유용한 다목적 도구이다. 이 가이드는 초보자와 중급 소프트웨어 및 DevOps 엔지니어에게 Makefile을 CI/CD에서 효과적으로 사용하는 방법을 소개하고, 최선의 방법, 일반적인 함정, 주의할 점 등을 다룬다.Makefile이란 무엇인가?Makefile은 보통 make 빌드 자동화 도구와 함께 사용하는 쉘 명령을 .. 2024. 8. 2.
[Security] SLSA 프레임워크 내에서 시크릿 탐지와 제거의 중요성 시크릿(credential) 유출은 악의적인 행위자가 환경과 데이터에 접근할 수 있는 쉬운 방법 중 하나이다. 현대 소프트웨어 개발 라이프사이클의 복잡성으로 인해 API 키, 토큰, 비밀번호 등이 예상치 못한 장소에 유출될 수 있다. 2023년 동안 GitHub에서만 GitGuardian은 1,270만 개 이상의 하드코딩된 자격 증명이 추가된 것을 발견했다. 이러한 시크릿은 SLSA 증명 파일과 같은 보안 아티팩트를 생성하는 데 사용되는 파일에서도 발견될 수 있다. 이 글에서는 SLSA 프레임워크 내에서 시크릿이 어떻게 유출될 수 있는지, 이를 탐지하고 제거하는 방법에 대해 설명한다. SLSA란 무엇인가?SLSA(Supply-chain Levels for Software Artifacts)는 OpenSS.. 2024. 7. 31.
[Security] Jenkins 'Security Advisories' 로 Jenkins 플러그인 취약점 관리하기 Jenkins는 자동화된 테스트, 통합, 빌드 등을 가능하게 하는 오픈 소스 자동화 및 빌드 플랫폼이다. 그러나 Jenkins는 소프트웨어 공급망 공격에 취약한 플러그인으로 인해 공격에 노출될 수 있다. 이 글에서는 Jenkins 보안 권고 페이지를 활용하여 취약한 플러그인을 지속적으로 탐지하고 해결하는 방법을 살펴본다. Jenkins 개요Jenkins는 오픈 소스 자동화 및 빌드 플랫폼으로, 테스트, 통합, 문제, 빌드 등을 자동화할 수 있다. Jenkins는 보통 자체 프로세스에서 독립적인 애플리케이션으로 실행되며, 내장된 Java 서블릿 컨테이너/애플리케이션 서버와 함께 실행된다. Jenkins 플러그인의 역할과 중요성Jenkins 플러그인은 Jenkins의 기능을 확장하기 위해 도입되었다. 현재 .. 2024. 7. 30.
[Golang] 왜 Go에는 ?: 연산자(삼항 연산자)가 없을까? Go 언어는 깔끔하고 명확한 코드 작성을 지양한다. 이런 철학 때문에 Go에는 다른 언어에서 자주 사용하는 삼항 연산자(?:)가 없다. 이 글에서는 왜 Go에 삼항 연산자가 없는지, 그리고 같은 결과를 얻기 위해 어떤 방법을 사용할 수 있는지 살펴본다. 삼항 연산자란 무엇인가?삼항 연산자는 조건에 따라 값을 선택하는 짧은 방법이다. 예를 들어, C와 같은 언어에서 삼항 연산자는 다음과 같이 사용할 수 있다:n = (expr) ? trueVal : falseVal;이 코드는 expr이 참이면 trueVal을, 거짓이면 falseVal을 n에 대입한다. 간단하고 편리하게 조건문을 사용할 수 있는 방법이다. Go에서 삼항 연산자를 대신하는 방법Go에서는 삼항 연산자를 사용할 수 없지만, 같은 결과를 얻기 위해.. 2024. 7. 30.
[Golang] Go 언어에서 Interface(인터페이스)를 사용하여 다양한 데이터 유형을 처리하기 Go 언어에서 서버 사이드 프로그래밍을 하면서 예측할 수 없는 응답값을 처리할 때 사용할 수 있는 방법론 중 하나는 인터페이스를 사용하는 것이다. 특히, Go의 인터페이스는 다양한 데이터 유형을 효과적으로 처리할 수 있도록 지원한다. 이번 포스팅에서는 인터페이스의 사용법과 예제를 통해 Go에서 데이터를 처리하는 방법을 자세히 살펴본다. 인터페이스의 장단점인터페이스 사용의 장점은 다음과 같다:타입 안전성: 인터페이스를 사용하면 컴파일 시간에 타입 체크를 할 수 있어 런타임 에러의 가능성이 줄어든다.유연성: 인터페이스를 통해 다양한 타입을 같은 방식으로 처리할 수 있어 코드의 재사용성이 높아지고 유지보수가 쉬워진다.결합도 감소: 인터페이스를 사용하면 구현체에 대한 의존성을 줄이고 독립적인 프로그래밍이 가능해.. 2024. 7. 30.
[Security] Kubernetes에 Shift-Left 테스팅 적용하기 최근 몇 년 동안 소프트웨어 업계는 점점 더 shift-left 테스트 전략을 채택하고 있다. 이 전략은 배포 파이프라인 라이프사이클에서 더 이른 시점에 테스트를 수행하는 것을 지향한다. Kubernetes의 선언적 특성 때문에 shift-left 전략을 구현하기에 적합한 도구이다. 이 글에서는 Kubernetes 클러스터 오작동을 발견하기 위한 shift-right 및 shift-left 전략의 이점을 Gatekeeper와 Datree 오픈 소스 솔루션을 통해 살펴본다. Shift-Right 테스트Shift-right 테스트는 테스트 단계를 가능한 한 뒤로 미루는 전략이다. 일반적으로 프로덕션에 배포하기 전이나 배포 후에 테스트가 이루어진다. 이 접근법은 역사적으로 소프트웨어 업계에서 사용되어 왔으며,.. 2024. 7. 30.
[Elasticsearch] 성능 향상을 위한 _id 필드 사용 지양하기 Elasticsearch에서는 종종 몇 개의 필드만 검색해야 하는 경우가 많다. 이런 경우, 해당 필드들에 대해 `doc_values` 를 사용하면 쿼리 성능을 크게 향상시킬 수 있다. 이때, 기본적으로 검색되는 하나의 필드가 바로 `_id` 필드이다. 겉으로 보기에 이 필드는 아무 문제가 없어보이지만, 시스템 성능을 저해할 수 있다. 또 다른 전형적인 Elasticsearch 사용 사례는 보조 데이터베이스로서의 역할, 특히 전문 검색에서 관련 문서의 ID를 검색하는 데 Elasticsearch를 사용하는 경우이다. 대부분의 Elasticsearch 를 사용하는 사용자는 외부 ID를 `_id` 필드에 저장하여 일을 간단하게 하고 데이터 중복을 피하는 경우가 많다. 혹은 `_id`를 직접 사용하지 않더라도.. 2024. 2. 14.
ELK를 활용한 간단한 SIEM 구축해보기 (feat. WhiteHat School) # SIEM 이란 무엇인가? Security Information and Event Management, 정보 및 이벤트 관리 SIEM은 IT 네트워크 전반의 데이터를 중앙 집중화하여 보안 문제를 탐지하는 데 사용한다. 이는 로그 관리, 보안 이벤트 탐지, 보고 및 검색 기능을 포함한다. # ELK 란 무엇인가? ELK 스택은 Elasticsearch, Logstash, 그리고 Kibana의 세 가지 주요 오픈 소스 프로젝트를 말한다. Elasticsearch 역할: Elasticsearch는 분산형 검색 및 분석 엔진, 대량의 데이터를 신속하게 저장, 검색 및 분석할 수 있다. 특징: 고가용성, 확장성, 빠른 검색 성능을 제공, JSON 문서를 기반으로 하며, 복잡한 검색 쿼리를 지원한다. Logsta.. 2024. 1. 21.
[Java] Servlet (서블릿) Java Servlet(서블릿)은 서버의 기능을 확장하는 Java 소프트웨어 구성 요소이다.서블릿은 많은 유형의 요청에 응답할 수 있지만 웹 서버에서 웹 응용 프로그램을 호스팅하기 위해 웹 컨테이너를 가장 일반적으로 구현하므로 서버 측 서블릿 웹 API로 적합하다.이러한 웹 서블릿은 PHP 및 ASP.NET 과 같은 다른 동적 웹 콘텐츠 기술(dynamic web content technologies)과 동등한 역할을 처리한다고 볼 수 있다.서블릿을 정의해보면 서블릿(servlet)은 WAS에 동작하는 JAVA 클래스이고, 서블릿은 HttpServlet 클래스를 상속받아야 합니다.서블릿과 JSP로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 이 두 가지(JSP, 서블릿)를 조화롭게 사용해야 한다... 2023. 11. 19.
[Docker] '--no-cache' 옵션 도커에서 --no-cache 옵션은 docker build 명령어로 이미지를 생성할 때 캐시를 사용하지 않도록 하는 옵션이다. 기본적으로 도커는 이미지 빌드 시에 이전에 실행된 단계의 결과물을 캐싱하여 동일한 단계를 다시 실행하지 않고 빠르게 이미지를 생성한다. 이 캐싱은 개발 단계에서는 유용하지만 때로는 원치 않는 동작을 일으킬 수 있다.--no-cache 옵션을 사용하면 캐싱을 사용하지 않고, 이미 존재하는 캐시를 무시하고 매번 새로운 이미지를 빌드한다. 이는 다음과 같이 docker build 명령어를 사용할 때 옵션으로 추가된다:docker build --no-cache -t  --no-cache 옵션이 유용한 경우최신 소스나 종속성을 가져와야 할 때: 이전에 캐싱된 빌드 결과를 무시하고 항상 .. 2023. 11. 7.
[Security] CIS (Center of Internet Security) Benchmarks https://www.cisecurity.org/ CISCIS is a forward-thinking nonprofit that harnesses the power of a global IT community to safeguard public and private organizations against cyber threats.www.cisecurity.orgCIS (Center of Internet Security) Benchmarks는 인터넷 보안의 중심이라는 의미를 가지고 있다. 이것은 전 세계적으로 사용되는 IT 시스템 및 기기에 대한 보안 설정 가이드라인을 제공하는 프레임워크로, 공개적으로 사용할 수 있도록 제공되며, 실질적인 보안 향상을 위한 권장 사항들을 포함하고 있다. CIS Benchm.. 2023. 10. 23.
[Security] 적대적 기계학습 (Adversarial Machine Learning) 인공지능(AI)과 딥 러닝(DL) 기법이 빠르게 발전하면서 배포된 알고리즘의 보안과 견고성을 보장하는 것이 중요하다. 최근에는 적대적 샘플에 대한 DL 알고리듬의 보안 취약성이 널리 인식되고 있다. 조작된 샘플은 인간에 의해 양성으로 인식되는 동안 DL 모델의 다양한 잘못된 행동을 초래할 수 있다. 실제로도 다양한 시나리오에서 적대적 공격의 성공적인 구현은 그 실용성이 입증되고 있으며, 적대적 공격과 방어 기술은 머신 러닝과 보안 커뮤니티 모두에서 점점 더 많은 관심을 끌고 있다. 적대적 기계학습은 기만적 입력을 제공하여 모델을 속이려 하는 머신 러닝 기법이다. 가장 일반적인 경우는 기계 학습 모델에 오작동을 일으키는 것이다. 대부분의 기계 학습 기법은 훈련과 시험 데이터가 동일한 통계 분포에서 생성되는.. 2023. 10. 16.