Docker는 마이크로서비스 아키텍처와 CI/CD 파이프라인 구축에 필수적인 기술이므로, 이 자료들을 통해 탄탄한 기본기를 다지는 것이 중요합니다.
2. Linux 시스템 보안: KISA CCE 기준 점검 스크립트 분석
pre_linux_v1.0.sh
라는 중요한 셸 스크립트 파일이 포함되어 있습니다. 이 스크립트는 KISA(한국인터넷진흥원)의 CCE(Common Configuration Enumeration) 기준에 따라 Linux 시스템의 보안 취약점을 점검합니다. 주요 점검 항목은 다음과 같습니다.
U-01 root 계정의 원격 접속 제한
root 계정의 직접적인 원격 접속을 제한하여 보안을 강화합니다.
U-02 패스워드 복잡성 설정
안전한 패스워드 사용을 위한 복잡성 규칙을 확인합니다. (수동 점검 필요)
U-03 계정 잠금 임계값 설정
로그인 실패 시 계정 잠금 정책을 점검하여 무차별 대입 공격을 방지합니다. (수동 점검 필요)
U-04 패스워드 최대 사용기간 설정
패스워드 변경 주기를 강제하여 보안을 유지합니다. 90일 이상인 경우 취약으로 판단합니다.
U-05 패스워드 파일 보호
/etc/shadow
와 같은 중요한 패스워드 파일의 접근 권한을 확인합니다.
U-06 root 홈, 패스 디렉터리 권한 및 패스 설정
root 사용자의 홈 디렉터리 및 PATH 환경 변수의 보안 설정을 점검합니다.
U-07 파일 및 디렉터리 소유자 설정
시스템 중요 파일 및 디렉터리의 소유자가 올바르게 설정되었는지 확인합니다.
U-08 ~ U-13 중요 파일 소유자 및 권한 설정
/etc/passwd
/etc/shadow
/etc/hosts
/etc/(x)inetd.conf
/etc/syslog.conf
/etc/services
등 핵심 시스템 파일들의 소유자 및 권한 설정을 점검합니다.
U-14 SUID, SGID, Sticky bit 설정 파일 점검
특수 권한이 설정된 파일들을 점검하여 잠재적인 보안 위험을 파악합니다.
U-15 사용자, 시스템 시작파일 및 환경파일 소유자 및 권한 설정
사용자 홈 디렉터리 및 시작 스크립트 파일들의 권한 설정을 확인합니다.
U-16 world writable 파일 점검
누구나 쓰기 가능한 파일들을 찾아 보안 취약점을 제거합니다. (수동 점검 필요)
U-17 ``` $HOME/.rhosts ```, ``` hosts.equiv ``` 사용 금지
원격 접속 보안을 위해 사용이 권장되지 않는 파일들의 존재 여부를 확인합니다.
U-18 접속 IP 및 포트 제한
시스템 접근 제어 설정을 점검합니다. (수동 점검 필요)
U-19 cron 파일 소유자 및 권한 설정
cron 관련 파일들의 소유자 및 권한을 점검하여 비정상적인 작업 실행을 방지합니다.
U-20 finger 서비스 비활성화
finger 서비스는 사용자 정보를 노출할 수 있으므로 비활성화 여부를 점검합니다.
U-21 Anonymous FTP 비활성화
익명 FTP 서비스는 보안에 취약할 수 있으므로 비활성화 여부를 점검합니다. (수동 점검 필요)
U-22 r계열 서비스 비활성화
rsh, rlogin, rexec 등 r계열 서비스는 보안에 취약하므로 비활성화 여부를 점검합니다.
U-23 DoS 공격에 취약한 서비스 비활성화
echo, discard, daytime, chargen 등 DoS 공격에 악용될 수 있는 서비스의 비활성화 여부를 점검합니다.
U-24 NFS 서비스 비활성화
NFS(Network File System) 서비스는 적절한 접근 제어가 없으면 보안에 취약할 수 있으므로 비활성화 여부를 점검합니다.
U-25 NFS 접근 통제
NFS 서비스가 활성화되어 있다면,
/etc/exports
파일을 통해 접근 통제가 제대로 이루어지고 있는지 점검합니다. (수동 점검 필요)
U-26 automountd 제거
automountd 서비스는 NFS와 관련된 취약점을 가질 수 있으므로 제거 여부를 점검합니다.
U-27 RPC 서비스 확인
rpc.cmsd, rpc.ttdbserverd, sadmind 등 불필요한 RPC 서비스의 활성화 여부를 점검합니다.
U-28 NIS, NIS+ 점검
NIS(Network Information Service) 및 NIS+ 서비스는 중앙 집중식 계정 관리에 사용되지만, 보안 취약점이 있을 수 있으므로 활성화 여부를 점검합니다.
U-29 tftp, talk 서비스 비활성화
tftp, talk, ntalk 서비스는 보안에 취약할 수 있으므로 비활성화 여부를 점검합니다.
U-30 Sendmail 버전 점검
Sendmail 메일 서버의 버전을 점검하여 최신 보안 패치 적용 여부를 확인합니다. (수동 점검 필요)
U-31 스팸 메일 릴레이 제한
Sendmail의 스팸 메일 릴레이 제한 설정 여부를 점검합니다. (수동 점검 필요)
U-32 일반 사용자의 Sendmail 실행 방지
일반 사용자가 Sendmail을 실행하여 악용하는 것을 방지하는 설정 여부를 점검합니다.
U-33 DNS 보안 버전 패치
DNS 서버(named)의 버전을 점검하여 최신 보안 패치 적용 여부를 확인합니다. (수동 점검 필요)
U-34 DNS ZoneTransfer 설정
DNS Zone Transfer 설정이 적절하게 제한되어 있는지 점검하여 민감한 정보 노출을 방지합니다.
U-35 최신 보안패치 및 벤더 권고사항 적용
시스템에 최신 보안 패치와 벤더 권고사항이 적용되었는지 전반적으로 점검합니다. (수동 점검 필요)
이 스크립트는 Linux 시스템의 기본적인 보안 강화를 위한 좋은 참고 자료이며, 주기적인 점검을 통해 시스템의 안전성을 확보하는 데 기여할 수 있습니다.
3. 웹 애플리케이션 아키텍처: 서비스 설계의 청사진
DAY1 폴더의 'Web Application Architecture 완벽 가이드.pdf' 파일은 다양한 웹 아키텍처 패턴을 소개하며, 각 아키텍처의 특징, 장단점, 그리고 적합한 적용 사례를 명확하게 설명합니다.
Monolithic Architecture (모놀리식 아키텍처)
모든 기능이 하나의 통합된 코드베이스로 구성된 전통적인 방식입니다. 개발 초기에는 빠르지만, 규모가 커질수록 유지보수가 어려워지는 단점이 있습니다. 소규모 프로젝트, 스타트업의 MVP(Minimum Viable Product), 단순한 비즈니스 로직에 적합합니다.
Microservices Architecture (마이크로서비스 아키텍처)
각 비즈니스 기능이 독립적인 서비스로 분리되어 API를 통해 통신하는 방식입니다. 높은 확장성과 유연성을 제공하며, 팀 간 독립적인 개발이 가능하고 장애 격리가 용이하다는 장점이 있습니다. 하지만 시스템 복잡도가 증가하고 분산 시스템 관리가 어렵다는 단점이 있습니다. Netflix, Amazon, Uber와 같은 대규모 서비스, 높은 확장성이 필요한 서비스에서 주로 사용됩니다.
Layered (N-Tier) Architecture
애플리케이션을 논리적 계층으로 분리하여 각 계층이 특정 책임만을 가지도록 하는 구조입니다. 유지보수와 테스트가 용이하며 재사용성이 높지만, 계층 간 의존성 관리와 성능 오버헤드가 발생할 수 있습니다. 전통적인 웹 애플리케이션, 엔터프라이즈 애플리케이션(은행, 보험 시스템)에 적합합니다.
Client-Server Architecture
클라이언트와 서버로 명확히 분리된 구조로, 역할 분리가 명확하고 독립적인 업데이트가 가능합니다. 웹 애플리케이션(브라우저-서버), 모바일 앱(앱-API 서버), 데스크톱 애플리케이션 등 광범위하게 적용됩니다.
Serverless Architecture
서버 관리 없이 클라우드 제공자가 인프라를 관리하며, 함수 단위로 코드를 실행하는 방식(FaaS)입니다. 인프라 관리 부담이 없고 자동 스케일링, 비용 효율적이라는 장점이 있습니다. 하지만 콜드 스타트 지연과 벤더 종속성이 단점입니다. API 백엔드, 이벤트 처리(이미지 리사이징, 로그 처리), 주기적 작업(크론 잡), 챗봇, IoT 백엔드 등에 활용됩니다.
Event-Driven Architecture
이벤트의 생성, 감지, 소비를 중심으로 구성되며, 컴포넌트 간 느슨한 결합과 비동기 통신이 특징입니다. 높은 확장성과 유연성, 실시간 처리가 가능하며 새로운 기능 추가가 용이합니다. 그러나 디버깅이 복잡하고 이벤트 순서 보장이 어려울 수 있습니다. 실시간 알림 시스템, 주문 처리 시스템, IoT 데이터 처리, 로그 및 모니터링 시스템에 적합합니다.
MVC (Model-View-Controller) Architecture
Model, View, Controller로 구성되어 관심사를 명확하게 분리하는 패턴입니다. 병렬 개발과 테스트가 용이하지만, 소규모 프로젝트에는 과도할 수 있습니다. Ruby on Rails, Django (Python), Spring MVC (Java), ASP.NET MVC 등 다양한 프레임워크에서 활용됩니다.
Microkernel (Plugin) Architecture
코어 시스템은 최소 기능만 제공하고 확장 기능은 플러그인으로 추가하는 방식입니다. 높은 확장성과 유연성이 특징이며, Eclipse IDE, Visual Studio Code, WordPress, Jenkins 등에서 활용됩니다.
아키텍처 선택 가이드에서는 프로젝트 규모, 팀 구성, 확장성 요구사항, 개발 속도, 예산 및 리소스, 기술 역량 등 다양한 기준을 고려하여 적합한 아키텍처를 선택하는 방법을 제시합니다. 실제 프로젝트에서는 여러 아키텍처 패턴을 조합하는 하이브리드 접근 방식이 일반적이며, 모놀리식에서 마이크로서비스로 전환하는 스트랭글러 패턴(Strangler Pattern), 데이터베이스 분리, API Gateway 도입, 모니터링 강화 등의 마이그레이션 전략도 함께 다룹니다.
DAY1 폴더의 자료들은 현대 소프트웨어 개발에서 필수적인 Docker 컨테이너 기술, Linux 시스템 보안의 중요성, 그리고 다양한 웹 애플리케이션 아키텍처 패턴에 대한 깊이 있는 지식을 제공합니다. 이 내용들을 잘 숙지하고 실제 프로젝트에 적용한다면, 더욱 견고하고 효율적인 시스템을 구축하는 데 큰 도움이 될 것입니다.