본문 바로가기

정보처리기사 실기/02. 응용SW엔지니어링

[2020 정보처리기사 실기 - 서버 프로그램 구현] 3. 서버 프로그램 구현하기

 

 

 

* 프로그램 구현 절차

 

1) 구현하려는 대상 확인, 대상 프로그램의 분석 설계 단계에서 작성한 산출물 확인

 

2)MVC 아키텍처 기반의 프로그램 구현 시 순서

 

   - DTO/VO 구현

      DTP(Data Transfer Object) 는 프로그램에서 유통되는 데이터를 객체화, 데이터 값을 설정하고 조회하는 것만 가짐

      VO(Value Object) DTO와 비슷하지만 데이터 값을 변경할 수 없는 특징

      DTO와 VO 모두 프로그램 계층 간 데이터의 교환을 위해 사용

 

   - SQL 구현

      데이터베이스에 저장된 데이터를 조작하기 위한 질의문

      Mybatis와 같은 프레임워크를 사용해서 SQL을 별도의 파일XML에 정의하여 관리하기도 함

       : 데이터를 다루는 프로그램의 변경 영향도를 줄이고, 중복된 SQL을 제거 관리, 유지보수, 성능 개선에 장점이 있음

 

   - DAO 구현

      데이터베이스에 접근하여 데이터를 생성,조회, 수정, 삭제하는 역할

      특정 타입의 데이터바이스나 다른 영속성 메커니즘에 추상 인터페이스를 제공하는 객체

      비즈니스 로직과 데이터베이스 접근 로직을 분리하기 위해 사용

      데이터 접근을 위해 DAO에서 DB까지 설정하는 경우도 있지만

      DB connection을 관리하는 부분과 SQL문을 지정하고 입출력 DTO/VO를 지정하는 코드를 분리하는 방식이 효율적

      MyBatis와 같은 개발 프레임워크와 connection pool을 사용해서 개발하는 경우가 많음

 

   - SERVICE 구현

      사용자의 요청에 따라 비즈니스 로직을 처리하는 객체

      요청 처리를 위해 DAO혹은 다른 SERVICE를 생성하여 요청을 전달하고 처리 결과를 CONTROLLER에 전달

 

   - CONTROLLER 구현

      사용자의 요청을 받아 적절한 SERVICE 객체는 호출하고, SERVICE의 처리결과를 사용자에게 다시 전달하는 역할

      JAVA기반 웹 어플리케이션에서 브라우저를 통한 사용자 요청을 받는 CONTROLLER 역할은 SERVLET이 담당

       : SERVLET은 javax, servlet, http, HttpServlet을 상속하고 doGet이나 doPost 메소드로 요청을 받아서 서비스 제공

       : SERVLET 구현 후 접속할 수 있는 URL을 웹 어플리케이션 배포 서술자인 web.xml에 등록해야 함

       : servlet 3.0이상은 web.xml에 서브릿 URL 등을 기록할 필요없이 @WebServlet 어노테이션을 이용해서 쉽게 등록

 

 

 

*소프트웨어 개발보안

 

1) SW개발과정에서 개발자의 실수, 논리적 오류 등으로 발생될 수 있는 취약점을 최소화하여 사이버 보안위협에 대응

 

2) 구현단계에서는 표준코딩정의서 도는 소프트웨어 개발보안 가이드를 준수하여 개발,

     단위 테스트를 통해 소프트웨어가 가질 수 있는 보안 취약점을 충분히 제거

     코드 리뷰 또는 소스 코드 진단 작업을 통해 소스 코드의 안정성이 보장되도록 해야함

 

3) SQL injection

     - 응용 프로그램의 보안상 허점을 의도적으로 이용해 악의적인 SQL문을 실행하게 하여 DB를 비정상적으로 조작 코드 삽입

     - 외부입력값을 검사해서 문제가 되는 부분 제거

     - 외부입력값 검증 모듈 및 보안 모듈이 구현된 마이바티스나 스프링 스트러츠 등의 개발 프로그램 이용하여 대응

     - preparedstatement 객체 등을 이용해 DB에 컴파일 된 쿼리문을 전달하는 방법 사용하여 대응

        : 반복적으로 사용하는 SQL문을 실행할 때마다 구문 분석, 컴파일하지 않고 미리 분석하고 컴파일하여 캐시에 저장해두고

               변경되는 부분만 변수 바인딩을 하여 SQL문 실행

        : 이때 오이부의 입력값은 SQL구문에 영향을 주지 않고 값으로만 바인딩 되어 보안상 안전하다.

 

4) 정수형 오버플로우

    - 정수값이 증가하면서 허용된 가장 큰 값보다 커져서 실제 저장되는 값이 의도하지 않게 아주 작거나 음수가 됨

    - 메모리 할당, 메모리 복사 등을 위한 조건문에 입력값을 사용하고 정수형 오버플로우가 발생하여 보안 상 문제가 될 수 있음

    - 정수형 변수를 연산에 사용할 때 결과 값 범위를 검사하는 모듈을 사용하여 대응

 

5) 오류 메세지를 통한 정보 노출

    - 실행환경 사용자 등과 관련된 민감한 정보를 포함한 오류 메세지 생성하여 외부에 제공하는 경우

    - 오류 메세지를 사용자에게 최소한의 유용한 정보만 제공하도록 메세지 형식 정의하여 대응

    - 시스템 오류화면이 아닌 정의된 메세지 형식을 일관된 형태로 보여주는 오류 메세지 화면을 구성하여 대응

 

6) 취약한 API 사용

    - 취약한 API는 보안상 금지되거나 부주의하게 사용될 가능성이 많은 API

    - 대표적인 예로 문자열과 관련된 strcat(), strcpy(), strncat(), stncpy(), spintf() 등이 있음

    - 취약한 api가 아니더라도 잘못된 방식으로 사용하면 보안 문제가 발생할 수 있는 API도 있으니 주의 필요

    - 사용하려는 API가 취약점이 발견된 API인지 확인하고 사용

    - 취약한 API 대신  strcat_s(), strcpy_s(), strncat_s(), stncpy_s(), spintf_s() 등 안전한 함수 사용

    - 자원에 직접 연결하는 함수 대신 개발 프레임워크의 자원 관리 기능 이용하여 대응