단독실행: 네트워크 연결 X 프로그램, 설치형
- 웹서비스형: 사용자가 웹브라우저를 이용하여 사용하는 프로그램, 쉽고 빠른 업데이트, 비설치형
- 소켓을 이용한 서비스형: 설치형
- 소켓 (socket): 네트워크 연결을 위한 기능제공 요소, 통상 OS에서 제공
여담) 웹서비스형 App은 포트번호가 정해져 있으나 소켓형은 상황에 따라 직접 정할수도 있음
- 문제 정의: 문제 이해
- 알고리즘 (Algorithm) 설계: 일처리순서 설계
- 구현 (Coding): 프로그래밍 언어 사용
- 테스트: 문제 요구사항을 정확히 반영했는지 확인
- 배포
웹 브라우저에 실행하는 프로그램 작성 시 사용하는 프로그래밍 언어
HTML: 웹페이지 구조 표현
CSS: 웹페이지 구성요소 모양 결정
Javascript: 사용자와 상호작용 (동적처리)
프론트엔드를 위한 개발 환경으로는 에디터만 필요!
JSP
php
Node.js
데이터 보관의 필요유무가 백엔드 참여 여부 결정
알고리즘 (Algorithm): 일처리 순서; 크게 Top-down 방식과 Bottom-up 방식으로 나뉨
- 프로그램 종료시까지 반복
- 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 에도 작성됨
요구사항에 맞게 동작하는지 구현한 프로그램 확인
한 요구사항이 해결됐다고 영원히 충족 X, 요구사항은 끊임없이 발생한다.
단독형 시스템 구성
네트워크형 시스템 구성
Server: 요청 정보에 대한 처리(응답, response)를 수행하는 컴퓨터 또는 프로그램(주로 프로그램), 항상 요청 대기상태 유지
Client: 서버에 요청(request)을 수행하는 컴퓨터 또는 프로그램, 필요시 서버에 연결하여 요청 또는 항상 서버에 연결상태 유지
다수의 클라이언트 접속시에도 제대로 동작할 수 있는 환경으로 구성
- 웹 서비스: 웹 서버
- 데이터베이스 서비스: 데이터베이스
- 파일 서비스: FTP 서버, 파일 서버
- 메일 서비스: 메일 서버
- 기타 서비스: 기타 서비스를 제공하는 서버 프로그램
- 웹 서버 프로그램: Apache web serer 프로그램
- 웹 서버 동작 컴퓨터: 동시 접속 1000명까지 가능하게 구성
- 웹 서버 동작 네트워크 구성: 단독으로 인터넷에 연결
- 일반 클라이언트와 개발자 접속 방식: 일반 클라이언트 접속 도메인 / 개발자 접속 도메인
예시 1-3)
"IT 인프라의 입장에서 실질적으로 할 일은 개발이 아닌 배포와 운영!"
- 개발(Dev)과 운영(Ops)을 합쳐 비즈니스(user)의 요구사항을 단기간에 반영 가능한 품질 높은 소프트웨어를 만들고자 하는 목적을 갖는 방법론 (기술 절대 아님!)
- DevOps를 통하여 팀내 협업 증진: 운영자-개발자 간 협업 매우 중요
AWS 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
- 멱등성: 어떤 환경에서도 똑같이 결과물이 나오도록 하는 것
∴ 컴퓨터 네트워크 -> 컴퓨터 간의 연결 관계
컴퓨터 간 통신은 대부분 데이터(data)를 주고받는 경우를 의미
컴퓨터 식별방법 -> IP Address
컴퓨터 內 동작하는 프로그램 식별 방법 -> Port Number
컴퓨터 간 통신을 위한 약속 -> Protocol
컴퓨터 간 연결 방법 -> MAC Address
=> 이 중 네트워크 통신을 위해서는 IP 주소와 포트번호가 필수적으로 있어야 하며, IP주소+포트번호+프로토콜 이렇게만 있어도 실질적인 통신 가능
네트워크에 연결된 컴퓨터 식별번호
- IPv4 -> 4 byte ( = 8bit )
1 bit : 2진수 한자리
8 bit : 2진수 8자리, 1 byte, 영어 한글자당 용량 (한글 한글자의 경우 2 byte), 256가지 경우의 수
실행 중인 프로그램
통신규약
소규모 네트워크
대규모 네트워크
물리적으로 NW에 연결 위한 HW, 전세계적으로 유일한 번호
ethernet : 유선 NIC
무선 NW : 무선, Wi-Fi, 3G / LTE / 5G
NIC에 부여되는 고유번호
Windows 명령 프롬프트에서 ipconfig 명령 입력시 현재 연결된 네트워크 정보 출력
- 통신할 데이터를 프로토콜에 맞춰 생성
- 데이터를 수신할 컴퓨터의 IP주소 결정
- 데이터를 수신할 컴퓨터의 프로그램에 대한 포트번호 결정
- 연결된 네트워크에 전송할 데이터 전송
- 전송할 데이터를 수신할 컴퓨터 탐색 (MAC 주소 사용)
- 전송된 데이터가 나에게 전송된 데이터인지 IP주소 확인
- 데이터가 전송될 포트번호의 프로그램에 데이터 전달
- 수신할 프로그램에서도 프로토콜에 맞춰 데이터 해석
- 수신 데이터에 대한 처리
몇년동안 코딩을 아예 손에서 놨었는데 갑자기 스크립트 짜는 실습이 나와서 많이 당황스러웠다. 맞다, 여기 IT였지....내 앞날 많이 험난하게 생겼다...