본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 1일차 (2023-05-22) 프로그래밍 개론 DAY1

by prometedor 2023. 5. 22.

프로그래밍 개론

ㄴ 소프트웨어는 컴퓨터에서 동작하는 프로그램이나 애플리케이션을 일반적으로 가리킴
ㄴ program 은 일련의 작업을 수행하는데 필요한 순서와 절차를 포함하는 계획
    ㄴ program 은 계획과 순서에 따라 작성되며, 컴퓨터가 해당 프로그램을 실행함으로써 정의된 작업이 수행됨
ㄴ Software 는 System Software 와 Application Software 로 나뉨
 

System Software

ㄴ 컴퓨터 시스템의 동작과 관리를 위해 설계된 소프트웨어 = > H/W 제어
ㄴ 컴퓨터 하드웨어와 응용 소프트웨어 간의 인터페이스 역할을 수행하며, 시스템 자원을 관리하고 기본적인 기능과 서비스를 제공


운영 체제 (Operating System)

ㄴ 컴퓨터 시스템의 핵심 소프트웨어
ㄴ 하드웨어와 응용 프로그램 간의 상호 작용을 관리하고 자원 할당, 작업 스케줄링, 파일 시스템 관리, 네트워크 통신 등 다양한 기능을 제공
= > Computer


장치 드라이버 (Device Drivers)

ㄴ 컴퓨터의 주변 장치(하드웨어)와 운영 체제 간의 통신을 담당하는 소프트웨어
ㄴ 장치 드라이버는 특정 장치와 상호 작용하여 하드웨어를 제어하고 운영 체제와의 통신을 원활하게 함
= > Graphic Card, Printer, Scanner, Mouse, Keyboard, WebCam 등
 

임베디드 (Embedded)

ㄴ 주로 특정한 장치나 시스템에 내장되어 동작하는 소프트웨어를 말함
ㄴ 주로 제한된 자원을 가진 장치들에 적용되며, 주로 특정한 기능을 수행하거나 특정한 환경에서 동작함
ㄴ 하드웨어와 밀접하게 연결되어 동작하며, 주변 장치와의 통신, 데이터 수집, 신호 처리, 제어 및 모니터링 등의 작업을 수행함

= > 냉장고, 전자레인지 등

System Software 개발에서는 주로 C/C++와 어셈블리 언어를 사용함

ㄴ C/C++은 저수준 프로그래밍 언어이고 하드웨어와 밀접한 상호작용을 할 수 있는 기능을 제공하며, 메모리, 입출력 장치, 네트워크 등의 저수준 자원에 직접 접근할 수 있는 기능을 가지고 있음
ㄴ 어셈블리 언어는 가장 저수준의 프로그래밍 언어로, 기계어와 일대일로 대응되는 언어임. 어셈블리 언어를 사용하면 명령어 수준에서 하드웨어를 직접 조작할 수 있으며, 특정한 하드웨어 아키텍처에 최적화된 코드를 작성할 수 있음. 주로 시스템 소프트웨어 개발이나 임베디드 시스템에서 성능이 중요한 부분을 다룰 때 사용됨
 

Application Software

ㄴ 사용자의 요구를 충족시키기 위해 특정 작업이나 기능을 수행하는 소프트웨어 = > User 용
ㄴ 일반적으로 일상적인 작업을 돕거나 업무를 지원하기 위한 소프트웨어로 사용됨
= > photoshop, Ms-word, Alzip 등
= > LoL, Wow, WebBrowser, Putty 등
= > Naver Cafe, Gmail, Youtube 등
 
 

Standalone : 설치형  => Local (PC)

독립적으로 작동하며, 다른 소프트웨어와의 의존성이 적은 형태를 말함
ㄴ 개별적으로 설치되고 실행되며, 특정 운영 체제나 프레임워크에 의존하지 않고 독립적으로 작동함
= > Photoshop, Ms-Word, Alzip (C/C++, C# 으로 개발)
 

Client / Server : 설치형  + 원격 접속

ㄴ 클라이언트와 서버는 네트워크를 통해 상호작용하며, 클라이언트가 서버에 요청을 보내고, 서버는 해당 요청을 처리하고 응답을 클라이언트에게 반환함
ㄴ 분산 시스템에서 효율적인 데이터 공유와 처리를 위해 널리 사용되며, 웹 애플리케이션, 이메일 시스템, 게임 서버, 클라우드 컴퓨팅 등 다양한 분야에서 활용됨
ㄴ 인터넷 연결 안 되면 실행 불가
= > LoL, WoW, KakaoTalk, mail Client, Putty 등 
       ㄴ C/C++, C# 등으로 개발
= > Web Browser (웹메일, 카페, 쇼핑몰, 유튜브)
       ㄴ Java, PHP, Python, ASP.NET, Node.js 등으로 개발
ㄴ Web Application : Web Browser 에서 실행되는(사용하는) 소프트웨어
 
 

ㄴ 클라이언트(Web Browser)가 웹 서버에 HTTP 요청을 보냄 (이 요청은 주소 표시줄에 입력된 URL을 통해 발생하거나, 웹 페이지의 링크를 클릭하거나, 폼을 제출하는 등의 방식으로 이루어짐)
ㄴ 웹 서버는 클라이언트의 요청을 받고 처리함 (이 과정에서 웹 서버는 요청된 리소스의 유형에 따라 적절한 처리를 수행함)
ㄴ 웹 서버는 클라이언트에게 HTTP 응답을 반환함 (이 응답은 클라이언트의 요청에 대한 결과를 포함하고 있음) 
ㄴ 클라이언트(Web Browser)는 웹 서버로부터 받은 응답을 처리함 (이 과정에서 클라이언트는 응답의 상태 코드를 확인하여 요청이 성공적으로 처리되었는지를 판단함. 또한, 응답의 본문을 파싱하여 웹 페이지의 내용을 추출하고, 필요에 따라 화면에 표시)
 
= > 웹 브라우저는 HTML, CSS, JavaScript를 사용하여 서버로부터 받은 JSON 또는 XML 데이터를 화면에 동적으로 출력
 

Remote(Server)

Web Server

ㄴ Java, SQL, XML, JSON, 등은 Data 조작을 함
ㄴ HTML, CSS, JavaScript 등은 화면을 생성 시켜줌
 

Local(Client)

Web Browser

ㄴ Web Browser 를 실행 하고 HTML, CSS, JavaScript 를 사용하여 서버로부터 받은 JSON 또는 XML 데이터를 화면에 동적으로 출력
 
 

Web App

ㄴ Web Browser 에서 실행되는 응용 프로그램
ㄴ 사용자는 웹 브라우저를 통해 앱에 접근하고 사용할 수 있음
HTML, CSS, JavaScript를 사용하여 개발되며, 웹 기술을 기반으로 동작함
ㄴ 사용자는 인터넷에 연결된 어떤 디바이스에서도 Web Browser 만 있으면 앱을 사용할 수 있음
ㄴ Web App 은 여러 플랫폼에서 동일한 사용자 경험을 제공하기 위해 반응형 또는 적응형 디자인을 사용할 수 있음
= > 예시 : 온라인 쇼핑몰, 소셜 네트워크, 웹 메일 등


Mobile App

ㄴ 모바일 기기(스마트폰 또는 태블릿)에서 실행되는 응용 프로그램
ㄴ 사용자는 모바일 앱을 앱 스토어(앱 마켓)에서 다운로드하여 설치한 후 사용할 수 있음
Android 운영체제를 위한 Java 또는 Kotlin 이 있음 (Web 기술)
iOS 운영체제를 위한 Swift 또는 Objective-C 등이 있음 (Web 기술)
ㄴ 기기의 하드웨어 및 특정 기능에 접근하여 더욱 풍부한 사용자 경험을 제공할 수 있음
ㄴ 모바일 앱은 앱 스토어에서 쉽게 배포되고 업데이트할 수 있음
= > 예시 : 은행 앱, 음악 스트리밍 앱, 게임 앱 등

Remote(Server)

Web Server

ㄴ Java, Python, Node.js, PHP
ㄴ HTML, CSS, JavaScript 등은 화면을 생성 시켜줌
 

Local(Client)

Web Browser - PC

ㄴ Web Browser 를 실행 하고 HTML, CSS, JavaScript 를 사용하여 서버로부터 받은 JSON 또는 XML 데이터를 화면에 동적으로 출력
 

App - Android Phone

ㄴ 안드로이드 폰에서 동작하는 애플리케이션
ㄴ Java 또는 Kotlin 등의 안드로이드 플랫폼에 특화된 언어를 사용하여 개발됨

 

App - iOS Phone

ㄴ 아이폰에서 동작하는 애플리케이션
ㄴ Swift 또는 Objective-C 등의 iOS 플랫폼에 특화된 언어를 사용하여 개발됨

 
 

빌드

High-level language (고수준 언어)

ㄴ 사람이 이해하기 쉬운 언어로, C/C++, Java, Python 등이 있음
ㄴ High-level language (고수준 언어) 는 인간이 이해하기 쉬운 형태로 작성된 프로그래밍 언어
High-level language (고수준 언어) 에서 어셈블리 언어로 변환되는 과정은 컴파일러를 통해 이루어짐
ㄴ 컴파일러는 전체 프로그램을 한 번에 번역하여 기계어로 변환함

Assembly Code

기계어와 일대일로 매핑되는 프로그래밍 언어
ㄴ 컴퓨터 아키텍처에서 직접적인 하드웨어 조작을 가능하게 함
ㄴ 낮은 수준의 프로그래밍 언어
ㄴ 특정한 CPU 아키텍처에서 실행될 수 있는 기계어 명령어들을 표현하기 위해 사용
ㄴ Assembly Language
Assembly language 와 High-level language다 대 일 (1:다) 매핑을 가짐

** 참고
Assembly Language

Instruction Set

 ㄴ 특정 CPU 아키텍처에 따라 정의된 일련의 기계어 명령어 집합 (CPU 마다 다름)
ㄴ 각각의 명령어는 CPU에서 수행될 동작을 나타내며, 레지스터, 메모리, 연산 등을 다루는 저수준의 동작을 수행함
machine code(기계어)

Application 실행

CPU

Assembly Language 로 작성된 프로그램은 CPU에서 실행됨
ㄴ CPU는 Instruction Set 에 따라 프로그램을 해석하고 실행
ㄴ 레지스터, 캐시, 메모리 등의 하드웨어 구성요소로 이루어짐
ㄴ  Assembly Language 의 명령어들을 하드웨어 동작으로 변환하여 실행

 


= > High-level language 로 작성된 프로그램은 complier 를 통해 Assembly Code 로 변환되고, Assembly Code 는 Assemblying 을 통해 Instruction Set (기계어) 에 맞추어 작성되며, CPU에서 실행됨
= > 이 과정을 통해 High-level language 로 작성된 프로그램이 CPU에서 실행될 수 있는 형태로 변환되어 동작하게 됨



VPC 

ㄴ 10.0.0.0/16  =>  10.0.0.0 ~ 10.0.255.255 까지 65536 개의 주소를 가짐

 

Subnet

ㄴ 10.0.1.0/24  =>  10.0.1.0 ~ 10.0.1.225 까지 255 개의 주소를 가짐

 

Ubuntu Linux Server

ㄴ 10.0.1.11 로 고정

 

= > 위에서 bitcamp-web-acg 는 방화벽

 

** 참고

CIDR 표기법
ㄴ 연속된 IP 주소의 범위를 표기하는 방법
ㄴ 10.0.0.0/16 과 같은 식으로 쓰이는데, 슬래시(/) 뒤에 몇 비트가 접두어인지를 씀
ㄴ 10.0.0.0/16 의 경우를 예로 들어서 설명하면 앞의 16비트가 접두어임을 의미하며, 이 표기가 나타내는 주소 범위는 10.0.0.0에서 10.0.255.255의 65536개 주소를 나타냄

https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwyfLZ%2FbtqwulUXHXw%2FgnZWpLP02AsB80DUKgubJ1%2Fimg.png