ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정보처리기사[실기 핵심 정리] - 개발 환경 구축
    용어 정리 2024. 4. 5. 16:14

    서버 환경 구축

    1) 웹서버(WEB)

    • 클라이언트에게 주요 정적 파일(HTML, CSS, JavaScript, 이미지 등) 을 제공하는 서버
    • 주요 기능은 이미지, CSS, JavaScript, HTML 문서 등을 클라이언트에게 전달하는 것이다.
    • 대표적인 웹 서버 소프트웨어로는 Apache Web Server, IIS, Nginx, GWS 등이 있다

     

    2) 웹 애플리케이션 서버(WAS)

    • 동적인 웹 서비스를 제공하기 위한 서버
    • 클라이언트의 요청에 따라 동적인 콘텐츠를 생성하고, 데이터베이스 조회나 비즈니스 로직 처리를 담당한다.
    • WebLogic, WebSphere, Jeus, Tomcat 등이 대표적인 WAS 소프트웨어 이다.

    3) 데이터베이스 서버(DBMS)

    • 데이터의 저장, 관리를 위한 서버로, 다양한 데이터베이스 소프트웨어가 설치될 수 있다,
    • Oracle, MySql, MS-SQL 등이 주요 데이터베이스 소프트웨어이다.

     

    4) 파일 서버

    • 사용자 파일을 저장하고 공유하는 데 사용되는 서버
    • 네트워크를 통한 파일의 접근 및 관리를 용이하게 한다.

     

    5) 로드밸런서(Load Balancer)

    • 여러 대의 서버가 있을 경우, 이들 사이에 네트워크 요청을 효율적으로 분배하는 장치
    • 분배방식
    종류 설명
    Random 요청을 랜덤으로 분배한다.
    Least loaded 가장 작은 양을 작업을 처리하고 있는 서버에게 요청을 할당한다.
    Round Robin 순서를 정하여 돌아가며 작업을 분배한다.

     

    6)CDN(Content Delivery Network)

    • 대용량 콘텐츠(이미지, 비디오 등)를 빠르게 제공하기 위해, 사용자에게 물리적으로 가까운 위치에 있는 서버 네트워크를 사용한다.
    • 사용자가 원격 웹 서버보다 가까운 CDN서버로부터 콘텐츠를 빠를게 받을수 있다.

     

    7) 시스템 아키텍처 고려사항

    고려사항 설명
    확장성
    (Scalability)
    시스템이 사용자 수의 증가나 데이터양의 증가에 따라 적절하게 확장될 수 있는 능력
    성능
    (Performance)
    시스템이 사용자의 요청을 정확하고 신속하게 처리하는 능력
    응답시간
    (Response Time)
    사용자의 요청에 대해 시스템이 응답하는 데 걸리는 시간
    처리량
    (Throughput)
    주어진 시간 동안 시스템이 처리할 수 있는 요청의 양
    접근성
    (Accessibility)
    사용자가 언제 어디서나 시스템에 접근해 요청을 보내고 응답을 받을 수 있는 능력
    알관성
    (Consistenct)
    사용자의 요청이 시스템에 정확하게 반영되어 일절한 결과를 반환해야 한다.
    보안
    (Security)
    데이터 암호화, 접근 제어, 보안 프로토콜의 적용 등을 고려해야 한다.

     

    시스템 소프트웨어

    1) 운영체제(OS, Operating System)

    • 컴퓨터의 하드웨어 운영을 관리하는 소프트웨어
    • 사용자와 하드웨어 사이에는 인터페이스 역할을 하며, 시스템 자원을 관리한다.
    • 대표적인 운영체제로는 Window, Linux, UNIX 등이 있다.

    2) JVM(Java Vitual Machine)

    • 자바 관련 프로그램을 실행하기 위한 환경을 제공
    • JVM을 통해 자바 애플리케이션은 다양한 운영체제에서 호환 가능하게 실행된다.
    • 모든 개발자가 동일한 버전을 JVM을 사용하는 것이 일관된 개발 및 실행 환경을 보장한다.

     

    3) Web Server

    • 정적 웹 서비스를 제공하는 미들웨어
    • 웹 브라우저로부터의 요청에 대해 정적 파일(Image, CSS, JavaScript, HTML 등)을 제공
    • Apache, Nginx, IIS(Internet Information Server), GWS(Google Web  Server) 등

     

    4) WAS(Web Application Server)

    • 동적 웹 서비스를 제공하는 미들웨어
    • 클라이언트의 요청에 따라 서버 측에서 동적으로 웹페이지를 생성하고 관리한다.
    • WebLogic, WebSphere, Jeus, Tomcat 등

     

    5) DBMS(DataBase Management System)

    • 데이터의 저장, 관리, 검색 등을 위한 데이터베이스 소프트웨어
    • 대용량 데이터를 안정적으로 처리하고 데이터 무결성 및 보안을 보장
    • Oracle, DB2, Sybase, SQL Server, MySQL 등

    개발 소프트웨어

    1) 요구사항 관리 도구

    • 고객의 요구사항 수집, 분석, 추적하는 데 사용된다.
    • 프로젝트 초기 단계에서 요구사항을 명확하게 정의하고 관리하는 데 중요하다

     

    2) 설계/모델링 도구

    • 소프트웨어의 구조와 기능을 시각적으로 표현하고 설계하는 데 사용된다.
    • UML 지원으로 복잡한 시스템을 명확하게 모델링할 수 있다.
    • 데이터베이스 설계를 지원하는 도구도 포함된다.
    • ArgoUML, StarUML, DB Desiginer 등

     

    3) 구현도구

    • 소프트웨어 개발 언어를 이용한 구현 및 개발을 지원한다.
    • 코드 편집, 디버깅, 프로젝트 관리 기능을 제공한다.
    • Eclipse, InteliJ, Visual Studio 등

     

    4) 테스트 도구

    • 개발된 소프트웨어 모듈이 요구사항에 부합하는지, 오류가 없는지, 성능이 적절하지 테스트하는데 사용된다.
    • 단위 테스트, 통합 테스트, 성능 테스트 등을 지원한다.
    • JUnit, CppUnit, JMeter, SpringTest 등

     

    5) 형상관리 도구

    • 소스 코드와 문서 등을 변경 사항을 버전별로 관리한다.
    • 협업중인 개발자들 사이의 일관성 있는 작업 흐름을 지원하고, 변경이력을 추적한다.
    • Git, CVS, SVN 등

     

    6) 협업 도구

    • 팀원 간의 소통과 협업을 용이하게 하는 도구
    • Slack, Microsoft Teams 등

     

    7) 배포 도구

    • 소프트웨어의 빌드, 테스트, 배포를 자동화하는 도구
    • Jenkins, Travis CI 등

    IDE 도구

    1) IDE 도구의 개념

    • 소프트웨어 개발에 필요한 다양한 기능을 하나의 프로그램 내에서 제공하는 소프트웨어
    • 코딩, 디버깅, 컴파일, 배포 등의 개발 관련 작업을 통합적으로 처리할 수 있느 환경을 제공
    • 개발자의 편의성과 효율성을 증대시키기 위해 설계되었다.

     

    2) IDE 도구의 기능

    기능 설명
    텍스트 에디터 소스코드를 작성하고 편집하는 기능을 제공한다.
    컴파일러 작성된 코드를 기계어로 변환하는 기능을 제공
    디버거 코드에 있는 버그를 찾아내고 수정하는데 도움이된다.
    배포 완성된 프로그램을 서버에 업로드 하고 관리하는 기능을 제공한다.
    플러그인 추가 기능을 통해 IDE의 기능을 확장할 수 있다.

     

    3) IDE 도구의 종류

    종류 설명
    Eclipse 자바 개발에 주로 사용되며, 다양한 언어와 플러그인 지원
    Visual Studio 마이크로소프트에서 개발한 IDE로, 주로 .NET 관련 개발에 사용
     Xcode 애플 개발자를 위한 IDE로, iOS 및 macOS 애플리케이셔 개발에 사용
     IntelliJ 자바 개발에 최적화된IDE로, 강력한 리팩토링 및 코드분석 기능을 제공

     

    4) IDE 도구 선정시 고려 사항

    고려사항 설명
    적정성 대상 업무에 적절한 도구를 섡어
    효율성 프로그래밍의 효율성 고려
    이식성 여러 OS에 개발환경 설치 가능
    친밀성 프로그래머가 익숙한 언어 및 도구
    범용성 다양한 개발 사례가 존재

     

    협업 도구

    1) 협업 도구의 개념

    • 여러 사용자가 각자의 작업 환경에서 통합된 프로젝트를 동시에 수행할 수 있도록 지원하는 소프트웨어
    • 소프트웨어 개발뿐만 아니라, 디자인, 기획, 관리 등 다양한 분야의 전문가들이 공동 작업을 수행할 수 있도록 돕는다.
    • 모든 커뮤니케이션과 작업을 통합적으로 관리할 수 있는 채널을 제공한다.
    • 대부분의 협업 도구는 클라우드 기반 SaaS(Software as a Service)모델을 따른다

     

    2) 협업 도구의 기능

    기능 설명
    전사관리 전자결재, 조직도 관리 등을 지원한다.
    프로젝트 관리 캘린더, 타임라인, 간트차드, 대시보드 등으로 프로젝트를 관리한다.
    드라이브 공간 문서와 파일을 공유하고 저장하는 공간을 제공한다.
    문서 공유 다양한 형식의 문서를 효율적으로 공유하고 관리한다
    커뮤니케이션 메시징, 비디오 콜, 이메일 통합 등을 지원한다.
    다국어 지원 다양한 언어로 서비스를 제공하여 국제적인 협업을 지원한다.
    타 협업 툴 연동 다른 협업 도구와의 연동을 지원하여 유연한 작업 환경을 조성한다

     

    3)협업 도구의 분류

    • SNS 형
      • 슬랙(Slack), 야머(Yammer), 잔디 등과 같이 소셜 네트워크 기반의 커뮤니케이션 중심 도구
    • 프로젝트 관리형
      • 트렐로(Trello), 노션(Notion), 아사나(Asana) 등과 같이 프로젝트의 구체적인 작업 관리에 초점
    • 통합형
      • 콜라비(Coollabee), 플로우(Flow), 드롭박스 비즈니스(Dropbox Business)등과 같이 다양한 기능을 통합적으로 제공하는 도구

     

    4) 협업 툴 도입 이유

    • 팀 간 의사소통의 불편함
    • 프로젝트 관리의 어려움
    • 자료 공유와 업무 현황을 불투명성

     

    5) 협업 도구 도입 프로세스

    프로세스 설명
    문제 정의 팀이나 조직에서 겪고 있는 협업 관련 문제를 명확히 정의
    솔루션 및 기대효과 정의 문제 해결을 위한 솔루시션을 제시하고 예상되는 효과를 정의
    협업 도구 분석 시장에 나와 있는 다양한 협업 도구를 분석하고 평가
    협업 도구 최종 선정 조직의 요구사항과 예산, 사용자 경험 등을 고려하여 최적의 도구를 선정

     

    형상 관리 도구

    1) 형상 관리도구의 개념

    • 소프트웨어 개발 과정에 발생하는 모든 변경사항을 통제하고 관리하는 방법
    • 개발 과정의 변경사항을 체계적으로 추적, 관리하고 기록을 유지한다.

     

    2) 변경 관리/버전 관리/형상 관리

    • 변경 관리
      • 소스코드의 변경 사항을 관리하며, 문서의 변경 이력과 복원 기능을 제공한다.
    • 버전 관리
      • 소프트웨어의 변경을 효과적으로 관리하며, 체크인/체크아웃, 릴리즈, 퍼블리싱 등을 버전으로 관리한다.
    • 형상 관리
      • 변경 관리와 버전 관리를 포함하며, 프로젝트 진행 상황, 빌드, 릴리즈까지 전체적으로 관리하는 통합 시스템이다.

     

    3) 형상 관리 대상

    • 프로젝트를 진행하며 나오는 모든 것

     

    4) 형상 관리 절차

    • 형상 식별
      • 관리해야 할 항목을 구분하고, 번호나 태그를 부여한다.
    • 형상 통제
      • 변경 요청을 검토하고 승인하여 현재의 기준선(Baseline)에 반영한다.
      • 형상 통제 위원회(CCB, Configuration Control Board)의 승인을 통한 변경 통제가 이루어 져야 한다.
    • 형상 감사
      • 변경이 계획에 따라 적절하게 이루어졌는지 검토한다.
    • 형상 기록/보고
      • 변경 사항과 처리 과정을 기록하고 관련된 이해 관계자에게 보고한다.

    버전 관리 도구

    1) 소프트웨어 버전 관리 도구 개념

    • 소스코드와 문서 등의 디지털 콘텐츠에 대한 여러 버전을 관리한다.
    • 문서의 변경 사항에 대해 버전을 부여하여, 변경된 시간, 내용, 작업자를 추적할 수 있다.
    • 개발 과정에서 발생하는 다양한 변경사항을 체계적으로 관리하고, 필요시 이전 버전으로 복원할 수 있다.

     

    2) 소프트웨어 버전 관리 도구 유형

    • 공유 폴더 방식(RCS,SCCS)
    • 클라이언트,서버 방식(CVS,SVN)
    • 분산저장소 방식(Git)

     

    3) 버전 관리 도구별 특징

    • CVS 
      • 커밋(Commit)중 오류 발생 시 롤백되지 않는 문제가 있다.
      • 느린 속도와 파일/디렉토리 변경의 불편함이 단점이다
    • SVN
      • CVS 단점을 보완한 버전 관리도구이다.
      • 최초 1회 파일 원본을 저장한 후, 변경사항만을 기록한다.
      • Trunk, Branches, Tags 구조로 형상 관리를 수행하며, 원하는 시점으로 복구가 가능하다.
      • 커밋 실패 시 롤백이 가능하며, 형상 관리가 보다 체계적이다.
    • Git
      • 리눅스 토발즈에 의해 개발된 분산 버전 관리 시스템이다.
      • 로컬에서의 빠른 성능과 분산 환경 코딩에 최적화되어 있다.
      • 원격 저장소에 장애가 있어도 로컬에서 버전 관리가 가능하다
      • 다양한 브랜치를 생성하고 관리할 수 있어 현대적인 개발 환경에 적합하다.
    • Clear Case
    • BitKeeper
    • RCS

    4) 버전 관리 주요 용어

    용어 설명
    Repository 저장소
    CheckOut Repository에서 로컬로 프로젝트를 복사
    Commit 로컬의 변경된 내용을 Repository에 저장
    Update Repository에 있는 내용을 로켈에 반영
    Add 로컬에서 새로운 파일이 추가되었을 때 Repository에 저장
    Trunk Root 프로젝트
    Branch Root 프로젝트에서 파생된 프로젝트
    Merge Branch에서 진행하던 작업을 Root 프로젝트와 합침
    Diff 파일의 비교

    빌드도구

    1) 빌드의 개념

    • 소스코드 파일들을 컴파일하고, 다른필요한 과정들을 거쳐 실행 가능한 소프트웨어로 변환하는 일련을 과정
    • 컴파일, 링킹, 패키징, 등이 빌드 과정에 포함된다.
    • 빌드 과정을 자동화하고 최적화하는 도구를 빌드 도구라고 한다.

     

    2) 빌드 자동화 도구 특징

    • 빌드, 테스트, 배포 등을 자동으로 수행한다.
    • 소스코드를 컴파일하고, 테스트 정적 분석 등을 수행하여 실행 가능한 애플리케이션을 자동으로 생성한다.
    • 계속해서 늘어나는 라이브러리 자동 추가 및 관리
    • 개발 및 배포 과정의 일관성을 보장하며, 오류을 가능성을 줄인다.

     

    3) 빌드 자동화 프로세스

    • 빌드
      • 개발자가 소스코드를 저장소에 커밋하면, 변경 사항이 통합 환경에 자동으로 통합된다.
    • 테스트
      • Jenkins, Ansible 등의 도구가 새 코드를 인식하여 자동으로 일련의 테스트를 수행한다.
      • 테스트를 통가한 빌드는 배포 준비가 완료된다,
    • 배포
      • 테스트를 통가한 소프트웨어는 운영 환경에 자동으로 배포되어 최종 사용자에게 제공 된다.

     

    4) 빌드 자동화 도구 종류

    • Make
    • Ant
      • Java 기반의 빌드 도구로 XML 기반의 빌드 스크립트를 사용한다.
      • 유연성이 높아 개발자가 원하는 형태로 빌드 프로세스를 구성할 수 있다.
      • XML 기반의 스크립트는 재사용성이 낮고 복잡할 수 있다
      • 원격 저장소에서 라이브러리를 가져오는 기능이 부족하다.
    • Maven
      • 의존성 관리와 프로젝트 라이프 사이클 관리에 강점을 가지 Java기반 빌드 도구이다.
      • pom.xml 파일을 통해 라이브러리 의존성을 관리하며, 필요한 라이브러리를 자동으로 다운로드 한다.
      • 프로젝트의 빌드부터 테스팅, 문서화 까지 전반적인 관리가 가능하다.
      • 표준화된 빌드 라이프 사이클로 다소 유연성이 떨어질 수 있다.
    • Jenkins
      • Java기반의 오픈소스 지속적 통합 서비스 도구이다.
      • 빌드, 테스트, 배포 과정을 자동화 하며, 다양한 플러그인을 지원한다.
      • 서블릿 컨테이너에서 실행되며, SVN, Git 등의 형상 관리도구와 연동이 가능하다.
      • 분산 빌드 환경을 지원하며 대규모 프로젝트에 적합하다.
    • Gradle
      • Groovy 기반의 오픈소스 빌드 자동화 도구이다.
      • 안드로이드 앱 개발뿐만 아니라 Java, C/C++, Python 등 다양한 언어의 빌드를 지원한다.
      • DSL(Domain Specific Language)을 사용하여 빌드 스크립트를 간결하게 작성할 수 있다.
      • 빌드 과정을 태스크로 구성하고, 필요에 따라 태스크를 실행한다
Designed by Tistory.