Land of Joe

23년 10월 19일 프로토콜, 데이터베이스 본문

🌱 dailyStep/⏳ StageUs

23년 10월 19일 프로토콜, 데이터베이스

Arendt 2023. 10. 19. 23:07

프로토콜

정의: 인터넷 통신에 대한 표준

인터넷은 전세계가 다같이 맞춰서 사용하자! 라고 약속하고 사용하는 통신 기술이기 때문에,

한 가지 방법을 정해서 다같이 맞춰서 사용하고 있음

인터넷 통신 방법마다 각자의 프로토콜이 존재함 (현 약 80개의 프로토콜이 존재함)

  • 이메일 통신,
  • 파일 전송 통신,
  • 원격 접속 통신,
  • 전화 통신,
  • 스트리밍 통신 등….

개발자들이 이 프로토콜을 몰라도, 이 프로토콜로 구성된 프로그램을 이용하기에 문제가 없다!

(그냥 프로토콜을 지원하는 프로그램을 활용하면 되기 때문!)

 

* 우리가 알아야할 것은...

각 프로토콜의 정의와 쓰임
각 프로토콜이 사용하는 포트번호
  1. ssh: 원격 접속 프로토콜 (22)
  2. ftp: 파일 전송 프로토콜 (21)
  3. http: 단방향 데이터 프로토콜 (80)
  4. tcp: 양방향 데이터 전송 프로토콜
  5. voLTE: 4G 통신 프로토콜….등…

 

SFTP

- ssh 기반의 ftp 

- 우리는 이 프로토콜을 파일질라 라는 프로그램을 통해서 사용했음

- 원격접속을 지원한 상태로 파일전송을 하기 때문에 구조까지 볼 수 있었던 것임)

- BUT!!!! 개발하기엔 적합하지 않음!! 

- 왜냐? CLI로 코드를 수정하면 서로 다른 코드가 이중으로 생겨버림!!

 

>> 해결방안? : FTP-simple

- VSC에 설치할 수 있는 extension임

     extension이란? 다른 개발자가 만들어둔, VSC에 설치할 수 있는 유용한 추가 기능임 (ex) prettier

 

- 원격 서버 접속 방법

   1. ftp-simple install

   2. F1 키 (맥: fn+F1) 눌러서 ftp-simple : Config - FTP connection setting 누른다

3. 아래와 같이 설정해준다

4.  F1 키 (맥: fn+F1) 눌러서 ftp-simple : Remote directory open to workspace 누른다

5. (위와 비슷한 창이 계속 나온다)

앞서 3번에서 설정해준 "name" > apache-tomcat 어쩌구 > webapps까지 눌러주면 아래 창이 뜬다

여기서 ". Current directory" 눌러주면 접속 완료 되는 것이다~!~!~!~!

 

 

** FTP-simple 사용 시 주의사항

  1. 원격접속이기 때문에 좀 늦게 불러와지거나 조금 늦게 저장될 수 있으니까 천천히~
  2. 파일이 업로드 되는 시점은 파일이 저장된 시점이다 (덮어씌우기 개념임) 
    • Ftp-simple에서 파일을 삭제하면 반영이 안 된다 (삭제하면 저장할 파일이 없어지니까)
    • 파일 이름을 바꾸면 '내용물이 같은 새로운 파일이 생겨버림
    • so, 파일 이름을 바꾸거나 위치 바꾸거나 삭제하거나 등등은 원격접속이 아니라 터미널에서 해야함
    • 파일 생성은 가능!!
  3. 터미널에서 작업한 내용은 FTP-simple에 실시간 반영이 안 된다
    • FTP-simple을 껐다가 다시 켜야함! (접속 끊는 방법: 파일 > close folder)

 

 


데이터베이스

 

- 변수는 RAM(메모리, 주기억장치)에 저장된다 → 휘발성 → 브라우저를 끄거나 새로고침하면 날아간다

- 반면, 데이터베이스는 값을 반영구적으로 보관하고 싶을 때 사용한다 (보조메모리에 저장)

 

- 데이터베이스는 서버 안에 존재함

- 브라우저에서 데이터베이스 직접 연결 불가함 (아무나 접근하면 안 되기 때문)

- 프론트엔드에서 DB에 있는 값이 필요하면, 무조건 서버에 요청을 보내야 한다!!!

 

- Table 의 구성요소

  • Table명: 표의 이름
  • column : 소제목이라고 보면 됨
  • row : 데이터라고 보면 됨

 

데이터베이스의 종류

  1. Relational Database
  2. Document Database

차이: 데이터를 정리해서 저장을 하냐(Relational), 아니면 막 저장을 하냐(Document)

⇒ 값을 넣는 것, 값을 읽어오는 것에 속도 차이가 있다.

 

비유: 방 정리 방법

  • Relational Database : 박스를 사고, 분류에 따라 이름 짓고, 이름표 붙이고 등등 준비시간이 오래 걸리지만, 나중에 물건 꺼내려고 할 때 금방 꺼낸다 (설계할 때 오래 걸리지만 값을 가져올 때 용이)
  • Document Database : 열라 큰 박스에 때려 박아 (빠르게 정리해서 금방 깨끗해지지만, 특정한 값 가져올 때 오래 걸림)

=> so, Relational Database이 대부분 80-90% 사용된다~!~!

 

Relational Databased의 종류

  • MySQL : 데이터베이스의 기준, 전통적인 DB라서 시장이 큼, 보편적인 성능을 냄
  • Oracle : 가장 좋은 성능을 냄, 그러나 유료
  • PostgreSQL : 데이터가 적을수록 빠름 (MySQL과 비교했을 때)
  • SQLite : 로컬 데이터베이스 전용임 (서버에 설치되는 게 아니라 클라이언트에 설치됨, 앵그리버드처럼 앱 삭제하면 데이터도 삭제됨)
  • MariaDB 등등…

우리에게 중요한 건

우리 상황에 가장 알맞는 DB를 선택하는 능력!

 

MariaDB

- MySQL을 그대로 클론한 데이터베이스임

- MariaDB 할 줄 알면 MySQL도 할 수 있음

 

SQL

  • Relational Database의 언어
  • 서버에서 데이터베이스와 통신할 때 무조건 이 언어로 통신을 함
  • 대부분의 relational database에서 SQL을 언어로 사용함
  • sql 작성 시 암묵적 약속: 문법은 대문자, 사용자 지정은 소문자로!

같은 데이터를 읽어오는 데 얼마나 오래 걸리냐는 SQL 언어 활용 능력에 따라 달려있으므로 중요하다잉~!

 

 

전체 흐름

1. 브라우저에서 서버에 요청을 보냄
2. 서버가 요청을 DB에 맞게 SQL로 바꿔서 디비에 요청을 보냄
3. 디비가 자기만의 언어로 데이터를 서버에 전송함
4. 서버가 받은 데이터와 관련된 정보를 브라우저에 맞게 또 바꿔서 보내줌

 

MariaDB 설치와 사용 순서

  1. 일단 우분투 웹서버에 접속해야지
  2. DB 라이브러리 먼저 설치한다

// sudo apt install libmariadb-java

 

   3. DB 서버를 설치한다

// sudo apt install mariadb-server

  • 서버 안의 데이터베이스는 작은 서버와 같음
  • 데이터베이스는 서버처럼 구동된다는 뜻
  • 그러한 이유? : 보안이슈!
  • 서버는 외부와 소통하기 때문에 털릴 가능성이 존재한다
  • 서버가 털리더라도 디비가 서버처럼 존재하면 한 번 더 방화벽이 있는 것임
  • 그래서 통신을 해야하는 거다...
  • so, 독자적인 계정 시스템이 존재한다. (관리자 계정: root)

    4. 계정을 새로 만든다

// mysql -u root -p : root계정으로 들어가려하면 Access denied 된다! 

// sudo mysql : 서버의 관리자 계정만 마리아 디비에 접속할 수 있기 때문!

(서버계정-우분투-에 이미 로그인한 상태이므로 sudo 썼음에도 password 안 물어본다)

 

    5. DB 만들기 시작

// CREATE DATABASE (디비 이름);

 

    6. 계정 만들기

// CREATE USER '(name)'@'%' IDENTIFIED BY '(password)';

(%: 그룹 지정 안 하겠다는 의미임)

 

    7. 권한 주기

// GRANT all PRIVILEGES ON (디비 이름).* TO '(name)'@'%';

 (__이라는 데이터베이스의 전부에 관한 모든 특권을 누구에게 주라는 뜻)

 

    8. 데이터베이스 목록 출력하기

// SHOW DATABASES;

(쇼 데이터베이스 아님❌❌ 쇼 데이터베이시스⭕️⭕️⭕️)

 

    9. 끝내기 

// quit

 

    10. 다시 접속하고자 한다

// mysql -u (name) -p

// Enter password

(8번에선 sudo로 들어가서 중요한 디비들(mysql, performance_schema)이 전부 보였다면,

10번에선 일종의 게스트 로그인으로 접속을 했기 때문에 일부 디비가 보이지 않는다.)

 

CRUD

4개의 데이터베이스 기능을 합쳐서 부르는 합성어

  • Create: 데이터 삽입
  • Read: 데이터 읽기
  • Update: 데이터 수정
  • Delete: 데이터 삭제

    1. 사용할 데이터베이스가 뭔지 먼저 작성해줘

// USE (디비 이름);

 

    2. CREATE

// CREATE TABLE (테이블명) (column명 데이터형식, column명 데이터형식)

// 예시: CREATE TABLE account (id TEXT, pw TEXT)

 

    3. READ

// SELECT * FROM account; 

(* : 전체 컬럼 선택한다는 뜻)

// SELECT * FROM account WHERE id='test2;

(id가 'test2'인 데이터를 전부 보여줘라)

// SELECT * FROM account WHERE id='test2' AND pw='1234';

(id가 "test2"이고 pw가 "1234"인 데이터를 전부 보여줘라)

 

    4. Update

// UPDATE account SET pw='1111' WHERE id='test';

(id가 'test'인 데이터의 pw를 '1111'로 수정하라)

 

    5. Delete

// DELETE

 

 

** update랑 delete는 모두 WHERE문으로 조건 만들어줘야한다!

안그러면 전부 다 바껴버림!!!!!!! 돌이킬 수 없어!!!!!!!!!!!!

where문을 용이하게 하기 위해서 row를 특정할 수 있는 값이 있어야함!!!! => { pk } 공부해~

 

 

** 프론트엔드 개발자에게 '이 기능엔 이런저런 테이블 필요하겠네~' 라는 "테이블 설계 능력"이 필요하다!!

 

 


 

6주차 수업 리뷰

>> 지난 주말까지 우테코 지원서를 열심히 썼다. 자기소개서를 쓰다보면 언제나 생각이 많아지는 건 나만 그런 게 아닐 것이다. 아마 우테코 공고가 나온 시점부터 내가 약간 흔들렸던 것 같다. 내가 이 공부를 계속 해도 되나? 나 잘 할 수 있나? 그래서 자소서를 쓰느라 바쁜 와중에 선생님한테 상담 요청을 했다. 내가 과제를 할 때 사실 GPT를 쓰고,, 그렇게 알게된 코드를 보면 전부 이해는 가지만, 과연 내가 다시 코드를 짤 때 그렇게 짤 수 있을까?에 대한 확신이 없다고 이실직고 말씀드렸다. 사실 '이실직고'라는 표현을 쓴 이유는 쌤이 무서웠기 때문이다. 매번 내 코드를 쫙 훑기만 해도 바로 어떤 의도로 어떻게 짰는지 파악하셔서 항상 수업이 있는 목요일마다 학원에 가기가 싫은 기분이었다.

(오히려 그 기분만 꾹 누르고 첫 한 시간 과제 검사시간만 넘기면 진도 나가는 나머지 두 시간은 수월해서 학원 빠지고 싶다고 생각 한 몇 시간 전의 내가 우스울 정도..)

그러나 선생님은 내가 잘하고 있다고 말씀해주셨다. 물론 쥐피티를 쓴 것에 대해선 웬만하면 그러지 말라고 듣긴 했지만, 내가 구현하고자 하는 기능을 탑 다운 방식으로 세세하게 정리하고, 그게 다 완료되면 코드를 짜라고 하셨다. 나는 항상 일단 냅다 VSC 열고 멍때리고 있었던 것 같기도... 그리고 같은 반 팀원 분이 넘 잘하셔서 내가 질문하는 게 수업에 피해가 되는 것 같다..고 솔직하게 말씀드렸다. 그랬더니 그러라고 소수정예로 운영하는 거니 마음껏 질문하라고 말씀해주셨다.. 음..찡.. 멘탈 관련해서 충분히 잘하고 있음에도 멘탈이 약간 약한 나같은 경우, (야비하긴 하지만) 위에 있는 사람들보다 아래 있는 사람들을 보라고도 말씀해주셨다.

듣고보니 맞는 말같기도 했다. 난 어차피 아래 있는 사람을 보더라도 그들을 보며 안심하고 안주할 인간이 아니기 때문이다. 불확실한 미래에 대해 불안해하지 말고, 현재를 확실하게 채워야겠다는 생각을 했다.

 

그리고 오늘 수업, 두 시간 정도 일찍 가서 급하게 과제 마무리를 하고

마무리 하는 과정에서 서버에 연결이 안 되는 문제가 생겨 쌤한테 질문도 하고.. 뭐 그러다가 수업이 시작했다.

내가 과제에서 해결하지 못하고 간 문제는 경로설정이 잘못 된.. 아주 쉬운 문제였고(ㅎ 난 바보야...) 순조롭게 마무리 되었다.

과제 검사시간마다 쌤이 하시는 돌발 질문들(서버와 웹서버의 차이가 뭐야? ftp와 sftp의 차이가 뭐야? 등)에 난 오늘도 역시 시원한 답을 하나도 하지 못했지만....((복습 좀 해 조경은)) 쌤의 이런 질문들이 더이상 공격으로 느껴지지 않았다..ㅠ

그리고 수업시간 중에도 이해가 빠릿빠릿하지 못한 내가 개념을 듣고 로딩 중이라 시간이 걸릴 때, 나만의 말로 필기하느라 또 시간이 걸릴 때 등 선생님이 나를 보고 배려해주시는 느낌을 받을 수 있었다..ㅠㅠㅠ

 

그래서 수업 끝나고 감사 연락 보냄.....ㅠ

난 운다..

 

쨌든 오늘 시작된 우테코 프리코스와 학원 수업들 모두 잘 해내보겠다고 다짐한 하루 마무리다.

화이띵!!!!