๐ป Programming/Spring
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
13๋ฒ์งธ ๊ณผ์ DDD (Domain Driven Design) ์ค๊ณ ๊ฐ๋
DDD ์ค๊ณ๋ ๋ฐ์ดํฐ ์ค์ฌ ์ค๊ณ์์ ๋ฒ์ด๋ ๋๋ฉ์ธ์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค. ๋ฐฐ๋ฌ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ค๊ณ ์๊ฐํ๋ฉด, ์์, ํ์, ์ฃผ๋ฌธ ๋ฑ์ผ๋ก ๋น์ฆ๋์ค ๋๋ฉ์ธ์ ๋๋์ด ์ค๊ณ๋ฅผ ์์ํ๋ ๊ฒ์ด๋ค. ์์์ ์์ ๋๋ฉ์ธ์ด๋ผ๊ณ ํ๋ค๋ฉด ์์์ ์ด๋ฆ, ๊ฐ๊ฒฉ, ์ต์
๋ฑ์ ํ์ ๋๋ฉ์ธ์ผ๋ก ์๊ฐํด ๋ณผ ์ ์๋ค. ์ด์ฒ๋ผ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ ๋จผ์ ์๊ฐํด๋ณด๊ณ ์ดํด๋ฅผ ํ๋ฉฐ ์ค๊ณํ๋ ๊ฒ์ด DDD ์ค๊ณ์ด๋ค. ํน์ง ๋๋ฉ์ธ ๋ชจ๋ธ๊ณผ ๋ก์ง์ ์ด์ ์ ๋๋ค. ๋์ ์์ง๋์ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ์งํฅํ๋ฏ๋ก ์ ์ง๋ณด์์ ํ์ฅ์ฑ์ด ์ฉ์ดํ๋ค ์ํํธ์จ์ด์ ๋ณต์ก์ฑ์ ์ต์ํํ๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํ๋ค SQL ์ค์ฌ ์ค๊ณ ๊ฐ๋
SQL ์ค์ฌ ์ค๊ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์ค์ฌ์ผ๋ก ํ๋..
๐ป Programming/Spring
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
11๋ฒ์งธ ๊ณผ์ HTTP Method ์ข
๋ฅ - HTTP ๋ฉ์๋ : ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ์ด๋ฃจ์ด์ง๋ ์์ฒญ(Request)๊ณผ ์๋ต(Response) ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐฉ์ 1. GET - ๋ฆฌ์์ค(๋ฐ์ดํฐ)๋ฅผ ์กฐํํ๋ ๋ฉ์๋ - URL(URI) ํ์์ผ๋ก ์๋ฒ์ธก ๋ฆฌ์์ค(๋ฐ์ดํฐ)๋ฅผ ์์ฒญํ๋ค. - ๋ฆฌ์์ค(๋ฐ์ดํฐ)๊ฐ ๋ณํ์ง ์๋ ๋ฉฑ๋ฑ์ฑ์ด๋ผ๋ ๊ฐ๋
์ ์ง๋๊ณ ์๋ค. 2. POST - ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ์ฌ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ ๋ฉ์๋ - ๋ฐ์ดํฐ๋ฅผ ๋ฉ์ธ์ง ๋ฐ๋์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ํ์์ผ๋ก ์ ๋ฌํ๋ค. - GET๊ณผ ๋ฌ๋ฆฌ ๋ฐ์ดํฐ๊ฐ ์ธ๋ถ๋ก ๋
ธ์ถ๋์ง ์์ ๋ณด์์์ ์ด์ ์ด ์๋ค. 3. PUT - ๋ฆฌ์์ค๋ฅผ ์์ ํ๋ ๋ฉ์๋ (UPDATE) - ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋์ฒดํ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๋ ๋ฆฌ์์ค์ ๊ตฌ์ฒด์ ์ธ ์์น๋ฅผ ์ง์ ํด์ผํ๋ค. - GET๊ณผ ๊ฐ..
๐ป Programming/Spring
10๋ฒ์งธ ๊ณผ์ 1. ์คํ๋ง ๋น(Spring Bean) ๋ฑ๋ก ๋ฐฉ๋ฒ ์คํ๋ง IoC ์ปจํ
์ด๋๋ ํด๋์ค์์ ์ด๋
ธํ
์ด์
์ ๋ณด๊ณ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ ๋ค. ์ด๋ฌํ ์ธ์คํด์ค๋ฅผ ๋น(Bean)์ด๋ผ๊ณ ํ๋ค. ์คํ๋ง ๋น์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์๋ 2๊ฐ์ง๊ฐ ์๋ค. ์ฒซ ๋ฒ์งธ, @Configuration + @Bean ์กฐํฉ ๋ ๋ฒ์งธ, @Component ์ค์บ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ธ ์ปดํฌ๋ํธ ์ค์บ์ Service์ Repository ์ ์ด๋
ธํ
์ด์
์ผ๋ก ์คํ๋ง ๋น์ ๋ฑ๋กํด์ฃผ๊ณ Autowired๋ฅผ ์ค์ ํด์ฃผ๋ฉด, ์๋์ผ๋ก ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์
ํด์ฃผ๋ ๋ฐฉ์์ด๋ค. ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋๋ฉด DI๋ฅผ ์์ฒญํ ์ ์๊ณ , DI๋ฅผ ์์ฒญํ๋ ๋ฐฉ๋ฒ์ ํ๋ ์์ @Autowired๋ฅผ ์ ์ด์ฃผ๋ฉด ๋๋ค. @Controller class Controller{ @Autowired Se..
๐ป Programming/Spring
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
8๋ฒ์งธ ๊ณผ์ ์คํ๋ง์ ๊ฝ, 3๊ณ์ธต [ Client -- Controller ๐๐ป Service ๐๐ป Repository -- DB ] Client์ DB ์ฌ์ด 3๊ณ์ธต์ ์ญํ ์ ๊ฐ๊ฐ ๋ฌด์์ผ๊น? Controller - ์ญํ : ํด๋ผ์ด์ธํธ์์ ์์ฒญ๋ ์๊ตฌ์ฌํญ์ ์ฒ๋ฆฌํ๊ณ ์ง์ ๋ ๋ทฐ์ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ค๋ค. - ๊ธฐ๋ฅ : ์๊ตฌ์ฌํญ ์์ฒญ์ ๋ฐ๋ผ ์ด๋ค ์ฒ๋ฆฌ๋ฅผ ํ ์ง Service์ ๊ฒฐ์ ์ ๋๊ฒจ์ฃผ๊ณ ์ ๋ฌ๋ ๊ฐ์ ๋ค์ ํด๋ผ์ด์ธํธ์ ๋ฐํํด์ค๋ค. Service - ์ญํ : ์ค์ ๋ก ์์
์ด ์ผ์ด๋๋ ๋จ๊ณ. ์ฆ, ๋น์ฆ๋์ค ๋ก์ง์ด ์ฒ๋ฆฌ๋๋ ๊ณณ์ด๋ค - ๊ธฐ๋ฅ : ์๋ฒ์์ ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ์ ์ฒ๋ฆฌํ๋ค. DB ์ ๋ณด๊ฐ ํ์ํ๋ฉด Repository์ ์์ฒญํ๋ค. Repository - ์ญํ : Service์์ ๋์จ ๊ฒฐ๊ณผ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ๊ธฐ์กด์ ์ ..
๐ป Programming/Spring
7๋ฒ์งธ ๊ณผ์ 1. DI DI(Dependency Injection) : ์์กด์ฑ ์ฃผ์
- ์คํ๋ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์กด ๊ด๊ณ ์ฃผ์
ํ๋ ์์ํฌ์ด๋ค. - ๊ฐ์ฒด ๊ฐ ์์กด๊ด๊ณ๋ฅผ ์คํ๋ง ์ปจํ
์ด๋๊ฐ ๊ฐ๋ฐ์๊ฐ ์ ์ํ Bean ๋ฑ๋ก ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์๋์ผ๋ก ์ฃผ์
ํด์ฃผ๋ ๊ฒ์ด๋ค. - ๋จ๋จํ๊ฒ ๊ฒฐํฉ๋ ํด๋์ค๋ค์ ๋์จํ ๊ฒฐํฉ์ผ๋ก ์ฐ๊ฒฐ๋๊ฒ ํด์ค๋ค. DI ๋ฐฉ๋ฒ 1) ํ๋ ์ฃผ์
: ๊ฐ์ฒด๋ฅผ ํด๋์ค์ ํ๋๋ก ์ ์ธํ๊ณ @Autowired๋ฅผ ๋ถ์ธ๋ค 2) ์์ฑ์ ์ฃผ์
: ์์ฑ์์ @Autowired๋ฅผ ๋ถ์ธ๋ค (๊ฐ์ฅ ๊ถ์ฅ!) 3) Setter ์ฃผ์
: Setter ๋ฉ์๋์ @Autowired๋ฅผ ๋ถ์ธ๋ค 2. IoC IoC(Inversion of Control) : ์ ์ด์ ์ญ์ - ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๊ณ ์ง์ DI ์์
์ ์งํํ์ง ์๊ณ ์คํ..
๐ป Programming
6๋ฒ์งธ ๊ณผ์ 1. API๋? API๋ Application Programming Interface์ ์ฝ์๋ก, ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ ์๋๋ก ์ด์ ์ฒด์ ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ ์ดํ ์ ์๊ฒ ๋ง๋ ์ธํฐํ์ด์ค์ด๋ค. ์ฆ, ํ๋ก๊ทธ๋จ ์ฌ์ด์์ ์ํธ ์์ฉ์ ํ ์ ์๋๋ก ๋์์ฃผ๋ ์ค๊ฐ ๋ค๋ฆฌ์ ์ญํ ์ด๋ผ๊ณ ํ ์ ์๋ค. ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ ์์ ์ญํ ์ ํ๋ ๊ฒ์ด API์ด๋ค. ๊ฐ๋ฐ์๋ API๊ฐ ์ด๋ป๊ฒ ๊ตฌํ๋์๋์ง๋ฅผ ์ ํ์ ์์ด ๊ทธ๋ฅ ๋ค๋ฅธ ์ ํ ๋ฐ ์๋น์ค์ ํต์ ํ๋ ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ์ API ์ ๊ณต์์์ ์ฌ๋ฆฐ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฌ์ฉํ๋ฉด ๋๋ค. ๋ง์ ๊ธฐ์
์์ Open API๋ฅผ ์ ๊ณตํ๊ณ ์๋ค. - ex) Google Maps API, Kakao API Google Maps Pl..