지직전기

[Linux] 10주차 교육 정리 본문

STUDY/Linux

[Linux] 10주차 교육 정리

MSH103 2024. 2. 19. 21:06

목차

  • 리눅스
    • 리눅스의 탄생
    • 커널
    • GNU프로젝트의 목표와 FSF
    • GPL
    • 데미안 리눅스
    • 우분투 리눅스
  • 리눅스 기본 명령어
    • 주요 기본명령어
    • 네트워크 명령어
  • Java와 MySQL 데이터연동(JDBC)
    • JDBC 주요클래스 및 인터페이스
    • Statement와 PrepareStatement의 차이

리눅스의 탄생

유닉스(Unix)

  • 리눅스가 탄생하기 이전 운영체제
  • 지금도 많이 사용되는 운영체제 중 하나이지만 높은 비용 지불 필요(유료)
  • IBM의 AIX, HP의 HP/UX, 오라클의 Solaris, DEC의 Digital Unix, SCO의 SCO Unix 등

 

리눅스

  • 유닉스의 무료 배포판
  • 유닉스와 거의 동일한 운영체제이면서 무료, 어떤 면에서는 유닉스보다 뛰어남

 

커널(Kernel)

  • 리누스 토발즈가 1991년 리눅스 커널 0.01 버전을 작성
  • 1992년에 0.002 버전을 내놓으면서 인터넷에 소스코드를 공개, 이것이 리눅스의 시초
  • 통상적인 리눅스는 토발즈가 만든 커널에 컴파일러, 셀, 기타 프로그램이 조합된 배포판
  • 배포판은 전세계적으로 수백 가지가 넘지만 모두 토발즈가 제작한 커널을 사용
  • 대표적인 리눅스 배포판 : 데미안, 우분투, 페도라, 아크리눅스 등등

 

GNU 프로젝트의 목표와 FSF

  • 모두가 공유할 수 있는 소프트웨어를 만드는 것이 목표
  • 1985년 스톨먼은 GNU프로젝트에서 제작한 소프트웨어를 지원하면서 누구든 소프트웨어를 자유롭게 사용할 수 있도록 자유소프트웨어제단(FSF) 설립

 

GPL

  • FSF에서 제공하는 자유 소프트웨어 대부분의 수정 및 공유를 보장하는 가이드
  • GPL은 소프트웨어 사용 / 수정/ 재배포/ 수익 창출에 대한 자유의 개념 내포
  • 단, 수정한 소프트웨어로 수익 창출 시, 소스 코드를 공개해야함 

 

데미안 리눅스

  • 유명한 리눅스 배포판 중 하나이며 1993년 이언 머독이 창시한 데비안 프로젝트에서 제작
  • 데비안 리눅스의 정식 버전은 1996년 1.1버전(코드명 Buzz)으로 시작, 2019년 10 버전 발표
  • 패키지의 서맃와 업그레이드가 상당히 단순하고 apt프로그램을 이용하여 소프트웨어 설치나 업데이트가 자동으로 진행됨

 

우분투 리눅스

  • 데비안 리눅스를 기초로 유니티(unity) 데스크톱 환경을 사용하는 리눅스 배포판
  • 첫 버전 출시한 이후 계속 업그레이드 됨.
  • 기본적으로 우분투 데스크톱과 우분투 서버를 배포
  • 쿠분투, 우분투 킬린, 루분투, 주분투 등 다양한 배포판 개발  이를 통틀어 '우분투 플레이버스'라고 부름

 

리눅스 기본 명령어

주요 기본 명령어

  • ls : List의 약자, 윈도우의 dir 명령어와 같은 기능(해당 디렉터리에 있는 파일 목록 나열)
  • cd : Change Directory의 약자, 디렉터리를 이동하는 명령어 
     1. 절대 경로
        - 리눅스의 디렉토리(파일 저장소)는 계층적 트리구조다.
        이 때 파일 시스템이 있는 최상위 디렉토리는 / 인데, 최상위 디렉토리부터
        파일명에 이르는 경로를 절대 경로라고 한다.
      2. 상대 경로
        - 현재 자신이 위치한 디렉토리를 기준으로 하는 경로를 상대경로라고 한다.
          ./는 현재 디렉토리,
          ../는 상위 디렉토리를 의미한다.
  • pwd : print Working Directory의 약자 현재 디렉터리의 전체 경로를 화면에 출력
  • touch : 크기가 0인 새 파일을 생성하거나, 이미 파일이 존재한다면 파일의 최종 수정 시간을 변경
  • mkdir : Make Directory의 약자, 새로운 디렉터리를 생성. 생성된 디렉터리는 명령을 실행한 사용자의 소유
  • rmdir : Remove Directory의 약자 디렉터리를 삭제. 해당 디렉터리가 비어 있고 디렉터리에 대한 삭제 권한이 있어야함
                파일이 들어 있는 디렉터리를 삭제하려면 'rm -r' 실행
  • cp : Copy의 약자 파일이나 디렉터리를 복사. 새로 복사된 파일은 복사한 사용자의 소유. 명령을 실행하는 사용자에게 해당파일의 읽기 권한이 있어야함
  • rm : ReMove의 약자 파일이나 디렉터리를 삭제. 사용자에게 해당 파일이나 디렉터리의 삭제 권한이 있어야함
  • mv : Move의 약자. 파일이나 디렉터리 이름을 변경하거나 다른 디렉터리로 이동할 때 사용
  • cat : Concatenate의 약자 파일의 내용을 화면에 출력. 명령어 뒤에 여러 개의 파일명을 나열하면 파일을 연결하여 내용을 화면에 출력
  • head, tail : 텍스트 형식으로 작성된 파일의 앞 또는 마지막 10행만 화면에 출력
  • more : 텍스트 형식으로 작성된 파일을 페이지 단위로 화면에 출력. 스페이스바 : 다음페이지 /  B : 앞페이지 / Q: 종료
  • less : more 명령어와 용도가 비슷하지만 더 확장된 기능의 명령어. more 사용키 추가로 방향키와 Pup, Pdn 사용 가능
  • file : 해당 파일이 어떤 종류의 파일인지 보여줌
  • clear : 현재 사용중인 터미널 화면을 깨끗이 지워줌

네트워크 명령어

  • ifconfig ens32 또는 ifconfig : 컴퓨터 Server IP 주소 및 넷마스크 확인 가능
  • ip route : 게이트웨이 정보 확인 가능
  • systemd-resolve --status ens32 : 현재 설정된 DNS 서버의 정보 확인 가능

 

  • IP주소 : 네트워크 상에 연결된 컴퓨터를 유일하게 구분하는 번호 체계
    • 000.000.000.000 형식의 4바이트로 이루어짐
    • 각 000에는 0~255까지 올 수 있음
  • 서브넷 마스크 : 서브넷 마스크는 같은 클래스끼리 공통으로 사용
    • 넷마스크로 네트워크의 규모가 결정됨
    • 실습에서는 사설 네트워크에서 C클래스를 사용하기 때문에 넷마스크가 255.255.255.0
  • 브로드캐스트 주소 : 내부 네트워크의 모든 컴퓨터가 수신하는 주소
  • 현재 주소의 끝자리의 255로 바꾼 주소(C 클래스의 주소)
    • ex) 브로드캐스트 주소는 192.168.111.255
  • 게이트웨이 : 내부 네트워크를 외부와 연결하기 위한 컴퓨터 또는 장비
    • 인터넷을 사용하기 위해 외부 네트워크에 접속하려면 게이트웨이의 IP 주소를 알아야함
    • 게이트웨이에는 내부로 향하는 문(네트워크 카드)과 외부로 향하는 문(네트워크 카드)이 있어야함(Net카드 2개)
    • 게이트웨이주소는 일반적으로 000.000.000.1로 고정함
  • DNS 서버 주소 : 인터넷을 사용할 때 URL과 같은 주소를 컴퓨터 IP주소로 변환해주는 서버 컴퓨터

 

JDBC란?

  • Java 기반 애플리케이션의 데이터를 데이터베이스에 저장 및 업데이트하거나,
    데이터베이스에 저장된 데이터를 Java에서 사용할 수 있도록 하는 자바 API
  • JDBC는 Java 애플리케이션에서 데이터베이스에 접근하기 위해 JDBC API를 사용하여
    데이터베이스에 연동할 수 있으며, 데이터베이스에서 자료를 쿼리(Query)하거나 업데이트 하는 방법을 제공한다.
  • Java 애플리케이션에서 JDBC API를 호출하면 JDBC Driver Manager가 DB 제품에 따른 드라이버를
    생성하여 JDBC API에 맞게 동작할 수 있도록 한다.
  • 따라서, 사용하는 DB가 바뀌더라도 JDBC API 변경 없이 JDBC 드라이버만 바꿔주면
    어떤 제품의 DB든 연결할 수 있다. JDBC API는 java.sql 패키지에 있다.

 

JDBC 주요 클래스 및 인터페이스

Driver 인터페이스(java.sql.Driver)

  • DB와 연결하는 DriverManager 클래스를 만들 때, 반드시 필요한 인터페이스로 각 DBMS의 벤더에서 
    해당 인터페이스를 구현한 드라이버를 제공한다.

DriverManager  클래스(java.sql.DriverManager)

  • DBMS의 벤더에서 제공하는 JDBC Driver를 이용하여 DB 연결을 도와주는 클래스이며, getConnection() 메소드를
    이용해 Connection 객체를 생성한다.

Connection 인터페이스(java.sql.Connection)

  • 특정 DB의 연결 정보를 가지는 인터페이스이다.

Statement 인터페이스(java.sql.Statement)

  • SQL문을 DB에 전송하는 방법을 정의한 인터페이스이다.

PreparedStatement 인터페이스(java.sql.PreparedStatement)

  • Statement의 하위 인터페이스로 Statement와 달리 SQL문을 미리 컴파일하여 실행 속도를 높인다.

CallableStatement 인터페이스(java.sql.CallableStatement)

  • PreparedStatement의 하위 인터페이스로 PL/SQL을 호출할 때 사용하지만 성능 상 이슈로 인해 거의 사용하지 않는다.

ResultSet 인터페이스(java.sql.ResultSet)

  • SQL문의 실행 결과를 조회할 수 있는 방법을 정의한 인터페이스로 간단히 SQL문의 결과를 저장하는 객체라고 볼 수 있다.

 

Statement와 PrepareStatement의 차이( ☞ PrepareStatement를 사용해야 하는 이유)

Statement

String sqlstr = "SELECT name, memo FROM TABLE WHERE name =" + num
Statement stmt = conn.createStatement();
ResultSet rst = stmt.executeQuery(sqlstr);
  • 쿼리문을 수행할 때마다 SQL 실행단계 1~3 단계를 거침
  • SQL 문을 수행하는 과정에서 매번 컴파일을 하기 때문에 성능상 이슈 발생
  • 실행되는 SQL문을 확인 가능

Prepared Statement

String sqlstr = "SELECT name, memo FROM TABLE WHERE num = ?"
PreparedStatement stmt = conn.preparedStatement();
stmt.setInt(1, num);
ResultSet rst = stmt.executeQuery(sqlstr);

컴파일이 미리 되어있기 때문에 Statement에 비해 좋은 성능

  • 특수문자를 자동으로 파싱해주기 때문에 SQL injection 같은 공격을 막을 수 있음
  • "?" 부분에만 변화를 주어 쿼리문을 수행하므로 실행되는 SQL문을 파악하기 어려움

Prepared Statement를 사용해야 하는 경우

1) 사용자 입력값으로 쿼리문을 실행하는 경우

  • 특수 기호가 들어오더라도 알아서 파싱해주므로 이로 인한 에러를 막을 우 있음

2) 쿼리 반복 수행 작업일 경우

Statement와 PreparedStatement의 아주 큰 차이는 바로 캐시 사용여부이다.

 

Statement를 사용하면 매번 쿼리를 수행할 때마다 계속적으로 단계를 거치면서 수행하지만 PreparedStatement는 처음 한 번만 세 단계를 거친 후 캐시에 담아 재사용을 한다. 만약 동일한 쿼리를 반복적으로 수행한다면 PrepardStatement가 DB에 훨씬 적은 부하를 주며, 성능도 좋다.

'STUDY > Linux' 카테고리의 다른 글

[Linux] 네트워크 및 파일 관리 명령어  (0) 2024.02.07
[Linux] 리눅스와 명령어  (0) 2024.02.06