TIE- 코드 이슈 정리 및 보안/설정 상세 설명

kyoungyeon·2025년 1월 27일
0

TIE

목록 보기
52/53

질문 사항

  1. 동기 코드 사용:
    • 이벤트 루프 차단 문제 → 비동기 라이브러리 또는 워커 스레드 활용 필수.
  2. 암호화:
    • IV는 재사용하지 말 것. 키는 Vault/HSM으로 관리.
  3. 카프카 설정 분리:
    • 환경별 유연성 확보 → 12-Factor App 원칙 준수.
  4. 네임스페이스 분리:
    • 서비스 간 영향도 최소화를 위해 토픽/클러스터 격리.

1. 동기 메소드 내 동기적 코드 사용 문제

  • 문제점:

    • 이벤트 루프 차단
      • Node.js 또는 Python Async 환경에서 동기 코드(fs.readFileSync, requests.get)를 사용하면 전체 스레드가 멈춤.
      • 예: API 응답 지연 → 서비스 장애로 이어질 수 있음.
  • 해결 방안:

    • 비동기 라이브러리 사용

      # Bad: 동기 방식  
      import requests  
      response = requests.get('https://api.example.com')  
      
      # Good: 비동기 방식 (aiohttp 사용)  
      import aiohttp  
      async def fetch_data():  
          async with aiohttp.ClientSession() as session:  
              async with session.get('https://api.example.com') as response:  
                  return await response.json()  
    • CPU 집약적 작업은 워커 스레드로 분리

      // Node.js 예시  
      const { Worker } = require('worker_threads');  
      const worker = new Worker('./heavy-task.js');  

2. 설정 파일(conf.ini) 및 암호화 메커니즘

  • 암복호화 설정:

    • 초기화 벡터(IV)
      • 동일 키로 다른 암호문 생성 → 재사용 공격 방지.
      • 예: AES-256-CBC 모드에서 랜덤 IV 생성 후 암호문에 추가 저장.
    • 키 관리:
      • 비밀키(Key): 환경 변수 또는 AWS KMS 같은 서비스로 분리 저장.
      • parse_key: 외부 API 인증용 → 설정 파일에 노출 금지.
  • 암호화 코드 예시:

    from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes  
    from cryptography.hazmat.backends import default_backend  
    import os  
    
    # 키와 IV 생성 (실제로는 안전한 저장소에 분리)  
    key = os.urandom(32)  # AES-256  
    iv = os.urandom(16)  
    
    # 암호화  
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())  
    encryptor = cipher.encryptor()  
    ciphertext = encryptor.update(b"민감한 데이터") + encryptor.finalize()  

3. 도커 컴포즈와 별도 카프카 설정(conf.ini) 분리 이유

  • 핵심 목적: 유연성환경 분리
    • 시나리오별 설정 관리:
      • 개발/운영 환경에서 카프카 클러스터 주소, 토픽 이름이 다를 수 있음.
      • 예: 개발용 로컬 카프카 vs 운영용 Confluent Cloud.
    • MSA 네임스페이스 분리:
      • news_kafka: 뉴스 서비스 전용 토픽을 독립 관리 (예: news_evaluate).
      • 모듈별 설정을 분리해 의존성 최소화.
  • 도커 컴포즈 vs conf.ini 역할:
    | 도커 컴포즈 | conf.ini |
    |----------------|-------------|
    | 컨테이너 네트워크/볼륨 정의 | 애플리케이션 레벨 설정 (토픽, 암호키) |
    | 인프라 스택 관리 | 비즈니스 로직 관련 파라미터 관리 |

4. 카프카 네임스페이스 news_evaluate 분리 배경

  • 주요 사유:
    1. 부하 분산:
      • 뉴스 평가 데이터가 대량 집계되는 경우 → 전용 토픽으로 트래픽 격리.
    2. 장애 격리:
      • news_evaluate 토픽 장애가 다른 서비스(예: news_ranking)에 영향을 미치지 않도록 함.
    3. 환경별 설정:
      • 개발 환경: 로컬 카프카 사용.
      • 운영 환경: 고성능 클러스터 (CPU/메모리 최적화).
  • 설정 파일 예시 (conf.ini):
    [news_evaluate]  
    bootstrap_servers = kafka-news:9092  
    topic = news_evaluate_topic  
    security_protocol = SASL_SSL  
    sasl_mechanism = PLAIN  

profile
🏠TECH & GOSSIP

0개의 댓글

관련 채용 정보