문미새 개발일지

정처기 공부 04/04 본문

정보처리기사

정처기 공부 04/04

문미새 2025. 4. 4. 22:36
728x90

자바 싱글톤 출력

public class Connection {
    private static Connection _inst = null;
    private int count = 0;

    private Connection() {}

    public static Connection getInstance() {
        if (_inst == null) {
            _inst = new Connection();
        }
        return _inst;
    }

    public void count() {
        count++;
    }

    public int getCount() {
        return count;
    }

    public static void main(String[] args) {
        Connection conn1 = Connection.getInstance();
        conn1.count();

        Connection conn2 = Connection.getInstance();
        conn2.count();

        Connection conn3 = Connection.getInstance();
        conn3.count();

        conn1.count();

        System.out.print(conn1.getCount());
    }
}

 

클래스 안에서 Connection _inst를 선언하고 선언 값이 null인 초기에만 새 객체를 생성한다.

 

Connection conn1 = Connection.getInstance();
conn1.count();
  • inst값이 null인 첫 선언이라 새 객체를 생성하고 객체의 count() 메소드를 실행한다.
  • count()메소드는 count 변수를 1증가시킨다. count는 1이 된다.
Connection conn2 = Connection.getInstance();
conn2.count();
  • 이미 객체가 있기 때문에, 생성되지 않고 기존 inst객체를 반환하여 count() 메소드를 실행한다.
  • 기존 1에서 1증가되어 count는 2가 된다.
Connection conn3 = Connection.getInstance();
conn3.count();
  • 이미 객체가 있기 때문에, 생성되지 않고 기존 inst객체를 반환하여 count() 메소드를 실행한다.
  • 기존 2에서 1증가되어 count는 3이 된다.
conn1.count();
  • count()를 한 번더 실행하여 기존 3에서 1증가되어 count는 4가 된다.
 
최종 출력은 4가 된다.

C언어 출력

#include <stdio.h>

int main() {
    int v1= 0, v2= 35, v3= 29;
    
    if(v1>v2 ? v2:v1) {
    	v2= v2 << 2;
    } else {
    	v3= v3 << 2;
    }
    
    printf("%d", v2+v3);
    
    return 0;
}

if문의 삼항연산자를 통해 0>35는 false로 v1(0)값이 되어 else문이 실행된다.

v3 = v3 << 2는 시프트 연산으로 v3값인 29를 2진수로 변경하고 0을 2개 채운다.

011101(29) => 01110100(116)

 

출력값은 116이 된다.


응집도 높은 순

ㄱ. 기능
ㄴ. 교환
ㄷ. 우연
ㄹ. 시간
ㅁ. 순차
ㅂ. 논리
ㅅ. 절차

 

결과

ㄱ - ㅁ - ㄴ - ㅅ - ㄹ - ㅂ - ㄷ
기능 - 순차 - 교환 - 절차 - 시간 - 논리 - 우연

허니팟(Honeypot)

허니팟은 사이버 보안에서 사용되는 기술로, 침입자를 유인하기 위해 공격당하는 것처럼 보여주며, 공격 기법을 조사하는 기술이다.

 

기능

  • 공격자의 행동을 관찰하여 패턴을 분석
  • 취약점을 연구하여 보안 강화에 활용

예시

  • 외부에서 접근 가능한 가짜 로그인 페이지를 만들어, 침입자가 입력을 시도하면 행위를 기록하여 데이터 수집이 가능

테스팅 기법

블랙박스 테스트(BlackBox Testing)

  • 내부 코드와 구조는 모른 채, 입출력만 보고 테스트하는 기법
  • 사용자 입장에서 테스트
  • 예시: 로그인 페이지에서 아이디와 비밀번호를 입력 시 정상적으로 로그인되는지 확인

회귀 테스트(Regression Testing)

  • 기존 기능이 새로운 코드를 추가한 후에도 작동하는지 확인하는 블랙박스 테스트 기법
  • 예시: 새로운 기능 추가 후, 로그인/회원가입 등의 기존 기능이 작동이 잘 되는지 확인

경계값 분석(Boundary Value Analysis)

  • 최소값, 최대값, 경계 근처의 값을 이용해 확인하는 블랙박스 테스트 기법
  • 예시: 입력 가능한 범위가 1~100일 때, 0, 1, 100, 101 등을 테스트

동등 분할 테스트(Equivalence Partitioning)

  • 입력 값을 유효/무효 그룹으로 나누고 각 그룹을 대표하는 값만 확인하는 블랙박스 테스트 기법
  • 예시: 입력값이 1~100일 때, 하나는 정상값(25), 하나는 -1(비정상)만 테스트

탐색적 테스트(Exploratory Testing)

  • 정해진 테스트 케이스 없이, 경험을 바탕으로 자유롭게 탐색하면서 확인하는 블랙박스 테스트 기법
  • 예시: 서비스를 직접 사용해보면서 예상 못한 오류나 버그가 있는지 테스트

시스템 테스트(System Testing)

  • 전체 시스템이 요구사항대로 작동하는지 확인하는 블랙박스 테스트 기법
  • 예시: 어플리케이션을 실제 사용 환경처럼 실행하여 전체 기능을 확인

사용자 수용 테스트(UAT, User Acceptance Testing)

  • 실제 사용자가 고객이 테스트해서 제품이 목적에 맞는지 확인하는 블랙박스 테스트 기법
  • 예시: 클라이언트가 어플리케이션을 테스트하고 "이대로 배포해도 괜찮다"고 승인

스트레스 테스트(Stress Testing)

  • 시스템이 정상적인 한계를 넘었을 때 어떻게 동작하는지 확인하는 블랙박스 테스트 기법
  • 예시: 서버에 동시에 수천 명이 접속했을 때, 시스템이 느려지는지, 터지는지 확인
  • 한계 상황에서의 안정성을 확인하는 것이 목적

스파이크 테스트(Spike Testing)

  • 짧은 시간 동안 갑자기 부하가 급증할 때 시스템이 버틸 수 있는지 확인하는 블랙박스 테스트 기법
  • 예시: 기사 시험을 위해 큐넷에 유저가 동시에 들어올 때의 반응을 확인
  • 스트레스 테스트와 유사하지만, 부하가 순간적으로 급격하게 증가하는 것이 핵심

복구 테스트(Recovery Testing)

  • 시스템이 장애나 오류 발생 후 얼마나 빠르게 복구되는지 확인하는 블랙박스 테스트 기법
  • 예시: 서버가 다운된 후에 백업으로 몇 초만에 복구되는지 확인

보안 테스트(Security Testing)

  • 시스템이 데이터 유출이나 해킹 등의 외부 공격이나 침입에 대해 안전한지 확인하는 블랙박스 테스트 기법
  • 예시: XSS, SQL Injection 등이 가능한지 확인

화이트박스 테스트(WhiteBox Testing)

  • 내부 코드와 구조를 알고, 로직의 흐름을 따라 테스트하는 기법
  • 개발 입장에서 테스트
  • 예시: 조건문, 반복문 등의 로직들이 정상적으로 진행되는지 확인

구조 테스트(Structure Testing)

  • 소스 코드의 내부 구조(흐름, 조건 등)를 기반으로 확인하는 화이트박스 테스트 기법
  • 예시: 조건문, 반복문 등 코드의 모든 경로를 확인

유닛 테스트(Unit Testing)

  • 하나의 함수 또는 모듈 단위로 테스트하는 화이트박스 테스트 기법
  • 예시: add(a, b) 함수가 정확히 두 수를 더하는지 확인

통합 테스트(Integration Testing)

  • 여러 모듈 간 연결이 올바르게 작동하는지 테스트하는 화이트박스 테스트 기법
  • 예시: 회원가입 후 자동 로그인 기능이 잘 연결되어 있는지 확인

디지털 저작권 관리(DRM, Digital Rights Management)

디지털 컨텐츠나 창작물을 합법적으로 보호하고 사용할 수 있도록 하는 전반적인 저작권 보호 프로세스이다.

 

컨텐츠 제공자(Content Provider)

  • 컨텐츠 생성 및 등록
  • 저작물을 제작하고, DRM 시스템에 등록한다.

패키저(Packager)

  • 컨텐츠 암호화 및 포맷 변환
  • 컨텐츠를 암호화하고, 플랫폼/기기별 포맷으로 패키징한다.

인증 시스템(Authentication System)

  • 사용자 인증
  • 컨텐츠 접근 전 사용자나 기기의 신원을 확인한다.

권한 관리 시스템(Authorization Server)

  • 사용 조건 제어
  • 구매/대여 여부, 시청 가능 시간, 복사 가능 여부 등 권한을 설정한다.

라이센스 서버(License Server)

  • 사용 권한 발급
  • 사용자가 컨텐츠 접근 요청 시, 암호 해독 키와 권한을 발급한다.

키 서버(Key Server)

  • 암호 키 관리 및 분배
  • 컨텐츠 복호화에 필요한 암호 키를 안전하게 저장하고 제공한다.

컨텐츠 배포 시스템(Distribution Server)

  • 컨텐츠 전달
  • 스트리밍 서버나 CDN 등, 암호화된 컨텐츠를 사용자에게 전송한다.

사용자 클라이언트(DRM Player)

  • 복호화 및 재생
  • 사용자 단말기에서 컨텐츠를 복호화하고 재생한다.(권한 조건에 따라 제한 적용)

추적 및 로깅 시스템(Tracking/Logging)

  • 사용 모니터링
  • 컨텐츠 사용 패턴과 이력 기록, 불법 복제를 탐지한다.

보안 모듈(Secure Module, TEE 등)

  • 로컬 보안
  • PlayReady나 Widevine 등, 디바이스 내에서 복호화 및 권한 검증을 위한 보안 실행 환경을 제공한다.

클리어링 하우스(Clearing House)

  • 저작권 사용 내역 기록 및 정산
  • 사용 내역을 수집해 과금하고, 저작권자에게 수익을 분배한다.

 

DRM의 흐름

  1. 컨텐츠 제작자가 컨텐츠를 등록
  2. 패키저가 암호화 및 포맷 변환
  3. 컨텐츠 서버에 업로드
  4. 사용자가 접근 시, 인증/권한 확인 후에 라이센스 서버/키 서버로부터 해독 키를 받음
  5. DRM 클라이언트에서 복호화 및 재생
  6. 사용 이력은 클리어링 하우스로 전송되어 과금/정산을 처리

도커(Docker)

어플리케이션의 실행 환경을 하나의 박스로 포장해서 어떤 기기에서든 동일하게 실행할 수 있게 해주는 도구이다.

 

개념

  • 이미지(Image): 실행할 앱과 환경이 담긴 설치 패키지
  • 컨테이너(Container): 이미지가 실제로 실행되는 격리된 실행 환경
  • 도커 파일(Docker File): 이미지를 만들기 위한 설정 파일(레시피)
  • 도커 허브(Docker Hub): 이미지들을 공유하는 공식 저장소

장점

  • 특정 기기에서만 실행되는 환경 차이를 제거
  • 기존 가상 머신보다 훨씬 빠르고 자원을 적게 사용
  • 리눅스, 윈도우, 맥 등 어디서나 동일하게 실행
  • CI/CD 파이프라인에 용이

스크레파이(Scrapy)

웹사이트에서 데이터를 자동으로 크롤링하고, 구조화된 데이터를 수집하는 파이썬 기반 프레임워크이다.

 

특징

  • 파이썬으로 작성되어 학습이 쉽고 활용도가 높다.
  • 비동기 처리로 여러 페이지를 동시에 요청 가능
  • 텍스트, 이미지, 링크 등 정형화된 데이터를 추출 가능
  • 수집 => 정제 => 저장까지 한번에 처리 가능
  • 프로젝트 단위로 크롤러를 만들어 재사용 가능한 구조를 띔

IPC(Inter-Process Communication)

운영체제에서 여러 프로세스가 서로 데이터를 주고 받기 위해 사용하는 방법이다.

주로 백엔드 서버와 브라우저가 서로 데이터를 주고 받거나, 고속 계산 시스템에서 병렬로 작업할 때 사용된다.

 

방식

  • 파이프(Pipe): 한쪽에서 쓰고, 한쪽에서 읽는 단방향 통신이다.
  • 익명 파이프(FIFO): 명명된 파이프는 파일처럼 경로가 있어 다른 프로세스 간 통신이 가능하다.
  • 메세지 큐(Message Queue): 메세지를 큐 형태로 저장해서 순서대로 주고받는다.
  • 공유 메모리(Shared Memory): 프로세스들이 같은 메모리 공간을 공유해서 가장 빠르게 통신이 가능하다.
  • 소켓(Socket): 네트워크를 통해 여러 기기와 통신이 가능하다.
  • 세마포어(Semaphore): 자원 접근을 제어하는 동기화 도구이다.

C언어 출력 문제

#include <stdio.h>

void main() {
    int i, j;
    int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};
    int sum = 0;

    for (i = 0; i < 3; i++) {
        for (j = 0; j < 2; j++) {
            sum += a[i][j];
        }
    }

    printf("%.2f", (float)sum / (3 * 2));
}

이중 for문을 사용해 [0][0]부터 마지막 인덱스인 [3][2]까지 모든 값을 더하는 문제이다.

1+2+3+4+5+6 = 21로 sum값은 21이지만 출력 값에 sum을 6으로 나눈 값을 소수 2자리까지 작성해야 한다.

21/6은 3.5이며 2자리까지 작성하면 3.50이 된다.

728x90

'정보처리기사' 카테고리의 다른 글

정처기 공부 04/07  (2) 2025.04.08
정처기 공부 04/06  (0) 2025.04.06
정처기 공부 04/03  (0) 2025.04.04
프로그래머스 간단한 논리 연산, 정처기 학습  (0) 2025.03.29
정처기 공부  (0) 2025.02.08