728x90
반응형

1. 어휘 분석

 

🔸프로그램 분석

int x12;
x12 = 1 + 5 * 2;
if x12>10 then ...
문자: i, n, t, x, 1, 2, ;, =, 5, *, f, >, ...
↓ 어휘 분석
어휘: int, x12, ;, =, 1, +, 5, if, >, 10, then, ...
↓ 구문 분석
구문
<선언문> ::= <자료형> <변수> ;
<대입문> ::= <변수> = <수식> ;

 

 

 

✅ 어휘 분석

  • 프로그램에서 사용된 (의미를 가지는 최소한의) 단어를 구별해 냄
  • 토큰: 어휘 분석을 통해 얻어지는 결과
    • 연산자, 구분자, 식별자, 예약어 등
연산자 +, -, *, /, = 등
구분자 ,(콤마), ;, [, ]
식별자 - 변수나 함수 등의 이름을 나타내는 토큰 
예) x12, printf 등

- 전통적인 식별자 
예) 문자와 숫자로 구성, 첫 글자는 문자

예약어 - 프로그래밍 언어 자체에 정의되어 포함된 토큰
예) if, for, int 등

- 식별자와 구문 구조가 같지만 식별자로 사용 못함 → 사용자 재정의 불가

 

 

 

 

 

⭐2. 파스 트리

 

✅ 구문 분석

  • 유도(derivation)
    • 구문 규칙을 이용하여 주어진 프로그램을 만들어 내는 과정
    • 유도가 가능하면 문법적 오류가 없는 유효한 프로그램임
    • = 해당하는 언어의 구문 규칙을 잘 활용해서 쭉 유도를 했더니 어떤 프로그램이 만들어졌음

 

예)

수식 구문 규칙 유도
1+5*2
<exp>
→ <exp>+<exp>
→ <exp>+<exp>*<exp>
→ <exp>+<exp>*<digit>
→ <exp>+<exp>*2
→ <exp>+<digit>*2
→ <exp>+5*2
<digit>+5*2
1+5*2

 

 

 

✅ 파스 트리(parse tree)

유도 파스 트리
<exp>
→ <exp>+<exp>
→ <exp>+<exp>*<exp>
→ <exp>+<exp>*<digit>
→ <exp>+<exp>*2
→ <exp>+<digit>*2
→ <exp>+5*2
 <digit>+5*2
 1+5*2
  • 유도를 트리 형태로 나타낸 것
  • 구조
    • 루트 노드: 시작 비단말 기호
    • 비단말 노드: 비단말 기호
    • 단말 노드: 단말 기호
  • 단말 노드를 왼쪽에서 오른쪽 방향으로 차례대로 나열하면 주어진 프로그램이 됨
  • 주어진 표현에 대한 파스 트리가 존재하면 구문에 부합하는 표현임 ↔ 파스 트리가 존재하지 않으면 오류있는 표현
    • 예) 수식 1+5*
수식 구문 규칙 유도
1+5*
<exp>
→ <exp>+<exp>
→ <digit>+<exp>
→ 1+<exp>
→ 1+<exp>*<exp>
→ 1+<digit>*<exp>
→ 1+5*<exp>
→ 1+5*<digit>
→ ❌
유도 파스 트리
<exp>
→ <exp>+<exp>
→ <digit>+<exp>
→ 1+<exp>
→ 1+<exp>*<exp>
→ 1+<digit>*<exp>
→ 1+5*<ex>
→ 1+5*<digit>
→ ❌

 

 

 

 

 

3. 모호성

 

💡주어진 표현에 대한 파스 트리가 존재하면 구문에 부합하는 표현임. 만약 주어진 표현에 대한 파스 트리가 여러 개 존재한다면?
  • 구문론 관점: 파스 트리가 존재하므로 구문에는 부합
  • 의미론 관점: 주어진 표현이 서로 다른 의미로 해석될 수 있음

 

 

 

🔸서로 다른 파스 트리

수식 1+5*2
파스 트리1 파스 트리2
파스 트리1 계산 파스 트리2 계산

 

 

 

🔸모호한 문법

  • 동일한 표현에 대해 서로 다른 파스 트리가 만들어지는 문법
  • 문제점
    • 하나의 프로그램이 서로 다른 결과를 도출할 수 있음
    • 프로그래머의 의도와는 다르게 해석되어 잘못된 결과를 도출할 수 있는 위험을 내포

 

 

🔸모호성 제거

  • 문법의 명확화
    • 의도하지 않은 의미로 해석되지 않도록 모호한 문법을 명확하게 변경
    • 새로운 비단말 기호와 새로운 구문 규칙을 추가하여 변경
  • 대표적인 예
    • 연산자 우선순위
    • 좌결합 연산자
    • 중첩된 if문의 else

 

 

 

🔸연산자 우선순위

  • +, - : 가장 낮음
  • *, / : 중간
  • ( ) : 가장 높음
수식 1+5*2
모호한 문법 연산자 우선순위 연산자 우선순위 파스 트리

 

 

 

🔸좌결합 연산자

: 우선 순위가 동일한 연산자 사이의 계산 순서는 왼쪽이 우선

수식 5-3+2
모호한 문법 좌결합 연산자 좌결합 연산자 파스 트리

 

 

 

🔸중첩된 if문의 else

: 중첩된 if문에서 else문의 개수가 if문의 개수보다 적은 경우 각 else문을 어느 조건이 거짓일 때 수행해야 하는지 모호

 

예)

if x>1 then if x<5 then y=1 else y=2
파스 트리1 파스 트리2


if x>1 then if x<5 then y=1 else y=2



 else문 앞에 나온 if문들 중 다른 else문과 짝이 되지 않은 가장 가까운 if문과 짝이 되도록 함
파스 트리

 

728x90
반응형
728x90
반응형

1. 온프레미스 시스템 구성 및 구축 과정

 

✅ 온프레미스(On-Premise)

  • IT 서비스 제공에 요구되는 데이터 센터(=서버들의 공장)에 H/W 및 S/W 설비를 자체적으로 보유하고 운용하는 방식
  • 클라우드 컴퓨팅 기술이 나오기 전까지 기업의 인프라 구축의 일반적인 방식
  • 개인 혹은 기업이 IT 서비스를 제공하기 위하여 서버 구축
  • 이메일, 인터넷 예약, 온라인 쇼핑, 미디어 스트리밍 등 다양한 서비스에 응용

 

 

 

🔸온프레미스 환경에서의 다양한 서버의 종류와 기능

애플리케이션 서버 업무 시스템의 중심이 되며, 요청을 받아 처리하고 결과를 반환하는 기능을 담당
HTTP 서버  기업의 홈페이지 등 인터넷을 기반으로 정보를 제공하는 서버
데이터베이스 서버 조직에서 사용하는 데이터를 무결하게 관리하는 기능을 담당
메일 서버 이메일을 수발신하는 서버, SMTP, POP3, IMAP 등의 프로토콜에 대응하는 기능을 수행
DNS 서버 도메인(Domain) 이름과 IP 주소를 변환
그룹웨어 서버 기업 내부에서 이용하는 그룹웨어(Groupware) 기능을 제공
네트워크 관련 서버 DNS 서버, Proxy 서버, NAT 서버 등 네트워크 기동 및 접속에 필요한 기능을 담당하는 서버
인증 서버 사용자 인증을 실시하며, 사용자에게 부여된 권한에 따라 접근 제어를 관리

 

 

 

🔸온프레미스 시스템의 구성

출처: 방송통신대학교

 

 

 

🔸온프레미스 시스템 구축 단계

출처: 방송통신대학교

  • 요구 기능 수집
    • 사용자의 요청이 무엇이며 그 요청에 따라 제공되는 데이터가 무엇인지에 따라서 얼만큼의 리소스를 가지고 있어야 하는지 파악
  •  설계
    • 용량 계획: IT 리소스 처리량 추정 및 추가 리소스 확보 계획
  • 조달
    • IT 리소스별 벤더(vendor)사 선정 및 의뢰, 협상 → 예) 회선은 A사, 네트워크는 B사
    • 발주에서 조달까지 2~3주 소요
  • 구축
    • 기업내의 기술력과 경험을 갖춘 인적 자원 활용
  • 운영
    • H/W, S/W 자산의 관리 및 모니터링
    • 데이터 백업, 서버실 관리, 시스템 보안 대응
    • 시설관리, H/W 임대, 유지 보수, 회선, 운영 담당자, 인건비 등 다양한 요소의 부대비용 발생

 

=> 온프레미스 시스템 구축 기간은 최소 1개월에서 최대 6개월~1년 소요됨

 

 

 

🔸온프레미스 시스템 구축 및 운영 비용

출처: 방송통신대학교

  • 직접 비용(Hard Cost): IT 장비 또는 장비 도입을 하기 위한 외주 비용
  • 간접 비용(Sotf Cost): IT 장비를 사용하기 위해 사용되는 유지비용 및 기회비용

=> 온프레미스 시스템 구축 시 초기 비용이 많이 듬

 

 

 

🔸개인의 온프레미스 시스템 구축 예시

개인의 온프레미스 시스템 구축 예1
개인의 온프레미스 시스템 구축 예2

 

∴ IT 리소스 요구량: 자원 관리 비용을 최소화하고 응답 시간을 최소화하기 위한 고려

 

 

 

 

🔸IT 리소스의 요구량 대비 제공된 처리량

츨처: 방송통신대학교

  • 결핍: 리소스 제공량이 서비스 요구량에 미달된 상태
  • 잉여: 리소스 제공량이 서비스 요구량을 초과한 상태

 

기업들은 일반적으로 사용자의 요구량이 제일 높은 피크 타임(peak time) 사용량에 맞춰 IT 리소스를 구비해왔으나 잉여량이 너무 많음 → 기업의 손실에 해당되는 양

 

 

 

 

 

2. 클라우드 기반 시스템 구축

 

🔸 온프레미스와 클라우드 시스템 구축단계 비교

출처: 방송통신대학교

 

 

 

🔸 SLA(Service Level Agreement)

IT 리소스를 대여하는 클라우드 서비스 제공자가 사용자에게 제공하는 서비스의 수준을 정량화하여 명확하게 제시하고, 미달하는 경우 손해 배상하도록 하는 서비스 품질 보장 계약 → 보장 정책

 

 

 

🔸 온프레미스와 클라우드 시스템 비용 비교

출처: 방송통신대학교

  • CapEx(온프레미스)
    • 물리적인 인프라에 대한 초기비용 지출
    • 시간이 지남에 따른 납입 고지서에 비용을 공제하는 지출 방식
  • OpEx(클라우드)
    • 현재 서비스 또는 제품에 대해 균등하게 지출되어 청구되는 비용
    • 초기 비용 없이 사용하는 서비스 또는 제품에 대한 지불 방식

 

=> 클라우드는 IT 리소스 사용에 필요한 비용을 CapEx에서 OpEx로 전환

 

 

 

 

 

3. 클라우드 컴퓨팅 이용 방식

 

✅ 클라우드 컴퓨팅 서비스 모델

출처: 방송통신대학교

  • IaaS(Infrastructure as a Service)
    • H/W 리소스를 제공
    • 예) Netflix는 자체적인 스트리밍 기술을 AWS 클라우드 환경에서 구동
  • PaaS(Platfrom as a Service)
    • H/W 리소스와 OS, S/W 개발을 위해 다양한 도구도 같이 제공 → 소프트웨어만 개발 배포 후 운영하면 됨(기업입장에선 본인들이 사용할 애플리케이션만 개발)
    • 예) 구글 App Engine은 애플리케이션을 빌드하고 배포가 가능한 플랫폼 환경을 제공, 모바일 게임의 경우 MsSQL 서버 기반의 데이터베이스를 기반으로 플레이어 데이터를 관리
  • SaaS(Software as a Service)
    • H/W 리소스와 OS, S/W 모두 제공 → 사용자는 데이터만 넣고 처리함
    • 예) 구글 Apps, Dropbox, Notion 등 대중화된 애플리케이션

 

 

 

🔸클라우드 시스템 배포 모델

  • 퍼블릭 클라우드 → 브랜드 아파트
    • 다수의 사용자가 클라우드 제공자가 공급하는 서버 및 저장소와 같은 IT 리소스를 공유하여 사용하는 모델
    • 일반 기업들이 비용 절감을 위해 많이 이용
  • 프라이빗 클라우드 → 단독 주택
    • 단일 조직이 독점적으로 데이터 센터를 구축하고 독점적으로 사용하는 모델
    • 5개의 서비스를 제공하기위해 3개의 서버가 필요하고 그 서버에서 가상화를 통해 5개의 서비스 제공 가능(온프레미스와 비슷하지만 온프레미스는 5개의 서비스를 제공하기위해 5개의 서버가 필요)
  • 하이브리드 클라우드
    • 둘 이상의 호환되는 여러 클라우드 제공자의 퍼블릭 클라우드의 인프라와 조직 내 구성된 프라이빗 클라우드 인프라가 결합된 모델
  • 커뮤니티 클라우드
    • 업무와 기능이 유사한 경우 조직들 간의 파트너쉽을 맺고 공동으로 접근하고 사용하는 모델
    • 예) 금융권에서  열 개의 은행이 공용으로 사용할 수 있는 프라이빗 클라우드를 만듬

 

 

 

728x90
반응형
728x90
반응형

1. 클라우드 컴퓨팅의 개념 및 정의

 

출처: 방송통신대학교

✅ 클라우드 컴퓨팅(Cloud Computing)

  • 개인의 PC가 아닌 인터넷 상에 존재하는 클라우드 사업자(또는 클라우드 제공자)에 의해 서비스가 제공되는 컴퓨팅 기술
  • IT리소스(IT resource)를 소유하는 것이 아닌 렌탈 서비스의 형태로 이용하는 모델
  • 전문 기관이 정의한 클라우드 컴퓨팅
    • Gartner 曰: 확장 가능하고 탄력적인 IT 기능이 인터넷을 사용하는 외부 고객들에게 서비스 형태로 제공되는 컴퓨팅 방식
    • NIST 曰: 컴퓨팅 리소스에 언제 어디서나 필요에 따라 편리하게 네트워크를 통해 접근하는 기능을 제공하는 모델

 

 

✅ 클라우드 컴퓨팅의 특징

  • 확장성과 유연성 : 사용자가 서비스에 따라, 혹은 시간에 따라 컴퓨팅 자원을 탄력적으로 확대/축소 가능
  • 즉시성과 가용성 : 사용자에게 요구되는 자원의 양을 즉시 충족, 공급 중심이 아닌 수요가 모든 것을 결정
  • Pay as you go : 사용하는 만큼 비용을 지불

 

 

 

 

 

2. 클라우드 컴퓨팅의 등장 배경

 

🔸컴퓨팅 기술의 발전 과정

출처: 방송통신대학교

  • 1980's 메인프레임
    • 단말기는 주로 특별한 기능 없이 메인프레임에서 처리한 결과를 저장하고 그것을 사용자에게 보여주는 일을 함
    • 단말기(터미널) : 미약한 CPU와 네트워크 기능, 입력장치로 이루어진 기능이 거의 없다시피한 컴퓨터
    • 메인프레임: 중앙 처리 장치(중앙 서버)
  • 1990's 클라이언트-서버 
    • 터미널에 들어가는 부품들의 성능이 빠르게 성장하면서 터미널 자체가 하나의 컴퓨팅 기능을 하게 됨 => PC의 대중화 => 클라이언트 => CS모델 보편화
  • 2000's 그리드 컴퓨팅
    • 하나의 슈퍼 컴퓨터를 위해서 그 아래에 여러 PC와 메인프레임, 모바일 장치들을 한데로 묶어서 사용
    • 여러 대의 작은 성능의 컴퓨터를 모아서 하나의 대규모 컴퓨터 자원을 만듬
  • 2010's 클라우드 컴퓨팅
    • 유틸리티 컴퓨팅의 대중화
    • 새로운 컴퓨팅 환경
      • 데이터와 프로그램들이 개인의 PC가 아닌 인터넷 기반의 클라우드에서 처리
        • 예) iCloud, 구글 드라이브, AWS ... 
      • 사용자는 PC, 휴대폰 등의 단말기를 통해 클라우드에 원격 접속
      • 필요 서비스를 즉시 받을 수 있는 컴퓨팅 환경

 

 

 

🔸클라우드 컴퓨팅 기술의 역사

출처: 방송통신대학교

 

✅ 프로비저닝(provisioning)

  • IT 리소스를 실시간으로 사용 가능한 상태로 만드는, 또는 규격품 형태로 패키징 하는 기술
  • 쉽게 말해 사용자의 요구 사항에 따라 해당하는 기능들을 섞어서 하나의 형태로 만들어 제공하는 패키징 기술

프로비저닝 가능한 다양한 리소스

 

 

🔸클라우드 컴퓨팅의 보급 원인

 

출처: 방송통신대학교

① 서버의 유휴 리소스 활용을 통한 효율성 향상

  • 개별 서버의 리소스 사용률은 평균 10~15% => 비용 절감 압박
    • (기업에서 1억을 들여 IT환경을 구축했는데 실제로 사용되는 IT 리소스는 천만원어치 정도..) 
  • 해결 방안: 사용하지 않는 컴퓨팅 리소스를 여러 사용자가 공유하여 사용률을 70%까지 향상

 

출처: 방송통신대학교

② H/W 및 S/W 기술의 발전

  • CPU, RAM, 저장장치의 H/W적 발전
  • 가상화 기술, 분산 처리 기술의 S/W적 발전
  • 규모의 경제로 인한 대용량 자원을 보유 및 운용할수록 비용절감 효과

 

③ 개인 및 기업 사용자 모두 클라우드 컴퓨팅 기술을 받아들이는 환경 조성

  • 클라우드 컴퓨팅은 리소스 이용률 향상, 비용 절감, 유연한 IT 서비스가 요구되는 시장의 변화로 대중화

 

 

728x90
반응형
728x90
반응형

1. 셸 개요

 

✅ 셸(shell)

  • 명령어 해석기 또는 명령 행 인터페이스
    • 사용자와 커널 사이에서 명령어를 해석하여 처리
    • 셸 명령을 사용하면 GUI로는 하기 힘든 다양한 기능을 수행할 수 있음
  • 셸 명령을 프로그램으로 작성하여 처리할 수도 있음
    • 셸 스크립트는 텍스트 파일로, 프로그래밍을 통한 셸 명령의 조합
    • 반복적으로 수행되는 작업을 셸 스크립트로 작성할 수 있음
    • 셸이 쉘 스크립트 파일을 읽어 처리할 수 있음
  • 로그인을 하면 기본 셸이 주어짐
  • 종류
    • 많은 리눅스 배포판에서 bash를 기본 셸로 사용함 → 명령 프롬프트로 일반 사용자는 $, root 사용자는 #을 사용함
    • 셸의 종류에 따라 alias 설정, 초기화 파일, 스크립트 작성, 명령 행 완성 기능, 명령 행 편집 기능 등에 차이가 있음

 

 

 

✅ bash 셸

  • Bourne Again Shell로 Bourne 셸의 개선된 버전 (많은 셸 스크립트의 문법이 Bourne 셸에 기반을 둠)
  • C 셸과 Korn 셸의 유용한 기능을 가져옴
  • 실행 명령은 /bin/bash
    • /etc/passwd 파일에 아래와 같은 라인이 있음

사용자ID: x: 사용자ID: 그룹ID: 사용자 설명: 해당 계정의 홈 디렉터리: 기본셸

 

  • 기본 셸을 변경할 수 있으며 터미널 창은 대화형 셸임
chsh -s /bin/tcsh 기본 셸 변경
 exit (ctrl + d) 셸 종료
  • 로그인 셸과 비로그인 셸을 구별해야 함
    • logout 명령은 로그인 셸에서만 가능
    • 참고로 ctrl + alt + F2~6으로 가상 콘솔을 사용할 수 있음. 실제 콘솔이 하나만 있더라도 가상 콘솔을 여러 개 띄워서 사용 가능 (콘솔: 서버 컴퓨터에 직접 물려있는 터미널, ctrl + alt + F1)
    •  셸 프롬프트에서 셸 프로그램을 실행하면 '서브 셸'이 실행됨

 

 

 

 

 

2. 셸 명령

 

✅ 셸 명령의 형식

명령어 [options] [인수]
  • 명령어는 대게 프로그램으로 존재(그래서 실제로 해당 명령어의 실행 파일이 어딘가 존재)
  • 가장 간단한 형태의 실행은 명령어만 사용 (예: who, date, ls, pwd)
who 로그인한 모든 사용자의 정보 출력
date 현재 요일과 날짜 및 시간 출력
ls 디렉터리가 가지고 있는 파일이나 서브 디렉터리 목록 출력
pwd 현재 작업 디렉터리 경로 출력
  • 옵션인수는 여럿일 수 있으며 선택적 또는 필수적
    • 대괄호는 생략 가능, 이탤릭체는 적당한 내용으로 대체해야 함. 복수는 여러 개가 가능하다는 의미

 

 

 

옵션과 인수

  • 짧은 옵션 (-) : Unix 스타일
    • ls -l
    • ls -lat == ls -l-a-t
  • 긴옵션(--) : GNU 스타일, 이중 대시 뒤에는 약어가 아닌 단어가 붙음
    • ls --all
  • 인수는 명령의 수행 대상을 지정하는 것
    • cat -n /etc/passwd
    • grep "KilDong Hong" /etc/passwd → 수가 2개인 경우도 있음
  • 옵션도 인수를 가질 수 있음
    • chsh -s /bin/sh kdhong
    • chsh --shell=/bin/bash kdhong → 옵션에 인수가 필요할 경우에 옵션과 인수 사이에 '=' 기호 붙여야 하고 그 사이에 공백 없어야 함

 

 

 

✅ 명령어의 종류

alias - 자주 사용되는 명령의 단축 명령을 만드는 명령

- alias : 현재 설정 되어있는 alias 확인
- alias la='ls -A'
- alias rm='rm -i'

- 계속 유지하려면 셸의 환경 설정 파일에 기록해두어야 함
셸 예약어 예약된 단어로 do, while, case 등
함수 셸에서 수행되는 함수의 정의
내장 명령 - 셸 내부에 존재하는 명령으로 cd, echo, pwd 등 → 별도의 실행 파일이 존재하지 않고 셸 프로그램 안에 존재

- help 내장 명령 : 해당 내장 명령어 사용법 안내
일반 명령 - 실행 파일이 존재하는 명령(환경 변수 PATH에 설정된 경로 중에 실행파일이 존재하면 이름만으로 실행 가능)

-  PATH에 경로가 없는 프로그램을 실행할 때는 절대 경로를 사용해야 함

- 현재 디렉터리를 의미하는 '.'은 보통 PATH에 포함되어있지 않기 때문에 현재 디렉토리에 있는 프로그램을 실행시킬 때 이름만 주고 실행시키면 셸이 그 명령을 이행하지 못할 수 있음! ./실행프로그램명을 쓰거나 PATH에 현재 디렉토리를 추가해줘야 함


- echo $PATH로 저장된 경로를 확인할 수 있음

- 일반 명령 --help : 해당 일반 명령어 사용법 안내

 

 

 

✅ 기타 셸 명령 & 명령 히스토리

 type 명령 - 해당 명령어가 어떻게 해석되는지 알려주는 명령
- type cd, type -a ls
which 명령 - 실행 프로그램을 환경변수 PATH를 기초로 찾아 경로를 출력함
- which rm → /usr/bin/rm
whereis 명령 - 실행 프로그램 경로뿐만 아니라 소스 프로그램 경로와 매뉴얼 페이지 경로 출력
- whereis rm → /usr/bin/ rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz
man 명령 - 매뉴얼 페이지를 보여줌
- 명령의 사용법이나 설정 파일 등에 관한 온라인 도움말 제공
- man passwd 또는 man 5 passwd (섹션 5 내용을 출력하라는 뜻. 페이지가 8가지 섹션으로 나뉘어져 있음)
history 명령 - 이전에 수행했던 명령 행의 목록을 불러옴
- history (최대 1000개까지 출력) 또는 history 10

✔️ 히스토리 기능을 이용하여 명령을 실행하는 방법
(이전에 수행했던 명령을 이용하여 명령을 수행할 수 있음)


- !!: 직전명령을 불러옴
- !숫자: 히스토리 목록에서 입력한 숫자값에 해당하는 명령 불러옴
- !문자: 지정된 문자열로 시작하는 최근 명령을 불러옴
 - [↑] 또는 [↓] : 누를 때마다 직전 또는 직후 명령을 불러옴


✔️명령 행 완성 기능
- 일부만 입력하고 나머지를 자동 완성으로 하는 기능
- 처음 몇 자만 입력한 후, [tab]키를 누르면 실행! 명령어, 변수($), 파일, 디렉터리(~ 또는 -) 등을 구분하여 결정함
- 정보가 충분하지 않은 경우, [tab]키를 한번 더 누르면 가능한 모든 경우를 보여주고 원래의 명령행 유지 

 

 

 

 

 

3. 명령의 연결과 확장

 

🔸특수문자

: 셸에서 특별한 의미를 가지는 문자

백슬래시( \ ) 특수 문자의 기능을 제거하는 이스케이프(escape) 문자
또는 긴 명령 행을 분리할 때 사용 => [ \ ] + [ enter ] 키를 누르면 다음 명령 행에 명령을 이어쓸 수 있음
틸드( ~ ) ~ 또는 ~username은 사용자의 홈디렉터리를 의미
도트( . ) 현재 작업 디렉터리를 표시
또는 명령 행의 맨 앞에서 쉘 스크립트를 실행하는 source 명령
더블도트( .. ) 현재 디렉터리의 부모 디렉터리
파운드( # ) 주석 처리
달러( $ ) $변수는 변수 값을 추출
 앰퍼샌드( & ) 명령&는 명령을 백그라운드로 실행시킴
↔ &를 붙이지 않으면 포그라운드로 실행. 해당 명령이 끝나야만 명령 프롬프트가 등장
애스터리스크
( * ) 
파일 이름에서 사용할 때 0개 이상의 임의 문자열과 대응됨
 물음표( ? ) 파일 이름에서 사용할 때 1개 문자와 대응됨
 파이프( | ) - 앞 명령의 출력 결과를 다음 명령의 입력으로 연결시킴
- 명령1 | 명령2 => cat /etc/passwd | sort | more
 ( < ), ( > )
*입출력 리다이렉션

- 입력 리다이렉션: 명령 수행에 필요한 표준 입력(키보드 입력) 대신에 파일로부터 데이터를 얻는 방법
- 명령<파일
예) sort</etc/passwd

(sort만 입력한 다음 엔터키 치면 라인 단위로 사용자의 입력을 받아서 그 입력 값을 정렬함)

- 출력 리다이렉션: 명령 수행의 결과를 표준 출력으로 보내지 않고 파일에 기록함
- 명령>파일
예) grep typedef /usr/include/*>typedef.out
>>  - 표준 출력을 파일의 끝에 덧붙일 때 사용

- 명령 수행 중 표준 오류 출력을 파일에 덧붙임
- 명령 2>>파일
예) ls 2>>error.txt
느낌표( ! ) 명령 히스토리 기능을 이용할 때 사용

 

 

 

🔸인용 부호

  • 빈칸을 포함하는 문자열을 1개의 인수로 사용할 때 인용 부호가 필요함
echo I am a student → 인수 갯수: 4
echo "I am a student" → 인수 갯수: 1
  • 작은따옴표(' ')는 특수 문자의 의미를 제거함
  • 큰따옴표(" ")$, ` `, \, ! 를 해석하여 확장함
    • \ : escape 문자로서  echo "\ $(date)" 이 경우 \뒤의 $의미가 없어지기 때문에 명령어로 해석되지 않고 문자로 출력됨

 

 

🔸명령 치환

  • 명령을 수행할 때, 명령의 인수에 다른 명령의 결과를 사용
  • $(명령어) 또는 ` 명령어`
    • ls -l $(which passwd) : /usr/bin/passwd 파일의 정보 출력

 

 

 

🔸수식 확장

  • 수식 결과를 명령 수행 전에 전달
  • $[수식] 또는 $((수식))

 

 

 

🔸변수 확장

  • 변수 값을 추출하여 명령 수행 전에 전달
  • $변수

 

 

 

 

 

4. 셸 변수

 

✅ 셸 변수

  • 셸의 환경 설정을 하기 위한 값을 저장 → 모든 변수와 값을 출력하기 위해 set 명령을 사용
  • 현재 셸에서만 사용 가능하고 서브 셸로는 전달되지 않음(지역변수)

 

환경 변수

  • 현재 셸 뿐만 아니라 서브 셸로도 전달(전역변수)
  • 보통 변수 이름으로 대문자를 사용
  • 터미널 창을 열어 쉘을 시작하면 이미 많은 환경변수가 설정되어 있음
  • 모든 환경 변수와 값을 출력하기 위해 printenv 명령을 사용

 

변수= 변수 설정
※이콜 사인 사이에는 공백이 들어가면 안 됨!
export 변수 환경 변수 설정
printenv 환경변수 해당 환경 변수의 값을 확인
echo $변수 모든 종류(셸 변수, 환경 변수..)의 변수 값을 확인

 

 

 

 

🔸자주 사용되는 환경 변수

 

HISTSIZE 1개 셸에서 저장되는 명령 히스토리 목록의 최대 갯수(기본 값: 1000)
HOME 홈 디렉터리
MAIL 사용자의 메일박스에 해당하는 파일로 보통 /var/spool/mail/username
PATH 명령을 수행할 때 실행 파일을 찾기 위한 디렉터리 목록
PS1 쉘 프롬프트 모양을 표시하기 위한 문자열
SHELL 사용 중인 기본 셸
PWD 현재 작업 디렉터리
USER 현재 사용자 계정

 

 

 

🔸로그인/셸 환경 설정 파일

  • 로그인할 때 또는 셸을 시작할 때 자동으로 실행되는 명령을 저장한 파일
    • 시스템 환경 설정 파일과 사용자 환경 설정 파일이 있음
    • 셸의 종류에 따라 다른 이름의 파일을 사용함

 

bash 셸의 경우 아래와 같음

실행순서 파일 설명
1 /etc/profile - 모든 사용자에게 적용되고 로그인할 때 가장 먼저 수행됨
- PATH, MAIL, HISTSIZE 등 전역의 환경 변수가 설정됨
2 ~/.bash_profile - 로그인할 때 수행되며 개별 사용자에게 적용됨
- 보통 내부에서 ~/.bashrc를 실행
3 ~/.bashrc - 쉘을 시작할 때마다 수행되며 개별 사용자에게 적용됨
- 보통 내부에서 /etc/bashrc를 수행
4 /etc/bashrc - 모든 사용자에게 적용되며 쉘을 시작할 때마다 수행됨
- PS1, alias 설정, umask를 사용한 접근권한의 초기 값, 함수 등을 설정
5 ~/.bash_logout - 로그아웃을 수행할 때 실행되는 스크립트 파일
  • 로그인할 때 1,2번 반드시 실행되고 쉘을 시작할 때 3,4번이 반드시 실행됨
  • 3번이 먼저 실행되지만 4번이 먼저 끝남

 

 

728x90
반응형

'KNOU > UNIX시스템' 카테고리의 다른 글

[UNIX 시스템] 2. 리눅스 설치  (1) 2022.09.11
[UNIX 시스템] 1. 리눅스 소개  (0) 2022.09.06
728x90
반응형

(CentOS 7에서 리눅스 명령어 실습하다가 한글 입력이 안 되서 쓰게된 글)

 

 

 

🔸화면 경로 : [시스템 설정] - [설정] - [지역 및 언어] 

 

입력 소스란에 [+] 버튼 클릭

위처럼 입력 소스란에 "한국어"만 추가된 환경일 경우 터미널 등에서 한글 입력이 안 됨

 

 

 

 

 

"입력 소스 추가" 창에서 "한국어"를 찾아 선택하면

위처럼 3종의 한국어가 표시되는데 이 중에서 "한국어 (Hangul)" 항목을 선택하여 추가

 

 

 

 

 

기존에 추가 되어있던 "한국어" 항목 삭제

"한국어 (Hangul)" 항목 선택 후 

톱니바퀴 버튼을 클릭하면 아래와 같은 창이 생성됨

 

 

 

 

 

Hangul toggle key 란에

단축키(Shift+space)를 이용하여 한글 입력 전환이 가능하도록 설정되어 있는 것을 확인할 수 이뜸

 

 

 

 

 

이제 터미널 내에서 shift+space 누르면 한글 입력 가능!

728x90
반응형
728x90
반응형

1. 리눅스 실습 환경의 준비

 

  •  CentOS
    • RHEL의 소스코드를 이용해 만들어진 무료 배포판
    • 상용 RHEL과 호환되나 운영상의 문제가 생길 때 스스로 해결해야 함
    • 웹 서버나 데이터베이스 서버용 컴퓨터에 널리 사용됨

 

✅ CenstOS 설치 방법

1. 하드디스크의 비어있는 파티션에 설치

  • 기존 운영체제에서 사용하지 않는 파티션이 있는지 확인(리눅스용 파티션을 준비하는 것)
  • 리눅스 설치 공간은 기존의 운영 체제공간과 구분됨
  • 부팅 시 윈도우와 리눅스 중 선택할 수 있음(멀티 부팅)

 

2. 가상머신 소프트웨어를 이용하여 설치 

(교수님 피셜 virtual box가 버전 업그레이드 되면서 문제가 좀 있어서 Vmware 추천)

  • 가상머신 소프트웨어 설치 후 가상머신에 리눅스 설치
  • 게스트 운영체제로 설치됨 <-> 물리적 컴퓨터 운영체제: 호스트 운영체제

 

⭐ VMware에 CentOS 7 설치하기

https://dev-waterparsley.tistory.com/52

 

[가상머신] VMware에 CentOS 설치하기

가상머신(Virtual Machine) 컴퓨터 환경을 소프트웨어로 구현한 것 한 대의 물리적 컴퓨터에 가상 컴퓨터 공간을 만들어서 그곳에 새로운 운영체제를 설치할 수 있도록 지원해주는 소프트웨어 물리

dev-waterparsley.tistory.com

 

 

 

 

2. 저장 장치와 이름과 표준 디렉터리

 

✅ 파티션

  • 하드디스크를 논리적으로 나눈 구역(디스크에서 고정 크기의 영역)
  • 디스크 전체가 하나의 파티션으로 만들어질 수도 있고, 여러 개의 파티션으로 분할되어 만들어질 수도  있음
  • 파티션 별로 파일 시스템을 만들 수 있음
    • 윈도우에서는 각 파티션마다 각각의 드라이브로 지정, 루트 디렉터리가 1개 이상 → C:\, D:\
    • 리눅스는 오직 1개의 루트 디렉터리(/)만 가짐 ← 루트 파일 시스템의 특정 디렉터리에 다른 파티션들이 부착되는 형태
      • 저장 장치를 사용하려면 해당 저장 장치 이름을 파일 시스템의 특정 디렉터리에 마운트시켜야 함 
      • 예) 장치 이름/dev/sdb1를 /home에 부착
  • 리눅스는 하드디스크나 주변 장치를 파일로 취급함

 

 

 

🔸장치 이름

  • 리눅스에서 사용하는 하드디스크 장치 또는 파티션의 이름
    • IDE 디스크: 이름에 'hd'를 붙임 → /dev/hda, /dev/hdb, ... *물리적인 하드디스크가 추가될 때 알파벳 순서대로 붙임
    • SCSI 디스크: 이름에 'sd'를 붙임 → /dev/sda, /dev/sdb, ...
    • 파티션 번호는 숫자를 1부터 순서대로 붙임 → /dev/hda1, /dev/hdb2, ...
    • CD/DVD → /dev/sr0, dev/sr1, ...

 

 

 

✅ 리눅스 표준 디렉터리

/ 루트 디렉터리 - 파일 시스템의 바탕을 이루는 중요 디렉터리
- 모든 파일과 디렉터리의 최상위 디렉터리
/bin
/sbin
바이너리 디렉터리 - 기본적인 명령 실행 파일 포함(/bin)
- 시스템 관리와 관련된 명령 실행 파일 포함(/sbin)
/boot 부트 디렉터리 - 커널 이미지(vmlinuz)와 *부트 로더 설정 파일 포함

*부트 로더: 리눅스가 부팅될 때 커널 이미지를 메모리상에 로드하는 작업이 필요한데 이때 사용되는게 부트 로더
/dev 디바이스 디렉터리 - 장치를 접근하는데 사용되는 '디바이스 파일'이 위치함
/etc 시스템 설정 파일 디렉터리 - 시스템의 중요한 환경 설정 파일 위치

🔸환경 설정 파일
1. 부팅할 때 실행되는 초기화 스크립트
2. 메일 서버나 웹 서버 같은 프로그램 설정 파일
3. 사용자 계정 정보를 가지는 패스워드 파일
4. 리눅스 부팅 시 어떤 파일 시스템을 마운트 될 것인지에 대한 파일 시스템 목록 파일...
/home 사용자 계정 디렉터리 - 사용자 계정의 홈 디렉터리가 만들어지는 디렉터리
예: /home/kdhong
사용자의 홈 디렉터리는 해당 사용자만 사용할 수 있는 독립적인 공간
/lib 공유 라이브러리 디렉터리 - 프로그램들이 사용하는 시스템 라이브러리 파일이 위치함
/media 미디어 디렉터리 - 이동식 저장 장치가 마운트될 때 마운트 지점을 제공하는 디렉터리
/proc 시스템 정보 디렉터리 - 커널이 사용하는 가상의 파일 시스템
- 실제 하드 디스크 공간을 차지하는 것이 아니라 메모리에 위치
/root 루트 계정 디렉터리 - root 계정의 홈 디렉터리
/usr 사용자 디렉터리 - /usr/bin, /usr/sbin : 여러 가지 실행 파일
- /usr/include : C프로그램 컴파일에 필요한 중요한 라이브러리 헤더 파일 (예: stdio.h)
- /usr/lib : 실행 파일을 위한 사용자 라이브러리
/var 가변 자료 저장 디렉터리 - 시스템 운영 중에 필요한 가변 자료가 저장되는 디렉터리
- 시스템 작동 로그, 인쇄, 메일

 

 

 

728x90
반응형

'KNOU > UNIX시스템' 카테고리의 다른 글

[UNIX 시스템] 3. 셸 사용하기  (0) 2022.09.15
[UNIX 시스템] 1. 리눅스 소개  (0) 2022.09.06
728x90
반응형

 

  • 가상머신(Virtual Machine)
    • 컴퓨터 환경을 소프트웨어로 구현한 것
    • 한 대의 물리적 컴퓨터에 가상 컴퓨터 공간을 만들어서 그곳에 새로운 운영체제를 설치할 수 있도록 지원해주는 소프트웨어
    • 물리적 컴퓨터 운영체제 => 호스트 운영 체제, 가상머신을 이용해서 그 안에 설치된 운영체제 => 게스트 운영 체제 
    • VMware, Virtual Box, Hyper-v 등

 

 


 

✅ VMware Workstation Player 설치

(VMware는 유료 버전인 Pro와 무료 버전인 Player로 나뉨. 내가 설치하는 건 당연히 Player)

 

 

 

 

 

1. VMware 공식 홈페이지에서 설치 파일 다운로드

https://customerconnect.vmware.com/en/downloads/info/slug/desktop_end_user_computing/vmware_workstation_player/16_0

 

https://customerconnect.vmware.com/en/downloads/info/slug/desktop_end_user_computing/vmware_workstation_player/16_0

Your browser is not supported on VMware Customer Connect. For the best experience, we recommend using one of these browsers.

customerconnect.vmware.com


🔸다운로드 경로: 사이트맵 → 제품 다운로드 → Desktop & End-User Computing 제품 중에서 VMware Workstation Player GO TO DOWNLOAD → VMware Workstation 16.2.4 Player for Windows 64-bit Operating Systems 다운로드




2. 다운로드 한 VMware 설치 파일 실행

(디폴트 값으로 설치 진행함)



 

3. VMware 실행

 

 

처음 실행하면 위와 같은 팝업이 뜨는데 '비상업적 용도로 사용함'에 체크되어 있을 거임
그대로 Continue 하면 됨

 

 

 

VMware 설치 완료 \^o^/




 

 

 


✅ CentOS 7 다운로드

 



- CentOS 홈페이지 접속해서 CentOS 7 DVD ISO 파일 다운로드

https://www.centos.org/

 

The CentOS Project

DevConf.US Dojo Jun 10, 2022 — CentOS is hosting an in-person Dojo at DevConf.US. The Dojo will take place at Boston University on August 17, the day before the main DevConf talks. The CFP and registration are open. The Dojo is free as always, but regist

www.centos.org

🔸다운로드 경로: 메인페이지에서 CentOS Linux 클릭 → 64비트를 사용하면 x86_64 클릭 → 개인의 국가 위치를 중심으로 다운로드 가능한 사이트가 나열됨

 

 

 

 

나는 카이스트에서 다운로드

 

 

 

 

여기서 64비트 DVD ISO 버전을 선택함

 

→ 준비 완료





✅ VMware에 CentOS 설치

 

 

 

1. 실행한 VMware 화면에서 [Create a New Virtual Machine] 클릭





2. 'operating system을 나중에 설치하겠다' 체크

 






3. 게스트 운영체제(Linux)와 버전(CentOS 7)을 선택

 





4. 가상머신을 생성할 경로 설정

나는 디폴트 경로로 설정함

 





5. 가상 디스크 용량과 저장 방식 설정

체크 박스는 가상 디스크를 단일로 저장하거나 분할로 저장하는 방법을 선택하는 것으로 개인적 용도에 따라 선택하면 됨

나는 단순 실습용으로 사용할거라서 디폴트 값으로 설정함

 






6. 위에서 다운로드한 ISO 파일을 DVD에 넣기

 

Customize Hardware 클릭
위에서 다운로드한 ISO 파일이 설치된 경로를 잡아줌







7. 가상 머신 실행

 

Play virtual machine 클릭

 

Install CentOS 7 설치

 

한국어 선택

 

✔️ 소프트웨어, 설치 대상, 네트워크 설정이 필요! (나열 순서대로 설명 진행하겠음)

 

소프트웨어 선택 - 초보자들은 GNOME 데스크탑(GUI) 같은 기능을 설치하지 않으면 적응하기 힘들 수 있으니 설치 권장

 

설치 대상 - 디스크를 선택해줘야 함! 파티션을 나눠서 사용하고 싶으면 파티션 설정란에서 나눠주면 됨

 

네트워크 &amp;amp; 호스트 이름 - 이더넷 연결 '켬'으로 변경. 인터넷 연결 완

 

설치 시작 클릭!

 

설치가 진행되는 동안에 ROOT 암호와 사용자 생성을 해주면 됨

 

재부팅 실행

 

재부팅 후, 라이센스 동의를 해야 함! 라이센스 동의 후 [설정 완료] 클릭

 

⭐드디어 나온 로그인 화면⭐



설정 끝난줄 알았지?

응 아냐
언어 설정, 키보드 입력 언어 선택, 위치정보 등의 설정을 다 하고 나면 진짜 끝



728x90
반응형

'서버' 카테고리의 다른 글

[Webtob] Webtob SSL 인증서 갱신  (0) 2024.12.31
728x90
반응형

1. 유닉스와 리눅스

 

  • Unix
    • 다중 사용자(multi user), 다중 작업(multitasking)을 지원하는 신뢰성 높은 시분할 방식의 운영체제
    • C언어로 작성되어서 이식성이 좋고 네트워크 기능이 강력함(UNIX 시스템의 발전이 인터넷, 네트워크 발전에 대단한 공헌을 했다고 알려짐)
    • 매우 단순하고 모듈화된 설계가 특징인 운영체제이며 강력한 쉘 스크립트를 제공함
    • 파일 시스템 트리가 하나로 통합되어 있음
  • Linux: Unix의 무료 공개 버전으로 초기에는 PC용 운영체제로 개발되었음

 

🔸Unix 발전사

출처: 방송통신대학교

  • Multics : 유닉스의 기원으로 1969년 assembly 언어로 작성된 최초의 시분할 운영체제
  • Unics → Unix : 작고 심플한 운영체제로 다시 작성되었으며 1973년 대부분이 C언어로 다시 작성됨

 

🔸대표적인 Unix 시스템

  • BSD 계열 : Free BSD, SunOS => 자유롭고 공개된 방식으로 운영체제 개발이 진행
  • System V 계열 : HP-UX, IBM AIX, Solaris => 상업적인 목적으로 제공
  • 리눅스

 

🔸리눅스 등장 과정

  • 1983년 GNU 프로젝트
    • 리처드 스톨만이 Unix와 유사한 공개 운영체제를 개발하기 위해 GNU 프로젝트를 시작소프트웨어 상업화에 반대하고 소스코드의 공유, 자유로운 사용과 배포를 주장
    • Linux 발전에 큰 영향을 줌
    • 1989년 GPL(General Public License) 발표
      • 공개 소프트웨어 라이센스의 대표적인 이름
      • GNU 프로젝트의 가장 큰 산물 
    • GNU 프로젝트는 현재 Free Software Foundation(FSF) 이름으로 계속 진행 중

 

  • 1991년 리눅스 커널(kernel)
    • 리누스 토발즈는 리눅스 커널을 작성하여 발표 - 개발자인 Linus와 Unix의 이름을 따서 Linux
    • 커널: 하드웨어를 제어하고(CPU 스케줄링, 메모리 관리..) 응용 프로그램과의 상호작용을 제공하는 운영체제의 핵심 구성 요소 

 

  • 1992년 최초 Linux 배포판(MCC Interim 리눅스) 발표 
    • 리눅스 배포판 = 리눅스 커널 + 다양한 시스템 유틸리티, 사용자 프로그램을 합쳐서 만들어진 완전한 운영체제
    • 보통 일반적으로 말하는 리눅스란 리눅스 배포판을 의미하는데 정확히 따지면 리눅스라는 명칭은 리눅스 커널만을 의미함!

 

  • 1998년 IBM과 Oracle과 같은 대기업들이 리눅스 지원을 발표

 

 

 

2. 리눅스 개요

 

🔸리눅스 발전상

  • 전 세계 리눅스 사용자는 9160만명 정도로 추산되며 유수의 100만 도메인 중 95% 이상이 리눅스를 사용
  • 스마트폰의 80% 이상이 리눅스 커널 기반의 안드로이드에서 동작
  • 슈퍼 컴퓨터의 95%가 리눅스에서 운영됨
  • 주요 증권거래소, Google, Twitter, Facebook, Amazon 등에서 리눅스 서버를 사용
  • 대다수 전자장비(폰, TV 등)에서 리눅스를 사용

 

✅ 리눅스의 특징

  • 다중 사용자와 다중 작업을 지원
  • 뛰어난 이식성을 제공
  • 모듈화되어 있어 업그레이드 또는 업데이트가 용이함
  • CUIGUI를 지원
    • Character UI(=CLI, Command Line Interface): 셸(Shell)을 통해 커맨드를 입력
    • Graphical UI: X Window와 GNOME, KDE 등의 데스크톱
  • 오픈 소스라서 빠르게 발전하고 보완됨
  • 여러 종류의 파일 시스템을 지원: Minx, ext 계열, FAT, FAT32, NTFS, NFS, ISO-9660 등
  • 효율적 하드웨어의 활용
  • 다양한 응용 프로그램과 소프트웨어 개발 환경을 제공

 

 

 

3. 오픈소스와 라이선스

 

✅ 오픈소스

: 개발자(저작권자)가 소스코드를 공개하여 누구나 사용, 수정, 공유할 수 있도록 허가한 소프트웨어

open source software(OSS) <=> proprietary(closed) 소프트웨어소

 

🔸소프트웨어 라이선스

  • 컴퓨터 프로그램은 지식재산권으로 보호받는 저작물로서 원칙적으로 저작자가 공표, 복제, 배포, 개작할 권한을 가짐
  • 타인에게 일정한 대가나 조건을 전제로 권한을 부여할 수 있음 → 라이선스 예) GPL

 

🔸오픈 소스의 장점

  • 누구나 잘못된 점을 발견하고, 알리거나 고칠 수 있음
  • 배울 수 있고, 효율적 프로그램 개발에 적용할 수 있음
  • 오픈 소스는 여러 사람에 의해 테스트되어 안전함
  • 오픈소스 운동의 철학: 커뮤니티를 통한 협력, 공유, 개방이 발전을 위해 효율적이다

 

🔸GNU 프로젝트와 자유 소프트웨어 운동

  • 목적에 상관없이 프로그램을 실행할 수 있는 자유
  • 프로그램을 복제하고 공유할 수 있는 자유
  • 소스코드를 개작(수정)할 수 있는 자유
  • 개작된 프로그램을 배포할 수 있는 자유(소프트웨어의 소스코드는 공개)

 

🔸리눅스 라이선스

  • 리눅스는 독점되거나 배타되지 않는 자유 소프트웨어 ∴ 공개 라이선스에 따라 자유롭게 고치고 배포 가능
  • 주로 GPL(GNU General Public License)를 따르고 일부는 LGPL(Gnu Lesser General Public License)를 따름
  • X Window는 MIT 라이선스

 

🔸GNU GPL

  • 자유롭게 사용, 복제, 배포
  • 필요에 따라 자유롭게 수정하고 배포 가능하고 이러한 경우 소스코드를 공개해야 함
  • 수정된 소프트웨어에 저작권을 표시하고 똑같이 GPL 조건으로 배포해야 함

 

🔸다양한 오픈소스 소프트웨어 라이선스

  • GPL, LGPL, MPL
    • 소스코드를 공개해야 하는 카피레프트 라이선스(기본적으로 코드를 공개하도록 함→ GPL이 가장 강력하게 적용)
      • LGPL
        • 주로 오픈소스 라이브러리에 적용됨
        • 프로그램 전체 코드를 공개하지 않아도 되고, 오픈소스 라이브러리 소스 코드만 수정해서 쓸 수가 있어서 해당 오픈 소스 라이브러리 코드만 공개하면 됨
      • MPL: 코드와 결합하여 프로그램을 만들 때 MPL 코드를 포함하지 않은 파일은 공개 의무가 없음
    • 소스코드의 공개 범위는 다르게 정의됨(전체/파일/모듈 단위 등)
  • BSD, Apache, MIT 라이선스(=Permissive 라이선스)
    • 배포 시 소스코드의 비공개가 허용
    • 코드의 재사용을 높이려는 목적

 

 

 

4. 리눅스 배포판

 

🔸리눅스 배포판의 역사

  • 리눅스 배포판: 리눅스 커널 외에 시스템 유틸리티, 응용프로그램, 설치 프로그램을 포함한 완전한 운영체제
  • 1991년 리눅스 커널이 처음 개발됨 (1994년 커널 1.0 발표, 최신 안정 버전은 4.12)
  • 1992년 최초의 배포판 MCC Interim과 SLS(Softlanding Linux System) 배포판이 발표됨
  • 1993년부터 주요 배포판이 나오기 시작함

 

✅ 주요 리눅스 배포판의 종류

  • Debian 계열: Debian, Ubuntu 등
  • Slackware 계열: Slackware, SUSE 등
  • Red Hat 계열: Redhat, Fedora, CentOS 등

 

✅ Debian 리눅스

  • Debian 프로젝트
    • 자유 운영 체제를 만들어가는 사람들의 독자적인 모임
    • Ian Murdock에 의해 1994년에 비영리 조직으로 설립
  • GNU 정신에 가장 충실한 배포판 → GNU의 공식적인 후원을 받는 유일한 배포판
  • 새로운 배포판이 나왔을 때 숫자 버전 외에 버전마다 코드명을 붙임 
    • 코드명은 크게 세가지(stable, testing, unstable)로 분류되고  unstable 버전은 항상 코드명이 sid (토이스토리에 나온 장난감 이름)
  • 설치 시간이 굉장히 오래 걸리며 패키지 관리를 위해서 데비안 패키지(dpkg) 사용하고, 패키지 install은 apt advanced 패키지 툴을 사용

 

✅ Ubuntu 리눅스

  • 인기 있는 리눅스 배포판 중 하나로 Debian 리눅스로부터 파생
  • 데스크톱 Unity를 제공하여 초보자도 리눅스를 쉽게 사용할 수 있도록 함
  • Debian 리눅스에 비하여 사용 편리성에 중점을 둠

 

✅ Slackware 리눅스

  • SLS 리눅스로부터 파생되어 가장 먼저 대중화된, 현존하는 가장 오래된 배포판
  • 1992년 Patrick Volkerding에 의해 시작됨
  • 간결함을 설계 철학으로 함 (the KISS principle) → 현재 GNOME desktop이 제외되어 있음
  • 유닉스를 공부하려는 목적이라면 슬랙웨어 리눅스를 사용하는 것이 적합

 

✅ SUSE 리눅스 (Software und System Entwicklug ) 

  • Slackware 리눅스로부터 파생
  • 독일에서 만든 배포판으로 유럽에서 많이 사용
  • 풍부한 기능, 안정성, 보안 기능을 포함
  • SUSE Linux Enterprise(유료) / openSUSE(무료)

 

✅ Red Hat 리눅스

  • 1994년에 처음 배포된, 배포판 가운데 가장 널리 알려진 리눅스
  • Red Hat Linux : 무료 배포판으로 2003년 지원 중단됨(마지막 버전은 9) → 무료 배포판 유지 개발을 위해 Fedora라는 오픈소스 프로젝트를 지원 (RHEL의 테스트 베드로 사용됨)
  • Red Hat Enterprise Linux(RHEL) : 유료 배포판으로 최신 버전은 7
  • 패키지 관리 : RPM(Red Hat Package Manager)

 

✅ CentOS 리눅스

  • Red Hat 리눅스로부터 파생
  • Red Hat Enterprise Linux(RHEL)의 소스코드를 기반으로 만들어지는 무료 배포판이며 상당히 안정된 버전
  • 서버용으로 많이 사용되며 최신 버전은 7.3

 

728x90
반응형

'KNOU > UNIX시스템' 카테고리의 다른 글

[UNIX 시스템] 3. 셸 사용하기  (0) 2022.09.15
[UNIX 시스템] 2. 리눅스 설치  (1) 2022.09.11
728x90
반응형

1. 구문론과 의미론

 

✅ 언어의 형식적 정의

: 구문론과 의미론을 통해 언어를 엄밀하게 정의

 

- 구문론(syntax): 문장이 구성되는 방식에 대해 연구

- 의미론(semantics): 문장이 나타내는 의미에 대해 연구

 

예1) 나는 너를 사랑한다.

구문: 주어 + 목적어 + 서술어

의미: 화자가 청자를 몹시 아끼고 귀중히 여긴다.

 

예2) I love you

구문: 주어 + 동사 + 목적어

의미: 화자가 청자를 몹시 아끼고 귀중히 여긴다.

 

 

 

✅ 프로그래밍 언어의 형식적 정의

: 프로그래밍 언어의 명확한 구문과 의미를 정의하고 이를 통해 명확한 사용체계를 제공

 

예1) PRINT "GCD is"; A

구문: PRINT "출력할 내용"; 변수

의미: 출력할 내용과 변수의 값을 순차적으로 출력하라

 

예2) printf("GCD is %d", a);

구문: printf("출력할 내용", 변수);

의미: 출력할 내용의 %d 자리에 변수의 값을 대신 넣어 내용을 출력하라

 

  • 형식적 정의의 필요성
    • 컴퓨터 입장: 프로그램 해석의 모호함 제거
    • 작성자 입장: 프로그램의 동작 예측 가능

 

출처: 방송통신대학교

  • 프로그램의 구조
    • 문자: 영어 알파벳, 아라비아 숫자, 특수 기호 등
    • 어휘(토큰): 문자의 모임. 최소한의 의미를 갖는 단어
    • 구문: 프로그램을 작성하는 규칙(문법) - 토큰을 모아 프로그램을 구성
    • 의미: 프로그램을 통해 발생하는 현상
      1. 정수를 저장할 변수 x12를 만든 다음
      2. 수식을 계산하여 11을 변수 x12에 대입
      3. 변수 x12의 값이 10보다 크면 ... 부분을 수행

 

구문론 의미론
- 프로그램의 표면적인 구조를 정의
- 프로그램 작성 시 어떤 형태로 작성해야 하는지를 기술
- 프로그램의 내용적인 효과를 정의
- 프로그램 실행 시 어떤 일이 일어나는지 그 의미를 기술

 

 

 

2. 구문의 표현

 

  • 구문론
    • 프로그램의 표면적인 구조를 정의
    • 정의된 구문을 통해 모든 정상적인 프로그램을 도출
    • 작성된 프로그램이 정의된 구문에 맞는 프로그램인지 확인
    • 구문의 표현
    • 구문의 정의는 문법을 활용하여 명확하게 표현
    • 일반적으로 프로그래밍 언어에서는 *문맥 자유 문법을 이용

 

✅ 문맥 자유 문법(CFG: Context-Free Grammar)

  • 구성 요소
      • 비단말 기호: 정의될 대상
      • 단말 기호: 언어에서 직접 사용되는 표현
      • 시작 비단말 기호: 언어에서 독립적으로 사용될 수 있는 단위
      • 규칙(문법): 비단말 기호를 단말 기호와 비단말 기호의 조합으로 정의 → 각 규칙은 하나의 비단말 기호만을 정의

 

 

✅ 문맥 자유 문법의 다양한 표현 방법

1. BNF

2. EBNF

3. 구문 도표

 

 

1. BNF(Backus-Naur Form): Algol의 구문을 정의하기 위해 사용된 표현법

 

세 가지 메타기호

 

🔸비단말 기호: < >로 묶인 기호

🔸단말 기호: 비단말 기호와 메타 기호가 아닌 기호

🔸규칙: ::=를 기준으로 왼쪽 부분을 오른쪽 부분으로 정의

출처: 방송통신대학교

 

 

2. EBNF(Extended Backus-Naur Form): BNF에 추가된 메타 기호를 사용하여 규칙을 보다 간결하게 표현

 

⭐ 추가된 메타 기호

 

🔸[ ] 생략 가능

출처: 방송통신대학교

 

🔸{ } 0번 이상 반복

출처: 방송통신대학교

=> 한 자리수 이상을 표현 ( <digit>은 한 자리 수를 의미 )

 

🔸( ) | 과 함께 쓰여 한정된 범위의 택일

출처: 방송통신대학교

 

🔸' ' 메타 기호를 단말 기호로 사용

출처: 방송통신대학교

 

 

 

✅ 구문 도표(syntax diagram)

  • 초기 Pascal의 사용자 설명서에 사용된 표현법
  • 순서도와 유사하게 그림으로 구문을 표현

 

 

출처: 방송통신대학교

 

출처: 방송통신대학교

 

출처: 방송통신대학교

 

 

 

3. 의미의표현

 

✅ 의미론

  • 프로그램의 내용적인 효과를 정의
  • 프로그램 실행 시 어떤 일이 일어나는지 그 의미를 기술
  • 구문으로 표현하기 어려운 제약사항을 기술하기도 함

 

  • 의미의 표현
    • 일반적으로 자연어 문장으로 표현하나 명확성이 부족
    • 의미의 엄밀한 표현을 위한 다양한 기법 개발(형식 의미론)

 

✅ 형식 의미론

  • 정적 의미론
    • 프로그램을 수행하기 전 의미가 맞는지 파악하는 방법
    • 주로 타입 검사 수행에 활용
    • 대표적인 방법: 속성 문법

 

  • 동적 의미론
    • 프로그램 수행 시 나타나게 될 의미를 표현하는 방법
    • 대표적인 방법: 기능적 의미론, 표기적 의미론, 공리적 의미론

 

🔸속성 문법

비단말 기호마다 타입 속성이 있다고 가정하고 이에 대한 규칙을 정의

 

출처: 방송통신대학교

 

🔸기능적 의미론

추상기계의 상태를 바꾸는 것으로 수행 의미를 표현 → 프로그램이 수행(기능)되면 컴퓨터의 상태가 바뀜

상태: <수행할 명령어, 메모리 상태>

출처: 방송통신대학교

 

🔸표기적 의미론

구문 요소를 수학적 표기에 대응시켜 수행 의미를 표현

의미함수: 대응시키는 함수

출처: 방송통신대학교

 

🔸공리적 의미론

프로그램의 효과로 수행 의미를 표현

효과: 프로그램 S가 실행됨으로써 사전조건 P를 사후조건 Q로 변화시킴. {P} S {Q}

출처: 방송통신대학교

 

 

  • 의미론의 한계
    • 프로그래밍 언어 전체에 대한 의미 표현은 너무 복잡

 

  • 의미론의 효과 
    • 프로그램의 구현 및 분석 등에 유용하게 사용됨
    • 속성 방법: 인터프리터 및 컴파일러 구현 시 트리 생성, 타입 검사, 코드 생성 등을 할 때
    • 수학적 표기: 언어의 특성을 명확하게 정의해야 할 때
    • 공리적 의미론: 프로그램의 특정 조건 만족 여부를 확인할 때

 

728x90
반응형
728x90
반응형

 

  •  패러다임
    • 한 시대의 견해나 사고를 규정하는 양식, 규범, 체계 등을 통칭하는 말
    • 토머스 쿤은 과학 분야의 발전에 따라 이전의 믿음과 체계가 흔들리고 새로운 체계로 대체되는 과정에 주목 => 패러다임 전환 (예. 천동설 → 지동설, 저축이 미덕 → 소비가 미덕)

 

 

 

1. 프로그래밍 패러다임

  • 프로그래밍 패러다임
    • 프로그램을 작성하는 전형적인 방식
    • 특정 언어에 종속적인 것이 아닌 프로그래머가 추구하는 프로그램 작성 방식

 

프로그래밍 패러다임의 변화(1)

  • 명령형 프로그래밍 패러다임 
    • 등장 배경: 주어진 데이터에 어떤 연산을 어떤 순서로 할지 결정하는 것이 중요 
  • 절차형 프로그래밍 패러다임
    • 등장 배경: 복잡한 데이터 처리를 위해 데이터 처리 방식 자체를 잘 정리하는 것이 중요 
    • 같은 일들을 모아놓고 그 절차들을 가져다 쓰는 
  • 함수형 프로그래밍 패러다임(값을 중심으로)
    • 등장 배경: 데이터가 저장된 메모리를 관리하는 것이 어려운 문제로 대두 
  • 논리 프로그래밍 패러다임 등장(선언적 프로그래밍 패러다임의 한 종류)
    • 등장 배경: 계산 절차를 문제의 조건을 명시하는 규칙으로 생각
  • 객체지향 프로그래밍 패러다임(객체를 중심으로)
    • 등장 배경: 같은 데이터에 대해 다른 처리 절차를 여러 개 명시해야하는 경우가 흔히 발생
    • 객체들을 미리 다 만들어놓고 필요할 때마다 그 객체들을 불러서 사용하는

 

✔️ 프로그래밍 패러다임 변화의 배경

  • 응용 도메인의 변화: 계산 분야 → 다양한 응용 분야 (=요구사항의 변화)
  • 프로그램 구성 방식의 변화: 명령어 나열 → 존재하는 모듈의 조합
  • 계산 모델의 변화: 튜링기계 모델 → 새로운 방식의 계산 모델

 

 

 

2. 프로그래밍 언어 패러다임

 

프로그래밍 패러다임 프로그래밍 언어 패러다임
- 프로그램을 작성하는 방식이나 스타일 - 해당 프로그래밍 언어가 지원하는 프로그래밍 패러다임
- 일반적으로 프로그래밍 언어는 여러 프로그래밍 패러다임을 지원

 

 

 주요 언어의 프로그래밍 패러다임

출처: 방송통신대학교

 

✔️ 프로그래밍 패러다임의 양립성

  • 다양한 프로그래밍 패러다임은 서로 양립할 수 있음
  • 새로운 패러다임의 등장으로 기존의 패러다임을 버리는게 아니라 이를 더욱 공고히 완성
  • 주류 프로그래밍 패러다임이 바뀜에 따라 이를 언어가 수용하는 형태로 변화
    • 예) Python: 명령형 패러다임, 절차형 패러다임 기존 지원 → 함수형 패러다임, 객체지향 패러다임을 추가 포함

 

 

 

3. 여러 패러다임의 프로그램 예

  • 명령형 프로그래밍
    • 프로그램: 일련의 명령어 나열
    • 장점: 프로그램을 쉽게 이해할 수 있음
    • 단점: 프로그램이 복잡한 경우 효과적으로 다루지 못함
    • 유클리드 알고리즘을 이용한 최대 공약수 계산 프로그램 (BASIC 구현)

 

  • 절차형 프로그래밍
      • 프로그램: 서브루틴이라는 절차의 집합
      • 장점: 재귀호출(자기가 자기 자신을 호출)을 사용하여 프로시저를 간단하게 정의
      • 유클리드 알고리즘을 이용한 최대 공약수 계산 프로그램 (Algol구현)

 

  • 구조화 프로그래밍
      • goto없이 프로그램을 작성하는 방법
        • => goto의 경우 해당 라인으로 가서 작업을 수행하다가 끝나면 되돌아오는게 아니라 거기서 끝남. 이에 반해 구조화 프로그래밍은 블록, 서브루틴을 각각 하나의 덩어리라고 생각함. 그래서 이 덩어리를 불러서 사용할 경우 해당 작업이 끝나면 되돌아 감.
      • 블록과 서브루틴을 이용
      • 구조화된 제어문(=중첩된 제어문)을 이용
      • 유클리드 알고리즘을 이용한 최대 공약수 계산 프로그램 (Algol구현)

 

  • 객체지향 프로그래밍
      • 프로그램: 서로 통신할 수 있는 객체(object)의 집합
      • GUI 개발에 큰 획(Smalltalk)
      • 프로그램 재사용 편의로 S/W 생산성에 큰 기여
      • 객체의 개념
        • 상태를 유지하며 외부의 요청에 반응하는 데이터
        • 상태 - 필드(멤버 변수), 반응 - 메소드(멤버 함수)
        • 상태는 외부에 숨기고 메소드는 외부에 공개 
      • 유클리드 알고리즘을 이용한 최대 공약수 계산 프로그램 (Smalltalk 구현)

 

  • 함수형 프로그래밍
      • 데이터는 값으로, 명령어는 함수로 취급
      • 명령어가 데이터를 바꿀 수 없음(A라는 값을 B라는 다른 값으로 상태를 바꿔버림(별개의 값)
      • 대입문과 반복문 없음
      • 함수 자체도 값으로 취급 가능
      • 유클리드 알고리즘을 이용한 최대 공약수 계산 프로그램 (Haskell 구현)

 

  • 선언적 프로그래밍과 논리 언어
      • 프로그램: 논리식 집합
      • 논리식은 명제나 술어로 나타냄. 술어는 인수를 받을 수 있음
      • 유클리드 알고리즘을 이용한 최대 공약수 계산 프로그램 (Prolog 구현)

 

 

 

4. 프로그래밍 언어와 프로그래밍 패러다임

 

  • 객체지향 패러다임: 객체 사이의 통신을 통해 계산을 표현
  • 함수형 패러다임: 함수의 적용을 통해 계산을 표현
  • 논리 패러다임: 논리식의 진위를 증명하는 과정을 통해 계산을 표현

 

728x90
반응형

+ Recent posts