컴파일러와 인터프리터

애플리케이션: 사용자가 직접 사용하는 프로그램
컴퓨터,휴대폰에서 실행하는 애플리케이션의 갭이 줄어들고 있다.(= 사용하는 애플리케이션이 같아지고 있다.)

애플리케이션은 프로그래밍 코드에 의해서 실행되는데 어던 소프트웨어가 프로그래밍코드를 애플리케이션으로 바꿔주기 때문에 가능할까?
:: 컴파일러 / 인터프리터

프로그래밍 언어의 번역기, 컴파일러

한 언어의 코드를 다른 언어의 코드로 바꿔주는 것을 컴파일러 라고 부른다.
컴파일러의 단점은 머신코드를 이해하기 어렵다는 것입니다. 그래서 코드를 일부 작성 후 실행 하여야 하고 이는, 빠르게 개발하기 어렵습니다.
컴파일러의 단점(컴파일의 과정)을 보완하기 위해서 인터프리터가 만들어 졌습니다.인터프리터는 코드 즉시 실행기입니다.
컴파일러는 모든것을 해석하고 코드를받아 실행하도록 하지만, 인터프리터는 한줄 한줄 해석하면서 컴퓨터에 전달해 실행한다.

운영 체제 개요

애플리케이션을 도와주는 프로그램, 운영체제

OS(Operating System) // 윈도우10, MacOS, Linux, Android, iOS

왜 모든 컴퓨터에는 운영체제가 필요할까?

운영체제의 역할
  1. 입력과 출력 관리
    : OS는 입출력장치와 애플리케이션을 연결해준다.
  2. 저장과 불러오기
    : 무엇인가를 저장하고 불러오는 저장장치가 있다.
    : 휘발성 / 비휘발성 장치가 있다.
    : 컴퓨터가 켜져 있는 동안에만 보관 (RAM) / 컴퓨터가 꺼져도 저장 (HARD DISC)
    : 각 상황과 목적에 맞게 '저장과 불러오기'를 OS가 수행한다.
  3. 여러 프로그램 동시에 빠르게 실행하기
    : OS는 여러 프로그램들이 동시에 실행되는 것(멀티태스킹)을 관리하여 준다. 가령, 음악을 들으면서 게임을하고 영화를 다운로드받고..
운영체제의 종류
  1. 데스크탑/랩톱 : Windows, MacOS, Linux
  2. 모바일 : Android, iOS
  3. 서버 : 컴퓨터, Google Drive, Server(Ubuntu, Unix, Linux, .. )
  4. 임베디드 : 실생활 및 다방면으로 활용됨
운영체제의 발전 역사

UNIX(1970년 출발: 시초) -> UNIX표방 OS 대거 생성 -> POSIX(공식UNIX마크) 생성 -> ... -> UNIX-like => GNU/Linux 생성

Linux -> 최다인원 프로젝트에 참여한 OS, 누구나 사용 가능하고, 누구나 변형 가능하다.(오픈소스)

네이티브 애플리케이션과 웹 애플리케이션

플랫폼의 파편화

플랫폼: 프로그램이 실행되는 하드웨어, 소프트웨어 환경을 의미한다. 각 플랫폼에 맞게 프로그램을 만들어야 합니다.
CPU 종류가 다르면, 실행되지 않음을 '플랫폼 의존성' 이라 말합니다.
애플리케이션의 경우, 운영체제 및 하드웨어를 모두 고려해야하기 때문에 작업하기 어렵다. 그래서 플랫폼 의존성에 의해 특정 플랫폼을 포기하는 경우가 많다.
이를 '플랫폼 파편화'라고 지칭하기도 합니다.

표준의 필요성

플랫폼의 파편화를 해결하기 위해서 세계는 "표준"을 설정했습니다.
("이런식으로 프로그래밍 코드를 만들게, 이렇게 사용할 수 있도록 만들게~")

크로스플랫폼
  1. 가상머신
    Java가 가상머신 JVM을통해서 소프트웨어 규격을정해서 프로그램을 설계하는 예시를 들 수 있습니다.

  2. 웹 개발자는 웹 브랑우저에 맞는 규격에 맞춰 프로그램을 설계합니다.사용자 환경에 맞게, 반응형으로 레이아웃을 설계한다.(반응형 웹 디자인)
    단, 웹의 단점은 브라우저 호환성문제가 있습니다.

:: 크로스플랫폼은 파편화의 문제를 해결하기 위해 나온 개념으로, 하나의 프로그램만으로 여러 플랫폼에서 실행 할 수 있는 것을 의미합니다.
다양한 플랫폼 위에 소프트웨어로 만든 또 하나의 컴퓨터를 실행시켜서 다양한 플랫폼을 마치 하나의 컴퓨터처럼 만드는 것입니다.

네이티브 애플리케이션 & 웹 애플리케이션

웹을 활용해 애플리케이션처럼 활용하는 것을 웹 애플리케이션이라 지칭합니다.
그리고 웹 앱과 구분하기 위해 앱에서 사용하는 앱플리케이션을 네이티브 애플리케이션이라고 지칭합니다.

웹을 활용하는 여러가지 방법

웹의 기술이 발전하고 활용가능한 범위가 많아짐에 따라 SPA, Hybrid Web App[정해진 특정 공간만 바꿔서 렌더링해준다(광고)],
PWA(Progressive Web App)들이 등장하여서 많은 서비스들이 생겨나고 있습니다.

'CodeIt! > 컴퓨터개론' 카테고리의 다른 글

프로그래머 세계 이해하기  (0) 2023.03.09
프로그래밍 언어 이해하기  (0) 2023.03.09
프로그래밍 오버뷰  (0) 2023.03.08

프로그래밍의 다양한 분야

컴퓨터 사이언스의 기본기

객체지향프로그래밍, 알고리즘, 자료구조는 모든 프로그래밍 언어의 기초입니다.

소프트웨어 공학

소프트웨어로 제품/서비스를 만드는 공학(프로세스)[기획-개발-테스트-배포-유지/보수]

프로세스 관리

WaterFall / Agile 방식이 있습니다.
Waterfall의 단점은 결과물이 나와야 문제점을 발견할 수 있고, 발견했다면 갈아 엎어야 하니 문제가 많아질 수 있습니다.
Agile방식은 Waterfall의 단점을 극복하기 위해, 유연한 대처를 하기위해서 만들어진 방식입니다. 단 Agile방식은 프로젝트 방식이 복잡해질 수 있습니다.

테스트 프로세스

자동화 테스트 도구나 테스트 코드를 통해서 테스트 단계를 가집니다.
현업에서 테스트 과정은 버그 관리 툴을 통해 (지라,트렐로,아스나) 버그를 발견 시 이슈를 만들어 제보하여 공유합니다.
이슈의 상태 [오픈 - 인프로그레스 - 리졸브 - 클로즈 - 리오픈] 및 Assign(담당자)를 배정하여 해결합니다.

버전관리

프로그래밍하다보면, 코드 수정은 잦게 발생합니다. 변화에 따라 어떤의도로, 어떤코드를 수정했는지 확인하는 방법을 알기 위해서 '버전관리'를 합니다.
이는, Git, Github를 통해서 관리합니다. Git을 활용해 버전을 나눠서 Branch별 기기별 관리를 할 수 있으며, 개발자들과 협업하기 위해서는 꼭 알아야하는 필수 역량입니다.

개발자들의 필수 프로그램 IDE(통합개발환경: Integrated Development Environment)

개발자들이 코딩할 때 도움이 되는 기능을 모아둔 프로그램 (VScode, IJ)
IDE의 장점: 작업시간을 압도적으로 낮춰 시간을 효율적으로 사용할 수 있다.

트렌드를 읽는 능력

프로그래밍은 선택의 연속
트렌드를 읽는 방법
  1. 좋은 언어, 프레임워크, 기술을 쓰면 커뮤니티가 활발해지고 이는 선 순환체계를 이룹니다.
  2. 인정받는 기술을 확인한다.
    : 회사들이 어떤 기술들을 사용하고 있는지, 요구하는지 확인한다.
    : 유명한 회사의 블로그를 참고한다.
  3. 유망한 기술들을 확인한다. (Trend Tech)

'CodeIt! > 컴퓨터개론' 카테고리의 다른 글

소프트웨어 이해하기  (0) 2023.03.09
프로그래밍 언어 이해하기  (0) 2023.03.09
프로그래밍 오버뷰  (0) 2023.03.08

프로그래밍언어 살펴보기

프로그래밍을 배우기 힘든 이유

어떤 개발자가 되고 싶은지에 따라서 필요한 언어를 찾고 공부해야합니다.

프로그래밍언어란 무엇일까?

컴퓨터는 프로그램을 통해 동작하고, 프로그램은 프로그래밍언어로 작성됩니다.

컴퓨터가 어떤 일을 해야할지 알려주는 설명서는 프로그램이라고 볼 수 있습니다.

프로그래밍 언어의 발전

기술의 발전을 통해서, 다양한 프로그래밍언어를 통해서 컴퓨터가 다양한 동작을 수행할 수 있도록 구현 해 나아가고 있습니다.

프로그래밍 언어를 분류하는 두가지 기준

프로그래밍 언어 너무 많은 것 아닙니까?!

기존의 프로그래밍 언어에 대한 불편함은 새로운 프로그래밍 언어의 탄생을 만들어 내고 있습니다.

그래서 특정 상황이나 프로젝트에 더 유용한 적합한 언어를 사용하는 것이 바람직합니다.

첫 번째 패러다임: 객체 지향 프로그래밍

객체지향이 무조건 정답은 아니지만, 많은 프로그래밍 언어들이 객체지향을 지향하고 있습니다.

객체 지향 프로그래밍 이해하기

프로그래머들은 탑-다운 방식을 통해서 프로그램을 제작하였는데, 합치기 전 까지는 문제를 파악할 수 없었기 때문에 실수 한번에 큰 영향을 받았습니다.

이를 해결하기 위해서, 객체 지향 프로그래밍이 탄생(바텀-업 방식)하였습니다. 객체를 기준으로 프로그램을 제작하기 때문에 프로그래밍하기 수월해 졌습니다. 전체가 완성되지 않아도 일부 기능만 사용해볼 수 있기 때문에 테스트에 적합하다고 볼 수 있습니다.

객체 지향의 단점은 코드를 잘 나누고 설계하는 것이 어렵다는 것과 사람이 이해 하기 쉽게 프로그램을 만들었기 때문에 컴퓨터가 작업하는 시간이 늘어난다는 점을 뽑을 수 있습니다.

두 번째 패러다임: 변수의 데이터 타입
Dynamic Typing vs Static Typing

다이나믹 타이핑 언어는 문법이 간결해 비전공자들이 배우기 쉽습니다. 컴퓨터 구조가 생략되어 실행속도가 조금 느릴 수 있습니다.

명확하고 정교한 언어를 추구해서 제약과 규칙이 많아, 실수를 방지하고 더 체계적인 코드를 만들 수 있습니다.

프로그래밍언어 Overview

프로그래밍 언어의 스펙트럼

컴퓨터와 가까운가? -> 저수준 언어 // 사람과 가까운가? -> 고수준 언어 라고 지칭합니다.

추상화가 진행되었을 수록 고수준 언어라하고, 적게 되었을 경우 저수준 언어라 합니다.

저수준 언어일 수록 실행속도가 빠르고, 고수준언어 일수록 실행속도가 느립니다.

프로그래밍 언어의 추상화

추상화는 몰라도 되는 내용은 숨기고, 꼭 알아야하는 내용만 드러내는 것이라 말할 수 있습니다.

추상화를 얼마나 했냐에 따라, 코딩을 할 때 어디에 초점을 맞추는지도 달라질 수 있습니다.

저수준 언어와 고수준 언어 비교하기

고수준 언어에 대한 단점은 컴퓨터에게 많은 생각(?)을 요구합니다.

저수준 언어를 사용하면, 컴퓨터에게 적은 생각(?)을 요구하기 때문에 생각 이외의 효율적인 동작을 만들어 낼 수 있습니다.

[프로그래밍 언어의 흐름]
[프로그래밍 언어의 흐름]

프로그래밍 언어 제대로 사용하기

좋은 코드란?

좋은 코드란 무엇일까?

  1. 가독성이 좋은 코드 만들기: 상황에 맞는 적절한 Comment를 추가하자
  2. 변수의 이름을 잘 지어주기
  3. 스타일 가이드 활용하기(스네이크, 파스칼, 카멜 표기법)
    : 스타일 가이드 확인하는법 [언어] + StyleGuide 검색
  4. 구조화가 잘 된 코드(파일분리, 코드분리)
라이브러리

(프로그래밍을 잘하는 개발자들이) 필요한 코드를 찾아서 쓸 수 있게 만들어 둔 코드 [능동적]

프레임워크

(프로그래밍을 잘하는 개발자들이) 만들어 놓은 코드 툴 안에서 사용할 수 있게 만들어둔 코드 [수동적]

라이브러리 vs 프레임워크

(예시)
라이브러리 : 이미 누가 만들어 둔 도구를 가져와서 사용한다 !
프레임워크 : 이미 틀이 짜여져 있는 가게

 

'CodeIt! > 컴퓨터개론' 카테고리의 다른 글

소프트웨어 이해하기  (0) 2023.03.09
프로그래머 세계 이해하기  (0) 2023.03.09
프로그래밍 오버뷰  (0) 2023.03.08

Programming OverView

프로그래밍 혁명

코딩이 뭘까?

코딩이란, 컴퓨터에게 어떤 동작을 시키기 위해 명령을 내리는 것을 의미합니다. 그러나 컴퓨터는 0과 1 로만 이해할 수 있습니다. 코딩을 통해서, 반복적인 업무를 맡기거나 컴퓨터 내 작업을 통해서 만드는 것을 "소프트웨어"라고 말합니다 소프트웨어는 코딩을 통해서 이뤄진 것이라고 의미할 수 있습니다.

코딩이 바꾸는 세상

현대 사회에서는 코딩으로 이뤄진 세계를 살아가고 있습니다. 가령, 앱을 이용하는 것처럼. 뿐만 아니라 현대의 빅테크 기업은 "소프트웨어 기술"로 이뤄져 있습니다. 앞으로 미래는 소프트웨어 기술이 주목받을 것이라 전망받고 있습니다. 코딩, 왜 핫해졌을까?

  1. 기술의 발전때문입니다. 기술의 발전을 통해서 게임,앱,채팅 등등 다방면으로 이용되고 있습니다.
  2. 코딩을 활용할 수 있는 기기가 많아졌기 때문입니다.
  3. 코딩에 대한 접근성이 좋아졌습니다. 가령, 접근을 쉽게하는 라이브러리, 프레임워크의 등장이 있습니다.
  4. 코딩 커뮤니티가 활성화 되었습니다. 예로, 스택오버플로우가 있습니다.
  5. 코로나를 통한 디지털산업이 가속화 되었기때문입니다.
프로그래밍 혁명에 참여하는 방법
  • 트렌드 이해하기
  • 직접 코딩하기
  • 개발자 되기
쉬운 듯 쉽지 않은 개발자 커리어

짧게는 3개월~6개월 동안 공부해서 취업을 할 수 있는 것도 개발자 사회이지만, 막상 준비해보려 하면 쉽지 않기도 합니다. 현업에서는 좋은 개발자 구하기 힘들다는 것도 현 주소 입니다. 잘하는 개발자들은 좋은 대우를 받기 때문에, 강의 전선에 오기 힘듭니다.

시간 투자의 어려움, 파편적 강의를 해결하기 위해서 코드잇을 구성했다??!

코드잇 함께 가자미~!!

입문자가 알기 힘든 두가지

내 코드는 왜 초라할까?

프로그래밍의 큰 그림을 알기 위해서는 동작원리, 구현방법을 알아야합니다.

동작원리는 클라이언트, 서버, 데이터베이스 요소로 이루어져 서로 상호작용하면서 동작합니다. 구현방법을 알아가 보면서 프로그래밍의 큰 그림을 확인할 수 있을 겁니다.

서비스의 동작 원리

대부분의 서비스들은 나눠지는 방법이 비슷합니다. 가장 대표적으로는, 클라이언트(고객)와 서버(가게)구조입니다. 웹 개발에서 클라이언트는 웹 브라우저를 의미합니다. HTML, CSS, JS file을 통해 웹 레이아웃을 페인팅합니다.

HTML, CSS, JS 코드들은 어디에서 오는 것일까? 바로 서버입니다. 서버란 하나의 컴퓨터를 의미한다고 볼 수 있습니다.
서버 컴퓨터는 어떻게 찾을 수 있을까?

브라우저에서 URL을 검색하면 DNS에서 이 URL을 찾습니다. 이를 찾으면 IP주소를 찾는다고 볼 수 있습니다.
IP주소를 통해서 서버에 접속할 수 있고, 이때 서버는 클라이언트에게 HTML,CSS,JS 파일을 제공합니다. 그래서 브라우저는 제공받은 파일을 통해
화면을 렌더링 할 수 있습니다. 클라이언트는 웹 사이트를 이용하는 와중에도 계속해서 데이터를 요청을 할 수 있습니다. 이때, 이 데이터들은 어디에서 오는 것일까? 서버는 데이터베이스라는 곳에 데이터를 저장해서 필요한 데이터들을 꺼내와 사용할 수 있습니다.

서비스의 구현 방법

서비스에는 여러가지 기능들이 있습니다. 가령, 결제하기, 구독하기, 공유하기 등등.. 그러나, 간단한 기능들을 구현하기 위해서는 대표적으로 반복문과 조건문이 있습니다. 그리고 반복문과 조건문 같은 작은 단위의 논리를 세워서 합쳐 기능을 구현하는 것입니다.

개발자들은 라이브러리와 프레임워크를 통해 기능을 구현하는데 보조받기도 합니다.

프로그래밍 분야들

프로그래밍을 시작하기 전에

웹, 모바일, 데이터사이언스, 게임, 블록체인, 임베디드, IoT

웹 개발 분야 이해하기

웹 개발은 수요가 가장 많습니다.

웹 서비스를 만들기 위해서는 클라이언트 개발과 서버 개발을 해야 합니다. 이를 프런트엔드 개발과 백엔드 개발이라고 지칭합니다.
프론트엔드 개발의 가장 기본은 사용자에게 보이는 화면을 그려주는 것입니다. HTML, CSS, JS, React,...
페이지가 복잡 해 질수록 작업하기 어려워지기 때문에 효율적으로 구현하기 위해서 라이브러리와 프레임워크의 도움을 받고 있습니다.

백 엔드의 대표적인 요소로는 데이터베이스, API가 있습니다. 서버에서 일어나는 일련의 요소들을 다루고 있습니다.
그리고 SQL, NoSQL 같은 요소들도 있습니다.

모바일 개발 분야 이해하기

모바일 개발도 웹 개발과 비슷한 요소가 많습니다. 서버측면은 거의 비슷하고, 클라이언트 측면이 다릅니다. 가령, 웹이 아니라 모바일기기가 클라이언트가 될 것입니다. 모바일은 크로스 플랫폼을 이용해서 안드로이드와 IOS를 개발하고 있습니다.

데이터 분야 이해하기

데이터 엔지니어, 데이터 애널리스트, 데이터 사이언티스트, 머신러닝 엔지니어, 머신러닝 리서처

그리고 다양한 분야들

게임, 탈 중앙화 된 서비스, IoT, 블록체인

나는 어떤 공부를 할까?

관심 있는 분야를 공부해라!

비개발자는 코딩을 어디에 쓸까?

공부하기!

프로그래밍에서 가장 중요한 것은 '문제해결능력'입니다.
더 높은 코드 퀄리티를 지향합시다! (안정성)(확장성)(성능)(이해가 잘 되는 코드)

 

 

'CodeIt! > 컴퓨터개론' 카테고리의 다른 글

소프트웨어 이해하기  (0) 2023.03.09
프로그래머 세계 이해하기  (0) 2023.03.09
프로그래밍 언어 이해하기  (0) 2023.03.09

+ Recent posts