/ MSAI

Msai - 1주차(2)

MSAISchool 공부에 대한 내용을 작성해 보았다.

2022년 10월 4일 박용 강사님(구구컬리지 대표님)

Computer Science 과제 1

1. 컴퓨터의 구성요소는?

  • CPU(연산을 담당함), Memory(기억을 담당함), SSD(or HDD), 키보드, 모니터

2. GPU에 대해서 설명하세요.

  • 코어가 되게 많다.
  • 그래픽 처리 장치, 그래픽 연산에 특화된 장치 그리고 단순한 대량 작업에 특화되어 있다.
  • 대용량 데이터 처리 -> 인공지능, 빅데이터, 블록체인

3. 기계어란?

  • 기계어는 컴퓨터가 사용하는 언어이다. 좀 더 구체적으로 이야기하면 컴퓨터의 CPU가 명령을 처리할 때 사용하는 언어이며 이진화된 숫자(이진법)로 구성되어 있다.

4. 컴파일러란 무엇인가요?

  • 컴파일러(compiler)는 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 변역 프로그램을 말한다.
  • 하이레벨 랭귀지 -> 어셈블리어 -> 기계어 이러한 절차를 거치는게 컴파일러이다.
  • 기계어로 변환시키는 소프트웨어
  • C, JAVA 등은 컴파일러 언어이다. (그래서 실행 파일이 컴파일 후에 생성된다.)

5. 오픈소스 프로젝트 3개를 나열하세요.

  • 리눅스, GIT, 안드로이드, 아파치 등등.

6. 프레임워크와 라이브러리에 대해서 설명하세요

  • 프레임워크와 라이브러리를 잘 구분해야 한다.

    <프레임워크></center>

    • 원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대를 의미한다.
    • 특정 일을 수행할 때 필요한 기능들의 모음
    • 웹 프레임워크, 딥러닝 프레임 워크
    • 프레임워크를 사용하면 빠르게 해당 일을 만들 수 있다.
    • 예) Python 서버 개발에 사용되는 Django, Flask등이 있다.
    • 예) Python tensorflow

    <라이브러리></center>

    • 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임. 즉 특정 기능을 모와 둔 코드, 함수들의 집합이며 코드 작성 시 활용 가능한 도구들을 의미한다.
    • 기능들의 모음
    • 구글 앱스 라이브러리, 윈도우 라이브러리
    • 예) Python pip로 설치한 패키지/모듈 (pandas, beautifulsoup 등등)

7. API란?

  • API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신 할 수 있게 하는 메커니즘이다. 예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있다. 휴대폰의 날씨 앱은 API를 통해 이 시스템과 “대화”하고 휴대폰에 매일 최신 날씨 정보를 표시한다.
  • Application Programming Interface
  • 애플리케이션들간의 데이터를 주고 받는 인터페이스 규약
  • 애플리케이션이라는 단어는 고유한 기능을 가진 모든 소프트웨어를 나타낸다.
  • 인터페이스는 두 애플리케이션 간의 서비스 계약이라고 할 수 있다.
  • 다른 서비스(기능)을 이용하기 위해 지켜야 하는 규약
  • 카카오 인증 API, 네이버 지도 API

8. 데이터 분석을 진행하려고 합니다. 어떤 프로그래밍 언어를 사용해야 할까요? 그 이유는?

  • 파이썬과 R 프로그래밍 언어를 사용해야한다고 생각합니다.
  • 그 이유는 파이썬 프로그래밍 언어는 스크립트 언어이고 익히기 쉽고 벡터 방식의 데이터 형태를 다룰 때 많은 라이브러리를 기본 연산으로 가지고 있다. 그리고 통계, 인공지능 등에서 사용한다.
  • 그리고 R 프로그래밍 언어는 통계 계산과 그래픽을 위한 프로그래밍 언어이자 소프트웨어 환경이다.
  • 따라서 데이터 분석을 진행 할 때는 파이썬과 R 프로그래밍 언어를 사용하는게 맞다고 생각합니다.

9. TDD에 대해서 설명하세요.

  • 테스트 주도 개발(TDD)은 개발방법론이다. 기능을 개발하고 테스트를 진행하는 전통적인 방법과 다르게 테스트 코드를 먼저 만들고 테스트를 통과하는 코드를 작성하는 방법이다.
  • 예로는 TDD는 작가가 책을 쓰는 과정과 유사하다. 책을 쓸 때는 목차를 구성한다. 이후 각 목차에 맞는 내용을 구상하여 초안을 작성하고 고쳐쓰기를 반복한다. 이 과정을 TDD에 비유하면 목차구성은 “테스트 코드 작성”, 초안작성은 “코드개발”, 고쳐쓰기는 “코드수정”에 해당한다. 반복적인 검토와 고쳐쓰기를 통해서 좋은 글이 완성되는 것처럼 소프트웨어도 반복적인 테스트와 수정을 통해서 고품질의 소프트웨어를 만들 수 있다.
  • TDD의 장점은 테스트가 개발과 함께 이루어 지기 때문에 언제나 테스트가 끝난 기능을 확보할 수 있고 테스트 자동화, 코드 변경에 대한 개발자의 스트레스를 줄여준다.

10. 캐시에 대해서 설명하세요.

  • CPU에도 메모리가 들어가 있고 그걸 캐시라고 생각해도 좋다. (하드웨어적으로)
  • 캐시(cache)는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.
  • 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다. (소프트웨어적으로)

11. 클라우드에 대해서 설명하세요.

  • 온라인(웹)에서 프로그램을 실행하는 방식이다.
    • 팀즈, 오피스365, 구글 워크스페이스
    • 아마존 AWS, 마이크로소프트 애져, 구글 GCP
      • 장점
        • 데이터 공유와 협업의 편리함
        • 리소스, 유지보수 관리에 대한 부담감이 적음
        • IAAS, PAAS, SAAS

12. SAAS의 예를 들어보세요.

  • 서비스로서의 소프트웨어(Software-as-a-Service, SaaS)는 클라우드 애플리케이션과 기본 IT 인프라 및 플랫폼을 인터넷 브라우저를 통해 최종 사용자에게 제공하는 클라우드 컴퓨팅 형태이다. SaaS의 예로는 Google Docs, Microsoft Office 365와 같은 애플리케이션 서비스 제공업체(ASP)와 인사 관리 소프트웨어, 전자 상거래 시스템, 고객 관계 관리 툴, 통합 개발 환경(IDE)을 제공하는 엔터프라이즈 서비스가 있다.
  • IAAS, PAAS, SAAS

13. 페어프로그래밍의 장점은?

  • 유투브로 보았던 페어프로그래밍의 count를 해보는 과정을 한번 보라고 말씀하심.
  • 두 명의 프로그래머가 한조를 이루어서 번갈아가면서 프로그래밍 하는 방법(짝 프로그래밍)
    • 프로그래밍에 대한 정보 공유
    • 팀간의 프로그래밍 실력 및 격차를 줄여줌

14. GIT이란?

  • 버전 관리 도구
  • 개발 버전(변화)을 관리하기 위해 만든 도구(소스코드)
  • 리누스 토발즈가 리눅스 커널 소스를 관리하기 위한 목적으로 개발

15. 게임을 개발하고 싶습니다. 어떤 프로그래밍 언어를 사용해야 할까요? 그 이유는?

  • 게임을 개발 할 때는 자바, C#, C++ 프로그래밍 언어를 사용하는게 맞다고 생각합니다. 그 이유는 oop를 기반으로 제작된 프로그래밍 언어, 게임, 응용소프트웨어를 사용할 수 있기 때문이라고 생각한다.

16. HTML페이지를 만들려고 합니다. 어떤 프로그래밍 언어를 사용해야 할까요?

  • HTML페이지를 만들려고 한다면, 자바스크립트 언어를 사용하는게 맞다고 생각합니다. 그 이유는 자바스크립트는 웹페이지 인터렉션 기능을 제작할 때 사용하는 언어이기 때문에 그렇게 생각하였습니다.

17. 웹 프레임워크 세 가지를 작성하세요.

  • 스프링, 장고, Flask, express
  • HTML, CSS, JAVASCRIPT

18. 딥러닝 프레임워크 세 가지를 작성하세요.

  • Tensorflow, Keras, Pythoch

19. 데이터베이스란?

  • 데이터베이스를 한 마디로 정의하면 ‘데이터의 집합’이라고 할 수 있다.
  • 데이터베이스에는 일상생활 대부분의 정보가 저장되고 관리됩니다.
  • 데이터베이스는 구조화된 정보 또는 데이터의 조직화된 모음으로서 일반적으로 컴퓨터 시스템에 전자 적으로 저장됩니다. 데이터 베이스는 일반적으로 데이터베이스 관리 시스템(DBMS)에 의해 제어됩니다.

20. 애자일 방법론.

  • 주요기능들을 수정하는 것을 말한다.
  • 애자일 방법론은 꾸준히 고객의 반응을 반영하면서 소프트웨어를 개발하는 방법론으로 문서기반의 개발보다는 실질적인 코딩을 통한 방법론이다.
  • 애자일은 신속한 반복 작업을 통해 실제 작동 가능한 소프트웨어를 개발하여 지속적으로 제공하기 위한 스프트웨어 개발 방식이다.
  • 애자일 방법론 특징
    1. 고객과 개발자의 지속적인 소통을 통하여 요구사항의 변화를 이행한다.
    2. 개발자 개인의 가치보다는 팀의 목적을 우선시 하며 고객의 의견을 가장 우선시 한다.
    3. 주기적인 회의를 통한 프로텍트를 점검한다.
    4. 진행하면서 프로그램을 시행해보고 고객으로 부터 피드백을 받는다.
    5. 비용절감에 힘쓰는 동시에 프로그램 품질 향상을 위해 노력한다.

즉, 애자일 방법론은 고객의 고객에 의한, 고객을 위한 개발 방법론을 알 수 있다. 미래를 미리 예상해 정해 놓은 계획대로 움직이기 보다는 고객의 요구와 개발 상황에 맞게 유동적으로 개발할 수 있는 개발 방법론이 바로 애자일의 가장 큰 특징이다.2020-06-08-jekyll-basic.md