프로그래밍 기초 지식

random-olive·2022년 10월 10일
0

Ch1. 프로그래밍 기초 지식


01/   프로그래밍을 둘러싼 환경, 동작하는 환경


  • 컴퓨터를 구성하는 요소
    • HW : 모든 물리적인 요소

      • 5대 장치 : 입력, 출력, 기억 (주,보조), 연산-제어 (CPU)
    • SW : OS + 애플리케이션 : 프로그램(실행파일 + 라이브러리), 매뉴얼(자료), 데이터 등으로 구성

      • OS (Operating System) 운영체제

        • SW, HW를 사용자가 효율적으로 활용할 수 있도록 인터페이스를 제공 (스캐쥴링 기법)
        • Windows, macOS, Linux, Android, iOS, ...
      • 애플리케이션

        • 웹 브라우저, 음악 재생기능, 카메라 기능, 문서작성 기능,...

  • 프로그래밍 : 프로그램을 작성하는 작업

  • 데스크톱 앱 : PC에서 동작하는 앱. 프로그램이 PC에 설치되어있고, 데이터도 PC에 저장되어 있음. PC에 연결된 하드웨어를 제어

  • 스마트폰 앱 : 스마트폰의 GPS 기능, 카메라, 네트워크, 센서 등의 하드웨어를 제어

  • 웹앱 : 네트워크 접속이 전제됨. 인터넷 상에서 제공되는 서비스. 사용하려면 웹 브라우저 (SW)가 필요함.



02.   업계와 직종


  • SIer (System Integrator) : 기업마다 요구하는 기능이 달라 독자적인 앱을 구성. 각 기능을 서로 연계해야 동작해야 하므로, 시스템 전체를 고려해 설계, 개발, 운용을 모두 담당하는 기업. 안정적인 시스템 가동이 중요해서, 많은 기업에서 사용된 실적이 있는 기술이나 시스템을 사용하는 것이 일반적.

  • 웹 계열 : SNS, 쇼핑 등 웹으로 서비스 제공하는 기업

    • 직접 소프트웨어 개발, 신기술 적극적
  • 임베디드 계열 : 가전제품, 게임기 등 하드웨어의 성능을 최대화하기 위한 SW.

  • 패키지 벤더 : 소프트웨어 자체가 제품


  • SE (System Engineer) : 고객과의 조정이나 설계 작업 등 상류 공정을 중심으로 전체를 담당하는 사람. 고객 업무 이해도, 시스템 전체에 대한 폭넓은 지식, 커뮤니케이션 능력 중요

  • 프로그래머 : 설계서를 바탕으로 실제 프로그램을 개발. 언어, 알고리즘 등에 정통하고 고품질의 프로그램을 작성

  • PM (Project Manager) : 프로젝트의 예산, 인원, 스캐쥴 관리 → 개발이 원활하게 진행되도록. 조직에 따라서는 Product Manager 등의 직책이 주어지기도 함.

  • 테스터 : 제품 공개 전 테스트 하는 작업 담당

  • 오퍼레이터 : 운용하는 사람



03.   소프트웨어 개발 공정


  • 요구 분석 : 고객이 시스템화에서 요구하는 사항을 정리.

  • 요건 정의 : 개발측이 비용 등 실현가능성을 고려해서 판단, 구현할 범위를 고객과 조정하여 문서로 작성.

    • 요건 정의에서 구현할 품질, 범위를 정하지 않으면 요구사항이 나중에 계속 추가됨..
  • 설계

    • 기본설계 (외부설계) : What - 화면 구성, 취급하는 데이터, 통신 방법 등..
    • 상세설계 (내부설계) : How - 내부 동작, 데이터 구조 , 모듈 분할방법, ...
  • 개발 - 테스트



04.  소프트웨어 개발의 기법


  • 워터폴 개발 모형 : 요건 정의 - 설계 - 구현 - 테스트 - 운용의 큰 흐름을 따라 개발을 진행함. 대규모 프로젝트에 많이 이용되며, 구현, 테스트 공정에 와서 이전 공정의 누락을 알게되면 수정이 힘들다. 재작업할 일이 생기지 않도록 상류 공정에서 주의 깊게 확인하고 문서 등을 정비한 후 개발을 진행함.

  • 애자일 개발 모형 : 웹 시스템 개발 등에서는 변화가 심해, 사양을 명확하게 정하기가 어렵고, 기능 추가-변경이 빈번하게 발생 → 요건 정의에서 릴리스까지의 사이클을 작은 단위로 반복하는, 워터폴보다 대처가 유여한 개발 기법. 다만 워터폴과 비교하면 처음 견적과는 비용, 일정이 큰 폭으로 달라질 우려가 있고, 변경이 반복되므로 개발자의 동기 저하, 프로젝트 지연 등의 리스크가 있다.

    • 애자일에서 사용되는 기법의 예
      https://blog.naver.com/bebejin93/222818547687

      • 스크럼 (럭비 경기 대형, 팀의 중요성을 강조)
        : 플래닝 포커, 스프린트 계획, 데일리 스크럼, 스프린트 리뷰, ...
      • XP (eXtreme Programming 기법, 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발과정의 반복을 극대화)
        : TDD, 리팩토링, CI-CD
      • 린 : 제약 조건 이론, ...
      • FDD (Feature Driven Development): Milestone, 기능 세트 진척 리포트, ...
      • RUP (Rational Unified Process) : Use case 주도, UML, ...
    • 애자일 SW 개발 선언

      • 공정과 도구보다 개인과 상호작용
      • 포괄적인 문서보다 작동하는 SW
      • 계약 협상보다 고객과의 협력
      • 계획을 따르기보다 변화에 대응하기를 가치있게 여긴다.
  • 스파이럴 개발 모형 : 설계-프로토타입을 반복해서 개발하는 기법. 시제품을 만들어 의뢰자도 완성된 이미지를 확인할 수 있지만, 의뢰자의 요구가 많아지면 시제품만 만들다가 기간 내에 완성되지 않을 가능성이 있다.



05.  개발(구현) 공정에서 할 일


  • 소스코드를 입력한다
    • 코딩 : 설계서를 바탕으로 소스코드를 입력해 SW를 개발하는 프로그래밍 공정

    • 종이에 흐름도나 UML (Unified Modeling Language) 을 쓰고나서 소스 코드를 입력하는 방법도 있다. (클래스, 속성 등의 관계도, 타입 등을 나타내는 듯)

  • 실행, 운용환경 구축

    • 개발 공정에 따른 엔지니어와 업무 (구축 및 운용)
      • 서버 엔지니어 : OS, 웹서버, 메일 서버 , ...
      • DB 엔지니어 : 데이터 모델링, 정규화, 통계정보 획득, ...
      • 네트워크 엔지니어 : 라우터, 방화벽, IPS / IDS (Instrusion Protecting/ Detection System), ...
        https://catchingitsecure.tistory.com/4
      • 테스트 엔지니어 : QA (Quality Assurance), 테스트케이스 설계, 실행, ...


06.  팀으로 개발하는 여러가지 방법


  • Pair 프로그래밍 : Navigator, Driver
  • Mob 프로그래밍 : 참가자 전원이 문제점을 공유, 속인화 방지
  • 1 on 1 : 상사-부하가 짧은 사이클로 정기적 실시. 멘토링이랑 비슷한 듯


07.  개발한 프로그램 공개하기


  • freeware (free SW) : 무료로 제공됨, 저작권은 개발자에게 귀속, 허가없이 변경-판매 불가능, 타인의 소스 코드를 유용해 프리웨어로 공개 x. 사용시 동작을 보장 못함.
  • shareware : 처음에는 무료, 일정 사용 기간이 끝나면 유료.
  • 자신이 개발한 SW를 공개할 때 주의할 점
    • 저작권에 주의한다, 연락처를 명시한다.
    • 특히나 타인이 만든 코드를 유용하지 않았는지 확인하기
profile
Doubts kills more dreams than failure ever will

0개의 댓글