내용을 API로 출력해야 할 때 매우 간단하게 기존 HTML 구조를 바이패스 할 수 있는 방법 > 팁 & 테크

본문 바로가기

팁 & 테크

내용을 API로 출력해야 할 때 매우 간단하게 기존 HTML 구조를 바이패스 할 수 있는 방법

본문

## TL;DR 1. 그누보드/이윰빌더는 기본적으로 서버사이드 렌터링이므로 서버에서 HTML 구조를 바로 클라이언트에게 뿌려준다. 2. 데이터를 JSON으로 받으려면 HTML 구조가 일절 출력되어서는 안된다. 3. 이를 위해서는 head.php.html / tail.php.html / view.php.html 등 HTML 구조가 출력될 수 있는 모든 파일에 조건문을 걸어 출력되지 않게 해야 한다. 4. 아래 방법을 사용하면 그러한 노력을 하지 않더라도 간단하게 HTML 구조를 바이패스 할 수 있다. ```php <?php /* 테마 폴더의 head.html.php 상단 if (!defined('_EYOOM_')) exit; 밑에 아래 내용을 추가합니다. */ if ($_REQUEST['api'] == 'json') { header("Content-Type: application/json; charset=UTF-8"); function apiExitFunc() { global $전송할_배열_혹은_문자열_데이터; if (ob_get_level()) ob_end_clean(); echo json_encode($전송할_배열_혹은_문자열_데이터); } register_shutdown_function('apiExitFunc'); ob_start(); } ?> ``` --- 안녕하세요\~ 요즘은 화면에 뿌려질 데이터를 서버 사이드에서 렌더링 하는 경우와 클라이언트 사이드에서 파싱해서 렌더링하는 경우로 나뉘어 지는 것을 알 수 있는데요, 서버 사이드 렌더링이라면 기존의 그누보드/이윰빌더에서 처리하는 방식처럼 php에다가 html 코딩하여 클라이언트에서 요청하면 바로 DOM에 뿌려주는 것을 말하는 것이고... 클라이언트 사이드 렌더링이라면 서버에서는 HTML의 뼈대가 되는 구조와... 그 뼈대에 들어갈 데이터를 따로 받은 뒤 클라이언트에서 자바스크립트를 통해 내용을 채워주는 것을 말합니다. (는 그냥 제가 이해한 내용입니다..ㅎㅎ 전문적으로 배운게 아니라 하다보니 익혀진거라 세세한 부분이 틀렸다면 지적해주십시오!) 아무튼, 현 그누보드/이윰빌더 시스템에서 클라이언트 사이드 렌더링을 구현하기 위해 데이터를 API로 전달 받으려면, 별도로 데이터를 뿌려주도록 하나하나 코딩을 다시 해야 하는데요, 이렇게 하면 예를 들어 게시판 내용을 받아오려고 한다면, 기존에 잘 만들어진 bbs php 코드를 활용할 수 없게 되어 데이터베이스에서 직접 데이터를 불러와야 하는 상황이 되게 됩니다. 그래서 저는 이러한 상황에서는 기존의 HTML을 불러오지 않고 변수 데이터만 따로 불러와 JSON으로 보내줄 수 있게 하기 위해 \`head.html.php\`파일을 비롯, 헤드와 테일, 그리고 view.html.php 등 세부 내용의 HTML 구조가 불러와지지 않도록 if문으로 내용을 없애버렸었는데요, 이보다 더 간단한 방법을 발견하여 공유드립니다. 테마 폴더에서 head.html.php 파일을 열고 상단에 아래 코드를 추가합니다. ```php <?php /* 테마 폴더의 head.html.php 상단 if (!defined('_EYOOM_')) exit; 밑에 아래 내용을 추가합니다. */ if ($_REQUEST['api'] == 'json') { header("Content-Type: application/json; charset=UTF-8"); function apiExitFunc() { global $전송할_배열_혹은_문자열_데이터; if (ob_get_level()) ob_end_clean(); echo json_encode($전송할_배열_혹은_문자열_데이터); } register_shutdown_function('apiExitFunc'); ob_start(); } ?> ``` 이렇게 하고 주소 뒤에 api=json 파라미터를 추가하거나 POST 요청 시 api: 'json'를 같이 보내면 HTML 구조가 전혀 출력되지 않게 됩니다. 이제 view 페이지든 어디든 기존에 HTML과 함께 사용되었던 변수를 활용하여 필요한 정보를 별도로 변수에 담아두고 `$전송할_배열_혹은_문자열_데이터`에 넣어주면 담아두었던 배열 데이터만 JSON으로 인코딩되어 출력됩니다. 주의하실 점은, 기존 코드에서 제공하는 변수를 가공하지 않고 그대로 넣으시면, 너무 많은 정보가 클라이언트로 넘어가게 되므로 가급적 가공을 해서 사용하시는 게 좋겠습니다. 예를 들어 게시판 목록을 이렇게 구현하는 경우 `$list` 변수를 활용할 수 있는데 이걸 활용하면 필터링 없이 모든 게시글 값이 출력되므로 음... 경우에 따라선 문제가 될 수도? 암튼 읽어주셔서 감사합니다!
0
로그인 후 추천 또는 비추천하실 수 있습니다.
포인트 647
경험치 175
[레벨 1] - 진행률 88%
가입일
2022-06-16 09:51:35
서명
미입력
자기소개
미입력

댓글목록0

등록된 댓글이 없습니다.
전체 76 건 - 1 페이지
번호
제목
글쓴이
사이트 내 전체검색