반응형
리눅스의 아이노드 (i-node)


아이노드(i-node)는 리눅스 파일 시스템에서 사용되는 데이터 구조입니다.

간단히 말하면, 파일에 대한 중요한 정보를 담고 있는 "주민등록증" 같은 역할을 합니다.

이 아이노드는 파일이 실제로 어디에 저장되어 있는지, 파일의 크기, 수정 시간 등 파일에 관한 다양한 정보를 관리합니다.

아이노드는 무엇을 관리할까요?

아이노드는 파일에 대한 중요한 정보를 포함하고 있습니다.

이 정보는 다음과 같습니다:

  • 파일 소유권과 접근 권한: 이 파일을 누가 소유하고, 어떤 권한을 가지고 있는지.
  • 파일 내용이 저장된 물리적 주소: 파일의 데이터가 실제로 어디에 위치하는지.
  • 파일의 링크 수: 파일을 참조하는 링크가 몇 개 있는지.
  • 파일의 크기: 파일이 차지하는 크기.
  • 파일 생성 시간, 최근 사용 시간, 최근 수정 시간: 파일이 언제 만들어졌고, 언제 마지막으로 사용되었는지, 수정되었는지에 대한 정보.
  • 아이노드의 최근 수정 시간: 아이노드 자체가 수정된 시간.

이 정보들은 파일 시스템에서 파일이 어떻게 저장되고 관리되는지에 대한 중요한 정보를 제공합니다.

아이노드는 어떻게 구성될까요?

아이노드는 64바이트 크기의 표로, 파일에 대한 모든 정보를 담고 있습니다.

그리고 이 아이노드들은 아이노드 블록에 저장되며, 전체 디스크의 약 1% 정도를 차지합니다.

파일이나 디렉토리가 생성되면, 해당 파일을 관리할 아이노드가 만들어지고, 이 아이노드는 아이노드 테이블에 등록되어 관리됩니다.

- 아이노드(inode): 파일이나 디렉토리의 중요한 정보를 담고 있는 64바이트 크기의 데이터 구조입니다.
- 아이노드 테이블(inode table): 시스템 내의 모든 파일과 디렉토리의 아이노드를 관리하는 표입니다.
- 아이노드 번호(inumber): 아이노드가 아이노드 테이블에서 고유하게 등록된 번호입니다.

아이노드 테이블의 역할

아이노드 테이블은 파일 시스템에서 파일이나 디렉토리들이 어디에 저장되고 있는지 추적하는 역할을 합니다. 파일이나 디렉토리가 생성되면, 아이노드 번호는 i-list라는 표에 등록되고, 이 번호를 통해 해당 파일에 대한 정보를 빠르게 찾을 수 있습니다.


이번 시간에는 아이노드에 대해 살펴보았습니다.

다음 시간에는 아이노드와 관련된 심볼릭 링크(소프트링크)와 하드링크에 대해 알아보겠습니다.

이를 통해 파일의 다양한 참조 방식에 대해서도 더 깊이 이해할 수 있을 것입니다.

https://jdcyber.tistory.com/86

 

리눅스 파일 링크 완벽 가이드: 하드링크와 소프트링크의 차이점

하드링크 (Hard Link) 하드링크는 원본 파일과 동일한 데이터를 가리키는 또 다른 이름입니다.원본 파일과 하드링크가 같은 아이노드 번호를 가집니다. 즉, 이 두 파일은 사실상 같은 파일입니다.

jdcyber.tistory.com


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

하드링크 (Hard Link)

 

하드링크는 원본 파일과 동일한 데이터를 가리키는 또 다른 이름입니다.

원본 파일과 하드링크가 같은 아이노드 번호를 가집니다. 즉, 이 두 파일은 사실상 같은 파일입니다.

왜 하드링크를 배워야 할까요?

여러분은 파일을 여러 곳에서 사용해야할때 어떻게 합니까? 같은 파일을 여러 이름으로 저장하거나, 다른 위치에서 바로 접근할 수 있다면 더 효율적으로 관리할 수 있겠죠? 하드링크는 이런 문제를 해결해 줍니다.

시스템에서 파일 중복을 줄이고 디스크 공간을 절약할 수 있기 때문입니다.

예를 들어, 백업 시스템에서 동일한 파일을 여러 장소에 두고 관리해야 할 때, 하드링크를 사용하면 실제 파일을 복사하지 않고도 여러 위치에서 동일한 파일을 참조할 수 있습니다.

비유 법으로 배워봅시다
"이름 바꾸기"

하드링크는 마치 "이름을 바꾼 파일"과 같습니다.

예를 들어, 당신이 친구에게 '홍길동'이라는 이름을 줬다면, '홍길동'이라는 이름으로 불리는 사람이 바로 그 친구입니다.

이제 '길동이'라는 이름을 다시 붙였다고 생각해 보세요.

그 친구는 여전히 같은 사람이지만, 두 이름을 다 사용할 수 있게 된 것입니다. 이 경우 '홍길동'과 '길동이'는 사실 같은 사람(파일)입니다.

  • 같은 아이노드 번호: 하드링크 파일은 원본 파일과 정확히 동일한 데이터 블록을 가리킵니다. 즉, 파일의 실제 내용은 동일합니다.
  • 변경사항 동기화: 만약 '홍길동' 이름으로 파일을 수정하고, '길동이' 이름으로도 파일을 수정하면, 두 이름 모두 동일한 내용을 가리키고 있기 때문에 수정 사항이 동기화됩니다.
  • 파일 삭제: 원본 파일(홍길동)을 삭제해도, '길동이'는 여전히 존재하고, 그 파일의 내용은 변하지 않습니다. 사실 원본 파일이 삭제되었을 때는, 그 파일을 참조하는 다른 링크가 남아있기 때문에 파일이 삭제되지 않은 것처럼 보입니다.

파일 시스템에서 중요한 데이터 파일을 여러 곳에서 참조해야 할 때, 하드링크를 사용하면 데이터 중복을 줄이고 디스크 공간을 절약할 수 있습니다.

예를 들어, 서버의 데이터베이스 파일이 여러 디렉토리에서 필요할 때, 하드링크를 사용하여 하나의 원본 파일을 여러 이름으로 참조할 수 있습니다.

하드링크는 복사본을 만들지 않고도 파일을 여러 곳에서 사용할 수 있게 해 줍니다.

  1. 원본 파일 test.txt가 있다고 가정해 보겠습니다.
  2. 하드링크 test_link.txt를 만들면, 두 파일은 같은 아이노드를 가리킵니다.
  3. 두 파일 중 하나를 수정하면 다른 파일에도 수정 사항이 반영됩니다. 원본 파일을 삭제해도, 하드링크가 여전히 동일한 파일을 가리키고 있으므로 파일이 그대로 남아 있습니다.

소프트링크 (Soft Link, Symbolic Link)

소프트링크(심볼릭 링크)는 원본 파일을 가리키는 "통로" 역할을 합니다.

소프트링크는 원본 파일의 경로를 저장하는 별도의 파일로, 실제 데이터는 저장하지 않습니다.

이 링크는 원본 파일의 위치를 알려주는 주소와 같은 역할을 합니다.

왜 소프트링크를 배워야 할까요?

소프트링크는 시스템 관리에서 파일 경로를 효율적으로 관리하는 데 매우 유용합니다.

예를 들어, 자주 변경되는 설정 파일이나 라이브러리 파일에 대한 경로를 소프트링크로 관리하면, 시스템 업데이트나 변경이 있을 때 소프트링크만 수정하면 되기 때문에 관리가 용이해집니다.

또한, 시스템 설정이나 프로그램 파일들을 여러 곳에서 사용할 때, 소프트링크를 사용하여 경로를 간편하게 지정할 수 있습니다.

비유 법으로 배워봅시다
"주소를 적어 놓은 종이"

소프트링크는 마치 원본 집의 주소를 적어 놓은 종이와 같습니다.

예를 들어, 당신이 친구 집에 가고 싶을 때, 친구의 집 주소를 적어놓은 종이를 받고, 그 주소로 가면 친구를 만날 수 있죠.

이 주소 종이(소프트링크)는 원본 집(파일)의 위치를 가리키고 있습니다.

그러나 이 종이 자체는 집이 아니고, 그저 집의 위치를 알려주는 역할만 합니다.

만약 친구 집이 이사를 가면, 그 주소 종이는 더 이상 유효하지 않게 됩니다.

  • 다른 아이노드 번호: 소프트링크는 원본 파일과 다른 아이노드 번호를 가집니다. 소프트링크 파일은 원본 파일의 경로를 가리키는 문자열로 존재합니다.
  • 동기화 없음: 소프트링크에서 수정한 내용은 원본 파일에 영향을 주지 않습니다. 소프트링크 파일을 수정한다고 해서 원본 파일의 내용은 바뀌지 않습니다.
  • 원본 삭제 시 깨짐: 원본 파일이 삭제되면, 소프트링크는 더 이상 유효하지 않게 됩니다. 즉, 원본 파일이 사라지면, 소프트링크는 '깨진 링크'가 되어 더 이상 작동하지 않습니다.

소프트링크는 파일 경로를 효율적으로 관리하고, 시스템 환경에서 파일을 쉽게 참조할 수 있게 해줍니다. 예를 들어, 여러 버전의 소프트웨어가 설치되어 있을 때, 최신 버전의 소프트웨어를 소프트링크로 가리키면, 소프트웨어 경로를 쉽게 변경할 수 있습니다. 또한, 프로그램의 설정 파일이 여러 디렉토리에서 필요할 때, 소프트링크를 사용하여 중앙 집중식으로 관리할 수 있습니다.

  1. 원본 파일 test.txt가 있고, 소프트링크 test_link.txt를 만들었다고 합시다.
  2. 소프트링크 파일은 test.txt라는 파일의 위치만 알고 있을 뿐, 파일 자체를 가지고 있지 않습니다.
  3. test_link.txt를 열면, 자동으로 test.txt로 이동하여 내용을 볼 수 있습니다. 하지만 원본 파일을 삭제하면, test_link.txt를 열려고 할 때 오류가 발생할 것입니다. (깨진 링크)

핵심 차이점

구분 하드링크 소프트링크
아이노드 번호 원본 파일과 동일한 아이노드 번호를 가짐 원본 파일과 다른 아이노드 번호를 가짐
동기화 수정 사항이 원본 파일과 하드링크 파일에 동기화됨 수정 사항이 동기화되지 않음
파일 삭제 시 원본 파일 삭제 후에도 하드링크는 삭제되지 않음 원본 파일 삭제 시 소프트링크는 깨짐
파일 내용 원본 파일과 내용이 동일 원본 파일의 경로를 가리키는 통로(주소) 역할

 


혹시 아이노드에 대해 아직 모르신다면 아래 링크에서 확인해주세요!

https://jdcyber.tistory.com/87

 

리눅스 파일 시스템의 핵심, 아이노드(i-node)란 무엇인가?

리눅스의 아이노드 (i-node)아이노드(i-node)는 리눅스 파일 시스템에서 사용되는 데이터 구조입니다.간단히 말하면, 파일에 대한 중요한 정보를 담고 있는 "주민등록증" 같은 역할을 합니다.이 아

jdcyber.tistory.com


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

쿠버네티스 (Kubernetes)란?

컨테이너화된 애플리케이션의 대규모 배포,

스케일링 및 관리를 간편하게 만들어주는 오픈 소스 기반

컨테이너 오케스트레이션(Container Orchestration) 도구입니다.

뭐라고요??

다들 정말 어렵게 설명하죠

제가 최대한 풀어서 써보도록 하겠습니다.

쿠버네티스(K8s, Kubernets)는 컨테이너화된

애플리케이션들을 자동화, 자동 스케일링 등의 관리를 위한 솔루션입니다.

쉽게 말해본다면 여러 도커엔진의 컨테이너들을 효율적으로 관리해 주는 것이죠.

 

여기서 도커란 무엇일까요?

아래 글을 읽고와주세요

https://jdcyber.tistory.com/68

 

도커(Docker)란 무엇인가?

도커(Docker)란 무엇인가? 도커는 컨테이너 가상화 기술을 이용해 개발자들이 프로그램을 효과적으로 배포하고관리할 수 있도록 해주는 오픈 소스 프로젝트입니다.이 기술은 각각의 애플리케이

jdcyber.tistory.com

 

마치 컴퓨터 게임에서 여러 캐릭터를 동시에 관리하고,

그들이 잘 협력하며 미션을 수행할 수 있도록 지휘하는 것처럼,

컴퓨터 프로그램(애플리케이션)들을 효율적으로 관리해 주는 도구입니다.

특히 이 프로그램들은 '컨테이너'라고 불리는 특별한 상자 안에 담겨 있으며,

쿠버네티스는 이들 상자를 필요한 곳에 옮기고, 상자 안의 프로그램이 잘 돌아가도록 돕습니다.

아 ~ 점점 많아지는 컨테이너들을 통합적으로

문제없이 돌아갈 수 있도록 해주는

자동 컨테이너 관리 솔루션이구나!

조금만 더 들어가 보도록 하죠.

(이해가 안 가는 건 대충 후루룩 읽으며 내려가셔도 됩니다!)

인프라 발전 히스토리

쿠버네티스가 필요하게 된 이유

먼저 쿠버네티스를 인터넷에 검색했을 때 가장 많이 나오는 이미지를 한번 보시죠

이걸 보고 어떻게 이해하라는 건지..

자 제가 쉽게 설명해 보겠습니다.

맨 왼쪽부터 살펴볼까요?


 

Traditional Deployment(전통적 배포)오래전부터 우리가 써오던 방식입니다.

컴퓨터 한 대에 하나의 운영체제(OS)를 깔고 그곳에 여러 가지 프로그램을 설치하는 방식이죠.

PC 한 대에 윈도우를 설치하고,

게임이나 워드프로세서 등을 깔아서 사용하게되는데 이와 비슷한 방식이라고 생각하면 됩니다.

하지만 우리가 인터넷 뱅킹을 하거나 게임을 할 때 깔아야 하는 필수 프로그램들이 있잖아요?

프로텍터라든지 인증 프로그램이라든지..

이런 보안 프로그램들 때문에 우리의 컴퓨터가 느려지고 용량이 부족하게 됩니다.

그렇다고 우리가 컴퓨터를 인터넷 뱅킹용과 게임용으로 3대를 살 수는 없습니다.

이때 기존 PC 안에 가상으로 인터넷 뱅킹용 컴퓨터를 하나 만들고 게임용 컴퓨터를 하나 만드는 것이죠

조금 비약적으로 설명했으니 이해 부탁드립니다.


위 문제를 해결하기 위해 등장한 방법이 가운데 그림의 Virtualized Deployment (가상화 배포)입니다.

가상머신(Virtual Machine)을 기반으로 전용 컴퓨터를 만들어 주는 것이죠.

중간에 위치한 하이퍼 바이저는 하나의 시스템에 가상 컴퓨터를 구동할 수 있도록 해주는 중간계층인데

설명이 필요하신 분들은 아래 자세하고 쉽게 설명해 놨으니 참고해 주세요!

하이퍼바이저 (Hypervisor)은 무엇일까요?

https://jdcyber.tistory.com/66

 

하이퍼바이저란 무엇일까? Hypervisor 개념 알아보기

하이퍼바이저(Hypervisor)란? 하이퍼바이저, 또는 가상 머신 모니터(VMM)라고도 불리는 이 소프트웨어 플랫폼은 단일 호스트 컴퓨터에서 여러 개의 게스트 운영체제(OS)를 동시에 실행할 수 있게 해

jdcyber.tistory.com

 


마지막으로 Container Deployment (컨테이너 중심의 배포)입니다.

하이퍼바이저라는 부분이 Container Runtime으로 대체되었고,

Virtual Machine이라고 된 부분은 Container로 대체가 되었죠?

컨테이너는 가상머신과 달리 프로그램 구동을 위해서 OS를 매번 설치할 필요가 없어요.

아래 그림에서 보는 것과 같이 OS는 하나만 사용합니다.

컨테이너와 가상머신(VM)은 모두 애플리케이션을 격리된 환경에서 실행하는 기술입니다.

가상머신은 각각의 VM이 전체 운영체제를 포함하므로 리소스 사용량이 많고 시작 시간이 길다는 단점이 있습니다.

반면, 컨테이너는 운영체제의 커널을 여러 컨테이너와 공유하여,

각 컨테이너가 운영체제 수준의 가상화보다 가볍고 빠르게 실행될 수 있도록 합니다.

이로 인해 컨테이너는 더 적은 리소스로 더 많은 애플리케이션을 실행할 수 있으며,

배포와 확장이 용이하다는 장점이 있습니다.

 

커널이란 무엇일까요?

https://jdcyber.tistory.com/67

 

커널(Kernel)이란 무엇일까? (개념, 이중 모드, 쉘의 역할)

커널(Kernel)은 컴퓨터 운영체제의 핵심 부분으로, 하드웨어 자원을 관리하고 응용 프로그램과 하드웨어 사이의 인터페이스 역할을 수행합니다. 이는 응용 프로그램이 시스템 호출을 통해 하드웨

jdcyber.tistory.com

 

컨테이너는 마치 배낭에 여러 개의 도구를 담아 어디든지 편리하게 가져갈 수 있게 해주는 것과 같습니다.

이 배낭들은 필요할 때마다 쉽게 열어서 도구를 사용할 수 있고,

배낭 자체가 가볍기 때문에 많은 것들을 효율적으로 운반할 수 있습니다.

반면, 가상머신은 마치 각각의 도구를 큰 상자에 넣어두고, 각 상자마다 필요한 도구를 사용하는 것과 비슷합니다.

이 때문에 컨테이너는 가상머신보다 훨씬 가볍고 빠르게 작동합니다.


쿠버네티스의 주요 기능과 구성요소

 

쿠버네티스는 다음과 같은 주요 기능을 제공합니다:

  • 자동 복구: 실패한 컨테이너를 자동으로 재시작하고, 정의된 상태와 다를 경우 자동으로 교체합니다.
  • 로드 밸런싱: 애플리케이션 트래픽을 자동으로 분산시키고, 외부 트래픽을 처리하기 위한 고유한 IP 주소를 제공합니다.
  • 서비스 발견: 컨테이너가 서로를 찾고, 소통할 수 있는 환경을 자동으로 설정합니다.
  • 확장성: 명령어 하나로 컨테이너의 수를 쉽게 늘리거나 줄일 수 있습니다.

쿠버네티스핵심 구성 요소는 다음과 같습니다:

  • 파드(Pod): 가장 작은 배포 단위로, 하나 이상의 컨테이너를 포함할 수 있습니다.
  • 서비스(Service): 파드 집합에 대한 지속적인 접근 방법을 제공합니다.
  • 볼륨(Volume): 데이터를 저장하고 파드 간에 공유할 수 있는 방법을 제공합니다.
  • 네임스페이스(Namespace): 클러스터 리소스를 분할하여 사용하는 방법을 제공합니다.

개념 이해

 

컨테이너 런타임, 오케스트레이션

컨테이너 오케스트레이션이란 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해 주는 도구입니다.

도커 컨테이너 개수가 늘어나면 필요한 자원도 지속적으로 늘어나게 됩니다.

서버 또한 여러 대로 늘어날 수 있는데, 이러한 많은 서버들과 컨테이너를

소수의 인원으로 관리하기에는 상당히 어렵습니다.

이 문제를 효율적으로 관리하기 위해 등장한 것이 바로 컨테이너 오케스트레이션 툴입니다!

오늘은 쿠버네티스가 무엇인지 알아보는 글이기 때문에

위의 개념들은 추후 자세하고 쉽게 설명해 보도록 하겠습니다.

쿠버네티스 사용 사례

 

쿠버네티스는 다음과 같은 사용 사례에서 강력한 효율성과 유연성을 제공합니다:

  • 마이크로서비스 아키텍처: 서비스의 독립적 배포 및 확장을 용이하게 합니다.
  • 지속적인 통합 및 배포(CI/CD): 애플리케이션의 빠른 업데이트와 안정적인 배포를 지원합니다.
  • 멀티 클라우드 환경: 다양한 클라우드 제공 업체에 걸쳐 애플리케이션을 운영할 수 있게 합니다.

총정리

컴퓨터와 서버에서 여러 가지 환경을 구성하고 개발하며 발전하는 와중에

도커의 출현으로 많은 정보들을 컨테이너화하고 관리하고 있었는데

이제는 컨테이너 수가 너무 많아지자 이를 작업하고 구성하고

이를 통합 관리하는데 조금 더 편리하고 빠르게 작업하기 위하여

쿠버네티스에서 이들의 상태를 정의함으로써

자동으로 작업이 돌아갈 수 있도록 설계된 것이 바로 오늘 알아본 쿠버네티스구나!


PS. 쿠버네티스를 시작하기 전에, 다음과 같은 사전 지식이 있으면 좋습니다

  • 컨테이너 기술에 대한 기본적인 이해: 특히 Docker에 대한 사용 경험이 중요합니다.
  • YAML 파일 포맷에 대한 이해: 쿠버네티스의 구성 파일은 대부분 YAML 형식으로 작성됩니다.
  • 기본적인 명령줄 인터페이스(CLI) 스킬: 쿠버네티스 CLI인 kubectl을 사용하여 클러스터와 상호 작용합니다.

궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

오늘은 MySQL에 대한 개념 글에 이어서

아직 mysql에 대해 모르시거나

이 글 전에 읽어보시지 못하셨다면

아래 링크를 한번 보고 오시길 추천드립니다.

(작성 중)

Mysql을 배우고 나서 아래 실습을 통해

간단한 명령어를 직접 연습해 보고

sql이 어떤 식으로 운용될 수 있는지

직접 알아보도록 하겠습니다.

주의

Sql 구문은 하나의 명령이 종료가 되면 

세미콜론(;)을 붙여주어야 합니다.

만약 세미콜론이 생략되면

2차 프롬프트(->)가 시작됩니다.

무조건 끝에 세미콜론을 붙이신다고 

생각해 주세요

MySQL 접속
bee@bee-box:~$ 
bee@bee-box:~$cd /var/www/bWAPP
bee@bee-box:/var/www/bWAPP$

root@bee-box:/var/www/bWAPP# mysql -u root -p

Enter password: bug
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.0.96-0ubuntu3 (Ubuntu)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| bWAPP              | 
| drupageddon        | 
| mysql              | 
+--------------------+
4 rows in set (0.00 sec)

cd /var/www/bWAPP를 이용하여

bWAPP 디렉터리로 이동합니다.

mysql -u root -p 명령어와 패스워드 

bug를 이용하여 Mysql 로컬 접속을 실시합니다.

show databases를 이용하여 

데이터베이스를 확인합니다.

가장 위에 있는 Information_schema 

Mysql에서 운영되는 데이터베이스, 

테이블, 칼럼의 모든 정보를 관리하는 DB입니다.

아래 보이는 bWAPP과 drupageddon 

bWAPP 시나리오에 사용하는 DB이며

맨 아래 mysql은 Mysql 운영과 관련된 

정보가 저장된 DB입니다.

 

DataBase 생성 및 삭제
mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> show databases; 
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| bWAPP              | 
| drupageddon        | 
| test               | 
| mysql              | 
+--------------------+
5 rows in set (0.00 sec)

mysql> drop database test;
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| bWAPP              | 
| drupageddon        | 
| mysql              | 
+--------------------+
4 rows in set (0.00 sec)

create database ; 명령어를 이용하여 

데이트베이스를 생성하고

drop database ; 명령어 

데이터베이스를 삭제할 수 있습니다

(test 데이터베이스 생성)

테이블 생성 및 삭제
mysql> use test;
Database changed

mysql> show tables;
Empty set (0.00 sec)

mysql> create table linux (id int, login varchar(10), password varchar(10), username varchar(20), age int);
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+------------------+
| Tables_in_test   |
+------------------+
| linux            | 
+------------------+
1 row in set (0.00 sec)

mysql> create table cisco (id int, login varchar(10), password varchar(10), username varchar(20), age int);
Query OK, 0 rows affected (0.00 sec)

mysql> create table security (id int, login varchar(10), password varchar(10), username varchar(20), age int);
Query OK, 0 rows affected (0.00 sec)

mysql> create table java (id int, login varchar(10), password varchar(10), username varchar(20), age int);
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_test   |
+------------------+
| cisco            | 
| java             | 
| linux            | 
| security         | 
+------------------+
4 rows in set (0.00 sec)

mysql> drop table java;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables; 
+------------------+
| Tables_in_test   |
+------------------+
| cisco            | 
| linux            | 
| security         | 
+------------------+
3 rows in set (0.00 sec)

use ; 명령어를 이용하여 test 데이터베이스를 사용하고

show tables ; 명령어 테이블을 확인합니다.

create table ; 명령어 리눅스 테이블을 생성하고 

cisco, security, java 테이블을 리눅스와 

동일하게 추가로 생성합니다.

(java 테이블은 삭제)

칼럼 속성 확인 & 데이터 값 입력
mysql> desc cisco;
+----------+-------------+------+-----+---------+-------+
| Field    |     Type    | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
|    id    |   int(11)   |  YES |     |   NULL  |       |
|   login  | varchar(10) |  YES |     |   NULL  |       |
| password | varchar(10) |  YES |     |   NULL  |       |
| username | varchar(20) |  YES |     |   NULL  |       |
|   age    |   int(11)   |  YES |     |   NULL  |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.021 sec)

mysql> desc linux;
+----------+-------------+------+-----+---------+-------+
|   Fiel d |     Type    | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
|    id    |   int(11)   |  YES |     |   NULL  |       |
|   login  | varchar(10) |  YES |     |   NULL  |       |
| password | varchar(10) |  YES |     |   NULL  |       |
| username | varchar(20) |  YES |     |   NULL  |       |
|    age   |   int(11)   |  YES |     |   NULL  |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.001 sec)

mysql> desc security;
+----------+-------------+------+-----+---------+-------+
|  Field   |     Type    | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
|    id    |   int(11)   |  YES |     |   NULL  |       |
|   login  | varchar(10) |  YES |     |   NULL  |       |
| password | varchar(10) |  YES |     |   NULL  |       |
| username | varchar(20) |  YES |     |   NULL  |       |
|    age   |   int(11)   |  YES |     |   NULL  |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.001 sec)

desc; 명령어를 이용하여 속성을 확인해 보고,

mysql> select * from cisco;
Empty set (0.000 sec)

mysql> insert into cisco values(1, 'cisco1', 'cisco1111', 'test', 23);
Query OK, 1 row affected (0.001 sec)

mysql> insert into cisco values(2, 'cisco2', 'cisco2222', 'test', 26);
Query OK, 1 row affected (0.001 sec)

mysql> insert into cisco (login, id, password, age, username) values('cisco3', 3, 'cisco3333', 29, 'test'); 
Query OK, 1 row affected (0.001 sec)

mysql> select * from cisco;
+------+--------+-----------+----------+------+
| id   | login  | password  | username |  age |
+------+--------+-----------+----------+------+
| 1    | cisco1 | cisco1111 |   test   |  23  |
| 2    | cisco2 | cisco2222 |   test   |  26  |
| 3    | cisco3 | cisco3333 |   test   |  29  |
+------+--------+-----------+----------+------+
3 rows in set (0.000 sec)

mysql> \! clear

mysql> insert into linux values(1, 'linux1', 'linux1111', 'test', 33); Query OK, 1 row affected (0.001 sec)

mysql> insert into linux values(2, 'linux2', 'linux2222', 'test1', 36);
Query OK, 1 row affected (0.001 sec)

mysql> insert into linux values(3, 'linux3', 'linux3333', 'test2', 39);
Query OK, 1 row affected (0.001 sec)

mysql> select * from linux;
+------+--------+-----------+--------------+------+
|  id  |  login |  password |   username   |  age |
+------+--------+-----------+--------------+------+
|   1  | linux1 | linux1111 |     test     |  33  |
|   2  | linux2 | linux2222 |     test1    |  36  |
|   3  | linux3 | linux3333 |     test2    |  39  |
+------+--------+-----------+--------------+------+
3 rows in set (0.000 sec)

mysql> insert into security values(1, 'security1', 'security11', 'test', 43); Query OK, 1 row affected (0.001 sec)

mysql> insert into security values(2, 'security2', 'security22', 'test1', 46);
Query OK, 1 row affected (0.001 sec)

mysql> insert into security values(3, 'security3', 'security33', 'test2', 49);
Query OK, 1 row affected (0.001 sec)

mysql> select * from security;
+------+-----------+------------+---------------+------+
|  id  |   login   |  password  |    username   |  age |
+------+-----------+------------+---------------+------+
|   1  | security1 | security11 |      test     |  43  |
|   2  | security2 | security22 |      test1    |  46  |
|   3  | security3 | security33 |      test2    |  49  | 
+------+-----------+------------+---------------+------+
3 rows in set (0.000 sec)

각 칼럼에 데이터 값을 입력해 봅니다.

select * from ; 명령어로 칼럼을 선택하고

insert into ~ values ; 명령어 

원하는 정보를 입력하여 넣어줍니다.

데이터 값 수정 및 삭제
mysql> select * from cisco;
+------+--------+-----------+--------------+------+
|  id  |  login |  password |   username   |  age |
+------+--------+-----------+--------------+------+
|   1  | cisco1 | cisco1111 |     test     |  23  |
|   2  | cisco2 | cisco2222 |     test     |  26  |
|   3  | cisco3 | cisco3333 |     test     |  29  |
+------+--------+-----------+--------------+------+
3 rows in set (0.000 sec)

mysql> update cisco set username='test1' where login='cisco2';
Query OK, 1 row affected (0.022 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update cisco set username='test2' where id=3; 
Query OK, 1 row affected (0.003 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from cisco;
+------+--------+-----------+--------------+------+
|  id  |  login |  password |   username   |  age |
+------+--------+-----------+--------------+------+
|   1  | cisco1 | cisco1111 |     NULL     |  23  |
|   2  | cisco2 | cisco2222 |     test1    |  26  |
|   3  | cisco3 | cisco3333 |     test2    |  29  |
+------+--------+-----------+--------------+------+
3 rows in set (0.000 sec)

mysql> update cisco set username=default where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from cisco; 
+------+--------+-----------+--------------+------+
|  id  |  login |  password |   username   |  age |
+------+--------+-----------+--------------+------+
|   1  | cisco1 | cisco1111 |     test     |  23  | 
|   2  | cisco2 | cisco2222 |     test1    |  26  | 
|   3  | cisco3 | cisco3333 |     test2    |  29  | 
+------+--------+-----------+--------------+------+
3 rows in set (0.00 sec)

mysql> update cisco set username=default;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 3 Changed: 2 Warnings: 0

mysql> select * from cisco;
+------+--------+-----------+----------+------+
|  id  |  login |  password | username |  age |
+------+--------+-----------+----------+------+
|   1  | cisco1 | cisco1111 |   NULL   |  23  | 
|   2  | cisco2 | cisco2222 |   NULL   |  26  | 
|   3  | cisco3 | cisco3333 |   NULL   |  29  | 
+------+--------+-----------+----------+------+
3 rows in set (0.00 sec)

mysql> delete from cisco where id=3;
Query OK, 1 row affected (0.00 sec)

mysql> select * from cisco;
+------+--------+-----------+----------+------+
|  id  |  login |  password | username |  age |
+------+--------+-----------+----------+------+
|   1  | cisco1 | cisco1111 |   NULL   |  23  | 
|   2  | cisco2 | cisco2222 |   NULL   |  26  | 
+------+--------+-----------+----------+------+
2 rows in set (0.00 sec)

mysql> delete from cisco;
Query OK, 2 rows affected (0.00 sec)

mysql> select * from cisco;
Empty set (0.00 sec)

mysql> desc cisco;
+----------+-------------+------+-----+---------+-------+
|   Field  |     Type    | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
|    id    |   int(11)   |  YES |     |   NULL  |       | 
|   login  | varchar(10) |  YES |     |   NULL  |       | 
| password | varchar(10) |  YES |     |   NULL  |       | 
| username | varchar(20) |  YES |     |   NULL  |       | 
|    age   |   int(11)   |  YES |     |   NULL  |       | 
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

select * from ; 명령어로 컬럼을 선택하고

update ~ set username= ~ where login='~';

으로 username 값을 변경해 본다

update ~ set username=default where id=~; 과 update ~ set username=default 명령어로

username을 NULL로 변경해 본다

delete from ~ where id=~ 명령어

삭제를 시도해 본다

desc ~; 명령어 지금까지 작업한 내용을 확인해 본다.


다음 실습을 위해 Cisco 테이블에 데이터 값 재 입력
mysql> insert into cisco values(1, 'cisco1', 'cisco1111', 'test', 23);
Query OK, 1 row affected (0.001 sec)

mysql> insert into cisco values(2, 'cisco2', 'cisco2222', 'test1', 26);
Query OK, 1 row affected (0.001 sec)

mysql> insert into cisco values(3, 'cisco3', 'cisco3333', 'test2', 29); 
Query OK, 1 row affected (0.001 sec)

mysql> select * from cisco;
+------+--------+-----------+----------+------+
| id   | login  | password  | username |  age |
+------+--------+-----------+----------+------+
| 1    | cisco1 | cisco1111 |   test   |  23  |
| 2    | cisco2 | cisco2222 |   test1  |  26  |
| 3    | cisco3 | cisco3333 |   test2  |  29  |
+------+--------+-----------+----------+------+
3 rows in set (0.000 sec)

칼럼 속성 정보 변경
mysql> desc linux;
+----------+-------------+------+-----+---------+-------+
|   Field  |     Type    | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
|    id    |   int(11)   |  YES |     |   NULL  |       | 
|   login  | varchar(10) |  YES |     |   NULL  |       | 
| password | varchar(10) |  YES |     |   NULL  |       | 
| username | varchar(20) |  YES |     |   NULL  |       | 
|    age   |   int(11)   |  YES |     |   NULL  |       | 
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> alter table linux modify login varchar(20);
Query OK, 0 rows affected (0.002 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table linux modify password varchar(40);
Query OK, 0 rows affected (0.001 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> desc linux;
+----------+-------------+------+-----+---------+-------+
|   Field  |     Type    | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
|    id    |   int(11)   |  YES |     |   NULL  |       |
|   login  | varchar(20) |  YES |     |   NULL  |       |
| password | varchar(40) |  YES |     |   NULL  |       |
| username | varchar(20) |  YES |     |   NULL  |       |
|    age   |   int(11)   |  YES |     |   NULL  |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

alter table ~ modify login ~; 명령어를 이용하여

로그인 속성을 변경해 봅니다.

alter table ~ modify password ~ 명령어

이용하여 패스워드 속성을 변경해 봅니다.

칼럼 추가 & 수정 & 삭제
mysql> alter table linux add email varchar(20) first;
Query OK, 0 rows affected (0.006 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> desc linux;
+----------+-------------+------+-----+---------+-------+
|   Field  |     Type    | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
|   email  | varchar(20) |  YES |     |   NULL  |       |
|    id    |   int(11)   |  YES |     |   NULL  |       |
|   login  | varchar(20) |  YES |     |   NULL  |       |
| password | varchar(40) |  YES |     |   NULL  |       |
| username | varchar(20) |  YES |     |   NULL  |       |
|    age   |   int(11)   |  YES |     |   NULL  |       |
+----------+-------------+------+-----+---------+-------+
6 rows in set (0.001 sec)

mysql> select * from linux;
+-------+------+--------+-----------+--------------+------+
| email |  id  |  login |  password |   username   |  age |
+-------+------+--------+-----------+--------------+------+
|  NULL |   1  | linux1 | linux1111 |     test     |  33  |
|  NULL |   2  | linux2 | linux2222 |     test1    |  36  |
|  NULL |   3  | linux3 | linux3333 |     test2    |  39  |
+-------+------+--------+-----------+--------------+------+
3 rows in set (0.000 sec)

mysql> alter table linux modify email varchar(20) after username; Query OK, 0 rows affected (0.009 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> desc linux; 
+----------+-------------+------+-----+---------+-------+
|   Field  |     Type    | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
|    id    |   int(11)   |  YES |     |   NULL  |       |
|   login  | varchar(20) |  YES |     |   NULL  |       |
| password | varchar(40) |  YES |     |   NULL  |       |
| username | varchar(20) |  YES |     |   NULL  |       |
|   email  | varchar(20) |  YES |     |   NULL  |       |
|    age   |   int(11)   |  YES |     |   NULL  |       |
+----------+-------------+------+-----+---------+-------+
6 rows in set (0.001 sec)

mysql> select * from linux; 
+------+--------+-----------+--------------+-------+------+
|  id  |  login |  password |   username   | email |  age |
+------+--------+-----------+--------------+-------+------+
|   1  | linux1 | linux1111 |     test     |  NULL |  33  |
|   2  | linux2 | linux2222 |     test1    |  NULL |  36  |
|   3  | linux3 | linux3333 |     test2    |  NULL |  39  |
+------+--------+-----------+--------------+-------+------+
3 rows in set (0.000 sec)

mysql> update linux set email='linux1@test.com' where login='linux1';
Query OK, 1 row affected (0.001 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update linux set email='linux2@test.com' where login='linux2';
Query OK, 1 row affected (0.001 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update linux set email='linux3@test.com' where login='linux3';
Query OK, 1 row affected (0.001 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from linux;
+------+--------+-----------+--------------+-------------------+------+
|  id  |  login |  password |   username   |       email       |  age |
+------+--------+-----------+--------------+-------------------+------+
|   1  | linux1 | linux1111 |     test     |  linux1@test.com  |  33  |
|   2  | linux2 | linux2222 |     test1    |  linux2@test.com  |  36  |
|   3  | linux3 | linux3333 |     test2    |  linux3@test.com  |  39  |
+------+--------+-----------+--------------+-------------------+------+
3 rows in set (0.000 sec)

mysql> alter table linux drop email;
Query OK, 0 rows affected (0.009 sec)
Records: 0 Duplicates: 0 Warnings: 0

alter table ~ add ~ varchar(20) first; 명령어

테이블 맨 앞부분에 칼럼 추가

잘 추가됐는지 desc ; 로 확인한 후

alter table ~ modify ~ after ~; 명령어로

리눅스 테이블에 이메일 칼럼 위치 수정

update ~ set ~='~' where login='~'; 명령어

이용하여 상세 데이터 수정


각 명령어 사용 직후

  • 데이터베이스 생성 및 삭제: CREATE DATABASE test;와 DROP DATABASE test; 명령어 직후에 각 명령어가 데이터베이스를 생성하고 삭제하는 기능을 수행한다는 설명을 추가합니다.
    • 예: "CREATE DATABASE test; 명령어는 'test'라는 이름의 새로운 데이터베이스를 생성합니다. 이때, 데이터베이스 이름은 고유해야 합니다. DROP DATABASE test; 명령어는 'test' 데이터베이스를 시스템에서 완전히 제거합니다."
  • 테이블 생성, 데이터 입력, 수정 및 삭제: 각 CREATE TABLE, INSERT INTO, UPDATE, DELETE 명령어 사용 직후에 명령어의 기능을 간략하게 설명합니다.
    • 예: "CREATE TABLE 명령어는 새로운 테이블을 생성합니다. INSERT INTO 명령어는 테이블에 새로운 행을 추가합니다. UPDATE 명령어는 테이블의 데이터를 수정하고, DELETE 명령어는 데이터를 삭제합니다."

오늘은 Mysql을 알아본 후
어떤 식으로 mysql을 사용하는 건지
간단한 실습을 통해서
Mysql에 접속해 보고,
Database를 생성하고 삭제해 보고,
테이블을 생성하고 삭제해 보고,
테이블 안에 컬럼 속성을 확인해 보고,
값을 입력하고 수정해 보고 삭제해 보고,
속성 정보를 변경해 보고,
칼럼을 추가하고 수정하고 삭제까지 해봤습니다.

아직까지 정말 많이 쓰이고 있는 mysql은 

어느 곳에 속하여 일을 하시던지

알고 계시면 분명 도움이 될만한 내용이라고 생각합니다.


  • 보안 관련 주의사항 및 안전한 사용법: mysql -u root -p 명령어를 사용하여 접속하는 방법을 설명하는 부분에 보안 주의사항을 추가합니다.
    • 예: "MySQL을 사용할 때는 보안을 항상 유념해야 합니다. 예제에서 사용한 'root' 계정과 'bug'라는 비밀번호는 테스트 목적으로만 사용해야 합니다. 실제 환경에서는 강력한 비밀번호를 설정하고, 필요한 최소한의 권한을 가진 사용자 계정을 생성하여 사용하는 것이 좋습니다."

실습 후 데이터베이스와 테이블 정리: MySQL 실습을 마친 후, 생성한 데이터베이스와 테이블을 어떻게 정리해야 하는지에 대한 방법을 설명합니다.

  • 예: "실습을 마친 후에는 사용한 데이터베이스와 테이블을 정리하는 것이 좋습니다. 이를 위해 DROP DATABASE 명령어와 DROP TABLE 명령어를 사용하여 더 이상 필요하지 않은 데이터베이스와 테이블을 삭제할 수 있습니다. 이 과정은 실습 환경을 깔끔하게 유지하고, 불필요한 데이터의 축적을 방지합니다

궁금하신 사항은 댓글에 남겨주세요
댓글에 남겨주신 내용
추후 정리해서 올려드리겠습니다
구독 신청하시면 업로드 시 알려드릴게요!
-
조금이라도 도움이 되셨다면
공감&댓글 부탁드리겠습니다
감사합니다!

 

반응형

+ Recent posts