2018년 5월 25일 금요일

우분투/페도라 런처 아이콘 생성하기 (X-Windows 계열 리눅스 공통)

아래는 우분투 페도라 등 X-Windows 계열 리눅스 Desktop 환경에서 런쳐아이콘 (윈도우에서 바로가기에 해당) 생성하는 방법이다.
예를 들면 이클립스 Linux 버전을 다운받은 후 실행아이콘이 없어서 매번 console 로 실행해야 하는 불편함을 제거 할 수 있다.
이클립스 실행 아이콘 생성을 예로 들면 아래와 같은 과정을 따라하면 된다.

1. 아래 명령어로 vi 편집 창을 연다.
$ vi /usr/share/applications/eclipse.desktop

2. 아래 텍스트를 입력 한다.
    (vi 사용법을 모르시는 분들은 다른 Editor 등을 통해 편집하셔도 당연히 됩니다.)
    (eclipse 의 설치 경로는 "/opt" 라고 가정 합니다.)
---------------- 아래 ----------------
[Desktop Entry]
Name=eclipse
Type=Application
Exec=/opt/eclipse/eclipse
Icon=/opt/eclipse/icon.png
---------------- 아래 끝 --------------

3. 패널등의 검색화면에서 eclipse 를 타이핑 하면 실행 아이콘을 볼 수 있다.

바이오스(rom-bios)

- 프로그래밍의 시작 : 바이오스의 마지막 명령어 다음 부터. 

BIOS (Basic Input Output System)
BIOS란 말 그대로 기본적인 입출력을 담당하는 것이며 하드웨어와 소프트웨어 중간자역활을 하는 펌웨어로서 맨 처음 컴퓨터를 켜면 컴퓨터의 기본적인 정보수집과 입출력을 담당하는 프로그램으로 메인보드의 핵심이 되는 부분이다.
즉 OS에서 입출력장치나 주변장치를 구동하기위한 루틴(컴퓨터에서 원하는 작업을 시킬수있도록 올바른 순서로 배열된 1쌍의 명령계열) 들의 집합체로서 OS가장 하위에 위치하며 보통 ROM안에 들어있기 때문에 ROM-BIOS라고도 불린다.
그러니까 쉽게 말해서 바이오스는 프로그램이라고 할 수 있다. 메인보드의 다른 부분은 모두 기계 덩어리이지만 바이오스만은 ROM(RAM과 마찬가지로 주기억장치로서 비휘발성 메모리 데이터를 저장할 수 있다.)이라는 저장장치에 프로그래밍 되어있는 프로그램이라 할 수 있겠다.
그럼 이 바이오스는 무슨 일을 하는지 알아보자.
이 바이오스는 크게 3가지 일을 한다. 맨 처음 POST과정을 수행한다.
POST(Power On Self Test)
사용자가 전원 스위치를 누르면 BIOS는 작성/조정된 소프트웨어에 의하여 스스로 시스템을 booting(기동) 시키는데 이것을 POSTing(Power On Self Testing, 포스팅)이라고 한다.
이 POST과정이란 컴퓨터가 켜지면 컴퓨터에 연결돼있는 장치들이 정상적으로 동작할 수 있는지 여부를 검사하기 시작한다. 이 과정을 POST 과정이라 하며 유저들이 노트북이나 PC를 처음 켜면 검은 바탕에 흰 글씨로 메모리체크도 하고 하드는 어떤 하드가 달렸는지 CD롬은 어떤 것을 쓰는지, 키보드는 정상적으로 동작하는지 등의 메시지가 뜰 것이다. 이과정이 POST과정으로 바이오스의 기능 중 하나이다.
보통 얼마만큼의 메모리가 있는지, 하드디스크나 시디롬의 동작 상태는 어떠한지, 키보드는 연결되어 있는지 타이머는 동작을 하고 있는지, 인터럽트가 제대로 처리 될 수 있는 상태인지 등등 이런 기본적인 부분을 점검한다.
POSTing은 다음과 같은 순서로 진행된다.
전원 공급을 시작하면 전압이 안정된 수준에 도달할 때까지 기다려 부품이 전력 상태 불안정으로 공장이 나지 않도록 보호한다. 전원 장치로부터 Power Good Signal(전력 상태 양호) 을 받으면 프로세서가 우선적으로 System BIOS가 저장된 ROM의 boot 프로그램을 찾아 부팅하도록 지시한다.
BIOS는 posting 과정을 프로그램대로 실행한다.
만약 posting 과정에서 문제가 발생하면 동작 중단하고 'beep code'(BIOS가 발견한 시스템 스피커를 통하여 소리로 사용자에게 알리는 모르스 부호 형태의 신호음)을 낸다.
BIOS는 그래픽카드를 찾아서 그래픽 BIOS를 동작시키면 그래픽 BIOS는 그래픽카드를 초기화하고 모 터 화면에 그래픽카드 정보(종류, 버전 등)를 알린다. 화면이 부팅 이후 사용자가 가장 먼저 눈으로 확인할 수 있는 시스템 BIOS의 진행 과정이다. BIOS는 그래픽 BIOS ROM 외에도 IDE 하드디스크의 BIOS를 비롯한 다른 장치들의 ROM을 찾아서 동작(초기화) 시키게 된다.
BIOS는 메모리 검사를 포함하여 키보드, 디스크 컨트롤러, drive 등 몇 가지의 검사를 추가로 시행하여 문제가 발견되면 모니터를 통하여 에러 메시지를 띄운다. BIOS는 사용자가 수동으로 설정한 장치들과 BIOS가 검사한 여러 종류의 자동 설정 장치들을 시스템 목록으로 작성하여 화면에 상세하게 나타낸다.
미리 설정한 boot 우선순위에 따라서 OS가 있는 플로피 디스크나 하드디스크의 master boot record(실린더 0, 헤드 0, 섹터1)을 검사한다. 디스크에서 boot sector를 발견하면 OS가 boot 과정을 시작하게 만들고 BIOS는 posting을 마친다.
첫째, boot drive에 OS가 없으면 다음 순위의 boot drive에서 OS를 찾는다.
둘째, boot drive를 포함하여 다른 driver에도 OS가 없으면 BIOS가 화면에 "No boot device available" 또는 "NO ROM BASIC-SYSTEM HALTED" 라는 메시지를 보낸다.
그리고 BIOS의 두 번째 기능으로서 시스템 초기화를 들 수 있다.
POST과정이 끝나면 시스템을 사용할 수 있도록 메인보드에 장착된 각 칩셋과 연결되어있는 여러 주변장치들에 대하여 각각 초기화를 시작한다. 이때 초기화과정에서는 어떤 주변장치가 연결되었는 확인한다.
초기화의 과정의 일환으로 ROM바이오스 내부에 들어있는 핸들러를 읽어들이게 되고, 인터럽트 백터테이블을 구성한다. 또한 현재시스템에 장착돼있는 장비들의 상태를 알아내어 메모리 하위번지에 확장바이오스를 설치한다.
너무설명이 어려운거 같은데 시스템초기화의 가장 중요한 부분은 바이오스에서 어떤 주변 장치가 연결돼있는지 확인 한다는 것이다 주변장치란 사운드(카드)칩셋이나 비디오(카드)칩셋이나 렌(카드)칩셋 등등이 있다.
이렇게 시스템초기화의 과정까지 아무런 문제가 발생되지 않았다면 바이오스는 디스크부팅을 준비하며 이 작업을 위해 부팅할 부트스트랩로더를 읽어들인다. 이과정이 바이오스의 3번째 역할인 디스크부트이다.
부트스트랩로더란 시스템부팅에 필요한 아주 작은 프로그램으로 이것을 읽는데 성공하면 디스크가 부팅이된다. 말 그대로 윈도우가 부팅 되는 것이다.
디스크부팅과 더불어 디스크에 설치된 운영체제가 컴퓨터의 메모리에 올라오며 운영체제는 시스템을 점검 후 일련의 초기화과정을 수행하고 사용자의 명령을 기다린다. 이때가 바로 윈도우 부팅 후 바탕화면이 떠 있는 상태이다. 자 이렇게 해서 노트북이나 PC를 켬과 동시에 윈도우 부팅까지 이르는 전반적인 과정에서 기본적인 입, 출력 및 여러 가지 과정을 BIOS가 처리 하고 있다.
이것으로 바이오스의 기능은 끝일까?
아니다. 이제부터가 바이오스는 엄청나게 중요한 일들을 처리한다.
일단 바탕화면이 뜨고 난 후 여러 사용자들은 인터넷에 들어가던지, 게임을 하던지 무엇을 하던 컴퓨터를 활용한다.
컴퓨터를 사용하면서 우리는 항상 입출력을 하게 된다.
마우스를 이용해 아이콘을 클릭한다던지 키보드를 이용하여 글자를 두들긴다든지 하는 가장 기본적인 입출력을 통하여 우리는 바이오스의 기능들을 계속적으로 불러 들인다.
바이오스에서는 가장기본적인 입출력을 담당 한다고 언급했다.
키보드를 통한 데이터 입출력, 비디오카드를 통한 데이터 입출력(모니터로 화면이 보이게 하는 부분), 프린터 출력, 직렬통신을 이용한 데이터 입출력, 디스크를 제어하는 기능 등 이모든 일들은 항상 바이오스의 기능을 우리가 불러내는 일들이다. 이것을 바로 바이오스콜이라고 부른다.
만약 문서작성을 한다면 글을 쓰고 있는 시점에도 바이오스의 기능을 계속적으로 불러들이는 바이오스콜을 하고 있는 것 이며 화면으로 작성된 글을 읽는 것 조차 바이오스콜을 통하여 이루어지는 것 이다.
이렇게 바이오스는 OS(소프트웨어)와 하드웨어 중간에 위치하여 바이오스콜을 통하여 기본적인 입출력을 담당하고 있다.
이제 딱딱한 이야기들 보다 좀 더 가슴에 와 닫는 것들을 알아보자.
우선 바이오스프로그램을 만드는 회사는 크게 3군데가 있다.
아미 바이오스, 어워드 바이오스, 피닉스바이오스라는 것이다.
이것은 바이오스 이름이 아니라 제조회사를 나타내는 것이다.
어떤 사용자가 아미나 어워드 같은 것들을 다운받을 수 있는 곳을 알려달라고 한 글을 본 적이 있는데 그건 말이 안되는 것이다.
말했듯 회사이름이고, 바이오스는 프로그램(예전에는 어셈블리어로 많이 만들었지만 요즘은 C언어로도 만들고 있다.)이기 때문에 메인보드에 메인칩과 각종 칩들과 호환이 되도록 프로그램 되어 있다.
그래서 PC면 메인보드 모델넘버나 노트북이면 노트북모델을 알고 그에 따른 정확한 바이오스를 사용해야만 컴퓨터가 제대로 동작한다.
만약 바이오스가 맛이 가버리면 컴퓨터는 전원만 들어오고 전혀 동작을 하지 않는다. 아주 미세하게 맛이 간 경우에는 윈도우 부팅되기 전까지 무슨 문제가 나타나더라도 나타나게 된다.
BIOS업데이트를 많이 받고는 하는데 고급 사용자 같은 경우는 롬라이트기를 이용하여 아예 롬을 빼내서 바이오스내용을 다시 프로그래밍 할 수 있지만 일반 사용자의 경우에는 노트북이나 PC를 이용하여 업데이트를 해야 한다. 그럴 경우 대부분의 익숙치 않은 사용자들은 바이오스 업데이트 도중 실패하셔서 노트북을 사용하시지 못하는 경우를 엄청 많이보았다. 아니 애초에 시도조차 하지 않는 경우도 더욱 많다.
바이오스 업데이트를 권장하는 경우는 고용량하드디스크로 업그레이드 할때 CMOS 셋업에서 하드디스크 용량이 잡히지 않을 경우 등을 제외하고는 BIOS업데이트를 아예 하지 않는것도 현명한방법 같다.
BIOS업데이트를 하고나면 속도가 빨라진다든지 왠지 느낌이 좋다고 그러시는 사람은 좀 답답할 뿐이다. BIOS가 나가버리면 위에서 언급했다시피 최악의 상황까지 이르기 때문이다.
참, 그리고 CMOS 셋업과 BIOS 와 ROM을 동일시 생각는 사람들이 있을 것이다.
3가지 모두 다른 것들이다.
차이점을 설명해 보면 BIOS에 대해서는 더 이상의 설명이 필요하지 않을 것이다.
CMOS셋업이란 바이오스 프로그램 기능 중 일부를 사용하는 사람이 직접 제어를 할 수 있도록 만들어놓은 셋업프로그램이다.
CMOS셋업을 통하여~기본적인 PC의 셋팅을 할 수 있는 것이다.
하드디스크 용량 결정이라든지, 노트북의 경우 화면을 CRT로 나오게 할 것인지, LCD로 나오게 할 것인지, 오버클럭을 할 것인지, 패스워드를 설정 할 것인지 등 많은 내용들을 셋업 할 수 있는 것이다.
그리고 ROM이란 것은 위에서도 언급 했듯이 메모리의 일종으로서 비휘발성 메모리를 저장하는 장치이다. ROM안에 BIOS가 프로그램 되어 있는 것이다. 이정도면 3가지의 차이를 충분히 이해 할 수 있을 것이다. 그리고 중요한 한 가지. 패스워드 내용이라든지 CMOS 셋업을 통하여 저장된 컴퓨터의 셋팅 내용 등등, 이러한 시정수값 내용들이 롬바이오스 안에 저장돼있다고 생각하는 사람도 있는데 그것은 잘못된 생각이다. 이러한 일련의 시정수 값들은 RTC라고 불리우는 현제 사우스브릿지 역활을 하는 칩셋에 저장이 되어있다.

톰캣의 원리? - 작성중

"추상화 시켜서 하나하나 이해해 나가는데 효율적이다.
그렇다고 물론 무조건적으로 추상화 시키게 답은 아니다.
하층 구조를 어느 정도 염두하면서 추상화해 이해할 필요가 있다."


일단,

- 클라이언트에서 서버로의 html,jsp,servlet 페이지 호출

- 서버의 웹서버 프로그램(apache)에서 처음으로 처리

html페이지 요청일 경우, 그대로 클라이언트에게 html페이지 전송

html페이지가 아닌 jsp 나 servelt 일 경우, 웹컨테이너(tomcat) 에게 넘겨서 처리

- 웹컨테이너는 "jsp or servlet -> html" 변환시켜 웹서버 프로그램에게 다시 넘김

- 웹서버 프로그램은 변환된 html페이지를 클라이언트에게 전송





- 먼저 client 가 http://localhost:8080/index.jsp를 쳐서 요청을 한다고 하면

- 웹서버 프로그램(apache)에서 html이 아니기 때문에 jsp를 해석하기 위해서 tomcat의 common/lib 폴더를 뒤져서
해당 jsp파일을 servlet로 컴파일 합니다.

- 한번 컴파일 된 jsp파일은 다시 요청이 될 때, 변경사항이 없으면
기존에 컴파일된 서블릿을 그대로 사용하고 변동사항이 있으면 다시 컴파일하게됩니다.

- 오히려 JAVA application에서 컴파일 작업을 일일이 해주는것 대신에
jsp page를 호출하면 container가 자동으로 컴파일 작업을 해주는 것입니다.