[GCP] Cloud 개요: 프로그래밍

서경·2024년 9월 5일
post-thumbnail

프로그래밍

Application 또는 Library를 만드는 과정



1. 프로그래밍을 위한 구성 요소

1.1. 프로그래밍 언어

○ 컴파일형 언어

일괄 번역 기능 사용, 실행 속도가 빠른 장점
(ex)C, C++, Java, C#...


○ 인터프리터형 언어 (Script형 언어)

개발에서 실행까지 단계가 빠르고 언어 문법이 쉽다. 실행 속도는 느리다.
(ex) Python, JavaScript, Nodejs…


TIP!

컴파일 언어는 컴파일 과정을 거쳐야만 실행이 가능하다.
인터프리터는 컴파일 과정 없이 즉시 실행이 가능하며,
컴파일형과 인터프리터형의 차이는 컴파일 실행 여부다.

컴파일형 언어는 실행속도가 빠르지만, 매번 컴파일 과정을 거쳐야 한다.
프로그램 개발은 단번에 얻는 게 아닌 반복 수행을 해야 하는데,
컴파일은 실행 바이너리를 만들기 위해 컴파일이라는 과정을 거쳐야 해서 반복이 쉽지 않다.
(실행 바이너리 = 실행파일 = 컴퓨터에서 바로 실행할 수 있는 형태로, 소스 코드가 기계어로 변환)

인터프리터형 언어는 매번 처리 때마다 실행 바이너리를 구성하기 때문에 속도가 느리다.
하지만, 예전처럼 속도가 많이 차이 나지 않는데, 하드웨어 성능이 많이 향상되어 CPU 환경이 중요한 컴파일이 속도가 개선됐기 때문이다.

따라서, 프로토 타입(모델, 시제품)을 만드는데 굉장이 유용하다.
긴 시간이 아닌 사용자 요구사항을 반영하여 빠르게 반영할 수 있고 피드백이 빠르다.
요즘 서비스 형태가 대부분 웹개발로 이루어져 있고 인터프리터 언어가 많이 활용된다.



1.2. 개발자를 위한 Infrastructure 구축 대상

○ 프로그래밍 언어로 작성한 코드를 실행 가능한 형태로 만드는 프로그램

  1. 컴파일러 - 컴파일형 언어를 실행 형태로 변경

  2. 인터프리터 - 인터프리터형 언어를 실행


TIP!

프로그래밍이 가능한 환경으로 만들어야 하는 게 Infrastructure 구축대상이다.
Infrastructure을 구성할 때 하드웨어를 고르고,
하드웨어를 구동하기 위한 os 설정 후 프로그램을 생성하거나 실행하는 환경을 만들어야 한다.



○ 프로그램 코드 작성 환경

  1. 소스 코드 에디터
    메모장, Visual Studio Code (설치형, Web 버전)

  2. 통합 개발 환경 (IDE, Integrated Development Environment)
    소스 코드 작성, 컴파일/인터프리팅, 실행, 디버깅을 하나의 프로그램으로 수행 - Visual Studio, Pycharm, Eclipse


TIP!

소스 코드를 작성하기 위한 환경이 필요하다(프로그램 코드 작성 환경 = 코드 작성 환경).
이를 통합 개발 환경이라고 부르고 Infrastructure 구성에 포함된다.

개발용 서버와 배포 서버, 운영 서버는 따로따로 분리하는 게 좋다.
그래서 하나로 통합하여 개발하기 보다는 개발은 개발 위주 환경, 배포는 배포 위주 환경으로 구성하면 된다.



○ 실행 프로그램 디버깅 환경대상

  1. 디버거 - 버그( Bug ) 수정을 위한 프로그램






2. Application 프로그램 유형

2.1. 단독 실행

네트워크를 사용하지 않는 프로그램, 설치형



2.2. 네트워크 연결을 통한 실행

○ 웹 서비스형

사용자가 웹 브라우저를 이용하여 사용하는 프로그램, 비설치형


○ 소켓을 이용한 서비스형 (설치형)

  • 소켓( socket )
    네트워크 연결을 위한 기능 제공 요소, 통상 O/S에서 제공

TIP!

근래에는 웹 브라우저를 사용한 웹 서비스형을 많이를 많이 선호하는 추세다.
설치 과정이 불필요하고 업그레이드가 자동이로 이뤄진다.

설치형 애플리케이션이면 기능이 업그레이드 될 때 매번 다시 설치해야 하는 번거로움이 있다.

요즘에는 유지보수 간격이 굉장히 짧아지고 있기 때문에
업그레이드 시 매번 재설치가 이루어지는 설치형 서비스가 비선호되고 있다.

AI 서비스도 설치형이 가능하지만, AI 모델의 성능 개량을 지속해서 해야 한다.
웹 서비스형을 사용하면 번거로운 프로그램 재설치를 할 필요 없이,
사용자가 접속 시 매번 최신 환경을 유지 할 수 있다.






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

3.1. 설치형 프로그램

3.2. 비설치형 프로그램 (웹 브라우저)






4. Application 작성 과정 (전통적인 방식)

4.1. Developer 담당

  1. 문제 정의 - 문제 이해, 중요하고 어렵다
    AI 모델 생성 시에도 문제 정의가 가장 어렵다.

  2. 알고리즘 (Algorithm) 설계 - 일처리 순서 설계

  3. 구현 (Coding) - 프로그래밍 언어 사용

  4. 테스트 - 문제 요구 사항을 정확하게 반영했는지 확인



4.2. Operation 담당

  1. 배포/운영

예전에는 개발자와 운영자와 운영 담당자의 경계가 명확했지만,
현대에는 데브옵스(DevOps) 패러다임에 의해 경계가 모호해졌다.






5. Application 작성 과정 (예시)

5.1. 문제 정의

○ 계산기 프로그램 - 프로그램 기능

○ 사칙연산만 수행 - 프로그램 기능

○ 설치하지 않고 사용 하였으면 좋겠다. - 실행에 대한 요구 사항



5.2. 개발 환경 구성

Developer/Operation 담당, 개발 Server 구성 필요


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

개발 환경, 테스트 환경, 운영 환경을 반드시 분리하여 프로그램을 섞이지 않게 해야 한다.
엔드 유저는 웹 브라우저(프론트엔드)에서 백엔드로 요청을 보내 응답을 받는다(상호작용).


  1. 프론트엔드 (Front-end)
    프론트 엔드는 주로 인터프리터 언어로 작성된다.
    웹 브라우저와 간단한 에디터로 개발이 가능하다.
  • Web Client(웹 브라우저)에서 동작

  • 웹 브라우저에서 모든 동작 관리

  • 프론트엔드 기반 웹 서비스 - 정적 웹 서비스
    · HTML - 웹 페이지 구조 표현
    · CSS - 웹 페이지 구성 요소 모양 결정
    · JavaScript - 사용자와 상호 작용( 동적인 처리 )
    · 프론트엔드를 위한 개발 환경 - 에디터만 필요


  1. 백엔드( Back-end )
    백엔드는 사용자에게 직접 보여지지 않으며, 클라이언트의(프론트엔드) 요청에 응답한다.
    만약, 데이터 베이스 관리가 필요하다면, 데이터베이스 관리 작업도 처리할 수 있다.
  • Web Server에서 동작

  • Server에서 모든 Application 동작 관리
    · JSP
    · PHP
    · Nodejs



5.3. 알고리즘 설계

○ 알고리즘( Algorithm ) - 일처리 순서

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



5.4. 구현 (coding)

Algorithm을 프로그래밍 언어로 구체화 하는 단계



5.5. 테스트

문제 정의 요구 사항에 맞게 동작 하는지 구현한 프로그램 확인, 별도의 Test Server 필요

실제 개발 환경이나 운영 환경에서 테스트를 하지 않고, 테스트 서버를 별도로 구성하여 확인하는 것이 좋다.

운영 서버에서는 운영이 계속 이루어지고 있는데,
운영 서버에서 테스트를 진행하다 문제 발생 시 운영 서버가 중지될 수 있다.

또한, 배포 시에도 문제가 생길 수 있기에 점진적인 배포를 해야 한다.
한 번에 배포를 진행했을 때 문제가 없다면 좋지만,
대게는 소프트웨어를 배포하며 문제가 발생할 가능성이 굉장히 높다.

따라서, 배포를 한 번에 하는 것 보다는 점진적으로 배포를 하고 테스트 서버에서 테스트를 진행해야 한다.



5.6. 배포/운영

○ 운영 Server를 통해 End-user에게 서비스 제공

○ 운영자는 모니터링( 관찰 )을 통해 서비스 제공 상태 확인


TIP!

프로그래밍을 수행하기 위한 환경을 구성할 때는 다양한 환경을 고려해야 한다.
각각의 서버는 모두 동일한 환경을 구성하는 것이 아니라,
개발에는 개발에 필요한 환경만 구성을 하거나 배포 서비스에는 배포에 필요한 서비스만 구성할 수 있다.
(예로, 배포 서비스가 파이썬만 필요로 하다면 파이썬만을 설치할 수도 있다.)

0개의 댓글