한줄요약: 클라이언트 - 서버 - 데이터베이스
서버에 모든 데이터가 담긴 데이터베이스 원본을 보관하면 서버 유지하는 데 비효율적일 것같다..
서버가 터지는 경우엔 데이터가 유실되는 경우도 있지 않을까.(백업을 보관할 곳이 피료해..!!)
하지만 특정 데이터가 필요한 경우에만 서버가 데이터베이스에 요청해서 받아온다면 훨씬 더 효율적으로 데이터를 관리하고, 서버를 운영할 수 있을것!
결국... 3티어 아키텍처를 사용한다면 각 계층별로 맡는 기능을 분화할 수 있게 되고, 효율성이 증가할 것이다.
각 계층은 물리적으로도 독립적이며 각 계층의 변경이 다른 계층에 의존하지 않는다
프레젠테이션 로직
비즈니스 로직
데이터 액세스 로직
SQL: 데이터베이스에 쿼리를 보내는 원하는 데이터만 가져올 수 있게 하는 프로그래밍 언어
쿼리 ⇒ 내가 원하는 데이터를 요구하는 질문
ex. 한 명의 인스타 유저의 개인정보에는 하나의 전화번호만 담긴다.
테이블 하나당 여러 개의 레코드와 연결되어있는 경우
ex. 인스타그램 유저 1명이 작성하는 여러 개의 포스트
여러 개의 레코드가 여러 개의 레코드를 가지는 관계
ex. 인스타그램 사용자들의 팔로우 관계
✓ Primary Key
✓ Foreign Key
원본 키를 가지고 있는 테이블을 다른 테이블이 참조할 때 사용한다.
SELECT
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
SELECT <select_list>
FROM Table A
INNER JOIN Table B
ON A.Key = B.Key;
기준 테이블을 A로 하면서 A의 key데이터가 B의 key데이터와 일치하는 값을 찾는다.
(B의 key데이터가 null인 경우는 제외한다)
SELECT <select_list>
FROM Table A
LEFT JOIN Table B
ON A.Key = B.Key
기준 테이블을 A로 하면서 A의 key데이터가 B의 key데이터와 일치하는 값을 찾는다.
(B의 key데이터가 null인 경우도 포함한다)
/*uesr 테이블에 address 칼럼 추가하기*/
ALTER TABLE user ADD COLUMN address varchar(255) NOT NULL;
/*user 테이블에 role 테이블의 id를 참조하는 외래키 roleId 추가하기*/
ALTER TABLE `user` ADD FOREIGN KEY (`roleId`) REFERENCES `role` (`id`);
/* user 테이블의 id칼럼의 데이터 타입을 변경하기*/
ALTER TABLE user MODIFY COLUMN id varchar(16) NULL;
/* user 테이블의 id칼럼의 데이터 타입과 칼럼명까지 변경하기*/
ALTER TABLE user CHANGE COLUMN id user_key varchar(16) NULL;
/*user 테이블에서 address 칼럼 삭제하기*/
ALTER TABLE user DROP COLUMN address;
힘들었던 부분
TODO: Q 5-2-9. duRiCha가 작성한 글의 개수 (컬럼명: ContentCount)를 출력하기 위한 SQL을 작성해주세요
내가 원하는 이름으로 데이터의 컬럼을 출력하기 위해서는 alias
를 쓸 수 있다.
alias
는 다음과 같은 형식으로 사용한다.
SELECT count(*) as ContentCount
FROM content
(...)
TODO: Q 5-2-5. jiSungPark이 작성한 content의 title을 찾기위한 SQL을 작성해주세요.
const PART5_2_5 = ` SELECT title FROM content
WHERE userId IN (SELECT id FROM user WHERE user.name = 'jiSungPark')`;
이중쿼리를 써보았다.
먼저 title
데이터는 content
에 있으니까 출력 쿼리를 작성하고
content
테이블에 있는 userId
가 user
테이블에서 name
이 'jiSungPark'인 레코드의 id
와 일치하는 레코드
SERVER
> config / config.js
> controller / index.js
> db / index.js
⇒mysql
모듈을 사용해서 데이터베이스와 서버 인스턴스를 연결한다.
**> models** / index.js
**.gitignore**
**.env**
.gitignore
와 .env
파일의 역할
힘들었던 부분
1) 데이터베이스를 서버와 연결하기
연결 그거 어떻게 하는 건데...
Node.js에서 mySQL 사용하기(npm 공식문서)
2) 여러 개의 레코드를 한번의 쿼리로 테이블에 저장하기