Secrets Manager vs Parameter Store (이전 Task Statement 연결)
DR 전략 4단계 → Backup→Pilot Light→Warm Standby→Multi-site
데이터 성능 영향 → KMS/RDS 일부 성능 영향 가능, EBS 암호화 영향 미미
📊 시각화 다이어그램
flowchart TD A[Data Security Controls] A --> B[Encryption] B --> B1[At Rest] B --> B2[In Transit] B --> B3[Symmetric / Asymmetric] B --> B4[KMS vs CloudHSM] B --> B5[S3 SSE-S3 / SSE-KMS / SSE-C / Client-side] A --> C[Compliance] C --> C1[AWS Artifact] C --> C2[CAF - Security Perspective] A --> D[Storage & DR] D --> D1[Backup & Restore] D --> D2[Pilot Light] D --> D3[Warm Standby] D --> D4[Multi-site Active-Active] D --> D5[AWS Backup / Snapshots / Replication] A --> E[Access & Patterns] E --> E1[Least Privilege] E --> E2[Data Classification] E --> E3[Defense in Depth] E --> E4[S3 Lifecycle / Intelligent Tiering]
🛡️ Domain 1-2: Design Secure Workloads and Applications
✨ 핵심 주제
사람, 도구, 애플리케이션이 안전하게 AWS 서비스에 접근하도록 설계
VPC 보안 아키텍처 및 네트워크 계층 보안이 중심
🌐 Amazon VPC Fundamentals
VPC 유형: Default VPC vs Custom VPC (초기 보안 설정 다름)
VPC 범위: Regional 서비스
Subnet: AZ 단위(= Zonal 서비스)
구성 요소
Security Group (SG): 인스턴스 단위 가상 방화벽
NACL (Network ACL): 서브넷 단위 네트워크 필터
Route Table: 트래픽 라우팅 제어
NAT Gateway: 프라이빗 서브넷 → 아웃바운드 인터넷 액세스
네트워크 설계 고려사항
Public Subnet ↔ Private Subnet 구분
CIDR, 라우팅, 보안 필터 설계
VPN, Direct Connect, Transit Gateway, VPC Peering, PrivateLink 활용
🔒 외부 연결 보안
VPN 연결
Site-to-Site VPN
Client VPN
Direct Connect: 전용선, 안정적·보안적 연결
PrivateLink
서비스 공유 시 인터넷 노출 없이 다른 VPC에서 접근 가능
VPC Peering보다 보안적이고 관리 효율적
📂 데이터 보안 & 개인 정보 (PII)
Amazon Macie: ML 기반 S3 내 PII(개인정보) 탐지/보호
Amazon Cognito: 인증·인가 (User Pool, Identity Pool, Federation)
Amazon GuardDuty: 위협 탐지 서비스
🔑 애플리케이션 보안
Secrets 관리
AWS Secrets Manager: 자동 Credential Rotation, Secret 저장
SSM Parameter Store: 설정값/비밀 관리 (Secrets Manager보다 단순)
방화벽 & 보호 서비스
AWS WAF: ALB, API Gateway, CloudFront에 적용 가능
AWS Shield:
Standard (무료, 기본 DDoS 보호)
Advanced (추가 DDoS 보호, SLA 보장)
🔐 기타 보안 서비스 통합
IAM Identity Center (SSO)
AWS Systems Manager Parameter Store
Amazon CloudWatch & CloudTrail (추적/모니터링)
📌 시험 대비 핵심 체크
VPC = Regional / Subnet = Zonal
SG vs NACL 차이 (상태 저장 여부, 적용 단위)
Private Subnet ↔ NAT GW ↔ 인터넷 아웃바운드 구조
PrivateLink vs VPC Peering → 대규모 확장 시 PrivateLink 선택
Macie → PII 보호
Cognito → Federation & User Pool
Secrets Manager vs Parameter Store 차이
WAF 배포 가능한 리소스 기억 (ALB, API GW, CloudFront)
Shield Standard vs Shield Advanced 차이
📊 시각화 다이어그램
flowchart TD A[Secure Workloads & Applications] A --> B[VPC Security] B --> B1[Default vs Custom VPC] B --> B2[SG / NACL / Route Tables] B --> B3[Subnet (Public vs Private)] B --> B4[NAT GW, IGW] A --> C[Secure Connections] C --> C1[Site-to-Site VPN] C --> C2[Client VPN] C --> C3[Direct Connect] C --> C4[PrivateLink] A --> D[Data Security] D --> D1[Amazon Macie - PII] D --> D2[Encryption / Keys] D --> D3[Backup & DR] A --> E[App Security Services] E --> E1[Secrets Manager] E --> E2[Parameter Store] E --> E3[AWS WAF] E --> E4[AWS Shield] A --> F[Identity & Monitoring] F --> F1[Amazon Cognito] F --> F2[IAM Identity Center] F --> F3[GuardDuty] F --> F4[CloudWatch & CloudTrail]
✅ 정리
VPC 보안 설계 능력이 핵심 (SG, NACL, 서브넷, NAT, PrivateLink)
Exception in thread "main" java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayList<db.Record>` from Object value (token `JsonToken.START_OBJECT`) at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 1] at db.RecordRepository.getRecords(RecordRepository.java:52) at Application.main(Application.java:12) Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayList<db.Record>` from Object value (token `JsonToken.START_OBJECT`) at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 1] at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59) at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1794) at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1568) at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1515) at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:404) at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:253) at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:29) at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4971) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3887) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3870) at db.RecordRepository.getRecords(RecordRepository.java:45) ... 1 more
Error 정리
“Cannot deserialize value of type ArrayList<Record> from Object value (START_OBJECT)” → 서버에서 배열 [...]이 아니라 객체 {...} 가 왔는데, 코드가 List<Record> 로 파싱하려다 실패한 겁니다.
대부분 아래 중 하나가 원인입니다.
Supabase REST 호출이 배열을 반환하도록 구성되지 않음
테이블 조회는 /{table}?select=* 형태여야 항상 [] 배열이 옵니다. ?select=* 빠지거나 경로/대소문자 틀리면 에러 객체 {message, hint, …} 가 옵니다.
헤더 누락/권한 오류(401/403) 로 에러 JSON 객체가 반환
apikey 와 Authorization: Bearer <SUPABASE_KEY> 둘 다 필요.
애초에 단건(RPC/싱글 오브젝트) 을 반환하는 엔드포인트를 불렀는데, 코드가 List<Record> 로 읽음.
Supabase -> MyProject -> API Docs -> TABLE NAME -> Bash -> Link Copy
API Key 문제인 줄 알았으나 Supabase REST API BASE URL Link 오타였음.
나처럼 게으른 개발자 취준생은 이따가 해야지 5분만 잤다가 일어나서 해야지 하다가 다음날 새벽에 일어나는 경우
커밋을 못해 비어있는 칸에 잔디심는 방법을 정리해서 간간히 써먹어 보려고 한다.
Commit 날짜 변경 방법
1. Github Login 후 우측 상단에서 + 모양 클릭 → New repository 마우스로 클릭
2. Repository Name 입력 → Public 선택 → Create repository 마우스로 클릭
3. 커밋할 폴더를 선택하여 마우스 우클릭 → Git Bash Here 마우스로 클릭
4. 초반 세팅 명령어
git init # 새로운 repository를 만들고 Git으로 프로젝트 관리를 시작할 때는 다음 명령어을 입력
git status # Git으로 작업을 할 때 어떤 파일이 변경되었는지, 추가되었는지 등 전부 확인 가능
git add . # 폴더 내에 있는 파일 전체 add
# 다른 방법
git init
vi test3.txt
git status
git add . # 폴더 내에 있는 파일 전체 add
git add test3.txt
5. Commit 명령어 실행
git commit -m "Commit Message" # 명령어
git commit -m "first commit" # 실제 사용한 명령어