[구름 k8s] TIL 1-1-2

Peppie·2022년 8월 2일
0

1. 프로그래밍 이해

Application 프로그램 유형

단독실행: 네트워크 연결 X 프로그램, 설치형

네트워크 연결을 통한 실행

  • 웹서비스형: 사용자가 웹브라우저를 이용하여 사용하는 프로그램, 쉽고 빠른 업데이트, 비설치형
  • 소켓을 이용한 서비스형: 설치형
    - 소켓 (socket): 네트워크 연결을 위한 기능제공 요소, 통상 OS에서 제공

여담) 웹서비스형 App은 포트번호가 정해져 있으나 소켓형은 상황에 따라 직접 정할수도 있음

Application 설치 유무에 따른 프로그램

  • 설치형 프로그램
  • 비설치형 프로그램 -> 웹브라우저

Application 작성 과정

  1. 문제 정의: 문제 이해
  2. 알고리즘 (Algorithm) 설계: 일처리순서 설계
  3. 구현 (Coding): 프로그래밍 언어 사용
  4. 테스트: 문제 요구사항을 정확히 반영했는지 확인
  5. 배포

Application 작성 실습

문제 정의

  • 계산기 프로그램 : 프로그램 기능
  • 사칙연산만 수행 : 프로그램 기능
  • "설치하지 않고 사용했으면" : 실행에 대한 요구사항

개발 환경 구성

웹 브라우저에 실행하는 프로그램 작성 시 사용하는 프로그래밍 언어

  • Frontend: 웹 클라이언트(=웹 브라우저)에서 동작 관리, 정적 웹서비스

    HTML: 웹페이지 구조 표현
    CSS: 웹페이지 구성요소 모양 결정
    Javascript: 사용자와 상호작용 (동적처리)

프론트엔드를 위한 개발 환경으로는 에디터만 필요!

  • Backend: 웹 서버에서 모든 App 동작 관리, 동적 웹서비스

    JSP
    php
    Node.js

데이터 보관의 필요유무가 백엔드 참여 여부 결정

알고리즘 설계

알고리즘 (Algorithm): 일처리 순서; 크게 Top-down 방식과 Bottom-up 방식으로 나뉨

  1. 프로그램 종료시까지 반복
  • 1.1 두 수 입력 받음
  • 1.2 연산자 입력 받음
  • 1.3 연산 결과 출력
  • 1.4 다시 두 수 입력 받도록 한다

구현

알고리즘을 프로그래밍 언어로 구체화하는 단계

예시 1-1) index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Calculator</title>
        <style>
            body { text-align: center; }
        </style>
    </head>
    <body>
        <h1>Calculator</h1>
        <hr>
        <form>
            <input type="text" name="number1" id="number1" width="200" size="5">
            <select name="operator" id="operator">
                <option selected>+</option>
                <option>-</option>
                <option>*</option>
                <option>/</option>
            </select>
            <input type="text" name="number2" id="number2" width="200" size="5">
            <input type="button" onclick="calc()" value="계산">
            <input type="reset" value="reset">
        </form>
        <hr>
        <div id="result"></div>
        <script src="calc.js"></script>
    </body>
</html>

예시 1-2) calc.js

// calc() : 두 수와 연산자를 이용하여 연산 결과 출력
function calc() {
    var number1 = Number(document.getElementById("number1").value); // 1.1 첫번째 수
    var number2 = Number(document.getElementById("number2").value); // 1.1 두번째 수
    var operator = document.getElementById("operator").value; // 1.2 연산자

    // 1.3 연산
    if(operator === '+'){
        var result = number1 + number2;
    }else if(operator === '-'){
        var result = number1 - number2;
    }else if(operator === '*'){
        var result = number1 * number2;
    }else if(operator === '/'){
        var result = number1 / number2;
    }

    // 1.4 연산 결과 출력
    var div = document.getElementById('result');
    var output = String(number1) + ' ' + operator + ' ' + String(number2) + ' = ' + String(result);
    div.innerHTML = output;
}

위 코드들은 작성자의 깃 레포지토리 https://github.com/JamieYLee/Goorm_1-1-2_Calculator 에도 작성됨

테스트

요구사항에 맞게 동작하는지 구현한 프로그램 확인

배포

  • 웹서비스에 대한 배포를 위해서는 웹서버 필요
  • 사용자가 웹서비스에 접속할 수 있는 Domain Name 필요
  • 웹서비스를 위한 Infrastructure 구성 필요 (개발자 입장에서 운영자와 협의)

한 요구사항이 해결됐다고 영원히 충족 X, 요구사항은 끊임없이 발생한다.

2. 시스템 운영 이해

시스템 구성 형태

단독형 시스템 구성

  • 네트워크 연결 않는 시스템 (요즘 거의 X)
  • 단독 시스템에 Application 실행환경 구성

네트워크형 시스템 구성

  • 요청 정보에 대한 서비스 제공 역할의 서버 환경 구성
  • 서버에 대한 네트워크 환경 구성

Server: 요청 정보에 대한 처리(응답, response)를 수행하는 컴퓨터 또는 프로그램(주로 프로그램), 항상 요청 대기상태 유지

Client: 서버에 요청(request)을 수행하는 컴퓨터 또는 프로그램, 필요시 서버에 연결하여 요청 또는 항상 서버에 연결상태 유지

서비스 제공을 위한 시스템 구성 요소

서버 프로그램이 동작할 컴퓨터

다수의 클라이언트 접속시에도 제대로 동작할 수 있는 환경으로 구성

서버 프로그램 ( ≒ 백엔드 프로그램 )

  • 웹 서비스: 웹 서버
  • 데이터베이스 서비스: 데이터베이스
  • 파일 서비스: FTP 서버, 파일 서버
  • 메일 서비스: 메일 서버
  • 기타 서비스: 기타 서비스를 제공하는 서버 프로그램

서비스 제공을 위한 기타 서버 프로그램

  • Transaction 처리
  • 로그 관리
  • 방화벽

네트워크 구성

  • 공용 네트워크: 인터넷에 연결된 네트워크
  • 사설 네트워크: 인터넷 연결 X 네트워크

계산기 프로그램 배포 시스템

구성요소

  • 웹 서버 프로그램: Apache web serer 프로그램
  • 웹 서버 동작 컴퓨터: 동시 접속 1000명까지 가능하게 구성
  • 웹 서버 동작 네트워크 구성: 단독으로 인터넷에 연결
  • 일반 클라이언트와 개발자 접속 방식: 일반 클라이언트 접속 도메인 / 개발자 접속 도메인

설계 내용

예시 1-3)

구축

  • Apache web server 설치
  • 일반 사용자용 및 개발자용 domain 등록

운영

  • 모니터링 (monitoring)
  • 로그 정보 확인

"IT 인프라의 입장에서 실질적으로 할 일은 개발이 아닌 배포와 운영!"

3. DevOps 이해

DevOps = Development (개발) + Operation (운영)

  • 개발(Dev)과 운영(Ops)을 합쳐 비즈니스(user)의 요구사항을 단기간에 반영 가능한 품질 높은 소프트웨어를 만들고자 하는 목적을 갖는 방법론 (기술 절대 아님!)
  • DevOps를 통하여 팀내 협업 증진: 운영자-개발자 간 협업 매우 중요

전통적인 개발 방법

  • 개발 부서에서 개발된 결과물을 운영 부서에 이관하여 배포/이관
  • 전통적인 개발 체계 문제점
    Fingerprintness: 정확하게 누가 어떤 문제를 해결해야 하는지 정의되지 않는 상황 발생 => 즉 협업 없어지고 엉뚱한 방향으로 문제 해결되는 현상

DevOps란?

AWS DevOps 설명

https://aws.amazon.com/ko/devops/what-is-devops/

MS Azure DevOps 설명

https://azure.microsoft.com/ko-kr/resources/cloud-computing-dictionary/what-is-devops/

지속적인 통합 ( CI , Continuous Integration) : 소프트웨어 모듈을 즉시 통합하는 방법
지속적인 전달 ( CD , Continuous Deployment) : 소프트웨어 모듈을 즉시 고객에게 전달하는 방법
"CI/CD는 microservice 아키텍쳐의 핵심"

코드형 인프라 관리 ( IaC = Infrastructure as Code )

  • 코드를 이용하여 인프라 일괄 관리, 이를 위한 대표적 프레임워크는 Ansible
  • 멱등성: 어떤 환경에서도 똑같이 결과물이 나오도록 하는 것

4. 네트워크 이해

네트워크: 객체 간의 연결 관계

∴ 컴퓨터 네트워크 -> 컴퓨터 간의 연결 관계

컴퓨터 네트워크: 컴퓨터 간 통신 수행 위한 연결 구성

컴퓨터 간 통신은 대부분 데이터(data)를 주고받는 경우를 의미

구성요소

컴퓨터 식별방법 -> IP Address
컴퓨터 內 동작하는 프로그램 식별 방법 -> Port Number
컴퓨터 간 통신을 위한 약속 -> Protocol
컴퓨터 간 연결 방법 -> MAC Address

=> 이 중 네트워크 통신을 위해서는 IP 주소와 포트번호가 필수적으로 있어야 하며, IP주소+포트번호+프로토콜 이렇게만 있어도 실질적인 통신 가능

용어 정리

IP Address

네트워크에 연결된 컴퓨터 식별번호

  • IPv4 -> 4 byte ( = 8bit )
    1 bit : 2진수 한자리
    8 bit : 2진수 8자리, 1 byte, 영어 한글자당 용량 (한글 한글자의 경우 2 byte), 256가지 경우의 수

Port

실행 중인 프로그램

Protocol

통신규약

LAN ( Local Area Network )

소규모 네트워크

WAN ( Wide Area Network )

대규모 네트워크

NIC ( Network Interface Card )

물리적으로 NW에 연결 위한 HW, 전세계적으로 유일한 번호

ethernet : 유선 NIC
무선 NW : 무선, Wi-Fi, 3G / LTE / 5G

MAC

NIC에 부여되는 고유번호

Windows 명령 프롬프트에서 ipconfig 명령 입력시 현재 연결된 네트워크 정보 출력

컴퓨터 네트워크 통신 과정

데이터 전송 측

  1. 통신할 데이터를 프로토콜에 맞춰 생성
  2. 데이터를 수신할 컴퓨터의 IP주소 결정
  3. 데이터를 수신할 컴퓨터의 프로그램에 대한 포트번호 결정
  4. 연결된 네트워크에 전송할 데이터 전송

데이터 전달 측

  1. 전송할 데이터를 수신할 컴퓨터 탐색 (MAC 주소 사용)

데이터 수신 측

  1. 전송된 데이터가 나에게 전송된 데이터인지 IP주소 확인
  2. 데이터가 전송될 포트번호의 프로그램에 데이터 전달
  3. 수신할 프로그램에서도 프로토콜에 맞춰 데이터 해석
  4. 수신 데이터에 대한 처리

5. TIF

몇년동안 코딩을 아예 손에서 놨었는데 갑자기 스크립트 짜는 실습이 나와서 많이 당황스러웠다. 맞다, 여기 IT였지....내 앞날 많이 험난하게 생겼다...

0개의 댓글