SPA (Single Page Application)
- 단일 페이지로 구성된 웹 애플리케이션
- 여러 HTML 파일을 준비했다가 새로 렌더링하는 것이 아닌, 하나의 페이지 내에서 바뀔 부분, 필요한 부분만 동적으로 로딩하여 화면을 업데이트하는 방식
라우팅 (Routing)
- 사용자가 요청한 url에 따라 해당 url에 맞는 페이지를 보여주는 것
- SPA가 하나의 페이지만 존재하는 애플리케이션을 의미하는게 아니라, 여러 페이지 존재 가능
- 다수의 페이지를 표시하는 데 있어서 과거 전통적인 방식으로 페이지 전환을 수행하지 않고, 마치 하나의 페이지인 것처럼 처리하는 기술을 의미
react-router-dom 이란?
- react는 SPA이다.
- react에 router를 사용할 수 있는 즉, 화면 전환을 지원하는 모듈이다.
- 리액트로 SPA를 개발할 때 라우팅을 위해 react-router 라이브러리를 사용
REST API 란?
- http메서드를 사용하여 데이터를 요청/전송합니다. REST는 URI와 HTTP 프로토콜을 이용해서 접근하는 것이 특징이며 데이터포맷은 브라우저 호환성이 좋은 JSON을 사용
- HTTP API: HTTP만 쓰면 모두 포함
- REST API: HTTP API 중 REST 원칙을 지키는 것

동기 / 비동기 특징

-
- 동기 특징
- JS는 동기식 언어
- 한번에 하나의 작업을 수행 (싱글스레드)
- 비동기 특징
- 동시에 여러 작업을 수행할 수 있다.
- 무엇이 먼저 완료될 지 보장할 수 없다.
- 동기 특징
- 비동기 처리는 JS의 특징 중 하나. 특정 연산이 끝날 때 까지 코드의 실행이 멈추지 않고 다음 코드를 먼저 실행한다. 비동기 처리가 가진 문제점을 callback 함수가 해결함. 콜백 함수는 콜백 이후에 처리될 작업들을 콜백 함수 내에 작성함. 근데 이 과정이 반복되면 콜백 지옥이 발생함. 1번 코드의 정보를 바탕으로 2번 코드가 발생하고 또 3번코드는 2번 코드의 정보를 바탕으로 실행되다보면 발생하는 것임. ->이를 보완하기 위해 promise, async/await가 나타남
Promise
- 비동기 처리에 사용되는 객체
- Pending(대기) : 코드는 실행 되었지만 결과를 아직 반환하지 않은 객체비동기 처리를 아직 수행하는 단계
- Fulfilled(이행): 비동기 처리가 어떠한 이유에서 실패한 상태
- Rejected(실패) : 비동기 처리가 어떠한 이유에서 실패한 상태
- reject가 호출되면 catch메소드의 동작만 실행됩니다.
- Promise가 끝난 후 동작을 설정할 수 있는데, 이는 then메소드와 catch메소드
async 와 await
- 자바스크립트 비동기 처리 방식 중 하나로 async와 await를 사용하면 비동기 처리를 동기 코드처럼 작성할 수 있어 가독성이 좋아지고 에러 처리가 간단해짐
async function fetchData() {
try {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("데이터 완료!"), 1000);
});
let result = await promise; // promise가 완료될 때까지 기다림
console.log(result); // "데이터 완료!"
} catch (error) {
console.error("오류 발생:", error);
}
}
fetchData();
- await은 Promise가 fulfilled 또는 rejected이 될 때까지 기다리는 함수 - 비동기 처리 코드 앞에 붙임
C (Create) - POST 요청
POST: 새로운 리소스를 생성(create)할때 사용(예: 로그인,회원가입등 사용자가 생성한 파일을 서버에 업로드할때 사용)
//문법
import axios from "axios";
axios.post("url 주소", {
data 객체
}, [config]);
//config에는 인증이나 쿼리파라미터등 네트워크요청에 필요한 다양한 옵션 추가가능
//사용예시
import axios from 'axios';
export const postLanternData = async ({ nickname, content, password, lanternColor }) => {
try {
const response = await axios.post("https://example.com/api/lanterns", {
nickname: nickname,
content: content,
password: password,
lanternColor: lanternColor
});
return response.data;
} catch (error) {
throw new Error("Failed to post lantern data");
}
};
R (Read) - GET 요청
GET: 입력한 url에 존재하는 자원 조회 요청
//문법
axios.get(url, [,config])
import axios from 'axios';
const fetchData = async () => {
try {
const res = await axios.get("url 이름");
if (res.status === 200) {
console.log(res.data);
}
} catch (err) {
alert(err);
}
};
// 응답은 JSON 형태로 넘어옴
U (Update) - PUT / PATCH 요청
UPDATE: REST 기반 API 프로그램에서 데이터베이스에 저장되어 있는 내용을 갱신하는 목적으로 사용
import axios from 'axios';
const updateData = async () => {
try {
const res = await axios
.put("url 이름", { //모든 데이터 수정 시 put
userId: "likelion.com",
userName: "멋쟁이"
});
if (res.status === 200) {
console.log(res.data);
}
} catch (err) {
alert(err);
}
};
import axios from 'axios';
const updateData = async () => {
try {
const res = await axios
.patch("url 이름", { // 일부 데이터 수정시 patch
userId: "likelion.com",
});
if (res.status === 200) {
console.log(res.data);
}
} catch (err) {
alert(err);
}
};
D (Delete) - DELETE 요청
Delete: REST 기반 API 프로그램에서 데이터베이스에 저장되어 있는 내용을 삭제하는 목적으로 사용
import axios from 'axios';
const deleteData = async () => {
try {
const response = await axios.delete("/url 이름");
if (response.status === 200) {
console.log(response.data + "삭제되었습니다!!");
}
} catch (error) {
alert(error);
}
};'FE' 카테고리의 다른 글
| HTML, CSS 심화 (0) | 2025.09.28 |
|---|---|
| 커스텀 훅 (Custom Hooks) (0) | 2025.09.27 |
| React + hook + Styled-Component (0) | 2025.09.27 |
| [SOPT] 솝트 37기 웹 YB 서류 + 면접 합격 후기 (0) | 2025.09.27 |
| [멋사] 2025 멋쟁이사자처럼 심바톤 후기 (0) | 2025.09.27 |