๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Springboot

[React X Springboot] Controller์™€ Axios๋กœ ๋ฐ์ดํ„ฐ ํ†ต์‹ ํ•˜๊ธฐ (Get/Post)

๐Ÿ’กํ”„๋ก ํŠธ์—”๋“œ

โœ… package.json

"proxy": "http://{๋ฐฑ์—”๋“œ ์ปดํ“จํ„ฐ์˜ IP ์ฃผ์†Œ}:8080",

โœ” ๋ฐฐํฌ ์‹œ AWS์— ์˜ฌ๋ฆฐ ํƒ„๋ ฅ์  IP ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝ

โœ” ๋ฐฑ์—”๋“œ ์ปดํ“จํ„ฐ๋Š” ์™ธ๋ถ€ ์ปดํ“จํ„ฐ๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ ‘๊ทผ ํ—ˆ์šฉ ์„ค์ •ํ•ด์•ผ ํ•จ (๋ฐฉํ™”๋ฒฝ)

โœ… ํŒŒ์ผ๋ช….js

const [response, setResponse] = useState('')

useEffect(() => {
    axios.{get ๋˜๋Š” post}('{๋ฐฑ์—”๋“œ API ์ฃผ์†Œ}')
    .then(response => setResponse(response.data))
    .catch(error => console.log(error))
}, []);

โœ” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ฌ ๋•Œ๋Š” Get ๋ฉ”์†Œ๋“œ

โœ” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ๋Š” Post ๋ฉ”์†Œ๋“œ

โœ” ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ response ๋ณ€์ˆ˜์— ์ €์žฅ

โœ… ์ฝ”๋“œ ์‚ฌ์šฉ ์˜ˆ

โœ… Springboot - DiaryController

/**์ผ๊ธฐ ์ €์žฅ*/
@PostMapping("/save/diary")
public void saveDiary(@RequestBody DiaryDto diaryDto) {
    diaryService.saveDiary(diaryDto);
}

/** ์ผ๊ธฐ ์ˆ˜์ • */
@PostMapping("/modify/diary")
public void modifyDiary(@RequestBody DiaryDto diaryDto) {
    diaryService.modifyDiary(diaryDto);
}

/**์ผ๊ธฐ ์‚ญ์ œ*/
@PostMapping("/delete/diary/{diaryId}")
public void deleteDiary(@PathVariable("diaryId") Long diaryId) {
    diaryService.deleteDiary(diaryId);
}

โœ… Springboot - DiaryDto

public class DiaryDto {
    private Long diaryId; // ๋ฐฑ์—”๋“œ์—์„œ ์ž๋™ ์ƒ์„ฑํ•ด์ฃผ๋ฏ€๋กœ ๋ณด๋‚ด์ง€ ์•Š์•„๋„ ๋จ
    private String subject; // ์ œ๋ชฉ์„ ์—†์•จ๊นŒ ?
    private String content; // ์ผ๊ธฐ ๋‚ด์šฉ
    private String userId; // ์‚ฌ์šฉ์ž ์•„์ด๋””
    private EmotionEnum emotion; // ํ˜„์žฌ๋Š” 4๊ฐ€์ง€ ๊ฐ์ • ์กด์žฌ - ๊ธฐ์จ ์Šฌํ”” ํ™”๋‚จ ์šฐ์šธ
    private String img; // MultipartFile ํƒ€์ž…์œผ๋กœ ์ˆ˜์ • ํ•„์š”
}

โœ… React - ์ผ๊ธฐ ์ƒ์„ฑ

const [response, setResponse] = useState('')

useEffect(() => {
    axios.post('/save/diary',{
		userId:"user1@naver.com",
		content:"๋ฉ‹์ง„ ํ•˜๋ฃจ๋ฅผ ๋ณด๋ƒˆ๋‹ค.",
		emotion: "๊ธฐ์จ",
		img: ""
	})
    .then(response => setResponse(response.data))
    .catch(error => console.log(error))
}, []);

โœ” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋• Post ๋ฉ”์†Œ๋“œ

โœ” ์ฃผ์†Œ๋Š” โ€˜/save/diaryโ€™ ๋กœ ์ง€์ •

โœ” ๋ฐฑ์—”๋“œ๋กœ ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๋ฅผ Json ํ˜•ํƒœ๋กœ ๋‹ด์Œ

โœ” ์ด๋•Œ Json ๋ณ€์ˆ˜๋ช…์€ ๋ฐฑ์—”๋“œ์—์„œ ์„ค์ •ํ•œ Dto ๋‚ด๋ถ€ ๋ณ€์ˆ˜๋ช…๊ณผ ๊ฐ™์•„์•ผ ํ•จ

โœ… React - ์ผ๊ธฐ ์ˆ˜์ •

const [response, setResponse] = useState('')

useEffect(() => {
    axios.post('/modify/diary',{
		diaryId: "1",
		userId:"user1@naver.com",
		content:"๋ฉ‹์ง„ ํ•˜๋ฃจ๋ฅผ ๋ณด๋ƒˆ๋‹ค. ๊ทผ๋ฐ ๋ฐค์— ๋น„๊ฐ€ ์™€์„œ ์Šฌํผ์กŒ๋‹ค.",
		emotion: "์šฐ์šธ",
		img: ""
	})
    .then(response => setResponse(response.data))
    .catch(error => console.log(error))
}, []);

โœ” ํŠน์ด์  - ์ผ๊ธฐ ์ƒ์„ฑ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ผ๊ธฐ์˜ ๊ณ ์œ  ID (๊ธฐ๋ณธํ‚ค) ๋„ ํ•จ๊ป˜ ์ „๋‹ฌํ•ด์•ผ ํ•จ

โœ” ์ผ๊ธฐ์˜ ๊ณ ์œ  ID๊ฐ€ ์žˆ์–ด์•ผ ์ˆ˜์ •ํ•  ํŠน์ • ์ผ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ

โœ” ์œ„์˜ ์˜ˆ์‹œ์˜ ๊ฒฝ์šฐ, ๊ธฐ๋ณธํ‚ค๊ฐ€ 1์ผ ์ผ๊ธฐ์˜ ๋‚ด์šฉ์„ Json ๊ฐ์ฒด์˜ ๋‚ด์šฉ์œผ๋กœ ์ˆ˜์ •ํ•จ

โœ… React - ์ผ๊ธฐ ์‚ญ์ œ

const [response, setResponse] = useState('')

useEffect(() => {
    axios.post('/delete/diary/{์‚ญ์ œํ•  ์ผ๊ธฐ์˜ ๊ณ ์œ  ID}')
    .then(response => setResponse(response.data))
    .catch(error => console.log(error))
}, []);

โœ” ๋ฐฑ์—”๋“œ์—์„œ ํ”„๋ก ํŠธ์—”๋“œ๋กœ ์ผ๊ธฐ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ๋•Œ๋Š” ์ผ๊ธฐ์˜ ๊ณ ์œ  ID (๊ธฐ๋ณธํ‚ค) ๋„ ํ•จ๊ป˜ ์ „๋‹ฌ

โœ” ํ”„๋ก ํŠธ์—”๋“œ์—์„œ๋Š” ์ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ์ผ๊ธฐ ์‚ญ์ œ ์‹œ ์ฃผ์†Œ์™€ ํ•จ๊ป˜ ์ „๋‹ฌ