앱런칭 프로젝트 전 부족한 부분 복습하기
하고싶은 것
API 설계 및 구현 과제 보충해서 더 발전시키기
변화
페이징 처리 기존 ResponseEntity → BaseResponse로 변경 (상태 코드 보여주기 위함)
ex) isSuccess, code, message와 같은 것
{
"isSuccess": true,
"code": 1000,
"message": "요청에 성공하였습니다.",
"result": {
"result": [
{
"postIdx": 6,
"caption": "LastTest",
"userIdx": 6
}
],
"pageInfo": {
"hasNext:": true,
"currentPage:": 2,
"totalPages:": 8
}
}
}
다중 Insert
Post, Post_Media, Media 의 3단 구조에서 Post를 주 테이블, Media를 서브 테이블로 변경하여 Media가 Post를 참조하도록 변경
start transaction;
INSERT INTO Post (caption,userIdx)VALUES("StellaTest",6);
INSERT INTO Media (postIdx,fileData,thumbNail) VALUES(last_insert_id(),"Photo",1);
commit;
다중쿼리를 한 줄 씩 수행하기 위해 DB에서 TRANSACTION수행
postIdx는 Post테이블의 primary key이자 AUTO_INCREMENT 이기 때문에 last_insert_id()를 통해 Media 테이블에 입력
한계점: 한 게시물에 여러 사진 및 동영상을 넣을경우 Insert 문을 어떻게 처리할 것인가?
DM내용조회
(기존)
select Message.roomIdx,Message.content
from Room
inner join Message
ON Message.roomIdx = Room.roomIdx
where Room.roomIdx=?
ORDER BY Message.content DESC;
(변화)
SELECT User.nickname, Message.content
FROM User
INNER JOIN Message
ON Message.sender = User.userIdx
WHERE (sender, content) IN (select sender, content
FROM Room
INNER JOIN User as u1
ON Room.user_1 = u1.userIdx
INNER JOIN User as u2
ON Room.user_2 = u2.userIdx
INNER JOIN Message
ON Message.roomIdx = Room.roomIdx
WHERE u1.nickname="test2" AND u2.nickname="97_csh")
ORDER BY Message.createAt DESC;
(선택) 자신이 만든 API 또는 OPEN API 활용해서 웹페이지 만들기
Instagram
.Media
, CONSTRAINT Media_post_ID
FOREIGN KEY (postIdx
) REFERENCES Post
(postIdx
) ON DELETE CASCADE ON UPDATE CASCADE)post가 주 테이블, media가 서브 테이블로 media가 postIdx를 참조하고 있어서 insert할 때 참조무결성 에러
tagIdx도 Tag 테이블의 primary key 이고, media의 서브 테이블이기 때문에 default or idx값을 넣어줘야함
[ 해결 방안 ]
트랜잭션 쿼리
start transaction;
INSERT INTO Post (caption,userIdx)VALUES("StellaTest",6);
INSERT INTO Media (postIdx,fileData,thumbNail) VALUES(last_insert_id(),"Photo",1);
commit;
Media테이블의 tagIdx의 default 를 '0'으로 설정
[ 참고 자료 ]
정적 / 동적 웹페이지
정적 웹페이지: 서버에 저장된 HTML/CSS 를 그대로 보는 것( 변화가 일어나지 않고, 변화가 있을시 HTML 자체를 수정해야해서 번거로움)
동적 웹페이지: 상황에 따라 서버에 저장되어있는 HTML에 데이터 추가/가공을 해서 보여주는 방법(예: 사용자의 요청에 따라 홈페이지를 새로고침 하지 않아도 변화를 보여줄 수 있다.)
HTML DOM
문서 객체 모델(DOM, Document Object Model)은 XML이나 HTML 문서에 접근하기 위한 일종의 인터페이스입니다.
이 객체 모델은 문서 내의 모든 요소를 정의하고, 각각의 요소에 접근하는 방법을 제공합니다.
HTML DOM은 HTML 문서를 조작하고 접근하는 표준화된 방법을 정의합니다.
모든 HTML 요소는 HTML DOM를 통해 접근할 수 있습니다.
웹 브라우저 렌더링
렌더링 엔진의 역할은 요청받은 내용을 브라우저 화면에 나타내는 일입니다. HTML, CSS, JavaScript 등의 파일을 브라우저가 화면에 표시할 수 있도록 변환하여 픽셀 단위로 나타냅니다.
![브라우저구조.jpg](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/703c1a4e-2f8e-49f7-b390-b23394f41308/브라우저구조.jpg)
![브라우저마다 다른 구조.jpg](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c742dbce-7896-4dc4-832b-0a988338de6f/브라우저마다_다른_구조.jpg)
Ajax
동기 / 비동기
[서버 측 JS - 동기와 비동기 1 : 개요](https://www.youtube.com/watch?v=jjypeFGJC3c)
대표 프레임워크 React, Vue/Angular
SPA형태는 브라우저에 최초에 한번 페이지 전체를 로드하고, 이후부터는 특정 부분만 Ajax를 통해 데이터를 바인딩하는 방식
기존 vs SPA
![SPA cycle.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/db371aa0-2dde-46ce-9ff7-8eb2e4e836b1/SPA_cycle.png)
Free Bootstrap Themes & Templates