클라이언트 사이드 랜더링 맛보기

Feb 21, 2024
클라이언트 사이드 랜더링 맛보기

자바 → 인텔리J (서버) 코드 모음

package com.example.myserver; import lombok.AllArgsConstructor; import lombok.Data; @AllArgsConstructor @Data public class ApiUtil<T> { private int status; private String msg; private T body; }
💡
응답할 때마다 body 데이터가 달라질 수 있어서 제네릭으로 받음
 

 
package com.example.myserver; import lombok.AllArgsConstructor; import lombok.Data; @AllArgsConstructor @Data public class User { private int id; private String username; private String password; private String email; }
 

 
notion image

 
package com.example.myserver; import org.springframework.web.bind.annotation.*; import java.util.Arrays; import java.util.List; @CrossOrigin @RestController public class HelloController { @GetMapping("/user") public ApiUtil<?> getUserOne(){ //와일드 카드 타입 try { Thread.sleep(5000); } catch (InterruptedException e) { throw new RuntimeException(e); } User user = new User(1, "ssar", "1234", "ssar@nate.com"); return new ApiUtil<>(200, "성공", user); } }
💡
ApiUtil<?> 에서 <?> = 와일드 카드 타입 return할 때, 모든 타입이 들어갈 수 있다
 

json 데이터로 CSR 해보자

notion image
notion image
notion image
//json 데이터
자바 스크립트로 통신 요청(클라이언트)을 해서 getBoard()의 json 데이터를 땡겨내려받아서 CSR을 할 것이다 삭제 요청 또한 CSR으로 진행 할 것!! 다운 받는 게 아니라!
 

자바 스크립트 → vs Code (클라이언트) 코드 (jQuery 사용) → 필기x

~디자인 코드는 생략~

notion image
//디자인 된 모습

[ AJAX jQuery 문법을 사용해서 다운 받아서 뿌려보자 ]

다운 받아서 뿌릴려면 script에다가 통신을 해야함
notion image
💡
첫번째 인수 -> 다운받을 주소 두번째 인수 -> 함수 (람다) 통신이 끝나면 다운받을 데이터를 () 여기에 넣어줌 response 애가 통신 + 자바 스크립트 파싱까지 다 해줬다
notion image
//파싱해서 자바 스크립트 오브젝트로 (알아서) 받았다
💡
세팅하는 법 아직 몰라도 된다. 다른 방법을 사용할 것 → 필기 생략 지금은 CSR이 뭔지 개념 파악을 하자!
 

 
 

[ 완성 코드 ]

notion image
notion image
notion image
json만 다운 받아서 한 CSR 완성 코드 → 이렇게 프로그램을 짜면 서버 부하 DOWN +) 삭제할 때는 그냥 클라이언트 사이드 랜더링을 하면 되는게 아니라 AJAX 삭제 요청을 해야한다!
html을 한꺼번에 받아서 뿌리는게 아니라, 서버에서는 빈박스와 자바 스크립트 코드만 받음 어? 자바 스크립트네? -> 통신해서 json을 다운 받는다. -> 이 json으로 CSR을 하는 것!
 
notion image
💡
CSR에서 id 중요하다고 했음 → id에 걸지 말고 onClick에 걸자
💡
이게 바로 AJAX… 클라이언트 사이드 랜더링… 맛만 봐라
 

전체 코드

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <title>Document</title> <style> .container { margin: 0 auto; width: 80%; border: 1px solid black; padding: 20px; } .board-item { border: 1px solid blue; padding: 10px; } </style> </head> <body> <div class="container" id="box"> </div> <script> $.get("http://localhost:8080/board", (response) => { let apiUtil = response; console.log(apiUtil); apiUtil.body.forEach(board => { let design = `<div class="board-item" id="board-${board.id}"> 번호: ${board.id}, 제목: ${board.title} <button onclick="del(${board.id})">삭제</button> </div>`; $("#box").append(design); }); }); function del(boardId) { $.ajax({ type: "delete", url: `http://localhost:8080/board/${boardId}` }).done((response) => { console.log(response); if (response.status != 200) { alert("삭제 실패"); } else { $(`#board-${boardId}`).remove(); } }); } </script> </body> </html>
 

TIP!

💡
id로 값을 삭제하는 것! → 클라이언트 사이드 랜더링
💡
클라이언트 사이드 랜더링 → 부분 리로드를 할 수 있는게 핵심! 전체 페이지를 바꿔버리지 않고, 내가 원하는 부분만 바꿔버린다!
Share article

codingb