๐Ÿ’ป Programming

๐Ÿ’ป Programming/Spring

[Spring] DTO ↔ Entity ๋ณ€ํ™˜ํ•˜๊ธฐ

16๋ฒˆ์งธ ๊ณผ์ œ [Spring] Entity, DTO, VO ์˜ ๊ฐœ๋…๊ณผ ํŠน์ง• 12๋ฒˆ์งธ ๊ณผ์ œ Entity - ์‹ค์ œ DB์˜ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ๊ฐ์ฒด - id๋ฅผ ํ†ตํ•ด ๊ฐ๊ฐ์˜ Entity๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค - ๋กœ์ง์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.GeneratedValue; impo sooz.tistory.com ์ด์ „์— Entity์™€ DTO, VO์˜ ๊ฐœ๋…๊ณผ ํŠน์ง•์„ ์•Œ์•„๋ณด์•˜๋‹ค. ๋ฐฐ๋‹ฌ API ๊ตฌํ˜„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์šฐ์„ ์ ์œผ๋กœ Food Entity ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๊ณ  ์ด๋ฅผ DTO๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Entity ์™€ DTO ๋Š” ๋ถ„๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค. ์™œ ์ธ์ง€๋Š” ์•„๋ž˜์—์„œ ํ™•..

๐Ÿ’ป Programming/Spring

[Spring] DDD ์„ค๊ณ„์™€ SQL ์ค‘์‹ฌ ์„ค๊ณ„

13๋ฒˆ์งธ ๊ณผ์ œ DDD (Domain Driven Design) ์„ค๊ณ„ ๊ฐœ๋… DDD ์„ค๊ณ„๋ž€ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์„ค๊ณ„์—์„œ ๋ฒ—์–ด๋‚˜ ๋„๋ฉ”์ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค. ๋ฐฐ๋‹ฌ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด, ์Œ์‹, ํšŒ์›, ์ฃผ๋ฌธ ๋“ฑ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์„ ๋‚˜๋ˆ„์–ด ์„ค๊ณ„๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์Œ์‹์„ ์ƒ์œ„ ๋„๋ฉ”์ธ์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์Œ์‹์˜ ์ด๋ฆ„, ๊ฐ€๊ฒฉ, ์˜ต์…˜ ๋“ฑ์€ ํ•˜์œ„ ๋„๋ฉ”์ธ์œผ๋กœ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์„ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด๊ณ  ์ดํ•ด๋ฅผ ํ•˜๋ฉฐ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด DDD ์„ค๊ณ„์ด๋‹ค. ํŠน์ง• ๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ๋กœ์ง์— ์ดˆ์ ์„ ๋‘”๋‹ค. ๋†’์€ ์‘์ง‘๋„์™€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ์ง€ํ–ฅํ•˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์„ฑ์ด ์šฉ์ดํ•˜๋‹ค ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ณต์žก์„ฑ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค SQL ์ค‘์‹ฌ ์„ค๊ณ„ ๊ฐœ๋… SQL ์ค‘์‹ฌ ์„ค๊ณ„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ์™€ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ค‘์‹ฌ์œผ๋กœ ํ•˜๋Š”..

๐Ÿ’ป Programming/Spring

[Spring] Entity, DTO, VO ์˜ ๊ฐœ๋…๊ณผ ํŠน์ง•

12๋ฒˆ์งธ ๊ณผ์ œ Entity - ์‹ค์ œ DB์˜ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ๊ฐ์ฒด - id๋ฅผ ํ†ตํ•ด ๊ฐ๊ฐ์˜ Entity๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค - ๋กœ์ง์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String email; public User() { } public User..

๐Ÿ’ป Programming

HTTP Method ๋ฉ”์„œ๋“œ ์ข…๋ฅ˜ ๋ฐ ๊ฐœ๋…

11๋ฒˆ์งธ ๊ณผ์ œ HTTP Method ์ข…๋ฅ˜ - HTTP ๋ฉ”์„œ๋“œ : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์— ์ด๋ฃจ์–ด์ง€๋Š” ์š”์ฒญ(Request)๊ณผ ์‘๋‹ต(Response) ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹ 1. GET - ๋ฆฌ์†Œ์Šค(๋ฐ์ดํ„ฐ)๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฉ”์„œ๋“œ - URL(URI) ํ˜•์‹์œผ๋กœ ์„œ๋ฒ„์ธก ๋ฆฌ์†Œ์Šค(๋ฐ์ดํ„ฐ)๋ฅผ ์š”์ฒญํ•œ๋‹ค. - ๋ฆฌ์†Œ์Šค(๋ฐ์ดํ„ฐ)๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ฉฑ๋“ฑ์„ฑ์ด๋ผ๋Š” ๊ฐœ๋…์„ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค. 2. POST - ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์„œ๋“œ - ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”์„ธ์ง€ ๋ฐ”๋””์— ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค. - GET๊ณผ ๋‹ฌ๋ฆฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š์•„ ๋ณด์•ˆ์ƒ์˜ ์ด์ ์ด ์žˆ๋‹ค. 3. PUT - ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ (UPDATE) - ๋ฐ์ดํ„ฐ๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌ์†Œ์Šค์˜ ๊ตฌ์ฒด์ ์ธ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด์•ผํ•œ๋‹ค. - GET๊ณผ ๊ฐ™..

๐Ÿ’ป Programming/Spring

[Spring] Service์™€ Repository ๊ตฌํ˜„ํ•˜๊ธฐ & 3๊ณ„์ธต ์—ฐ๊ฒฐ

10๋ฒˆ์งธ ๊ณผ์ œ 1. ์Šคํ”„๋ง ๋นˆ(Spring Bean) ๋“ฑ๋ก ๋ฐฉ๋ฒ• ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ๋Š” ํด๋ž˜์Šค์—์„œ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ณด๊ณ  ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด๋Ÿฌํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋นˆ(Bean)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ, @Configuration + @Bean ์กฐํ•ฉ ๋‘ ๋ฒˆ์งธ, @Component ์Šค์บ” ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ธ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์€ Service์™€ Repository ์— ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•ด์ฃผ๊ณ  Autowired๋ฅผ ์„ค์ •ํ•ด์ฃผ๋ฉด, ์ž๋™์œผ๋กœ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค. ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋˜๋ฉด DI๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๊ณ , DI๋ฅผ ์š”์ฒญํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ•„๋“œ ์œ„์— @Autowired๋ฅผ ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค. @Controller class Controller{ @Autowired Se..

๐Ÿ’ป Programming/Spring

[Spring] Controller ํด๋ž˜์Šค ๊ตฌํ˜„ํ•˜๊ธฐ

9๋ฒˆ์งธ ๊ณผ์ œ 1. start.spring.io ํ™œ์šฉํ•ด์„œ ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ start.spring.io์— ๋“ค์–ด๊ฐ€์„œ ์„ค์ • ํ›„ Generate ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ”„๋กœ์ ํŠธ zip ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›๋Š”๋‹ค. ํŒŒ์ผ์˜ ์••์ถ•์„ ํ’€๊ณ  IntelliJ์—์„œ Open Project๋ฅผ ํ•ด์ฃผ๋ฉด ๋! 2. Controller ํด๋ž˜์Šค ๊ตฌํ˜„ํ•˜๊ธฐ - ์š”๊ตฌ์‚ฌํ•ญ : ์›น๋ธŒ๋ผ์šฐ์ €์— ‘localhost:8080/test’ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ฒจ๋ถ€์™€ ๊ฐ™์ด TEST ๊ธ€์ž ์ถœ๋ ฅํ•˜๊ธฐ controller ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— TestController ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์˜€๋‹ค. package com.example.demo.controller; import org.springframework.stereotype.Controller; import org.spring..

๐Ÿ’ป Programming/Spring

[Spring] ์Šคํ”„๋ง์˜ 3๊ณ„์ธต - Controller, Service, Repository

8๋ฒˆ์งธ ๊ณผ์ œ ์Šคํ”„๋ง์˜ ๊ฝƒ, 3๊ณ„์ธต [ Client -- Controller ๐Ÿ‘‰๐Ÿป Service ๐Ÿ‘‰๐Ÿป Repository -- DB ] Client์™€ DB ์‚ฌ์ด 3๊ณ„์ธต์˜ ์—ญํ• ์€ ๊ฐ๊ฐ ๋ฌด์—‡์ผ๊นŒ? Controller - ์—ญํ•  : ํด๋ผ์ด์–ธํŠธ์—์„œ ์š”์ฒญ๋œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ง€์ •๋œ ๋ทฐ์— ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. - ๊ธฐ๋Šฅ : ์š”๊ตฌ์‚ฌํ•ญ ์š”์ฒญ์— ๋”ฐ๋ผ ์–ด๋–ค ์ฒ˜๋ฆฌ๋ฅผ ํ• ์ง€ Service์— ๊ฒฐ์ •์„ ๋„˜๊ฒจ์ฃผ๊ณ  ์ „๋‹ฌ๋œ ๊ฐ’์„ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. Service - ์—ญํ•  : ์‹ค์ œ๋กœ ์ž‘์—…์ด ์ผ์–ด๋‚˜๋Š” ๋‹จ๊ณ„. ์ฆ‰, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๊ณณ์ด๋‹ค - ๊ธฐ๋Šฅ : ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. DB ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋ฉด Repository์— ์š”์ฒญํ•œ๋‹ค. Repository - ์—ญํ•  : Service์—์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด์˜ ์ €..

๐Ÿ’ป Programming/Spring

[Spring] DI์™€ IoC

7๋ฒˆ์งธ ๊ณผ์ œ 1. DI DI(Dependency Injection) : ์˜์กด์„ฑ ์ฃผ์ž… - ์Šคํ”„๋ง์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž… ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. - ๊ฐ์ฒด ๊ฐ„ ์˜์กด๊ด€๊ณ„๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•œ Bean ๋“ฑ๋ก ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. - ๋‹จ๋‹จํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ํด๋ž˜์Šค๋“ค์„ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๊ฒŒ ํ•ด์ค€๋‹ค. DI ๋ฐฉ๋ฒ• 1) ํ•„๋“œ ์ฃผ์ž… : ๊ฐ์ฒด๋ฅผ ํด๋ž˜์Šค์— ํ•„๋“œ๋กœ ์„ ์–ธํ•˜๊ณ  @Autowired๋ฅผ ๋ถ™์ธ๋‹ค 2) ์ƒ์„ฑ์ž ์ฃผ์ž… : ์ƒ์„ฑ์ž์— @Autowired๋ฅผ ๋ถ™์ธ๋‹ค (๊ฐ€์žฅ ๊ถŒ์žฅ!) 3) Setter ์ฃผ์ž… : Setter ๋ฉ”์„œ๋“œ์— @Autowired๋ฅผ ๋ถ™์ธ๋‹ค 2. IoC IoC(Inversion of Control) : ์ œ์–ด์˜ ์—ญ์ „ - ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์ง์ ‘ DI ์ž‘์—…์„ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ  ์Šคํ”„..

๐Ÿ’ป Programming

API ์™€ REST API

6๋ฒˆ์งธ ๊ณผ์ œ 1. API๋ž€? API๋ž€ Application Programming Interface์˜ ์•ฝ์ž๋กœ, ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์šด์˜ ์ฒด์ œ๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด์—์„œ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ค‘๊ฐ„ ๋‹ค๋ฆฌ์˜ ์—ญํ• ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ ์›์˜ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด API์ด๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” API๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ๋Š”์ง€๋ฅผ ์•Œ ํ•„์š” ์—†์ด ๊ทธ๋ƒฅ ๋‹ค๋ฅธ ์ œํ’ˆ ๋ฐ ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ API ์ œ๊ณต์ž์—์„œ ์˜ฌ๋ฆฐ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋งŽ์€ ๊ธฐ์—…์—์„œ Open API๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. - ex) Google Maps API, Kakao API Google Maps Pl..

soozkim
'๐Ÿ’ป Programming' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก