//프롤로그
일단 1주차 강의의 전반적인 내용은 다음과 같다.

1. 왜 프로그래밍을 배워야 하는가?
2. 프로그래밍 샌드위치 만들기
3. 엘리베이터의 알고리즘을 살펴보자
4. 어떤 프로그래밍 언어가 있나요?
5. 개발자와 대화하기 (상)
6. 개발자와 대화하기 (하)
7. 네이버에 접속하면 일어나는 일

1주차는 위의 내용에 대해 정리하고 내 생각을 적으려고 한다.

// 본론

1. 왜 프로그래밍을 배워야 하는가?
사실 오래 전 부터 각종 매체에서 프로그래밍을 배우는 사람들이 많다고 했기도 했고, 학창시절 수포자였던 나를 생각해보면 코딩은 배우기 힘들 것이라고 생각했다.

그럼에도 불구하고 나는 "내가 좋아하는 것, 하고싶은 것, 과거 경험, 미래성" 등 많은 걸 고려했을 때 프로그래밍에 도전해보고 싶다는 확신이 들었고 시작하게 되었다.

2. 프로그래밍 샌드위치 만들기

  • 프로그래밍 샌드위치란 우리의 상식이 아닌 컴퓨터의 이해 논리 방식을 만드는 과정을 말한다.
  • 사람에게 당연한 건 컴퓨터에게는 당연한 게 아니다.
  • 컴퓨터에게 가르칠 때는 어린 아이에게 가르친다고 생각해라.
  • 컴퓨터는 그 조건이 성립될 때 까지 반복시켜줘야 한다.
  • 구글에 정렬(배열) 알고리즘을 검색해보거나 가장 기본적인 버블 정렬을 찾아서 직접 생각해보자
  • 내가 더 많이 알게 된다면 지시를 좀 더 짧게 컴퓨터가 더 효율적으로 움직이도록 할 수 있다.

    (예시) 4 1 5 2 3 이 5~1까지 배열되는 조건이 만족되는 반복문을 쓴다면

    ordered'라는 빈 배열을 만든다.
    numbers 안에 든 숫자가 갯수가 0이 될 때까지
    X는 1이다.
    Y는 numbers의 X번째 숫자다
    X가 numbers의 내 숫자의 갯수를 넘기 전까지
    numbers의 X번째 숫자가 Y보다 크다면 //조건문
    Y를 numbers의 X번째 숫자로 바꾼다. //조건이 성립하지 않는다면
    X를 1 증가시킨다 // 반복시킨다.
    numbers에서 Y에 해당하는 숫자를 빼낸다.
    ordered'에 Y를 추가한다.
    ordered를 반환한다.

3. 엘리베이터의 알고리즘을 살펴보자

  • 프로그래밍을 하는 것이란 과정의 세분화 뿐만 아니라 여러 상태의 조합으로 구체화해서 조건을 부여하고 그에 따라 실행되는 방식을 지정해주는 것의 반복이다.
  • 알고리즘을 벤다이어그램으로 그려본다면 좀 더 쉽고 빠르게 이해하고 파악할 수 있다.
  • 일상에서 접하는 것들의 알고리즘을 벤다이어그램으로 그려본다면 더 좋은 공부가 될 것이다.
    • 엘리베이터의 상태 : 멈춰있음 / 움직이는 중
    • 버튼들의 상태 : 안에서 누름 / ▲ / ▼

      <코드 1>
      //눌려있는 버튼이 없는 상태에서는 엘리베이터는 새로 눌리는 첫 버튼의 층으로 최종 도착지가 결정되고 그에 따라 상승 또는 하강 상태로 바뀐다.
      <코드 2>
      //엘리베이터가 이미 있는 층의 버튼은 눌리지 않는다.
      <코드 3>
      //엘리베이터가 이동 중일 때 이동방향의 최종지점에 도달하기 전까지는 이동방향을 바꾸지 않는다.
      <코드 4>
      //엘리베이터가 이동 중 버튼이 눌린 층이 있을 때 엘리베이터의 이동 방향이 다르지 않다면
      (즉 방향이 같거나 중립이라면) 정지한다.
      <코드 5>
      //엘리베이터가 이동 중일 때 이동방향의 최종 목적지보다 멀리 있는 층의 버튼이 눌리면 최종 목적지를 그리로 수정한다.
      ==> 코드 5의 알고리즘은 코드 3에 접목시켜서 간소화가 가능하다.
      <코드 3 + 코드 5>
      //엘리베이터가 특정 방향의 최종 목적지에 도달하면 다른 눌려있는 버튼이 하나 이상 있을 시 이동 방향을 바꾸고, 그방향의 가장 끝점으로 최종 목적지를 변경한다.

4. 어떤 프로그래밍 언어가 있나요?

  • 엑셀도 일종의 프로그래밍을 해본 것과 유사하다.
  • 나만의 소프트웨어를 만들려면 어떤 프로그램으로 컴퓨터와 소통해야 할까?

    //Programming language rank 를 구글링해서 일단 알아볼 수 있다.

    • 2021기준 파이선 - C언어 - 자바 순서로 1~3위임
    • High Level : 사람에게 가까운 언어
    • Low Level : 기계에 가까운 언어
      // High --> Low 로 갈수록 난이도는 어려워지고 할 수 있는 제약이 점점 없어진다.
  • 과거에는 어셈블리어, 01010 같은 언어를 썼으니 현대에는 안쓰는 것이 아니다.
    2021년 기준으로 어셈블리어는 9위에 있을 정도로 많이 쓰고있다.

//현재 많이 쓰는 프로그래밍 언어들

  • C : 기초, 교양 과목으로 배울 정도의 필수 언어이며 사용자 능력에 따라 Low Level까지 간다.
  • C++ : 하드웨어가 중요하고 게임, 그래픽같은 분야에 많이 사용
  • C# : 마소에서 개발했고 윈도우에 동작하는 프로그램에 사용
  • JAVA : 우리나라에서 압도적 사용량. 웹,앱에 많이 사용. 국내 정부 사이트에서 많이 쓰고있음. 국내에서 취업 시장도 넓음
  • Python : 많은 코딩의 자리를 대체하고 있고, 초보자도 배우기 쉽고 적은 분량으로 코딩 가능하고, 커뮤니티도 크고, 머신러닝 / IOT 등에서도 많이 쓰고있음
  • RUBY : 파이썬의 라이벌이라고 불리며 일본에서 개발
  • PHP : 간단한 사이트에 쓸만하지만, 보안이나 사이트가 커지면 쓰기 힘듬
  • Swift : 파이썬이나 루비처럼 간결하고 쉬운 언어
  • Kotlin : 안드로이드쪽 개발에 점점 많이 사용되어지고 있음
  • JAVA Script : JAVA와는 전혀 다른 프로그램이며, 웹사이트 제작에 최적화 되어있어 웹사이트 제작 이외의 범위에서 벗어나지 못한다는 단점이 있다.
    ++ 그러나, 지금은 node.js가 등장하고 웹사이트라는 제약에서 벗어남.

==> 국내에선 JAVA, Python을 많이 쓴다.

5. 개발자와 대화하기 (상)

  • 프로그래머와의 커뮤니케이션이 쉽지 않은 이유
    1) 우리가 개발자의 언어를 잘 모른다.
    2) 개발자들도 보통은 이 언어를 잘 설명할 줄 모른다.
    ==> 프로그래밍 용어들은 하나하나의 복잡한 개념을 알아야 이해하고 그걸 이해하면 또 다른 복잡한 개념을 이해하고의 반복이기 때문에 쉽게 알아듣기 어렵다는 것이다.

  • 가상의 대화를 통해 한 번 알아보자

    • Server
      : 서버는 기본적으로 컴퓨터이다.
      : 다른 컴퓨터 안에 있다가 내 컴퓨터에 전달하는 것이다.(예 : 손님 <-- 커피 제공자)
      : "제 컴퓨터에 서 좀 깔게요" 여기서의 서버는 컴퓨터를 서버로 만들어주는 소프트웨어다.

      1) 제공자 역할을 하는 컴퓨터
      2) 컴퓨터를 제공자로 만드는 프로그램이다.

    • 프론트앤드(Front-end) / 백앤드(Back-end)
      : 식당에 비유하면 프론트앤드는 메뉴판, 점원, 음식이다.
      : 백앤드는 눈에 보이지 않는 부분 주방이다.
      • 페이스북 로그인
        1) 백앤드 : 서버에서는 내 계정을 인지하고 친구 소식 광고들의 데이터를 정리해서 내 컴퓨터에 보내줌
        2) 프론트엔드 : 크롬, 파폭, 익스플로러 등에 브라우저에서는 데이터를 받아 스크린에 출력해줌
    • 퍼블리싱(Publishing)
      : 브라우저가 뭔가요? 호환성에 문제가 있네요
      • 브라우저 : 다양한 브라우저가 있으면 이용자는 선택권이 넓어져 좋지만 프론트앤드, 퍼블리셔, 웹 디자이너에게는 머리아픈 일이다.
      • 호환성 : 모든 사용자를 배려하기 위한 꼭 지켜야할 요소이며, 퍼블리싱에서도 중요하다.
    • 네이티브 앱 / 웹 앱
      • 네이티브 앱
        : AOS, iOS ==> 각각 따로 개발해야하기 때문에 사용되는 언어와 기술도 다르다.
        : 요즘에는 두 가지 앱을 한 번에 만드는 앱도 나왔지만 아직까지는 제약이 있다.

        (장점)
        1) 각각의 OS의 한계에 맞게 만들어져 해당 환경에 최적화 되어있다.
        2) 성능도 파워풀하고 각 OS의 모든 기능들을 최적화해서 사용할 수 있다.
        (단점)
        1) 각 OS를 모두 다룰 줄 알아야하고 개발도 할 줄 알아야한다.
        2) 앱을 업데이트할 때 검토 및 배포 과정에서 적용 시간이 달라 일괄적으로 하기 어렵다.

      • 웹 앱

        : 네이티브 앱은 틀만 만들어주고 그 안에 내용물은 웹 앱이 만들어준다.
        : html, css, js 로 만들어진 웹사이트의 요소들이다.
        (장점)
        1) 네이티브 앱의 단점을 보완해서 진행이 가능하다.
        2) 각 OS별로 업데이트할 필요 없이 웹 하나만 변경하면 되서 편하다.
        3) 시간과 비용이 절약된다.
        (단점)
        1) 성능이 따라줘야하는 부드러운 애니메이션 등에는 사용하기 어렵다

6. 개발자와 대화하기 (하)

  • 적응형 웹 / 반응형 웹

    • 적응형 웹
      : PC와 Mobile를 구별해서 웹사이트를 만들어야 하는 시대가 왔다.
      : 주소를 확인해보면 주소창에 m.nate.com / nate.com 처럼 m 하나로 PC와 모바일 차이가 난다.
    • 반응형 웹
      : 페이지를 만들 때 스크린의 크기에 따라 모습을 유동적으로 변하도록 만드는 것이다.

      1) 적응형으로 만들지 반응형으로 만들지를 결정하는 데는 사이트의 기용하는 방식에 따라 적절한 판단이 필요하다.
      2) 구조와 특성에 따라 적응형이 쉬울수도 반응형이 쉬울수도 있다.
      3) PC / 모바일에서 각각 사이트 구조가 크게 바뀐다면 '적응형'이 좋다.
      4) 컨텐츠의 배치 정도만 달라지는 가벼운 페이지는 '반응형'으로 유용하게 만드는 게 좋다.

  • 쿠키 / 세션 / 캐시

    • 쿠키
      : 사이트를 만드는 개발자가 특정 정보가 사용자의 브라우저에 저장되도록 만드는 것
      : 개인 컴퓨터에 저장되는 것이다.
      : 쿠키는 사용자가 자유롭게 삭제할 수 있다.
      : 즉, 공개되어도 문제가 없는 내용들을 저장시키는 것이다.

    • 세션
      : 특정 정보가 서버에 저장되는 것
      : 내 이용 현황 정보를 기업이 가지고 있는 것이 예다.
      : 결제 정보 같은 중요한 보안이 필요한 정보를 저장시키는 것이다.
      : 서버의 자원을 쓰기에 모든 것을 세션에 저장하면 서버에 부하가 걸린다.

      • 쿠키와 세션이 둘 다 사용되는 경우
        : 로그인
    • 캐시
      : 이미지, 코드 등 용량이 큰 파일을 사이트에 최초 접속 시 미리 다운받고 이후 재접속 시 다시 다운받지 않도록 하는 것

      • 쿠키/세션 : 특정 정보를 기억해두는 것이다.
      • 캐시 : 시간과 통신 데이터 절약을 위해 한 번 로드한 데이터를 놔뒀다가 재사용 하는 것이다.
  • API
    : Appliocation Prgram Interface 의 약자
    : 공공/특정 그룹에게 공개되어 정보를 읽거나 넣거나 변경할 수 있는 것이다.
    : 일종의 자판기 같은 것
    : 앱/프론트앤드 웹에서 서버에 요청한 정보를 백앤드 개발자들이 구축한 API를 사용하는 것이다.

    • 공공 API
      : 국가/기업 등에서 누구든 소프트웨어를 만들거나 사용할 수 있도록 축척된 특정 데이터를 개방한 것이다.
      • 공공 데이터 포탈 - data.go. kr
      • Naver Developer
        : 이런 사이트에서 무료 또는 적은 비용으로 사용할 수 있도록 공개되어 있다.
  • 디버그 / 컴파일 / 빌드

    • 디버그
      : 벌레를 찾아 치운다는 의미로 오류를 찾아내는 작업을 뜻한다.
      : 버그는 오타, 논리 오류, 외부 변수 등에 의해 발생한다.
      : 특수 분야가 아니면 High Level 언어를 쓰는데, 컴파일 언어 / 스크립트 언어로 나뉘어진다.
    • 컴파일
      • 스트립트 언어
        : Python, Jave Script - 작성된 코드 그대로 기계가 그때그때 번역해서 실행
      • 컴파일 언어
        : Java, C - 프로그래머가 작성한 언어를 기계가 읽을 수 있는 언어로 바꾸는 작업
    • 빌드
      : 컴파일도 포함
      : 개발자의 컴퓨터에서 코드로 작성한 소프트웨어를 사용자의 PC, 모바일에 설치하거나
      서버에 올라가 실행될 수 있는 형태
      : 가볍고 군더더기 없고 필요에 따라서는 분석하기 어려운 상태로 최총 포장되어 나오는 형태
      : 김밥 재료를 손님에게 내려면 잘 만들고 썰어서 내야하는 것과 같다.
      : 제품 포장 중...이라고 이해하면 좋을 것 같다.
  • 프레임워크 / 쓰던 언어가 아니라
    : 프로그래밍 언어는 여러가지가 있고 각각 나름의 체계와 특성 설계 철학이 있다.
    : 하지만, Jave를 쓰던 사람이 C#,Time Script를 봐도 뭐 하는 코드인지 쉽사리 파악이 가능하다.
    : 표준어 쓰는 사람이 사투리를 못알아듣지 않는 것 처럼
    : 개발자란 직업은 언어 하나로 할 수 있는 게 아니다.
    : 여러 개를 배우고 주 종목 하나를 가지고 있는 것이다.
    : 개발자 주 종목 언어로 개발하도록 해주는 것이 좋다.

    • 프레임워크
      : 큰 회사, 기관, 개인 등이 만들어 놓은 서버 프로그램들의 틀을 사람들이 그것들을 가져다가 확장해서 사용할 수 있도록 공개해놓은 것이다.
      : 내 것으로 익히는 기간은 프레임워크가 비교적 짧다.
      • Library Framework ==> 집을 짓는것과 비교하면
        : Library - 문짝, 창문, 타일 같은 개별적인 조각들 / 특정 기능들을 코딩해 놓은 것
        : Framework - 조각들을 어느정도 조합한 기초 틀 / 그것들을 조합해서 뼈대를 갖춘 것
      • 특정 종류의 소프트웨어를 만들기 위한 일종의 만들기 키트가 있다.
        : Jave <-> Spring, Python <-> Django, RUBY <-> RAILS
  • 호스팅 / AWS / 클라우드

    • 호스팅
      : 서버가 없는 규모가 작은 회사들이 사용하는 것이다.
      : 호스팅 업체에서 서버로 사용될 컴퓨터를 마련하고 일정 비용을 받아 제공
      : 내 집들을 월세를 내주는 것과 같다.
    • AWS / 클라우드
      : 필요한 만큼만 빌릴 수 있고, 원할 때 마나 추가로 빌리거나 줄일 수 있다.
      : 어떻게 쓰느냐에 따라 필요한 만큼만 쓸 수 있기에 비용 절감도 가능하다.
      : Amazon Web Service, Google Cloud, Azure, Naver Cloud Platform
      : AWS란 대형 호텔이라고 생각하면 된다.

7. 네이버에 접속하면 일어나는 일

  • html, CSS, Jave Script를 다음 시간부터 배우게 될 것
  • 이것들이 정확히 어떤 것들이고 어떤 방식으로 동작해서 웹사이트의 형태로 보여지는지 알아보자
    : 우리가 아는 웹사이트 주소는 사실 IP Adress로 되어있다.
    : 근데 이것을 도메인으로 바꿔서 사용하는 것이다.
    : http / https - 서버와 클라이언드 간 주고받는 데이터의 한 형식
    : https는 http에서 암호화 기능을 추가해서 보안을 강화한 형태이다.
    : DNS <-> 사용자 컴퓨터 <-> Server
    : view-source:https://www.naver.com/ 를 보면 html, CSS, Jave Script의 조합으로
    되어있다.

    어....나도 이렇게 할 수 있을거야....있겠지...?

  • IDE(Intergrated Development Environment) = 통합 개발 환경
  • html : 갖다 놓고 -> CSS : 꾸미고 -> JS : 시킨다
    • html
      : 아무것도 없는 화면에 텍스트를 집어넣는 것이다.
    • CSS
      : 텍스트에 색, 그림자, 그라데이션 등의 효과를 부여하는 것이다.
    • Java Script
      : 웹 페이지가 동작하도록 해주는 것이다.
profile
꿈이 많은 코린이의 여행

0개의 댓글