230406 풀스택 26일차 - 명언 앱 마무리복습 후 DB, MVC패턴

황인성·2023년 4월 6일
0

MVC패턴에 대한 설명

Model : 데이터관련된 부분

View : 사용자가 보는 부분 HTML, CSS가 될 수도 있고

Controller : Model과 View의 중간제어 역할. 컨트롤러에서 보안검증도 할 수 있고 안전검증도 가능.

클라이언트가 요구사항을 말하면 컨트롤러로 입력이 들어가고
컨트롤러는 모델로 신호를 보내서 모델 내부에서 데이터처리를 하고 다시 컨트롤러로 던져주면
컨트롤러가 모델로부터 받은 데이터를 가공해서 다시 뷰(클라이언트가 보는 화면)으로 내보내줌.

php를 사용하는 사람중에 계약기간에 쫒기거나 기타 이유로 유지보수할때 MVC패턴을 지키지 않고 프로그래밍을 하다보니 이를 악용한 사고사례도 생김(야놀자 회원정보 10만명 털린사건 등)

Spring같은경우는 이 MVC패턴을 지켜서 짤 수밖에 없게 만들어놓음.
-전자정보프레임워크같은 경우도 Spring 기반임.

service라는 부분도 있다. 따지자면 Model에 속함.

명언앱에서 명언번호, 작가, 명언에 대한 DB를 따로만들지않고 ArrayList로 만들다보니 이것들을 전부 Service영역으로 옮겨야하는게 맞음.

명언 앱에서 각 클래스별 역할
App : 라우팅, 고객이 올바른 컨트롤러를 만나도록 교통정리

Controller : 본인이 맡은 주제와 관련된 고객의 요구사항을 듣고, 처리 후 응답 
처리를 할 때, 본인이 판단하지 못하는 것은 서비스에 물어보는게 원칙

식당에서 점원의 역할이라고 보면 된다.

고객을 만나서, 그들의 요청을 받고 처리해준다.

Service : 핵심로직을 담당한다.

서비스는 오직 컨트롤러의 요청에 의해서만 일을 한다.

식당에서 메인 요리사의 역할이라고 보면 된다.

Repository : 데이터의 저장/조회를 담당한다.

리포지터리는 오직 서비스의 요청에 의해서만 일을 한다.

식당에서 재료담당 요리사의 역할이라고 보면 된다.

DB : 데이터의 영속저장/조회를 담당한다.

보통 외부 프로그램으로 작동한다.

즉 개발자가 DB 프로그램을 구현하는 일은 없다.

이미 구현되어 있다. 주로 MySQL, Oracle 과 같은 제품이 많이 사용된다.

식당에서 재료창고 관리자의 역할이라고 보면 된다.

DB는 오직 리포지터리의 요청에 의해서만 일을 한다.

MVC 디자인패턴의 관점으로 봤을 때의 우리 프로그램의 구조
Model : Entity, Service, Repository

View : 콘솔, 우리 프로그램은 콘솔 프로그램이다. 콘솔 프로그램의 특성 상 어쩔 수 없이 Controller 에 View 로직이 섞여있다.

Controller : Controller

DB수업 시작

DB == 데이터베이스
MySQL == MariaDB
MySQL은 DBMS 입니다.
DBMS == DataBase Management System
DBMS는 여러개의 DB를 관리하는 시스템입니다.
MySQL은 DBMS 중에 하나 입니다.
다른 DBMS로는 오라클, MSSQL 등이 있습니다.(MongoDB, 등 다른것도 있음)
MySQL은 전세계에서 가장 많이 사용되는 DBMS 입니다.
DB == 폴더
폴더 => 묶어주는 것
DB는 무엇으로 구성되는가? : 테이블들로 구성되어 있음
테이블 == 표 == 엑셀파일
표 == 칼럼(열, 1줄) + 로우(행, 여러줄)
로우 == 행 => 1, 홍길동, 24, 010-1234-1234
칼럼 == 열 => 번호, 이름, 나이, 연락처
표에서 칼럼은 한줄만 존재한다.
표에서 로우는 0 ~ N줄 존재할 수 있다.
☆★☆★☆★SQL은 명령어 이다.☆★☆★☆★
SQL은 DB에게 명령을 내릴 때 사용된다.
SQL 명령어 : 전체 데이터베이스 리스팅
SHOW DATABASES;
SQL 명령어 : 특정 데이터베이스 선택, 다른말로 하면 특정 폴더(DB)로 접속 명령어
USE DB이름;
EX : USE mysql;
SQL 명령어 : 현재 접속해 있는 DB안의 모든 테이블들을 리스팅
SHOW TABLES;

SQL 명령어

#전체 데이터베이스 리스팅
SHOW DATABASES;

#mysql 데이터 베이스 선택
USE mysql;

#테이블 리스팅
SHOW TABLES;

#특정 테이블의 구조
DESC user;

#test 데이터 베이스 선택
USE test;

#테이블 리스팅
SHOW TABLES;

#기존에 a1 데이터베이스가 존재 한다면 삭제
DROP DATABASE IF EXISTS a1;

#새 데이터베이스(a1) 생성
CREATE DATABASE a1;

#데이터베이스(a1) 선택
USE a1;

#데이터베이스 추가 되었는지 확인
SHOW DATABASES;

#테이블 확인
SHOW TABLES;

#게시물 테이블 article(title, body)을 만듭니다.
#VARCHAR(100) => 문자 100개 저장가능
#text => 문자 많이 저장가능
CREATE TABLE article (
title VARCHAR(100),
body TEXT
);

#잘 추가되었는지 확인, 리스팅과 구조까지 확인
SHOW TABLES;
DESC article;

#데이터 하나 추가(title = 제목, body = 내용)
INSERT INTO article
SET title = '제목',
body = '내용';

#데이터 조회(title 만)
SELECT title
FROM article;

#데이터 조회(title, body)
SELECT title, body
FROM article;

#데이터 조회(body, title)
SELECT body, title
FROM article;

#데이터 조회()
SELECT

FROM article;

#데이터 또 하나 추가(title = 제목, body = 내용)
INSERT INTO article
SET title = '제목',
body = '내용';

#데이터 조회(, 어떤게 2번 게시물인지 알 수 없음)
SELECT

FROM article;

#테이블 구조 수정(id 칼럼 추가, first)
ALTER TABLE article ADD COLUMN id INT FIRST;

#데이터 조회(, id 칼럼의 값은 NULL)
SELECT

FROM article;

#기존 데이터에 id값 추가(id = 1, id IS NULL)
UPDATE article
SET id = 1
WHERE id IS NULL;

#데이터 조회(, 둘다 수정되어 버림..)
SELECT

FROM article;

#기존 데이터 중 1개만 id를 2로 변경(LIMIT 1)
UPDATE article
SET id = 2
LIMIT 1;

#데이터 조회()
SELECT

FROM article;

#데이터 1개 추가(id = 3, title = 제목3, body = 내용3)
INSERT INTO article
SET id = 3,
title = '제목3',
body = '내용3';

#데이터 조회()
SELECT

FROM article;

#2번 게시물, 데이터 삭제 => DELETE
DELETE FROM article
WHERE id = 2;

#데이터 조회()
SELECT

FROM article;

#날짜 칼럼 추가(id 칼럼 뒤에) => regDate DATETIME
ALTER TABLE article ADD COLUMN regDate DATETIME AFTER id;

#테이블 구조 확인
DESC article;

#데이터 조회(, 날짜 정보가 비어있음)
SELECT

FROM article;

#1번 게시물의 비어있는 날짜정보 채움(regDate = 2018-08-10 15:00:00)
UPDATE article
SET regDate = '2018-08-10 15:00:00'
WHERE id = 1;

#데이터 조회(, 이제 2번 게시물의 날짜 정보만 넣으면 됩니다.)
SELECT

FROM article;

#NOW() 함수 실행해보기
SELECT NOW();

#3번 게시물의 비어있는 날짜정보 채움(NOW())
UPDATE article
SET regDate = NOW()
WHERE id = 3;

#데이터 조회()
SELECT

FROM article;

profile
문제 해결을 위해 끊임없이 파고드는 걸 좋아합니다.

0개의 댓글