KT AIVLE SCHOOL 7기
[KT AIVLE SCHOOL 7기] - FE/BE 정리
__hseong__
2025. 5. 28. 16:55
728x90
반응형
React + Redux + Spring Boot + HTML 기초까지 총정리!
✅ 목차
- 프로젝트 소개
- 전체 시스템 구성
- HTML 기초 문법 총정리
- React 기초 문법과 작동 원리
- Redux 작동 원리와 실전 코드
- Spring Boot 개념과 백엔드 구성
- 전체 작동 순서 요약
- 마무리 및 확장 아이디어
1️⃣ 프로젝트 소개
React(자바스크립트)로 만든 웹페이지에서
Spring Boot(자바 백엔드)에서 결과를 응답하고
Redux로 상태를 저장/관리하는 시스템을 만들어 봅니다.
2️⃣ 전체 시스템 구성도
[React 프론트엔드] ⇄ [Redux 상태 저장소]
⇅ Axios HTTP 통신
[Spring Boot 백엔드 (REST API)]
3️⃣ HTML 기초 문법 총정리
🔹 HTML 기본 구조
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>도서 추천</title>
</head>
<body>
<h1>도서 추천 시스템</h1>
<p>장르를 입력하면 도서를 추천해드릴게요!</p>
</body>
</html>
🔹 자주 쓰는 태그 정리
태그 | 설명 | 예시 |
---|---|---|
<h1> ~ <h6> |
제목 | <h1>제목</h1> |
<p> |
문단 | <p>문단입니다</p> |
<a> |
링크 | <a href="url">이동</a> |
<button> |
버튼 | <button>클릭</button> |
<input> |
입력 필드 | <input type="text" /> |
<ul><li> |
리스트 | <ul><li>아이템</li></ul> |
<img> |
이미지 | <img src="..." alt="..."> |
<div> |
레이아웃 구역 | <div>내용</div> |
4️⃣ React 기초 문법과 작동 원리
🔹 JSX란?
const element = <h1>Hello React</h1>;
- JavaScript 안에서 HTML을 쓸 수 있는 문법
🔹 컴포넌트
const Welcome = (props) => {
return <h1>안녕, {props.name}님!</h1>;
};
🔹 상태 관리 (useState
)
const [genre, setGenre] = useState('');
🔹 이벤트 핸들러
<button onClick={() => alert("클릭됨!")}>누르기</button>
🔹 반복 렌더링 (map
)
{books.map((book, i) => <li key={i}>{book}</li>)}
5️⃣ Redux 전역 상태 관리 원리 및 코드
🔹 Redux 구성 요소
구성 요소 | 역할 |
---|---|
Store | 상태 저장소 |
Action | 무슨 일을 할지 요청 |
Reducer | 실제 상태 변경 로직 |
Dispatch | 요청을 Reducer에 전달 |
useSelector | 상태값 가져오기 |
🔹 설치 명령어
yarn add @reduxjs/toolkit react-redux
🔹 상태 슬라이스 정의 (bookSlice.js
)
const bookSlice = createSlice({
name: 'book',
initialState: {
genre: '',
recommendations: [],
},
reducers: {
setGenre: (state, action) => {
state.genre = action.payload;
},
setRecommendations: (state, action) => {
state.recommendations = action.payload;
},
},
});
🔹 스토어 설정 (store.js
)
const store = configureStore({
reducer: {
book: bookReducer,
},
});
🔹 React에서 Redux 사용
const genre = useSelector((state) => state.book.genre);
const dispatch = useDispatch();
<input
value={genre}
onChange={(e) => dispatch(setGenre(e.target.value))}
/>
6️⃣ Spring Boot 백엔드 구성
🔹 컨트롤러 예시
@RestController
@CrossOrigin(origins = "*")
public class BookController {
@GetMapping("/recommend")
public List<String> recommend(@RequestParam String genre) {
if (genre.equalsIgnoreCase("fantasy")) {
return List.of("해리포터", "반지의 제왕");
} else {
return List.of("추천 없음");
}
}
}
7️⃣ 전체 작동 순서 요약 (Redux 흐름 중심)
사용자 입력 → dispatch(setGenre("fantasy"))
↓
→ reducer가 상태 변경 (genre 업데이트)
↓
→ store의 상태 변경됨
↓
→ useSelector로 연결된 컴포넌트가 자동 업데이트
↓
→ 추천 버튼 클릭 시 axios로 서버 요청
↓
→ Spring Boot에서 추천 도서 반환
↓
→ dispatch(setRecommendations([...]))
↓
→ 추천 목록 렌더링
728x90
반응형