[정보처리기사 실기] 4. 서버 프로그램 구현

7 minute read

Chapter 01 개발환경 구축

1. 개발환경 구축 ★★★

  • 개발환경 구축의 개념 : 개발 도구와 서버 선정, 개발에 사용되는 도구들의 사용 편의성과 성능, 라이선스 확인

  • 개발 도구의 분류 ★(빌구테형)
    • 빌드 도구 : 작성한 코드의 빌드 및 배포 수행, 구성요소와 모듈의 의존성 관리
    • 구현 도구 : 코드 작성, 디버깅, 수정 지원
    • 테스트 도구 : 코드 기능 검증, 품질 향상
    • 형상 관리 도구 : 산출물 버전 관리
  • 서버 하드웨어 개발환경
    • 웹 서버 : HTTP 이용 요청/응답 처리, 정적 콘텐츠 처리. WEB-WAS-DB 3계층 구조 ex)Appache, Google, Nginx
    • 웹 애플리케이션 서버(WAS) : 동적 콘텐츠 처리 ex) Tomcat, Weblogic, Jeus, Resin
    • 데이터베이스 서버 : 데이터 수집, 저장 ex)MySQL, Oracle, MS-SQL, DB2
    • 파일 서버 : 물리 저장장치
  • 클라이언트 하드웨어 개발환경
    • 클라이언트 프로그램 : 사용자와 커뮤니케이션, Visual Basic, C#, Delphi
    • 웹 브라우저 : 웹 서비스 형태, 브라우저를 통해 커뮤니케이션
    • 모바일 앱
    • 모바일 웹
  • 소프트웨어 개발환경
    • 운영체제 : 서버의 하드웨어를 사용자 관점에서 편리하고 유용하게 사용하기 위한 소프트웨어
    • 미들웨어 : 컴퓨터 간 연결을 쉽고 안전하게 해주고 관리하기 위한 소프트웨어, 자바 기반 환경에서 JVM 설치해 컨테이너로의 기능 이용
    • DBMS : 사용자 요구에 따라 정보 생성 및 관리
  • 형상 관리 개념 : 소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경사항을 관리하기 위한 활동. SW의 가시성, 추적성, 무결성 등 품질 보장

  • 형상 관리 목적 : 프로젝트 생명주기 중 제품 무결성과 변경 추적성 확보. 프로젝트 변경 시 처리 메커니즘 제공(형상 관리 파악, 베이스라인 지정, 버전관리, 접근제어)

  • 형상 관리 절차 ★(식통감기)
    • 형상 식별 : 형상 관리 대상 정의 및 식별, 추적성(ID, 관리번호)
    • 형상 통제 : 버전 관리, 변경 제어, 베이스라인
    • 형상 감사 : 베이스라인 무결성 평가
    • 형상 기록 : 수행 결과 기록, 보고서
  • 개발환경 구축 절차
    • 통합 개발환경 설치(Eclipse, JDK) -> 형상 관리 도구 설치(Git, SVN, CVS) -> 빌드 도구 설치(Ant, Maven, Gradle)
  • 형상 관리 도구 명령어(Git)
실행 동작 Git
저장소 생성 git init
저장소 복제 git clone
커밋 git commit
변경 내용 확인 git diff
추가 git add
이동 git mv
삭제 git rm
브랜치 생성 git branch
병합 git merge
원격 저장소 반영 git push
설정 확인 git config



Chapter 02 공통 모듈 구현

1. 공통 모듈 구현 ★★

  • 모듈 개념 : 크게 독립된 하나의 소프트웨어 또는 하드웨어 단위.

  • 모듈 특징
    • 모듈 간 상대적 독립성
    • 단독 컴파일, 재사용 가능
    • 독립성 향상 : 낮은 결합도, 높은 응집도, 작은 모듈 크기
  • 모듈화 기법
    • 루틴 : 일련의 코드, 기능을 가진 명령들의 모임
    • 메인 루틴 : 개략적 동작 절차, 서브 루틴 호출
    • 서브 루틴 : 필요할 때마다 호출되는 루틴
  • 공통 모듈 구현 개념 : 모듈 간 결합도는 줄이고, 응집도는 높임

  • 응집도(Cohesion) : 모듈 내부 구성 요소 간 연관 정도, 하나의 모듈은 하나의 기능 수행

  • 응집도의 유형 ★(우논시절통순기)
    • 우연적 응집도 : 구성요소간 연관 없음
    • 논리적 응집도 : 유사 성격/분류 요소들이 한 모듈에서 처리
    • 시간적 응집도 : 특정 시간 안에 처리되어야 하는 활동들 한 모듈에서 처리
    • 절차적 응집도 :순차적 기능 실행
    • 통신적 응집도 : 동일한 입츌력 사용
    • 순차적 응집도 : 한 모듈의 출력값 다른 모듈이 사용
    • 기능적 응집도 : 모든 기능이 단일한 목적을 위해 수행
  • 결합도(Coupling) : 외부 모듈과의 연관도, 모듈 간 상호의존성

  • 결합도의 유형 ★(내공외제스자)
    • 내용 결합도 : 다른 모듈에서 변수나 기능 차용
    • 공통 결합도 : 전역 변수 참조, 갱신
    • 외부 결합도 : 데이터 포맷, 통신 프로토콜, 디바이스 인터페이스 공유
    • 제어 결합도 : 처리 대상 값, 처리 제어 요소 전달
    • 스탬프 결합도 : 모듈 간 인터페이스로 배열, 객체, 구조 전달
    • 자료 결합도 : 모듈 간 인터페이스로 전달되는 파라미터를 통해서만 상호작용
  • 공통 모듈 구현 절차 : DTO/VO -> SQL -> DAO -> Service -> Controller -> 화면 구현

  • MVC 패턴 ★
    • 모델 : 내부 비즈니스 로직 처리
    • 뷰 : 모델, 컨트롤러가 보여주려고 하는 것들 화면에 처리
    • 컨트롤러 : 뷰에 명령을 보내 화면 요청 결과 전달
  • 팬인, 팬아웃 ★
    • 팬인 : 어떤 모듈을 제어(호출)하는 모듈의 수(자신을 사용하는 상위 모듈 수). 팬인 high -> 재사용 but 단일 장애점, 관리 및 테스트 비용 증가
    • 팬아웃 : 어떤 모듈에 의해 제어되는 모듈의 수. 팬아웃 high -> 불필요한 모듈 호출 여부 및 단순화 여부 검토 시스템 복잡도 최적화하려면 high 팬인, low 팬아웃

1. 공통 모듈 테스트 ★

  • 화이트 박스 기법 : 프로그램의 로직을 이해하고, 내부 구조와 동작을 검사하는 소프트웨어 테스트 방식

  • 공통 모듈 테스트 종류 ★(화메화드스)
    • 화이트 박스 테스트 : 소스코드를 보면서 다양한 테스트케이스 실행
    • 메서드 기반 테스트 : 메서드에 서로 다른 파라미터 값을 호출하며 테스트 수행
    • 화면 기반 테스트 : 화면 단위로 단위 모듈 개발 후 직접 데이터 입력하여 테스트 수행, 사용자 시나리오 기반
    • 테스트 드라이버 : 하위 모듈 O, 상위 모듈 X
    • 테스트 스텁 : 하위 모듈 X, 상위 모듈 O
  • 공통 모듈 테스트 구현 절차 : JUnit 생성 -> JUnit 코드 작성 -> JUnit 실행 -> JUnit 결과 확인

  • JUnit 어노테이션 ★
    • @Test : 테스트 메서드 선언
    • @Before : @Test 실행 전 실행 코드 작성
    • @After : @Test 실행 후 실행 코드 작성
    • @BeforeClass : @Test 보다 먼저 딱 한번 실행되어야 할 때
    • @AfterClass : 단위 테스트 맨 마지막에 수행되어야 할 경우 지정
    • @Ignore : 제외할 메서드 선언
  • Assert 메서드 ★
    • assertEquals(a,b); : a와 b가 같은 객체임을 확인
    • assertEquals(a,b,c); : a=b 확인, c:오차범위(생략가능)
    • assertTrue(a); : a가 참인지 확인
    • assertNotNull(a); : a가 Null이 아님을 확인
    • assertArrayEquals(a,b); : 배열 a, b가 일치함을 확인

Chapter 03 서버 프로그램 구현

1. 서버 프로그램 구현 ★

  • 개발 구축 개념
    • 백엔드 : 사용자와 만나지 않고 프론트엔드와 연동하여 핵심 로직을 처리하는 영역. DB나 인터페이스 등을 통해 시스템에 접근
    • 프론트엔드 : 유저 화면에 나타나는 웹 화면 영역. JSP, 자바스크립트, CSS, HTML, Node.js등 활용
  • 서버 프로그램 세부 구현 ★(디스다써클)
    • DTO/VO -> SQL -> DAO -> Service -> Controller

    • DTO(Data Transfer Object), VO(Value Object) 구현
        setter : public void setId(String id){
        this.id = id;
        }
        getter : public void getId(){
        return id;
        }
      
    • SQL 구현
      • 데이터베이스 테이블 정의 및 생성
          CREATE TABLE CUSTOMER
          (
          ID VARCHAR(10) NOT NULL COMMENT '아이디',
          NAME VARCHAR(10) COMMENT '이름',
          PRIMARY KEY(PK_ID)
          )COMMENT '회원정보';
        
      • Mybatis XML 구현
        • Mybatis : 자바의 관계형 DB프로그래밍을 좀 더 쉽게 할 수 있게 도와주는 개발 프레임워크 ```
        <select></select>
        <insert></insert>
      

      </mapper> ```

    • 데이터 접근 객체(DAO; Data Access Object) 구현
        public JoinDAO(){
            ...//회원가입 데이터 접근 오브젝트 프로토타입
        }
        public int selectJoin(joinVO vo) throws Exception {
            return sqlSession.selectJoin("com.soojebi.sql.selectJoin", joinVO);
            //회원가입 데이터 조회 프로토타입
        }
        public void insertJoin(joinVO vo){
            sqlSession.insertJoin("com.soojebi.sql.insertJoin", joinVO)
            //회원가입 데이터 입력
        }
      
    • 서비스 클래스 구현
        @Service
        public class JoinService implements IMemberService{
        @Autowired
        JoinDao dao;
      
        @Override
        public void insertJoin(JoinVO join){
            JoinVO member = dao.selectJoin(join);   //회원 조회 후 결과 저장
            dao.insertJoin(member); //회원 등록
        }
        }
      
    • 컨트롤러 클래스 구현
        public class CreateController extends HttpServlet {
        @Override
        protected void doPost(...){
            JoinVo vo = new JoinVO();
            PrintWriter out = res.getWriter();
            String result;
            vo.setId(req.getParameter("id"));
            SimpleDateFormat sdf = new SimpleDateFormat("yyyymmdd");
            Date date = null;
            try{
                date = sdf.parse(req.getParameter("year")+...);
            }
            catch (ParseException e){
                e.printStackTrace();
            }
        }
        }
      
    • 입/출력 검증 로직 구현
        public class CreateController extends HttpServlet{
        @Override
        protected void doPost(...){
            result = dao.insertJoin(vo);
            if(result == "success"){
                System.out.println("회원가입 성공");
            }
            else{
                System.out.println("회원가입 실패");
            }
        }
        }
      
    • DAO vs DTO vs VO
      • DAO(Data Access Object) : 특정 타입의 DB에 추상 인터페이스를 제공하는 객체로 세부 내용 노출 없이 데이터 조작 가능
      • DTO(Data Transfer Object) : 프로세스 사이에서 데이터를 전송하는 객체로 데이터 저장, 회수 외에 다른 기능 없음
      • VO(Value Object) : 간단한 엔티티를 의미하는 작은 객체 가변 클래스인 DTO와 달리 고정 클래스를 가짐

Chapter 04 배치 프로그램 구현

1. 배치 프로그램 ★

  • 배치 프로그램 : 사용자와의 상호작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법

  • 배치 프로그램의 필수 요소(유형) ★(이온정)
    • 이벤트 배치 : 사전 정의 조건 충족 시
    • 온디멘드 배치 : 사용자의 명시적 요구가 있을 시
    • 정기 배치 : 정해진 시점에
  • 배치 스케줄러 : 배치 프로세싱을 위해 주기적으로 발생하거나 반복적으로 발생하는 작업 지원 도구

  • 배치 스케줄러 유형
    • 스프링 배치 : 스프링 프레임워크의 3대 요소를 모두 사용할 수 있는 대용량 처리를 제공하는 스케줄러(대용량 데이터 처리)
    • 쿼츠 스케줄러 : Job과 트리거를 분리하여 유연성을 제공하는 오픈 소스 기반 스케줄러(다양한 스케줄 기능)
  • Cron 표현식 (초분시일월요연) ★
    • 배치 수행시간을 설정
    순서 필드 이름 허용 값
    1 0~59, 특수문자
    2 0~59, 특수문자
    3 시간 0~23, 특수문자
    4 1~31, 특수문자
    5 1~12, JAN~DEC, 특수문자
    6 요일 1~7, SUN~SAT, 특수문자
    7 연도(생략가능) 1970~2099, 특수문자
    기호 의미
    * 모든 수
    ? 해당 항목을 미사용
    - 기간 설정
    , 특정 기간 설정
    / 시작시간과 반복간격 설정
    L 마지막 기간에 동작
    W 가장 가까운 평일에 동작
    # 몇 번째 주, 요일 설정
    사용 예 의미
    0 0 12 * * * 매일 12시에 실행
    0 15 10 * * * 매일 10시 15분에 실행
    0 * 14 * * * 매일 14시에 0분~59분까지 매 분 실행
    0 0/5 14 * * * 매일 14시에 시작해서 5분 간격으로 실행
    0 0 20 ? * MON-FRI 월~금 20시 0분 0초에 실행
    * /1 * * * * 매 1분마다 실행
    * /10 * * * * 매 10분마다 실행
  • 배치 프로그램 설계 : 배치 프로그램 관리대장 확인(기능, 입력, 출력), 배치 설계서 확인(베치ID, 작업내용)

  • 배치 프로그램 작성 : DTO, VO 구현 -> SQL 구현 -> DAO 구현 -> 서비스 클래스 구현 -> 스케줄러 등록