[정보처리기사 실기] 4. 서버 프로그램 구현
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 구현 -> 서비스 클래스 구현 -> 스케줄러 등록