연계 요구사항 분석

 

통합 구현이란 송*수신 모듈과 중계 모듈 간의 연계를 구현하는 것.

 

  • 통합 구현 구성 요소
    • 송신 시스템과 모듈
      • 데이터를 생성 및 변환하여 전송하는 시스템
      • 송신 모듈 : 전송 데이터를 생성하고 필요에 따라 전송 데이터 변환
      • 모니터링 기능 : 전송 데이터 생성부터 송신까지 과정과 송신 상태 등 확인
    • 수신 시스템과 모듈
      • 수신 받은 데이터를 정제 및 변환
      • 송신 모듈 : 수신 데이터를 정제하고 어플리케이션이나 DB 테이블에 적합한 데이터로 변환
      • 모니터링 기능 : 수신 모듈과 연계 데이터 수신 상태, 오류 처리, 데이터 변형 등 확인
    • 중계 시스템
      • 내*외부 시스템 간 또는 내부 시스템 간 연계 시 사용되는 아키텍처
      • 중계 모듈 : 송신 데이터의 오류 처리, 수신 시스템에 맞는 데이터 형식으로 변환 등을 수행
    • 연계 데이터
      • 송*수신 시스템 간 송*수신되는 데이터
    • 네트워크
      • 송신, 수신, 중계 시스템을 연결해주는 통신망
      • 유선, 무선, 인터넷 서비스 업체의 공중망 또는 사설망과 송*수신 규약을 위한 프로토콜(서로 다른 기기들 간 데이터 교환을 원활히 수행할 수 있도록 표준화시켜 놓은 통신 규약) 포함

연계 요구사항 분석 : 통합 구현을 위해 사용자 요구사항을 분석하고 연계 데이터를 식별 및 표준화하여 연계 데이터 정의하는 것

 

  • 분석 절차
    • 시스템 구성도, 응용 애플리케이션 구성 등을 통해 송*수신 시스템의 하드웨어 및 소프트웨어 구성, 네트워크 현황 확인
    • 송*수신 시스템과 연결할 데이터와 관련된 테이블 정의서, 코드 정의 등 문서 확인
    • 확인된 시스템 구성과 데이터 현황 정보 등을 기반으로 체크리스트 작성
    • 앞서 나온 문서들, 현황들을 사용자, 시스템 관리자 등과 공유하고 인터뷰, 설문조사 진행
    • 인터뷰나 설문조사를 통해 확인된 결과를 기반으로 요구사항 분석서 작성

연계 데이터 식별 및 표준화

 

  • 절차
    1. 연계 범위 및 항목정의
    2. 연계 코드 변환 및 매핑
    3. 연계 데이터 식별자와 변경 구분 추가
    4. 연계 데이터 표현 방법 정의
    5. 연계 정의서 및 명세서 작성

연계 메커니즘 정의

 

연계 메커니즘

 

  • 직접 연계 방식
    • 중간 매개체 없이 송*수신 시스템이 직접 연계하는 방식
      • 장점
        • 연계 및 통합 구현이 단순하고 용이
        • 중간 매게 없이 직접 연계되어 데이터 연계 처리 성능이 뛰어남
        • 개발 비용이 저렴
        • 개발 기간이 짧음
      • 단점
        • 송*수신 시스템 간 결합도가 높아 시스템 변경 시 오류 발생 가능성
        • 보안을 위한 암호화, 복호화 처리와 비즈니스 로직으 ㄹ적용하기 어려움
        • 연계 및 통합이 가능한 시스템 환경이 제한적.
      • 종류
        • DB Link : DB에서 제공하는 DB Link 객체를 이용하는 방식
        • API(Application programming Interface) / Open API : 데이터를 송신 시스템의 DB에서 읽어와 제공하는 어플리케이션 프로그램이 인터페이스
        • DB Connection : 수신 시스템의 WAS(웹 어플리케이션 서버)에서 송신 시스템 DB로 연결해주는 방식
        • JDBC : Java에서 DB에 접근해 데이터를 삽입, 삭제, 수정, 조회할 수 있도록 Java와 DB를 연결해주는 방식
  • 간접 연계 방식
    • 송*수신 사이 중간 매개체를 두어 연계하는 방식
    • 장점
      • 다양한 환경의 연계 및 통합 가능
      • 송*수신 시스템 간 인터페이스가 변경돼도 오류 없이 서비스 가능
      • 보안 품질 보장과 비즈니스 처리를 위한 로직 쉽게 반영 가능
    • 단점
      • 연계 메커니즘과 아키텍처가 복잡함
      • 중간 매개체로 인해 성능이 저하될 수 있음
      • 개발 및 적용 기간이 비교적 길다.
    • 종류
      • 연계 솔루션 : EAI(송*수신 처리 및 진행 현황을 모니터링하고 통제하는 시스템) 서버와 송 수신 시스템에 설치되는 클라이언트를 이용하는 방식
      • ESB : 어플리케이션 간 표준 기반 인터페이스를 제공하는 방식
      • Socket : 서버는 통신을 위한 소켓을 생성해 포트를 할당하고 클라이언트 통신 요청 시 클라이언트와 연결해 통신하는 네트워크 기술
      • Web Service : WSDL(웹 서비스와 관련된 서식이나 프로토콜 등을 표준적 방법으로 기술하고 게시하기 위한 언어), UDDI(인터넷에서 전 세계 비즈니스 업체 목록에 자신의 목록을 등록하기 위한 XML 기반 규격), SOAP(웹 서비스를 실제로 이용하기 위한 객체 간 통신 규약) 프로토콜을 이용해 연계하는 방식

연계 데이터 보안 적용

 

암*복호화 적용 대상 = '개인 정보 보호법'에 근거한 개인 정보

ex) 주민등록번호, 운전면허번호, 장애인관리번호, 은행계좌번호, 신용카드번호

 

암호화 알고리즘 : 해시를 사용하는 단방향 암호화 방식, 개인키 및 공개키로 분류되는 양방향 암호화 방식

SEED, ARIA, DES, AES, RSA 등이 있음

 

  • 암*복호화 적용 절차
    • 암호화 적용 대상, 암호화 알고리즘, 암호화 키(개인키/공개키) 선정
    • 암호화 적용 대상 컬럼 데이터 길이 변경
    • 암호화 알고리즘 라이브러리 확보 및 설치
    • 연계 응용 프로그램에서 암*복호화 처리 수행

연계 모듈 구현 환경

 

  • EAI(Enterprise Aplication Intergration)
    • 송*수신 처리 및 진행 현황을 모니터링하고 통제하는 시스템
    • 구축 유형
      • Point-to-Point
        • 가장 기본적 어플 통합 방식. 어플을 1:1로 연결. 변경 및 재사용이 어려움 
      • Hub & Spoke
        • 단일 접점인 허브 시스템을 통해 데이터를 전송하는 중앙 집중형 방식. 확장 및 유지 보수 용이. 허브 장애 발생 시 시스템 전체에 영향을 미친다.
      • Message Bus(ESB)
        • 어플 사이 미들웨어를 두어 처리하는 방식. 확장성이 뛰어나며 대용량 처리가 가능
      • Hybrid
        • Hub&Spoke와 Message Bus의 혼합 방식. 필요한 경우 한 가지 방식으로 EAI 구현 가능. 데이터 병목 현상을 최소화할 수 있음.
  • ESB(Enterprise Service Bus)
    • 어플리케이션 간 연계, 데이터 변환, 웹 서비스 지원 등 표준 기반 인터페이스를 제공하는 솔루션
    • 어플리케이션 통합 측면에서 EAI와 유사하지만 어플리케이션보다는 서비스 중심 통합 지향
    • 특정 서비스에 국한되지 않고 범용적으로 사용하기 위해 어플리케이션과 결합도를 약하게 유지
    • 관리 및 보안 유지가 쉽고, 높은 수준의 품질 지원 가능
  • 웹 서비스
    • 네트워크 정보를 표준화된 서비스 형태로 만들어 공유하는 기술. 서비스 지향 아키텍처(SOA) 개념을 실현하는 대표적 기술
    • 구성
      • SOAP(Simple Object Access Protocol) : HTTP, HTTPS, SMTP 등을 활용해 XML 기반 메시지를 네트워크 상 교환하는 프로토콜
      • UDDI(Universal Description, Discovery and Intergration) : WSDL을 등록해 서비스 제공자를 검색하고 접근하는데 사용
      • WSDL(Web Services Description Language) : 웹 서비스명, 서비스 제공 위치, 프로토콜 등 웹 서비스에 대한 상세 정보를 XML 형식으로 구현

XML(eXtensible Markup Language)

 

XML은 웹 브라우저 간 HTML 문법이 호환되지 않는 문제와 SGML(멀티미디어 전자문서들을 다른 기종 시스템들과 정보 손실 없이 효율적으로 전송, 저장 및 자동 처리하기 위한 언어)의 복잡함을 해결하기 위해 개발된 다목적 마크업 언어.

 

구성

<?xml version="1.0" encoding="euc-kr" standalone="yes"?> <!-- XML 문서임을 알리는 문단 standalone은 외부 문서 참조 여부. no가 참조한다는 것-->
<student school="기사대학교">
    <member>
        <name>이철수</name>
        <year>2</year>
        <major>건축</major>
    </member>
    <member>
        <name>박유리</name>
        <year>3</year>
        <major>통계</major>
    </member>
</student>

 


SOAP(Simple Object Access Protocol)

 

컴퓨터 네트워크 상 HTTP/HTTPS, SMTP 등을 이용해 XML을 교환하기 위한 통신 규약

최근엔 무거운 SOAP 대신 RESTful 프로토콜을 이용하기도 함.

 

송신 시스템

<?xml version="1.0"?>
<plus:Envelope <!-- XML 문서를 SOAP 메시지로 정의하는 것. 메시지에 대한 요소와 접근방법 정의 -->
xmlns:plus="http://www.w3.org/2003/05/soap-envelope" 
plus:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
    <plus:Body> <!-- 실제 SOAP 메시지 -->
        <m:CalAdd xmlns:m="http://gilbut.co.kr/soaptest">
            <m:FirstNum>10</m:FirstNum>
            <m:SecondNum>20</m:SecondNum>
        </m:CalAdd>
    </plus:Body>
</plus:Envelope>

<!-- SOAP 메시지에 포함되는 웹 서비스를 정의하는 Header 요소는 생략되었다. -->

수신 시스템

<?xml version="1.0"?>
<plus:Envelope
xmlns:plus="http://www.w3.org/2003/05/soap-envelope" 
plus:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
    <plus:Body>
        <m:CalAddResponse xmlns:m="http://gilbut.co.kr/soaptest">
            <m:AddResult>30</m:AddResult>
        </m:CalAddResponse>
    </plus:Body>
</plus:Envelope>

WSDL(Web Services Description Language)

 

웹 서비스 관련 서식이나 프로토콜 등을 표준적인 방법으로 기술하고 게시하기 위한 언어

 

구조

  1. <description>
  2.     <types>
  3.         자료형 정의
  4.     </types>
  5.     <message>
  6.         인수와 리턴값 정의
  7.     </message>
  8.     <portType> 또는 <interface>
  9.         <operation>
  10.             메소드 정의
  11.         </operation>
  12.     </portType> 또는 </interface>
  13.     <binding>
  14.         통신 방법 정의
  15.     </binding>
  16.     <service>
  17.         <port> 또는 <endpoint>
  18.             웹 서비스 URL
  19.         </port> 또는 </endpoint>
  20.     </service>
  21. </description>

연계 테스트

 

구축된 연께 시스템과 연계 시스템의 구성 요소가 정상적으로 동작하는지 확인하는 활동

 

  • 연계 테스트 진행 순서
    • 연계 테스트 케이스 작성
    • 연계 테스트 환경 구축
    • 연계 테스트 수행
    • 연계 테스트 수행 결과 검증

 

'그 외 공부 > 정처기-실기(완)' 카테고리의 다른 글

6장 화면 설계  (0) 2021.07.02
5장 서버 프로그램 구현  (0) 2021.06.29
3장 데이터 입*출력 구현  (0) 2021.06.27
2장 요구사항 확인  (0) 2021.06.26
1장 프로그래밍 언어 활용  (0) 2021.06.14

데이터 모델의 개념

 

데이터 모델은 현실 세계의 정보들을 컴퓨터에 표현하기 위해 단순화, 추상화하여 체계적으로 표현한 개념적 모형이다.

 

  • 데이터 모델 구성 요소
    • 개체 : 데이터베이스에 표현하려는 것.
    • 속성 : 데이터의 가장 작은 논리적 단위
    • 관계 : 개체 간 관계 또는 속성 간 논리적 연결을 의미
  • 데이터 모델 종류
    • 개념적 데이터 모델
      • 현실 세계에 대한 인간의 이해를 돕기 위해 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정
      • 대표적 개념적 데이터 모델은 E-R 모델이 있다.
    • 논리적 데이터 모델
      • 개념적 모델링  과정에서 얻은 개념적 구조를 컴퓨터가 이해하고 처리할 수 있는 컴퓨터 세계의 환경에 맞도록 변환하는 과정
      • 품질 검증
        • 개체 품질 검증 항목
        • 속성 품질 검증 항목
        • 관계 품질 검증 항목
        • 식별자 품질 검증 항목
        • 전반적인 품질 검증 항목
    • 물리적 데이터 모델
  • 데이터 모델에 표시할 요소
    • 구조 : 논리적으로 표현된 개체 타입들 간의 관계. 데이터 구조 및 정적 성질을 표현
    • 연산 : 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세. 데이터베이스를 조작하는 기본 도구.
    • 제약 조건 : 데이터베이스에 저장될 수 있는 실제 데이터의 논리적 제약 조건

이상/함수적 종속/정규화

 

이상 : 테이블에서 일부 속성들의 종속으로 인해 데이터 중복이 발생하고, 중복으로 인해 테이블 조작 시 문제가 발생하는 현상

 

  • 삽입 이상 : 테이블에 데이터를 삽입할 때 의도와는 상관 없이 원하지 않은 값들로 인해 삽입할 수 없게 되는 현상
  • 삭제 이상 : 테이블에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 연쇄 삭제가 발생하는 현상
  • 갱신 이상 : 테이블에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 불일치성이 생기는현상

함수적 종속 : 데이터의 의미를 표현하는 것. 현실 세계를 표현하는 제약 조건이 되는 동시에 데이터베이스에서 항상 유지되어야 할 조건.

 

ex)

학번 이름 학년 학과
100 김철수 2 컴퓨터공학과
200 박유리 3 전자전기제어학과
300 이민지 3 인공지능학과
400 최우찬 4 건축학과

 

위 테이블에서 학번에 의해 이름, 학년, 학과가 결정되기 때문에

함수적 종속은 다음과 같이 표시한다.

 

학번 → 이름, 학년, 학과

 

이 때, 학번은 결정자(Determinant)라 하고, 이름, 학년, 학과는 종속자(Dependent)라고 한다.

 

  • 완전 함수적 종속
    • 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우
    • 기본키를 전부 알아야 식별 가능한 속성인 경우 완전 함수적 종속
  • 부분 함수적 종속
    • 릴레이션에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 속성 중 일부만 종속되는 경우
    • 기본키의 일부만으로도 혹은 기본키가 아닌 다른 속성으로도 식별이 가능한 속성인 경우.

참고 https://dodo000.tistory.com/20


정규화 : 테이블의 속성들이 상호 종속적 관계를 갖는 특성을 이용해 테이블을 무손실 분해하는 과정

목적 : 가능한 한 중복을 제거해 삽입, 삭제, 갱신 이상의 발생 가능성을 줄이는 것.

 

  • 제 1정규형
    • 테이블의 모든 속성 값이 원자 값으로만 되어 있는 정규형 즉, 도메인이 원자값(한 칸엔 하나의 값만)인 것이다.
  • 제 2 정규형
    • 기본키가 아닌 모든 속성이 기본키에 대해 완전 함수적 종속을 만족하는 정규형 즉, 부분적 함수 종속을 제거한다.
  • 제 3 정규형
    • 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수적 종속을 만족하지 않는 정규형 즉, 이행적 함수 종속을 제거한다.
  • BCNF
    • 모든 결정자가 후보키인 정규형 즉, 결정자가 후보키가 아닌 것을 제거한다.
  • 제 4 정규형
    • 다치 종속이 존재할 경우 함수적 종속 관계 만족하는 정규형
    • 다치 종속성 관계를 제거한다.
  • 제 5 정규형
    • 모든 조인 종속이 후보키를 통해서만 성립되는 정규형
    • 후보키를 통하지 않은 조인 종속 관게를 제거한다.
    • 세 가지 이상 속성 사잉에 서로 연관성이 존재하면 조인 종속이 존재. 제 5정규형 위반. 다 따로 분해하여 준다. 분해 후 다시 조인하면 원래의 릴레이션으로 돌아갈 수 있는 형태가 된다.
    • 지나치게 이상적인 정규형이다.

 

참고 https://mangastorytelling.tistory.com/entry/04-%EC%A0%95%EA%B7%9C%ED%99%94-Normalization-5


논리 데이터 모델의 물리 데이터 모델로 변환

 

테이블은 데이터를 저장하는 데이터베이스의 가장 기본적인 오브젝트이다.

 

  • 테이블 구성 요소
    • 로우(튜플 / 인스턴스 / 어커런스)
    • 컬럼 : 각 속성 항목에 대한 값을 저장한다.
    • 기본키 : 후보키 중에서 선택한 주 키이다. 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성이다.
    • 외래키 : 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합.

논리 데이터 모델에서 정의된 엔티티를 물리 데이터 모델의 테이블로 변환

변환 후에는 테이블 목록 정의서(전체 테이블을 목록으로 요약 관리하는 문서)를 작성한다.

 

  • 변환 규칙
    • 엔티티 -> 테이블
    • 속성 -> 컬럼
    • 주 식별자 -> 기본키
    • 외부 식별자 -> 외래키
    • 관계 -> 관계

  • 슈퍼타입 / 서브타입을 테이블로 변환
    • 슈퍼타입 기준 테이블 변환
      • 서브타입을 슈퍼타입에 통합해 하나의 테이블로 만드는 것
      • 장점
        • 데이터 액세스가 상대적으로 용이
        • 뷰를 이용해 각각의 서브타입만을 액세스하거나 수정 가능
        • 서브타입 구분이 없는 임의 집합에 대한 처리 용이
        • 여러 테이블을 조인하지 않아도 돼 수행 속도가 빨라짐
        • SQL 문장 구성이 단순해짐
      • 단점
        • 테이블 컬럼이 증가해 디스크 저장 공간 증가
        • 처리마다 서브타입에 대한 구분이 필요한 경우가 많이 발생
        • 인덱스 크기 증가로 인덱스 효율이 떨어짐
    • 서브타입 기준 테이블 변환
      • 슈퍼타입 속성들을 각각 서브타입에 추가해 서브타입들을 개별적 테이블로 만드는 것
      • 장점
        • 각 서브타입 속성들의 선택 사양이 명확한 경우 유리
        • 처리할 때마다 서브타입 유형을 구분할 필요가 없음
        • 여러 개 테이블로 통합해 테이블당 크기가 감소해 전체 테이블 스캔 시 유리
      • 단점
        • 수행 속도가 감소할 수 있음
        • 복잡한 처리를 하는 SQL의 통합이 어려움
        • 부분 범위에 대한 처리가 곤란
        • 여러 테이블을 통합한 뷰는 조회만 가능
        • 식별자의 유지 관리가 어려움
    • 개별타입 기준 테이블 변환
      • 슈퍼타입과 서브타입들을 각각 개별적인 테이블로 변환하는 것
      • 장점
        • 저장 공간이 상대적으로 작음
        • 슈퍼타입 또는 서브타입 각각 테이블에 속한 정보만 조회하는 경우 문장 작성이 용이
      • 단점
        • 슈퍼타입 또는 서브타입의 정보를 같이 처리하면 항상 조인이 발생해 성능 저하
  • 속성을 컬럼으로 변환
    • 일반 속성 변환
      • 속성과 컬럼의 명칭은 가능한 표준화된 약어를 사용해 일치시키기
      • 가능한 짧게 지정
      • 컬럼 정의 후 한 로우에 해당하는 샘플 데이터를 작성해 컬럼의 정합성 검증
    • Primary UID를 기본키로 변환
      • 다른 엔티티와의 관계로 인해 생긴 Primary UID도 기본키로 만든다.
    • Secondary UID/Alternate Key를 유니크키(해당 속성의 입력값이 유일하다는 제약 조건)로 변환
  • 관계를 외래키로 변환
    • 1:1 관계
      • 개체 A의 기본키를 개체 B의 외래키로 추가하거나 개체 B의 외래키를 개체 A의 기본키로 추가
    • 1:M 관계
      • 개체 A의 기본키를 개체 B의 외래키로 추가하거나 별도의 테이블로 표현
    • N:M 관계
      • 릴레이션 A와 B 기본키 모두 포함한 별도의 릴레이션(교차 릴레이션 / 교차 엔티티)으로 표현.
    • 1:M 순환 관계
      • 개체 A에 개체 A의 기본키를 참조하는 외래키 컬럼 추가. 주로 데이터 계층 구조를 표현하기 위해 사용

반정규화

 

반정규화란 시스템의 성능, 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정. 의도적으로 정규화 원칙을 위배하는 행위

 

  • 테이블 통합
    • 두 개의 테이블이 조인되는 경우가 많아 하나의 테이블로 합쳐 사용하는 것이 성능 향상에 도움될 경우 수행
  • 테이블 분할
    • 수평 분할
      • 레코드 별로 사용 빈도의 차이가 큰 경우 사용 빈도에 따라 테이블 분할
    • 수직 분할
      • 갱신이 자주 일어나는 속성들을 수직 분할
      • 자주 조회되는 속싱들을 수직 분할
      • 크기가 큰 (2GB 이상) 속성들을 수직 분할
      • 보안을 적용해야 하는 속성들 수직 분할
  • 중복 테이블 추가
    • 집계 테이블 추가 : 트리거를 설정해 사용하는 것
    • 진행 테이블 추가 : 이력 관리 등의 목적으로 추가하는 테이블
    • 특정 부분만을 포함하는 테이블 추가 : 데이터가 많은 테이블의 특정 부분만 사용할 때 그 부분만으로 새로운 테이블 생성
  • 중복 속성 추가
    • 조인해서 데이터를 처리할 때 데이터를 조회하는 경로를 단축하기 위해 자주 사용하는 속성을 하나 더 추가하는 것

인덱스 / 뷰 / 클러스터 / 파티션 설계

 

  • 인덱스
    • 데이터 레코드를 빠르게 접근하기 위해 <키 값, 포인터> 쌍으로 구성되는 데이터 구조
    • 레코드 물리적 순서가 인덱스의 엔트리 순서와 일치하게 유지되도록 구성되는 인덱스를 클러스터드 인덱스라 한다.
    • 분포도가 좁은 테이블에 유리
    • 종류
      • 트리 기반 인덱스 : 인덱스를 저장하는 블록들이 트리 구조를 이루고 있는 것
        • B 트리 인덱스 : 루트 노드에서 하위 노드로 키 값의 크기를 비교해가며 단말 노드에서 찾고자 하는 데이터를 검색
        • B+ 트리 인덱스
          • B 트리 변형. 단말 노드가 아닌 노드로 구성된 인덱스 세트와 단말 노드로만 구성된 순차 세트로 구분.
          • 인덱스 세트에 있는 노드들은 단말 노드에 있는 키 값을 찾아갈 수 있는 경로로 제공, 순차 세트에 있는 단말 노드가 해당 데이터 레코드의 주소를 가리킴.
      • 비트맵 인덱스 : 인덱스 컬럼의 데이터를 Bit 값인 0 또는 1로 변환해 인덱스키로 사용하는 방법
      • 함수 기반 인덱스 : 컬럼에 특정 함수나 수식을 적용해 산출된 값을 사용하는 것. B+ 트리 인덱스나 비트맵 인덱스를 생성해 사용.
      • 비트맵 조인 인덱스 : 다수 조인된 객체로 구성된 인덱스. 비트맵 인덱스와 물리적 구조 동일
      • 도메인 인덱스 : 개발자가 필요한 인덱스를 직접 만들어 사용하는 것.
    • 인덱스 설계
      1. 인덱스 대상 테이블이나 컬럼 등 선정
      2. 인덱스 효율성을 검토해 인덱스 최적화 수행
      3. 인덱스 정의서 작성
    • 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된 이름을 갖는 가상 테이블.
    • 물리적으로 구현되어 있지 않다.
    • 장점
      • 논리적 데이터 독립성 제공
      • 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구 지원
      • 사용자의 데이터 관리를 간단하게 해줌
      • 접근 제어를 통한 자동 보안 제공
    • 단점
      • 독립적인 인덱스를 가질 수 없음
      • 뷰의 정의를 변경할 수 없음
      • 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약
    • 뷰 설계
      1. 대상 테이블 선정
      2. 대상 컬럼 선정
      3. 정의서 작성
  • 클러스터
    • 데이터 저장 시 데이터 액세스 효율을 향상시키기 위해 동일한 성격의 데이터를 동일한 데이터 블록에 저장하는 물리적 저장 방법
    • 데이터 조회 속도는 향상시키나 연산에 대한 성능은 저하
    • 분포도가 넓은 테이블에 유리
    • 처리 범위가 넓을 경우 단일 테이블 클러스터링, 조인이 많을 경우 다중 테이블 클러스터링
  • 파티션
    • 대용량 테이블이나 인덱스를 작은 논리적 단위인 파티션으로 나누는 것
    • 장점
      • 데이터 접근 시 액세스 범위를 줄여 쿼리 성능 향상
      • 파티션별 데이터가 분산되어 저장돼 디스크 성능 향상
      • 파티션별 백업 및 복구를 수행해 속도가 빠름
      • 시스테 맞ㅇ애 시 데이터 손상 정도를 최소화
      • 데이터 가용성 향상
      • 파티션 단위로 입*출력 분산
    • 단점
      • 세심한 관리 요구
      • 테이블간 조인에 대한 비용 증가
      • 용량이 작은 테이블에 파티셔닝을 수행하면 오히려 성능 저하
    • 종류
      • 범위 분할 : 지정한 열의 값을 기준으로 분할
      • 해시 분할 : 해시 함수를 적용한 겨로가 값에 따라 데이터 분할
      • 조합 분할 : 범위 분할로 분할한 후 해시 홤수를 적용해 다시 분할
    • 인덱스 파티션
      • 파티션된 데이터를 관리하기 위해 인덱스를 나눈 것
      • 종류
        • 파티션된 테이블 종속 여부에 따라
          • Local Partitioned Index : 테이블 파티션과 인덱스 파티션이 1:1 대응
          • Global Partitioned Index : 테이블 파티션과 인덱스 파티션이 독립적으로 구성
        • 인덱스 파티션키 컬럼의 위치에 따라
          • Prefixed Partitioned Index : 인덱스 파티션키와 첫 번째 컬럼이 같다.
          • Non-Prefixed Partitioned Index : 다르다.

'그 외 공부 > 정처기-실기(완)' 카테고리의 다른 글

6장 화면 설계  (0) 2021.07.02
5장 서버 프로그램 구현  (0) 2021.06.29
4장 통합 구현  (0) 2021.06.27
2장 요구사항 확인  (0) 2021.06.26
1장 프로그래밍 언어 활용  (0) 2021.06.14

요구사항 정의

 

요구사항은 소프트웨어가 어떤 문제를 해결하기 위해 제공하는 서비스에 대한 설명과 정상적으로 운영되는데 필요한 제약조건 등을 나타냄.

  • 소프트웨어 개발이나 유지 보수 과정에서 필요한 기준과 근거 제공
  • 개발하려는 소프트웨어 전반적 내용을 확인할 수 있게 하여 개발에 참여하는 이해관계자들 간 의사소통을 원활히 하는데 도움을 줌.
  • 요구사항이 제대로 정의되어야 과정의 목표와 계획 수립 가능

 

기능 요구사항

  • 시스템이 무엇을 하는지, 어떤 기능을 하는지
  • 시스템의 입력이나 출력으로 무엇이 포함되어야 하고, 어떤 데이터를 저장하거나 연산을 수행해야 하는지
  • 시스템이 반드시 수행해야 하는 기능
  • 사용자가 시스템을 통해 제공받길 원하는 기능

비기능 요구사항

  • 시스템 장비 구성 요구사항
  • 성능 요구사항
  • 인터페이스 요구사항
  • 데이터 요구사항
  • 테스트 요구사항
  • 보안 여구사항
  • 품질 요구사항
  • 제약사항
  • 프로젝트 관리 요구사항
  • 프로젝트 지원 요구사항

사용자 요구사항

  • 사용자 관점에서 본 시스템이 제공해야 할 요구사항

시스템 요구사항 (소프트웨어 요구사항)

  • 개발자 관점에서 본 시스템 전체가 사용자와 다른 시스템에 제공해야 할 요구사항

 

요구사항 개발 프로세스

 

  • 도출(Elicitation)
    • 요구사항이 어딨고, 어떻게 수집할 것인지 식별하고 이해하는 과정
    • 인터뷰, 설문, 브레인스토밍, 워크샵, 프로토타이핑, 유스케이스
  • 분석(Analysis)
    • 요구사항 중 명확하지 않거나 이해되지 않는 부분을 발견하고 이를 걸러내기 위한 과정
    • 기법
      • 요구사항 분류 (Requirements Classification)
      • 개념 모델링 (Conceptual Modeling)
        • 요구사항을 개념적으로 표현한 것을 모델, 이러한 모델을 만드는 과정이 모델링.
        • 유스케이스 다이어그램, 데이터흐름 모델, 상태 모델, 목표 기반 모델, 사용자 인터랙션, 객체 모델, 데이터 모델 등..
        • 표기는 주로 UML(Unifield Modeling Language 통합 모델링 언어) 사용
      • 요구사항 할당 (Allocation)
        • 요구사항을 만족시키기 위한 구성 요소를 식별하는 것
      • 요구사항 협상 (Negotiation)
        • 요구사항이 서로 충돌될 경우 적절히 해결하는 과정
        • 우선순위를 부여하면 도움
      • 정형 분석 (Formal Analysis)
        • 구문(Syntax)과 의미(Semantics)를 갖는 정형화된 언어를 이용해 요구사항을 수학적 기호로 표현한 후 이를 분석하는 과정.
        • 분석 단계 중 마지막 단계에서 이뤄짐.
  • 명세(Specification)
    • 요구사항을 체계적으로 분석 후 승인될 수 있도록 문서화하는 것
  • 확인(Validation)
    • 요구사항 명세서가 정확하고 완전히 작성됐는지 검토하는 활동
    • 기법
      • 요구사항 검토(Reviews)
        • 문서화된 요구사항을 훑어보며 확인하는 것
      • 프로토타이핑(Prototyping)
        • 초기 도출된 요구사항을 토대로 프로토타입(Prototype)을 만든 후 대상 시스템 개발이 진행되는 동안 도출되는 요구사항을 반영하며 지속적으로 프로토타입을 재작성하는 것.
        • 장점
          • 빠르게 제작 가능. 반복된 제작을 통해 발전된 결과물 도출 가능
          • 최종 시스템 완성 전 추가/변경 요구사항이나 아이디어 등에 대한 피드백 가능
          • 이해하기 쉬워 사용자/개발자 혹은 개발자/개발자 사이의 원활한 의사소통 가능
          • 개발될 시스템 사용에 대한 문제점을 시스템 완성 전 식별 가능
          • 프로토타입이 개선될수록 변동 가능한 요구사항들 감소
        • 단점
          • 사용자의 관심이 핵심에서 벗어나 프로토타입에 집중될 수 있음
          • 개발 대상의 일부만을 대상으로 프로토타입이 제작된 경우, 대상 범위를 잘못 이해해 사용성이 과대평가될 수 있음
          • 지속적이고 반복적인 프로토타입의 개선으로 인한 비용 부담
      • 모델 검증(Model Verification)
        • 요구사항 분석 단계에서 개발된 모델이 요구사항을 충족시키는지 검증하는 것.
        • 분석 도구를 사용해 확인하는 정적 분석을 수행하는 것이 유용
      • 인수 테스트(Acceptance Tests)
        • 사용자가 실제로 사용될 환경에서 요구사항들이 모두 충족되는지 사용자 입장에서 확인하는 과정
        • 사용자 인수 테스트, 운영상 인수 테스트, 계약 인수 테스트, 규정 인수 테스트, 알파 검사, 베타 검사

UML

 

시스템 개발 과정에서 개발자와 고객 또는 개발자 간 의사소통이 원활히 이뤄지도록 표준화한 대표적 객체지향 모델링 언어

 

사물

 

모델을 구성하는 가장 중요한 기본 요소.

 

  • 구조 사물(Structural Things)
    • 시스템의 개념적, 물리적 요소 표현
    • 클래스, 유스케이스, 컴포넌트, 노드 등
  • 행동 사물(Behavioral Things)
    • 시간과 공간에 따른 요소들의 행위 표현
    • 상호작용, 상태 머신 등
  • 그룹 사물
    • 요소들을 그룹으로 묶어 표현
    • 패키지
  • 주해 사물 (Annotation Things)
    • 부가적 설명이나 제약조건 표현
    • 노트

 

관계

 

다중도

  • 1 : 1개의 객체가 연관
  • n : n개의 객체가 연관
  • 0..1 : 연관된 객체가 없거나 1개
  • 0..* 또는 * : 연관된 객체가 없거나 다수
  • 1..* : 연관된 객체가 적어도 1개 이상
  • n..* : 연관된 객체가 적어도 n개 이상
  • n..m : 연관된 객체가 최소 n개에서 최대 m개이다.

 

연관(Association) 관계

 

2개 이상의 사물이 서로 관련되어 있음을 표현

 

ex)

 

     1         1

사람────>집

 

사람이 집 소유. 사람은 자기가 소유하는 집을 알지만 집은 누구에 의해 자신이 소유되는지 모름

사람 쪽에 표기된 다중도가 1이므로 집은 한 사람에 의해서만 소유될 수 있음

집 쪽에 표기된 다중도가 1이므로 사람은 집을 한 채만 소유할 수 있음

 

ex2)

      

        1..*    1..*

선생님────학생

 

선생님과 학생은 서로 관계가 있음. (누구의 소유 관계 x)

선생님은 적어도 한 명 이상의 학생으로부터 관계가 있다.(가르친다.)

학생은 적어도 한 명 이상의 선생님으로부터 관계가 있다.(배운다.)

 

집합(Aggregation) 관계

 

하나의 사물이 다른 사물에 포함되어 있는 관계.

 

ex)

 

컴퓨터◇────프린터

 

프린터는 컴퓨터에 연결해 사용할 수 있으며, 다른 컴퓨터에 연결해서 사용할 수도 있다.

 

포함(Compostion) 관계

 

집합 관계의 특수한 형태. 포함하는 사물의 변화가 포함되는 사물에게 영향을 미치는 관계

 

ex)

 

문◆────열쇠

 

문을 열 수 있는 키는 하나이다. 해당 키로 다른 문은 열 수 없으며, 문이 없어지면 키도 더 이상 필요하지 않다.

 

일반화(Generalization) 관계

 

하나의 사물이 다른 사물에 비해 더 일반적인지 구체적인지 표현

 

ex) 

 

        동물

       ◁  ▷

      /       \ (실선으로 표현)

사자           호랑이

 

동물에는 사자와 호랑이가 있다.

 

의존(Dependency) 관계

 

사물 사이에 서로 연관은 있으나 필요에 의해 서로에게 영향을 주는 짧은 시간 동안만 연관을 유지하는 고나계

 

ex)

 

등급--------->할인율 (점선으로 표현)

 

등급이 높으면 할인율을 적용, 낮으면 적용하지 않는다.

 

실체화(Realization) 관계

 

사물이 할 수 있거나 해야 하는 기능(행위, 인터페이스)으로 서로를 그룹화 할 수 있는 관계

 

ex)

 

             날 수 있는

            ◁          ▷

           /              \ (점선으로 표현)

         /                  \

       /                      \

비행기                        새


다이어그램(Diagram)

 

사물의 관계를 도형으로 표현.

 

정적 모델링

  • 사용자가 요구한 기능을 구현하는데 필요한 자료들의 논리적 구조를 표현한 것.
  • 구조적 다이어그램을 사용하여 표현
    • 클래스 다이어그램
      • 클래스와 클래스가 갖는 속성, 클래스 사이 관계 표현
      • 시스템 구조 파악, 구조상 문제점 도출 가능
      • UML을 이용한 대표적 정적 모델링
      • 클래스 다이어그램
      • 구성 요소
        • 클래스
          • 클래스 이름, 속성, 오퍼레이션 3개 구획으로 표현. 그 중 속성과 오퍼레이션은 생략 가능
          • 속성 : 클래스의 상태나 정보 표현
            • 일반 형식 : [접근 제어자] 속성명 : 자료형 [다중성(배열)][=초기값] (대괄호내 값은 생략 가능)
              • 접근 제어자
                • public : +
                • private : -
                • protected : #
                • package ~
          • 오퍼레이션 : 클래스가 수행할 수 있는 동작. 함수라고도 한다.
            • 일반 형식 : [접근제어자] 오퍼레이션명(매개변수1 : 자료형1, 매개변수 2 : 자료형 2, ...) : 반환자료형
        • 제약조건 : 속성에 입력될 값에 대한 제약조건이나 오퍼레이션 수행 전후 지정해야 할 조건
        • 관계 : 클래스와 클래스 사이 연관성 표현 (UML에서 학습한 관계와 같다.)
    • 객체 다이어그램
      • 클래스에 속한 객체들, 즉 인스턴스(Instance)를 특정 시점의 객체와 객체 사이 고나계로 표현
    • 컴포넌트 다이어그램
      • 컴포넌트 간의 관계나 컴포넌트 간 인터페이스 표현. 구현 단계에서 사용
    • 배치 다이어그램(Deployment)
      • 물리적 요소들의 위치 표현. 구현 단계에서 사용
    • 복합체 구조 다이어그램(Compositive Structure)
      • 클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조를 표현
    • 패키지 다이어그램
      • 유스케이스나 클래스 등 모델 요소들을 그룹화한 패키지들의 관계 표현

 

동적 모델링

  • 시스템의 내부 구성요소들의 상태가 시간의 흐름에 따라 변화하는 과정과 변화하는 과정에서 발생하는 상호 작용을 표현한 것
  • 행위 다이어그램을 사용하여 표현
    • 유스케이스 다이어그램
      • 사용자의 요구를 분석하는 것. 기능 모델링(사용자 요구사항을 분석해 개발될 시스템이 갖춰야 할 기능을 정리 후 사용자와 정리된 내용을 공유하기 위해 표현하는 것) 작업에 사용
      • User와 Use Case로 구성되며 Use Case간 여러 형태의 관계로 이뤄짐
      • 유스케이스 다이어그램
      • 구성 요소
        • 시스템 범위 : 시스템 내부에서 수행되는 기능들을 외부 시스템과 구분하기 위한 범위
        • 액터
          • 시스템과 상호작용을 하는 모든 외부 요소. 
          • 주액터
            • 시스템을 사용함으로써 이득을 얻는 대상
          • 부액터
            • 주액터의 목적 달성을 위해 시스템에 서비스를 제공하는 외부 시스템
        • 유스케이스
          • 사용자가 보는 관점에서 시스템이 액터에게 제공하는 서비스 또는 기능
          • 더 이상 분할되지 않는 기능의 단위
          • 액터에 의해 수행되며, 액터가 관찰할 수 있는 결과 산출
          • 유스케이스 명세서
            • 유스케이스 안에서 액터와 시스템 간 상호 작용 과정을 글로 자세히 표현한 것.
            • 각 유스케이스 명세서에 작성된 사건 흐름을 참고해 활동 다이어그램 작성
        • 관계
          • 액터 - 유스케이스, 유스케이스 - 유스케이스간 나타날 수 있다.
          • 포함 관계
            • 두 개 이상의 유스케이스에 공통적으로 적용되는 기능을 별도로 분리해 새로운 유스케이스로 만든 경우, 원래의 유스케이스와 새롭게 분리된 유스케이스와의 관계
          • 확장 관계
            • 유스케이스가 특정 조건에 부합돼 유스케이스의 기능이 확장될 때 원래의 유스케이스와 확장된 유스케이스간의 관계
          • 일반화 관계
            • 유사한 액터나 유스케이스를 하나의 그룹으로 묶고 싶을 때 그보다 일반적인 액터나 유스케이스를 만ㄷ르어 이들을 연결하여 표현하는 관계
    • 시퀀스 다이어그램
      • 시스템이나 객체들이 주고받는 메시지 표현
      • 시퀀스 다이어그램
      • 구성 요소
        • 액터 : 시스템으로부터 서비스를 요청하는 외부 요소
        • 객체 : 메시지를 주고받는 주체
        • 라이프라인 : 객체가 메모리에 존재한느 기간
        • 활성 상자 : 객체가 메시지를 주고받으며 구동되고 있음을 표현
        • 메시지
          • 객체가 상호 작용을 위해 주고받는 메시지.
          • 종류
            • 의미 : 동기
              기능 : 메시지를 보낸 후 결과가 반환될 때까지 기다린다.
            • 의미 : 비동기
              기능 : 메시지를 보낸 후 결과가 반환될 때까지 기다리지 않고 다른 작업을 수행함.
            • 의미 : 생성
              기능 : 메시지를 받는 새로운 객체 생성
            • 의미 : 응답
              기능 : 동기 메시지에 대한 수행 결과
        • 객체 소멸 : 해당 객체가 더 이상 메모리에 존재하지 않음을 의미
        • 프레임 : 다이어그램 전체 또는 일부를 묶어 표현
    • 커뮤니케이션 다이어그램
      • 객체들이 주고받는 메시지뿐만 아니라 객체들 간 연관까지 표현\
      • 커뮤니케이션 다이어그램
      • 액터 : 시스템으로부터 서비스를 요청하는 외부 요소
      • 객체 : 메시지를 주고받는 주체
      • 링크 : 객체들 간의 관계를 표현하는 데 사용
      • 메시지 : 객체가 상호 작용을 위해 주고받는 메시지. 시퀀스 다이어그램에서와 동일하다.
    • 상태 다이어그램
      • 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 상호 작용에 따라 상태가 어떻게 변화하는지 표현
      • 상태 다이어그램
      • 구성 요소
        • 상태 : 객체의 상태 표현
          • 시작 상태 : 상태 시작 표현
          • 종료 상태 : 상태 종료 표현
        • 상태 전환 : 상태 사이의 흐름. 
        • 이벤트 : 상태에 변화를 주는 현상
        • 프레임 : 상태 다이어그램 범위 표현
    • 활동 다이어그램
      • 어떤 기능을 수행하는지 객체 처리 로직이나 조건에 따른 처리 흐름을 순서에 따라 표현
      • 활동 다이어그램
      • 구성요소
        • 액션 / 액티비티 : 액션은 더 이상 분해될 수 없는 단일 작업, 액티비티는 몇 개의 액션으로 분리될 수 있는 작업.
        • 제어 흐름 : 실행의 흐름 표현
        • 노드
          • 시작 노드
            • 액션이나 액티비티가 시작됨을 의미
          • 종료 노드
            • 액티비티 안의 모든 흘므이 종료됨을 의미
          • 조건 노드
            • 조건에 따라 제어의 흐름이 분리됨을 표현
          • 병합 노드
            • 여러 경로의 흐름이 하나로 합쳐짐을 표현
            • ※ 조건 노드와 병합 노드 둘 다 마름모로 표현. 들어오는 제어 흐름이 하나면 조건, 여러 개면 병합.
          • 포크 노드
            • 액티비티의 흐름이 분리되어 수행됨을 표현
          • 조인 노드
            • 액티비티의 흐름이 다시 합쳐짐을 표현
            • ※ 포크 노드와 조인 노드 둘 다 굵은 선으로 표현. 들어오는 액티비티 흐름이 하나면 포크, 여러 개면 조인
        • 스윔레인 : 액티비티 수행 담당 주체 구분
    • 상호작용 개요 다이어그램(Interaction Overview)
      • 상호작용 다이어그램 간 제어 흐름 표현
    • 타이밍 다이어그램
      • 객체 상태 변화와 시간 제약을 명시적으로 표현

 

'그 외 공부 > 정처기-실기(완)' 카테고리의 다른 글

6장 화면 설계  (0) 2021.07.02
5장 서버 프로그램 구현  (0) 2021.06.29
4장 통합 구현  (0) 2021.06.27
3장 데이터 입*출력 구현  (0) 2021.06.27
1장 프로그래밍 언어 활용  (0) 2021.06.14

데이터 타입

 

C / C++

  • 문자
    • char ( 1Byte )
  • 부호없는 문자형
    • unsigned char ( 1Byte )
  • 정수
    • short ( 2Byte )
    • int ( 4Byte )
    • long ( 4Byte )
    • long long ( 8Byte )
  • 부호없는 정수형
    • unsigned short ( 2Byte )
    • unsigned int ( 4Byte )
    • unsigned long ( 4Byte )
  • 실수
    • float ( 4Byte )
    • double ( 8Byte )
    • long double ( 8Byte )

Java

  • 문자
    • char ( 2Byte )
  • 정수
    • byte ( 1Byte )
    • short ( 2Byte )
    • int ( 4Byte )
    • long ( 8Byte )
  • 실수
    • float ( 4Byte )
    • double ( 8Byte )
  • 논리
    • boolean ( 1Byte )

Python

  • 문자
    • str ( 무제한 )
  • 정수
    • int ( 무제한 )
  • 실수
    • float ( 8Byte )
    • complex ( 16Byte )

변수

 

변수란? 컴퓨터가 명령을 처리하는 도중 발생하는 값을 저장하기 위한 공간

 

변수명 작성 규칙을 예시와 함께 알아보도록 하자

 

  • 2abc (X)
    • 변수명 앞은 언더 바(_) 혹은 영문자만 사용 가능
  • veryverylonglong (O)
    • 변수명의 글자 수 제한은 없음
  • my parameter (X)
    • 변수명 사이에 공백 추가 불가능
  • my-parameter (X)
    • 변수명 사이 언더바를 제외한 특수문자 사용 불가능
  • for (X)
    • 예약어 사용 불가능
  • parameter / Parameter
    • 대, 소문자 구분함

 

기억 클래스

  • 자동 변수
    • 기억영역 : 메모리(스택)
    • 예약어 : auto
    • 생존기간 : 일시적
    • 사용 범위 : 지역적
  • 레지스터 변수
    • 기억영역 : 레지스터
    • 예약어 : register
    • 생존기간 : 일시적
    • 사용 범위 : 지역적
  • 정적 변수(내부)
    • 기억영역 : 메모리(데이터)
    • 예약어 : static
    • 생존기간 : 일시적
    • 사용 범위 : 지역적
  • 정적 변수 (외부)
    • 기억영역 : 메모리(데이터)
    • 예약어 : static
    • 생존기간 : 영구적
    • 사용 범위 : 전역적
  • 외부 변수
    • 기억영역 : 메모리(데이터)
    • 예약어 : extern
    • 생존기간 : 일시적
    • 사용 범위 : 전역적

데이터 입*출력

 

서식 문자열

  • %d : 정수형 10진수
  • %u : 부호없는 정수형 10진수
  • %o : 정수형 8진수
  • %x : 정수형 16진수
  • %c : 문자
  • %s : 문자열
  • %f : 소수점 포함하는 실수
  • %e : 지수형 실수
  • %ld : long형 10진수
  • %lo : long형 8진수
  • %lx : long형 16진수
  • %p : 주소

 

입*출력

 

  • C언어
    • 입력
      • scanf(서식 문자열, 변수 주소)
      • getchar()
      • gets()
    • 출력
      • printf(서식 문자열, 변수)
      • putchar()
      • puts()
  •  Java
    • 입력
      • Scanner scan_obj = new Scanner(System.in);
      • 변수명 = scan_obj.nextInt();
    • 출력 : System.out.print(서식 문자열, 변수)

 

출력 예시

 

 

  • % : 서식 문자 지정
  • - : 왼쪽부터 출력 (없을 시 오른쪽부터 출력)
  • 8 : 출력 자릿수 8자리로 지정
  • 2 : 소수점 이하 2자리 지정
  • f : 실수 출력

 

주요 제어 문자

 

  • \n : 커서를 다음 줄 앞으로 이동
  • \b : 커서를 왼쪽으로 한 칸 이동
  • \t : 커서를 일정 간격 띄움
  • \r : 커서를 혀재 줄 처음으로 이동
  • \0 : 널 문자 출력
  • \' : 작은따옴표 출력
  • \" : 큰따옴표 출력
  • \a : 스피커로 벨 소리 출력
  • \\ : 역 슬래시 출력
  • \f : 한 페이지 넘기기

연산자

 

우선순위순으로

 

  • 단항 연산자
    • ! ~ ++ -- sizeof
  • 이항 연산자
    • 산술 연산자
      • * / %
      • + -
    • 시프트 연산자
      • << >>
    • 관계 연산자
      • < <= >= >
      • == !=
    • 비트 연산자
      • &
      • ^
      • |
    • 논리 연산자
      • &&
      • ||
  • 상향 연산자
    • 조건 연산자
      • ? :
  • 대입 연산자
    • = += -= *= /= %= <<= >>= 등...
  • 순서 연산자
    • ,

 

비트 연산자

 

 

양수일 때는 패딩 비트가 모두 0으로 채워지나

음수일 경우

왼쪽으로 패딩비트가 채워지면 오른쪽의 빈 자리에 0이 채워지고,

오른쪽으로 패딩비트가 채워지면 왼쪽의 빈 자리에 1이 채워진다.

 

2의 보수는 1의 보수에 1 더한 것


제어문

 

if문

 

 

switch문

 

 

goto문

 

 


반복문

 

for문

 

증가값같은 경우는 무조건 최종값에 대한 조건이 충족하고 그 이후 조건식이 실행된 후에 증가값만큼 증가한다.

따라서 아무리 단항연산자(++, -- 같은)의 순서가 달라도 결과는 같다.

 

while문

 

 

do~while문

 

do{

    조건이 참일 시 실행 문장;

}while(조건);

 

break, continue

 

break : switch문이나 반복문 안에서 break가 나오면 블록을 벗어남.

continue

  • continue 이후의 문장을 실행하지 않고 제어를 반복문의 처음으로 옮긴다.
  • 반복문에서만 사용

배열과 문자열

 

1차원 배열

 

C언어

 

Java

public class Example {
    public static void main(String[] args){
        int a[] = new int[5];
        int i;
            for(i=0;i<5;i++)
                a[i]=i+10;
            for (i=0;i<5;i++)
                System.out.printf("%d ", a[i]);
    }
}

/*10 11 12 13 14*/

 

배열 초기화

 

char a[3] = {'A','B','C'}

int a[2][4] = {{1,2,3,4},{5,6,7,8}}

int a[3] = {3, } => 나머지 요소엔 0이 입력됨.


포인터

 

포인터란? 변수의 주소.

 

포인터의 용도

 

  • 연결된 자료 구조 구성
  • 동적으로 할당된 자료 구조 지정
  • 배열을 인수로 전달
  • 문자열을 표현
  • 커다란 배열에서 요소를 효율적으로 저장
  • 메모리에 직접 접근

 


사용자 정의 함수

 


Java의 클래스와 메소드

 

클래스 : 객체 생성을 위한 속성과 함수를 정의하는 설계도

 

class Human{
    String name;
    boolean sex;
    int age;
}

public class Ex{
    public static void main(String[] args)}
        Human human = new Human(); //객체 생성
        human.name = 'Cheolsu';
        human.sex = True;
        human.age = 17;
    }
}

Python의 기초

 

 

# 기본 문법

# 변수 자료형 선언 안 해도 됨. 세미콜론 안 적어도 됨.
# 변수 연속 선언 가능

a = 1
b, c = 2, 3

# if나 for와 같이 코드 블록을 포함하는 명령문을 사용할 땐 indent(들여쓰기)를 맞춰줘야 함.
# 기본 indent는 4칸.

if b > a:
    print("b가 a보다 큼")
    
strA = input('입력하세요') # 화면에 '입력하세요'란 문구 출력. 입력값 받을 때까지 커서 깜박임.
strB, strC = input().split(',') # 'hello,world'를 입력했으면 분리 문자 ','에 의해 strB에는 hello가, strC에는 world가 저장됨.
print(strB, strC, sep='/', end='.') # hello/world.

print('%-8.2f' % 200.20) # 200.20** (*은 공백) # 서식 문자열을 출력할 때 나타내는 표현
# % : 서식 문자임을 지정
# - : 왼쪽부터 출력
# 8 : 출력 자릿수를 8자리로 지정
# 2 : 소수점 이하를 2자리로 지정
# f : 실수로 지정
# python 문자열

print('abc'.upper()) # 'ABC' # 다 대문자로
print('ABC'.lower()) # 'abc' # 다 소문자로

print('ABC EFG'.capitalize()) # 'Abc efg' # 맨 첫 글자만 대문자. 나머진 소문자
print('ABC EFG'.title()) # 'Abc Efg' # 단어 첫 글자는 대문자. 나머진 소문자

print('abc'.replace('a','d')) # 'dbc' # 글자 대체
print('ABC-EFG'.split('-')) # ['ABC,'EFG'] # 분리 단어에 따라서 분리

print('abbbcd'.count('b')) # 3 # 글자 갯수 반환
print('abcd'.find('b')) # 1 # 값 위치 반환 # 찾지 못할 경우 -1 반환
print('abcd'.index('b')) # 1 # 값 위치 반환 # 찾지 못할 경우 오류 반환
lst = [0, 1, 2] # 1차원 리스트
llst = [[0, 1], [2, 3]] # 2차원 리스트

# 리스트 관련 주요 메소드
lst.append(4) # lst = [0, 1, 2, 4]
lst.insert(3, 3) # lst = [0, 1, 2, 3, 4] # 3번째 위치에 3을 추가
lst.insert(2, 5) # lst = [0, 1, 5, 2, 3, 4] # 2번째 위치에 5 추가
del lst[2] # lst = [0, 1, 2, 3, 4] # 2번째 요소 5 삭제
lst.remove(4) # lst = [0, 1, 2, 3] # lst에서 '4' 요소 찾아 삭제
lst.pop(1) # 3 # lst = [0, 2, 3] # 해당 위치에 있는 값 출력하고 해당 요소 삭제
lst.index(0) # 0 # 저장된 요소 위치 반환
[1, 0, 1, 0, 0].count(0) # 3 # 0 요소 개수 반환
[1, 2].extend([3, 4]) # [1, 2, 3, 4] # 리스트 끝에 새로운 리스트 추가하여 확장
[1, 2, 3].reverse() # [3, 2, 1] # 리스트 순서 역순으로 뒤집음
[2, 1, 3].sort() # [1, 2, 3] # 오름차순 정렬
[2, 1, 3].sort(reverse=True) # [3, 2, 1] # 내림차순 정렬
a = [1, 2, 3]
b = a.copy() # 리스트 복사 # 요소 값만 복사되어 서로 독립적인 메모리 공간 차지
for i in range(0, 10, 2): # 0에서 10-1까지 2만큼 증가하며 숫자 생성
    print(i, end=' ') # 0, 2, 4, 6, 8
    
a = [1, 2, 3, 4, 5]

print(a[:3]) # 1, 2, 3 # 3-1까지의 요소 반환
print(a[0:4:2]) # 1, 3

python class


라이브러리

 

라이브러리 : 자주 사용하는 함수나 데이터들을 미리 만들어 모아 놓은 집합체

 

C언어 대표 표준 라이브러리

 

  • stdio.h : 데이터 입 * 출력에 사용되는 기능 제공
  • math.h : 수학 함수 제공
  • string.h : 문자열 처리에 사용되는 기능 제공
  • stdlib.h : 자료형 변환, 난수 발생, 메모리 할당에 사용되는 기능 제공
  • time.h : 시간 처리에 사용되는 기능 제공

 

Java 대표 표준 라이브러리

 

  • java.lang : 자바에 기본적으로 필요한 인터페이스, 자료형, 예외 처리 등에 관련된 기능 제공. import문 없이 사용 가능
  • java.util : 날짜 처리, 난수 발생, 복잡한 문자열 처리 등과 관련 기능 제공
  • java.io : 파일 입*출력과 관련된 기능 및 프로토콜 제공
  • java.net : 네트워크와 관련된 기능 제공
  • java.awt : 사용자 인터페이스(UI)와 관련된 기능 제공

 

Python 대표 표준 라이브러리

 

  • 내장 함수 : import문이나 클래스명 없이 사용가능한 기본 인터페이스
  • os : 운영체제와 상호 작용하기 위한 기능 제공
  • re : 고급 문자열 처리 위한 기능 제공
  • math : 복잡한 수학 연산을 위한 기능 제공
  • random : 무작위 선택을 위한 기능 제공
  • statistics : 통계값 산출을 위한 기능 제공
  • datetime : 날짜와 시간 조작을 위한 기능 제공

절차적 프로그래밍 언어

 

일련의 처리 절차를 정해진 문법에 따라 순차적으로 기술해 나가는 언어

 

장점 : 빠른 실행 속도, 같은 코드를 복사하지 않고 다른 위치에서 호출해 사용가능, 모듈 구성 용이, 구조적 프로그래밍 가능

 

단점 : 여러운 프로그램 분석, 어려운 유지 보수 및 코드 수정

 

종류

  • C
    • 데니스 리치에 의해 개발됨
    • 자료 주소 조작 가능한 포인터 제공
    • 고급 + 저급 프로그램 언어 특징
    • 컴파일러 방식
    • 이식성이 좋아 기종 관계없이 프로그램 작성 가능
  • ALGOL
    • 수치 계산이나 논리 연산을 위한 과학 기술 계산용 언어
  • COBOL
    • 사무 처리용 언어
  • FORTRAN
    • 과학 기술 계산용 언어

객체 지향 프로그래밍 언어

 

객체 지향 프로그래밍 언어는 객체들을 조립해 프로그램을 작성할 수 있도록 한 프로그래밍 기법.

 

장점

  • 상속을 통한 재사용과 시스템 확장 용이
  • 코드 재활용성이 높음
  • 자연적 모델링에 의해 분석과 설계를 쉽고 효율적으로 할 수 있음
  • 사용자와 개발자 사이의 이해를 쉽게 해줌
  • 대형 프로그램 작성 용이
  • 소프트웨어 개발 및 유지보수가 용이

단점

  • 정형화된 분석 및 설계 방법이 없음
  • 구현 시 처리 시간 지연

 

종류

  • Java
    • 분산 네트워크 환경에 적용 가능. 멀티스레드 기능을 제공해 여러 작업을 동시에 처리 가능
    • 운영체제 및 하드웨어에 독립적이며 이식성이 강함
    • 캡슐화가 가능하고 재사용성이 높음
  • C++
    • C언어에 객체지향 개념을 적용한 언어.
    • 모든 문제를 객체로 모델링해 표현
  • Smalltalk
    • 최초로 GUI를 제공한 언어

 

구성 요소

  • 객체 : 데이터 + 메소드를 결합시킨 실체
    • 데이터 : 객체들이 갖고 있는 데이터 값들을 단위별로 정의하는 것
    • 메소드 : 객체가 메세지를 받아 실행해야 할 때 구체적 연산을 정의하는 것
  • 클래스 : 두 개 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현하는 요소. 즉, 공통된 특성과 행위를 갖는 객체의 집합
  • 메시지 : 객체들 간 상호작용 하는데 사용되는 수단

 

특징

  • 캡슐화 : 데이터와 데이터를 처리하는 함수를 하나로 묶는 것
  • 정보 은닉 : 다른 객체에 자신의 정보를 숨기고 자신의 연산만을 통해 접근을 허용하는 것
  • 추상화 : 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 모델화하는 것
  • 상속성 : 이미 정의된 부모 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것.
  • 다형성 : 하나의 메세지에 대해 각 클래스가 갖고 있는 고유한 방법으로 응답할 수 있는 능력

스크립트 언어

 

HTML 문서 안에 직접 프로그래밍 언어를 삽입해 사용하는 것.

기계어로 컴파일 되지 않고 별도의 번역기가 소스를 분석해 동작하게 하는 언어.

 

장점

  • 컴파일 없이 바로 실행해 결과를 바로 확인 가능
  • 배우고 코딩하기 쉬움
  • 개발 시간이 짧음
  • 소스 코드를 쉽고 빠르게 수정할 수 있음

단점

  • 코드를 읽고 해석해야 해 실행 속도가 느림
  • 런타임 오류가 많이 발생

 

종류

  • 자바 스크립트
    • 클라이언트용 스크립트 언어
    • 웹 페이지 동작 제어, 변수 선언 필요 없음.
  • ASP
    • 서버 측에서 동적으로 수행되는 페이지를 만들기 위한 언어
  • JSP
    • Java로 만들어진 서버용 스크립트 언어. 
  • PHP
    • 서버용 스크립트 언어. 
    • C, Java 등과 문법이 유사해 배우기 쉬워 웹 페이지 제작에 많이 사용
  • 파이썬
    • 객체지향 기능을 지원하는 대화형 인터프리터 언어. 플랫폼에 독립적이고 문법이 간단함.

선언형 언어

 

프로그램이 수행해야 할 문제를 기술하는 언어. 목표를 명시하고 알고리즘은 명시하지 않는다.

 

함수형 언어

  • 수학적 함수를 조합해 문제를 해결하는 언어. 재귀 호출이 자주 이용됨. 병렬 처리에 유리.
  • LISP

논리형 언어

  • 기호 논리학에 기반을 둔 언어. 반복문이나 선택문을 사용하지 않는 비절차적 언어
  • PROLOG

 

장점 : 가독성이나 재사용성이 좋음, 작동 순서를 구체적으로 작성하지 않아 오류가 적음, 프로그램 동작을 변경하지 않고도 관련 값 대체 가능

 

종류

  • HTML
    • 인터넷 표준 문서인 하이퍼텍스트 문서를 만들기 위해 사용하는 언어
  • LISP
    • 인공지능 분야에 사용되는 언어.
    • 기본 자료 구조가 연결 리스트 구조. 재귀 호출 많이 사용
  • PROLOG
    • 논리학을 기초로 한 고급 언어. 인공 지능 분야에서 논리적 추론이나 리스트 처리 등에 주로 사용
  • XML
    • 기존 HTML의 단점을 보완해 웹에서 구조화된 폭넓고 다양한 문서들을 상호 교환할 수 있도록 설계된 언어.
  • Haskell
    • 함수형 프로그래밍 언어. 부작용이 없음. 코드가 간결하고 에러 발생 가능성이 낮음.

예외 처리

 

예외 : 프로그램의 정상적 실행을 방해하는 조건이나 상태

 

이러한 예외가 발생했을 때 프로그래머가 해당 문제에 대비해 작성해 놓은 처리 루틴을 수행하도록 하는 것.

 

java 예외 객체

  • ClassNotFoundException : 클래스를 찾지 못한 경우
  • NoSuchMethodException : 메소드를 찾지 못한 경우
  • FileNotFoundException : 파일을 찾지 못한 경우
  • InterruptedIOException : 입*출력 처리가 중단된 경우
  • ArithmeticException : 0으로 나누는 등 산술 연산에 대한 예외가 발생한 경우
  • IllegalArgumentException : 잘못된 인자를 전달한 경우
  • NumberFormatException : 문자열을 숫자 형식으로 변환한 경우
  • ArrayIndexOutOfBoundsException : 배열의 범위를 벗어난 접근을 시도한 경우
  • NegativeArraySizeException : 0보다 작은 값으로 배열 크기를 지정한 경우
  • NullPointerException : 존재하지 않은 객체를 참조한 경우

'그 외 공부 > 정처기-실기(완)' 카테고리의 다른 글

6장 화면 설계  (0) 2021.07.02
5장 서버 프로그램 구현  (0) 2021.06.29
4장 통합 구현  (0) 2021.06.27
3장 데이터 입*출력 구현  (0) 2021.06.27
2장 요구사항 확인  (0) 2021.06.26

+ Recent posts