์Šคํ”„๋ง ์ž…๋ฌธ - (12) ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •
ยท
Spring/Spring ์ž…๋ฌธ
ํ™”๋ฉด์— ๋„์šฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ ํƒฌํ”Œ๋ฆฟ์ด ํ•„์š” -> ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฉค๋ฒ„ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด์„œ ํšŒ์›๊ฐ€์ž…ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ ( ์˜์กด๊ด€๊ณ„ ) ( ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฉค๋ฒ„ ์„œ๋น„์Šค๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค) ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ • ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ • ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํšŒ์›์„œ๋น„์Šค์™€ ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์˜์กด๊ด€๊ณ„๋ฅผ ์ค€๋น„ํ•˜์ž. ์ •ํ˜•ํ™”๋˜์–ด ์žˆ๋Š” ํŒจํ„ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ์™ธ๋ถ€ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์„œ๋น„์Šค์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋งŒ๋“ค๊ณ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ฉค๋ฒ„ ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ package hello.hellospring.controller; import org.springframework.stereotyp..
์Šคํ”„๋ง ์ž…๋ฌธ - (11) ํšŒ์› ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ
ยท
Spring/Spring ์ž…๋ฌธ
ํด๋ž˜์Šค์—์„œ Command + Shift + T : Create Test ํšŒ์›๊ฐ€์ž… ๋ฉ”์„œ๋“œ ํ…Œ์ŠคํŠธ class MemberServiceTest { MemberService memberService = new MemberService(); @Test void ํšŒ์›๊ฐ€์ž…() { // ํ…Œ์ŠคํŠธ๋Š” ์ง๊ด€์ ์œผ๋กœ ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๊ฒŒ ํ•œ๊ธ€๋กœ ์ž‘์„ฑํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค //given ๋ฌด์–ธ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ , ๋ฐ์ดํ„ฐ Member member = new Member(); member.setName("hello"); //when ์ด๊ฒƒ์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ , ๊ฒ€์ฆ Long saveId = memberService.join(member); //then ๊ฒฐ๊ณผ๊ฐ€ ์ด๋ ‡๊ฒŒ ๋‚˜์˜จ๋‹ค , Member findMember = memberService.findOne(save..
์Šคํ”„๋ง ์ž…๋ฌธ - (10) ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ
ยท
Spring/Spring ์ž…๋ฌธ
ํšŒ์› ์„œ๋น„์Šค ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ ํšŒ์› Repository ์™€ domain์„ ํ™œ์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ž‘์„ฑ package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemberRepository; import hello.hellospring.repository.MemoryMemberRepository; import java.util.Optional; public class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); /** * ํšŒ์› ๊ฐ€์ž… */ pu..
์Šคํ”„๋ง ์ž…๋ฌธ - (9) ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ
ยท
Spring/Spring ์ž…๋ฌธ
๊ฐœ๋ฐœํ•œ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•ด์„œ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์ž๋ฐ”์˜ main ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ์ค€๋น„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ , ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ต๊ณ  ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์ž๋ฐ”๋Š” JUnit์ด๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌํ˜„์ฒด ํ…Œ์ŠคํŠธ package hello.hellospring.repository; import hello.hellospring.domain.Member; import org.junit.jupiter.api.Test; public class MemoryMemberRepositoryTest { MemoryMemberRepository reposit..
์Šคํ”„๋ง ์ž…๋ฌธ - (8) ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ
ยท
Spring/Spring ์ž…๋ฌธ
๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ ๋ฐ์ดํ„ฐ: ํšŒ์›ID, ์ด๋ฆ„ ๊ธฐ๋Šฅ: ํšŒ์› ๋“ฑ๋ก, ์กฐํšŒ ์•„์ง ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์„ ์ •๋˜์ง€ ์•Š์Œ(๊ฐ€์ƒ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค) ํšŒ์› ๋„๋ฉ”์ธ๊ณผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ ํšŒ์› ๊ฐ์ฒด domain ํŒจํ‚ค์ง€์— Member ํด๋ž˜์Šค ์ƒ์„ฑ hello.hellospring.domain package hello.hellospring.domain; public class Member { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { th..
์Šคํ”„๋ง ์ž…๋ฌธ - (7) API
ยท
Spring/Spring ์ž…๋ฌธ
API ๋ž€? Application Programming Interface์˜ ์•ฝ์ž. https://uhhyunjoo.tistory.com/50 [Spring] API ๋ฐฉ์‹ API ๋ž€? Application Programming Interface์˜ ์•ฝ์ž. Appllication Programming ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋œปํ•˜๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ์‹œ์Šคํ…œ์ด ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋„๋ก ์ด์–ด์ฃผ๋Š” ๊ฒฝ๊ณ„๋ฅผ ๋œปํ•œ๋‹ค. ์ฆ‰, API๋Š” ์šด์˜ uhhyunjoo.tistory.com Appllication Programming ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ์‹œ์Šคํ…œ์ด ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋„๋ก ์ด์–ด์ฃผ๋Š” ๊ฒฝ๊ณ„๋ฅผ ๋œปํ•œ๋‹ค. ์ฆ‰, API๋Š” ์šด์˜์ฒด์ œ์™€ ์‘์šฉํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด์˜ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด๋‚˜ ๋ฉ”์‹œ์ง€ ํ˜•์‹์„ ๋งํ•œ๋‹ค. ..
์Šคํ”„๋ง ์ž…๋ฌธ - (6) MVC์™€ ํ…œํ”Œ๋ฆฟ ์—”์ง„
ยท
Spring/Spring ์ž…๋ฌธ
MVC: Model, View, Controller ์˜ˆ์ „์—๋Š” view์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค ํ–ˆ์—ˆ์Œ ( ๋ชจ๋ธ 1 ๋ฐฉ์‹ ) --> ์—ญํ•  ๋ถ„๋‹ด Controller ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ด€๋ จ , ๋‚ด๋ถ€์ ์ธ ๊ฒƒ์„ ์ฒ˜๋ฆฌ์— ์ง‘์ค‘ @GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String name, Model model){ model.addAttribute("name",name); return "hello-template"; } @ReuqestParam ์„ ์ด์šฉํ•œ ๊ฐ’ ๋ฐ›์•„์˜ค๊ธฐ ๋”๋ณด๊ธฐ public String helloMvc(@RequestParam("name") String name, Model model){ @RequestParam("๊ฐ€์ ธ์˜ฌ ๋ฐ์ดํ„ฐ์˜ ..
์Šคํ”„๋ง ์ž…๋ฌธ - (5) ์ •์  ์ปจํ…์ธ 
ยท
Spring/Spring ์ž…๋ฌธ
์Šคํ”„๋ง ์›น ๊ฐœ๋ฐœ ๊ธฐ์ดˆ -์ •์  ์ฝ˜ํ…์ธ  ๊ทธ๋ƒฅ ํŒŒ์ผ์„ ์›น๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌ -MVC์™€ ํ…œํ”Œ๋ฆฟ ์—”์ง„ Model/View/Controller , ํ…œํ”Œ๋ฆฟ ์—”์ง„ : html์„ ๋™์ ์œผ๋กœ ๋ฐ”๊พธ์–ด ๋ณด๋‚ด์คŒ ์„œ๋ฒ„์—์„œ ๋ณ€ํ˜•์—์„œ ๋ฐ”๊พธ์–ด ๋ณด๋ƒ„ -API Json ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ํฌ๋งท์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-static-content Spring Boot Features Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, To..