Ajex와 REST 방식의 이해
Ajax(Asynchronous JavaScript And XML)의 등장은 웹 개발 방식에 획기적인 변화를 가져왔습니다.
Ajax방식은 브라우저에서 서버를 호출하지만 모든 작업이 브라우저 내부에서 이루어지기 때문에
현재 브라우저의 브라우저 화면의 변화 없이 서버와 통신할 수 있습니다
현재 우리가 사용하는 많은 서비느는Ajax를 활용합니다. 가장 대표적으로 [자동완성, 지도 서비스] 등이 이에 속한다고 할수있는데
Ajax가 적용되면서 자바스크립트를 중심으로 데이터를 다루는 기술의 수요가 점점 늘게 되었고, 최근데는
프론트 엔드 중심의 개발 방식이 자리 잡게 되었습니다.
Ajax약자에 JacaScript, XML 이라는 단어가 들어가는 것처럼 실제 구현은
자바스크립트를 이용해서 XML을 주고받는 방식을 더 선호하고 있습니다.
(스프링 부트는 스프링 웹을 추가했을때 자동으로 관련 라이브러리를 내려받음)
클라이언트 중심의 개발
Ajax가 가져온 변화는 모바일에서 Ajax 방식으로 데이터를 교환할 수 있다는 점 때문에
환영을 받았는데 모바일에서도 일반웹과 마찬가지로 서버의 데이터가 필요한데
이때 화면과 관련된 부분은 필요하지 않기 때문에 서버에서 순수한 데이터만 전송하는 방식이라면
클라이언트 구련이 웹/앱에 관계없이 데이터를 재사용할 수 있게 됩니다
일반 웹에서도 자바 스크립트와 더불어서 리액트,뷰,앵귤러 와 같은 대규모 웹 애플리케이션 개발을
지원하는 라이브러리나 프레임워크가 발전하면서 웹 개발은 클라이언트와 서버의 역할 분배가 이루어지는 중입니다
JSON문자열
서버에서 순수한 데이터를 보내고 클라이언트가 적극적으로 이를 처리한다 라는 개발 방식에서
핵심은 우선 '문자열'인데 '문자열'은 어떠한 프로그래밍 언어나 기술에 종속되지 않는다는 장점이 있습니다.
문자열을 이요하면 데이터를 주고받는 것에 신경써야 하는일은 없지만, 문자열로 복잡한 구조의 데이터를 표현하는 문제가 발생합니다
문자열로 복잡한 데이터를 표현하기 위해서 고려되는것이 XML과 JSON이라는 형태(포맷)입니다.
자바는 데이터를 표현하기 위해서 별도의 클래스를 만들고 인스턴스를 만드는 방식과달리
JSON은 자바스크립트 문법에 맞는 문자열로 데이터를 표현하기 때문에 클라이언트에서 서떤
기술을 이용하든 공통적으로 인식할 수 있습니다
스프링 부트역시 JSON관련 라이브러리가 이미 포함되어있어 별도의 설정없이 바로 JSON데이터를 만들수 있습니다.
REST방식
REST방식은 클라이언트 프로그램인 브라우저나 앱이 서버와 데이터를 어떻게 주고받는것이 좋을지에 대한 가이드라고
할 수 있습니다.
예전의 웹 개발 방식에서는 특정한URL이 원하는 행위나 작업을 의미하고 GET/POST등은 데이터를 전송하는 위치를 의미했습니다
Ajax를 이용하면 브라우저의 주소가 이동할 필요 없이 서버와 데이터를 교환할 수 있기 때문에
URL은 행위나 작업이 아닌 원하는 대상 그 자체를 의미하고 GET/POST 방식과 PUT/DELETE등 추가적인 전송
방식을 활용해서 행위나 작업을 의미하게 되었습니다.
예를 들어 게시물을 수정한다고하면 과거에는 다음과 같이 표현 되었는데
이전 표현 | REST 방식 표현 |
-/board/modify -> 게시물의 수정(행위/목적) -<form> -> 데이터의 묶음 |
-/board/1 -> 게시물 자원 자체 -PUT 방식 -> 행위나 목적 |
프로젝트의 규머가 커지기 전에 이러한 규칙들에 대한 논의가 필요하고 이런 방식으로 만들어진
서비스를 RESTfull 하다고 표현합니다
REST 방식의 URL설계
Method | URL | 의미 | 추가데이터 |
GET | /board/1 <-(번호) | 1번 게시물 조회 | |
POST | /boards/ | 1새로운게시물조회 | 신규 게시물 데이터 |
PUT | /boards/1 | 1번 게시물 수정 | 수정에 필요한 데이터 |
DELETE | /boards/1 | 1번 게시물 삭제 |
'JAVA' 카테고리의 다른 글
JAVA 파일 스트림 (0) | 2024.05.02 |
---|---|
비동기 처리와 Axios (1) | 2024.05.02 |
JAVA entity(엔티티) (0) | 2024.04.29 |
함수적 인터페이스 (0) | 2024.04.28 |
JAVA 람다식 (0) | 2024.04.28 |
댓글