Backend๐ŸŒฑ/Spring

@RequestMapping ๋Œ€์‹  @PostMapping @GetMapping ์“ฐ๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ–ˆ๋‹ค. ๊ตฌ๊ธ€๋ง์œผ๋กœ ์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐพ์•„๋ดค์ง€๋งŒ "์ฝ”๋“œ๊ฐ€ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ"์ด๋ผ๋Š” ์งค๋ง‰ํ•œ ๋‹ต๋ณ€์ด ๋Œ€๋ถ€๋ถ„์ด์—ˆ๋‹ค. @RequestMapping(value="๊ฒฝ๋กœ", method=RequestMethod.GET) @RequestMapping(value="๊ฒฝ๋กœ", method=RequestMethod.POST) ์ด๋ ‡๊ฒŒ ๊ธด ์ฝ”๋“œ๊ฐ€ @GetMapping("๊ฒฝ๋กœ") @PostMapping("๊ฒฝ๋กœ") ์ด๋ ‡๊ฒŒ ์งง์•„์ง„๋‹ค๋Š” ์„ค๋ช…์ด๋‹ค. ์ฐธ๊ณ ๋กœ @GetMapping๊ณผ @PostMapping ์–ด๋…ธํ…Œ์ด์…˜์€ @PutMapping, @DeleteMapping, @PatchMapping๊ณผ ํ•จ๊ป˜ ์Šคํ”„๋ง 4.3๋ถ€ํ„ฐ ๋“ฑ์žฅํ–ˆ๋‹ค. ํ‹€๋ฆฐ ๋ง์€ ์•„๋‹ˆ์ง€๋งŒ ์ด๊ฑด ์งˆ๋ฌธ..
1. REST๋ž€? "ํ•˜๋‚˜์˜ URI๋Š” ํ•˜๋‚˜์˜ ๊ณ ์œ ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋Œ€ํ‘œํ•˜๋„๋ก ์„ค๊ณ„๋œ๋‹ค." REST(Representational State Transfer) ๋ž€ ์ž์›์„ ์ด๋ฆ„(์ž์›์˜ ํ‘œํ˜„)์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ ์ž์›์˜ ํ‘œํ˜„๊ณผ ์ƒํƒœ(์ •๋ณด) ์ „๋‹ฌ์„ ํ•˜๋Š” ๊ฒƒ URI๋ฅผ ํ†ตํ•ด ์ž์›์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method(GET, POST, DELETE, PUT...)๋ฅผ ํ†ตํ•ด ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„(CRUD Operation)๋ฅผ ์ ์šฉํ•˜๊ณ  ์ž์›์„ JSON, XML, TEXT ... ๋“ค ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ ํ‘œํ˜„์œผ๋กœ ๋‚˜ํƒ€๋‚ด์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค. CRUD Operation Create : ์ƒ์„ฑ(POST) Read : ์กฐํšŒ(GET) Update : ์ˆ˜์ •(PUT, PATCH) Delete : ์‚ญ์ œ(DE..
@RequestMapping์€ DefaultAnnotationHandlerMapping์—์„œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์„ ํƒํ•  ๋•Œ ๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์• ๋…ธํ…Œ์ด์…˜์ด๋‹ค. url๋‹น ํ•˜๋‚˜์˜ ์ปจํŠธ๋กค๋Ÿฌ์— ๋งคํ•‘๋˜๋˜ ๋‹ค๋ฅธ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘๊ณผ ๋‹ฌ๋ฆฌ ๋ฉ”์„œ๋“œ ๋‹จ์œ„๊นŒ์ง€ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, url ๋ฟ ์•„๋‹ˆ๋ผ ํŒŒ๋ผ๋ฏธํ„ฐ, ํ—ค๋” ๋“ฑ ๋”์šฑ ๋„“์€ ๋ฒ”์œ„๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๐ŸŒฑ์†์„ฑ DefaultAnnotationHandlerMapping์€ ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ์— ๋ถ™์€ @RequestMapping ์• ๋…ธํ…Œ์ด์…˜ ์ •๋ณด๋ฅผ ๊ฒฐํ•ฉํ•ด ์ตœ์ข… ๋งคํ•‘์ •๋ณด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๊ฒฐํ•ฉ ๋ฐฉ๋ฒ•์€ ํด๋ž˜์Šค ๋ ˆ๋ฒจ์˜ @RequestMapping์„ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๊ณ , ๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ์˜ @RequestMapping์œผ๋กœ ์„ธ๋ถ„ํ™”ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. @RequestMapping์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ๋“ค์€..
์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ž์— ํ• ๋‹นํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” @RequestBody ์™€ @RequestParam ์ด ์žˆ๋‹ค. @Controller public class UserController { @PostMapping("/receive") public String age(@RequestParam String name) { System.out.println("ํ†ต์‹  ์„ฑ๊ณต"); System.out.println(">>> " + name); return "index"; } } @Controller public class UserController { @PostMapping("/receive") public String age(@RequestBody String name) { System.out.println("..
@RequestMapping ๋Œ€์‹  @PostMapping @GetMapping ์“ฐ๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ–ˆ๋‹ค. ๊ตฌ๊ธ€๋ง์œผ๋กœ ์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐพ์•„๋ดค์ง€๋งŒ "์ฝ”๋“œ๊ฐ€ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ"์ด๋ผ๋Š” ์งค๋ง‰ํ•œ ๋‹ต๋ณ€์ด ๋Œ€๋ถ€๋ถ„์ด์—ˆ๋‹ค. @RequestMapping(value="๊ฒฝ๋กœ", method=RequestMethod.GET) @RequestMapping(value="๊ฒฝ๋กœ", method=RequestMethod.POST) ์ด๋ ‡๊ฒŒ ๊ธด ์ฝ”๋“œ๊ฐ€ @GetMapping("๊ฒฝ๋กœ") @PostMapping("๊ฒฝ๋กœ") ์ด๋ ‡๊ฒŒ ์งง์•„์ง„๋‹ค๋Š” ์„ค๋ช…์ด๋‹ค. ์ฐธ๊ณ ๋กœ @GetMapping๊ณผ @PostMapping ์–ด๋…ธํ…Œ์ด์…˜์€ @PutMapping, @DeleteMapping, @PatchMapping๊ณผ ํ•จ๊ป˜ ์Šคํ”„๋ง 4.3๋ถ€ํ„ฐ ๋“ฑ์žฅํ–ˆ๋‹ค. ํ‹€๋ฆฐ ๋ง์€ ์•„๋‹ˆ์ง€๋งŒ ์ด๊ฑด ์งˆ๋ฌธ..
Spring HelloController.java package com.sto.salepurchase.backstosalepurchase; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Arrays; import java.util.List; @RestController public class HelloController { @GetMapping("hello") public List Hello(){ return Arrays.asList("์„œ๋ฒ„ ํฌํŠธ๋Š” 8080", "๋ฆฌ์•กํŠธ ํฌํŠธ๋Š” 3000"); } } main..
1. srping boot ๊ธฐ๋ณธ์„ค์ •ํ•˜๊ธฐ spring initalizar๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•ด๋‘๊ธฐ (dependency๋Š” web๋งŒ ์ถ”๊ฐ€) 2. REST API ํ…Œ์ŠคํŠธํ•ด๋ณด๊ธฐ RestController๊ฐ€ ํ•ต์‹ฌ /api/test์—์„œ ํ™•์ธ 3.React ์„ค์น˜ ์„ค์น˜๋ช…๋ น์–ด npx create-react-app frontend ์„ค์น˜์™„๋ฃŒ : ๋ณด๋ฉด frontend ํด๋”๊ฐ€ ํ•˜๋‚˜ ์ƒ๊ฒผ๋‹ค 4.React ์‹คํ–‰ /frontend ๊ฒฝ๋กœ์—๊ฐ€์„œ npm start ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฐ”๋กœ ์‹คํ–‰์ด ๋˜๋ฉฐ ๋ฆฌ์•กํŠธ ์ดˆ๊ธฐํ™”๋ฉด์ด ๋‚˜์˜ค๋ฉด ์„ฑ๊ณต! npm start react ์‹คํ–‰์„ฑ๊ณต 5.CORS๋ฌธ์ œํ•ด๊ฒฐํ•˜๊ธฐ ์Šคํ”„๋ง๋ถ€ํŠธ์˜ ๋ฐฑ์—”๋“œ๋Š” 8080์—์„œ ์‹คํ–‰๋˜๊ณ , React์˜ ํ”„๋ก ํŠธ์—”๋“œ๋Š” 3000์—์„œ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋•Œ CORS(cross-orgin requests)๊ฐ€..
์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ• ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ? @Autowired ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•„๋“œ ์ฃผ์ž…์ด๋‚˜ ์ˆ˜์ •์ž ์ฃผ์ž… ๋ฐฉ๋ฒ•๋ณด๋‹ค ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ๋” ๊ถŒ์žฅํ•˜๋Š” ์ด์œ ๋ฅผ ์•Œ์•„๋ณด์ž. ํ•˜์ง€๋งŒ ๊ทธ์ „์— ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์šฐ์„  ๋“ฑ๋ก๋œ ๋นˆ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ DI(Dependency Injection) ๋ฐฉ๋ฒ•์€ 3๊ฐ€์ง€๋‹ค. 1. ์ƒ์„ฑ์ž ์ฃผ์ž…(Constructor Injection) ์ด๋ฒˆ ํฌ์ŠคํŒ…์˜ ์ฃผ์ œ์ด์ž ์Šคํ”„๋ง ํŒ€์—์„œ๋„ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ 4.3 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ์˜์กด์„ฑ ์ฃผ์ž…์œผ๋กœ๋ถ€ํ„ฐ ํด๋ž˜์Šค๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์ผ ์ƒ์„ฑ์ž์ธ ๊ฒฝ์šฐ์—๋Š” @Autowired ์–ด๋…ธํ…Œ์ด์…˜ ์กฐ์ฐจ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ ์ƒ์„ฑ์ž๊ฐ€ 2๊ฐœ ์ด..
๋‹จ์œ„ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋˜์ค‘ Junit4์—์„œ ์‚ฌ์šฉํ•˜๋Š” @RunWith(SpringRunner.class)๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์†์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์ฃผ์—ˆ๋Š”๋ฐ ๋ช‡ ๊ฐ€์ง€ ์˜๋ฌธ์ ์ด ์ƒ๊ฒจ์„œ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฌธ์ ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. @SpringBootTest๊ฐ€ ์•„๋‹Œ @RunWith(SpringRunner.class)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?? @RunWith์™€ ๋”๋ถˆ์–ด @RunWith(SpringRunner.class) -> ์ •ํ™•ํžˆ ๋ฌด์Šจ ์—ญํ• ์„ ํ•˜๋Š”์ง€?? ๋Œ€๋‹ต์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. 1. @SpringBootTest๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด application context๋ฅผ ์ „๋ถ€ ๋กœ๋”ฉํ•ด์„œ ์ž์นซ ์ž˜๋ชปํ•˜๋ฉด ๋ฌด๊ฑฐ์šด ํ”„๋กœ์ ํŠธ๋กœ์„œ์˜ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Junit4์—์„œ ์ง€์›ํ•˜๋Š” @RunWith(SpringRunner.class)๋ฅผ ์‚ฌ์šฉํ•œ..
1. ๊ฐœ์š” ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€ ๊ฒƒ์„ ํ•  ๋•Œ @Autowired ๋Œ€์‹  ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ํ™œ์šฉํ•˜๋ฉด ์ข‹๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ €๋„ ๊ณต๋ถ€ ์ค‘์ด๋ผ ์Šคํ”„๋ง IoC, ๋นˆ, ์˜์กด์„ฑ ๊ฐ™์€ ๊ฐœ๋…๋“ค์€ ์ž˜ ๋ชจ๋ฅด์ง€๋งŒ ์ผ๋‹จ ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ๋ฒ•์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 2. ์˜์กด์„ฑ์ด ๋ญ”๋ฐ? //HelloWorld.java class HelloWorld { private SayHello sayHello; public HelloWorld() { this.sayHello = new SayHello(); } public startHelloWorld() { this.sayHello.hello(); } } HelloWorld ํด๋ž˜์Šค์—์„œ helloํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SayHello ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ HelloWorld ํด..
JaeStory
'Backend๐ŸŒฑ/Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก