ํ์ ์ ํ Enum ํด๋์ค ํ์์ ์ ํ(Admin, User)๋ฅผ ๋ํ๋ด๋ ์์๊ฐ ํ์ ํด๋์ค package com.example.yunishop.domain.member; import com.example.yunishop.constant.Role; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity @Getter @NoArgsConstructor public class Member { @Id..
์คํ๋ง
JPA (Java Persistence API) JAVA ๊ฐ์ฒด์ ๊ด๊ณํ DB ์ฌ์ด๋ฅผ ๋งคํํ๋ ORM ๊ธฐ์ ํ์ค ์ธํฐํ์ด์ค (= ๊ธฐ์ ํ์ค) ์ด๋ฏ๋ก ์ค์ ๊ตฌํ์ฒด๋ Hibernate ๋ฑ ์ฅ์ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข
์๋์ง ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ์ฟผ๋ฆฌ๋ฌธ์ด ์กฐ๊ธ์ฉ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ์ ์ด๋ ค์์ด ๋ง์ง๋ง, JPA๋ ์ถ์ํํ ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ ์ ๊ณตํ๋ฏ๋ก ์ค์ ํ์ผ์ ์ฌ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง ์ง์ ํ๋ฉด ๋จ ๊ฐ์ฒด ์งํฅ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐ ์์ฐ์ฑ ํฅ์ ๊ฐ๋ฐ์๊ฐ ์ง์ SQL์ ์์ฑํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ ์ค์ฌ์์ JAVA ๊ฐ์ฒด์ ์ง์คํ๋๋ก ์ง์ ํ
์ด๋ธ ์ปฌ๋ผ ์์ ์ ๋งคํ๋ ํด๋์ค๋ง์ ๋ณ๊ฒฝํ๋ฉด ์ ์ฉ๋จ ๋จ์ ๋ณต์กํ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ๋ถ๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ ์ฟผ๋ฆฌ๋ก ์ธํด ๊ฐ๋ฐ์๊ฐ ์๋ํ์ง ์์ ์ฑ๋ฅ ์ ํ ๋ฐฉ๋ํ JPA ๊ธฐ์ ํ์ต์ ํ์ํ ..
์น ์๋ฒ (Web Server) HTTP ๊ธฐ๋ฐ์ผ๋ก ๋์ ์ ์ ๋ฆฌ์์ค ์ ๊ณต, ๊ธฐํ ๋ถ๊ฐ ๊ธฐ๋ฅ ์ ์ (ํ์ผ) HTML, CSS, JS, ์ด๋ฏธ์ง, ์์ ์) NGINX, APACHE ์น ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ (WAS - Web Application Server) HTTP ๊ธฐ๋ฐ์ผ๋ก ๋์ ์น ์๋ฒ ๊ธฐ๋ฅ ํฌํจ + (์ ์ ๋ฆฌ์์ค ์ ๊ณต ๊ฐ๋ฅ) ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ์คํํด์ ์ ํ๋ฆฌ์ผ์ด์
๋ก์ง ์ํ ๋์ HTML, HTTP API(JSON) ์๋ธ๋ฆฟ, JSP, ์คํ๋ง MVC ex ) Tomcat Jetty, Undertow ์ฐจ์ด์ ์น ์๋ฒ๋ ์ ์ ๋ฆฌ์์ค(ํ์ผ), WAS๋ ์ ํ๋ฆฌ์ผ์ด์
๋ก์ง ์ค์ ๋ก , ๋์ ์ฉ์ด๋, ๊ฒฝ๊ณ๋ ๋ชจํธ ์น ์๋ฒ๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๊ธฐ๋ฅ์ ํฌํจํ๊ธฐ๋ ํจ ์น ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ๋ ์น ์๋ฒ์ ๊ธฐ๋ฅ์ ์ ๊ณตํจ ์๋ฐ๋ ์๋ธ..
REST API ๋์ค์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ธํฐํ์ด์ค ์ด ์ธํฐํ์ด์ค๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ ๊ทผํ๊ณ ์์์ ์กฐ์ํ ์ ์์ REST ๋ ? "Representational State Transfer"์ ์ฝ์๋ก, ์๋ ์์ด๋ ์น(WWW)๊ณผ ๊ฐ์ ๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ
์ํคํ
์ฒ์ ํ ํ์ ์ฃผ๊ณ ๋ฐ๋ ์์(Resource)์ ์ด๋ฆ์ ๊ท์ ํ๊ณ URI์ ๋ช
์ํด HTTP ๋ฉ์๋ (GET, POST, PUT, DELETE)๋ฅผ ํตํด ํด๋น ์์์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ์๋ฏธ REST API ๋ ? API : Application Programming Interface, ์ ํ๋ฆฌ์ผ์ด์
์์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธ - API๋ฅผ ํตํด ์๋ฒ ๋๋ ํ๋ก๊ทธ๋จ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ ์ ์์ - โ
์ฆ, REST API๋..
์๋ฒ ๊ฐ ํต์ ์ด๋ค ํฌํธ ์ฌ์ดํธ๋ฅผ ํ๋์ ์๋น์ค ๋จ์๋ก ๊ฐ๋ฐํ๋ค๊ณ ๊ฐ์ . ์ฆ, ๋ธ๋ก๊ทธ, ์นดํ, ๋ฉ์ผ ๋ฑ์ ๊ธฐ๋ฅ๋ค์ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ ํตํฉ ์ด๋ ๊ฒ ๊ตฌ์ฑํ๋ค๋ฉด ์๋ฒ๋ฅผ ์
๋ฐ์ดํธํ๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ง๋ณด์ํ ๋๋ง๋ค '์ฌ์ดํธ ์์
์ค์
๋๋ค.' ํป๋ง์ ๊ฑธ๊ณ ์์
ํด์ผํจ ๊ทธ๋งํผ ๊ฐ๋ฐ์ ๋ณด์์ ์ธ ์
์ฅ์ ์ทจํ ์ ๋ฐ์ ์๊ณ , ์๋น์ค ์์ฒด์ ๊ท๋ชจ๋ ์ปค์ง๊ธฐ ๋๋ฌธ์ ์๋น์ค๋ฅผ ๊ตฌ๋ํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ ๊ธธ์ด์ง → ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฒ์ด ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ(MSA; Microservice Architecture) → ์๋น์ค ๊ท๋ชจ๋ฅผ ์๊ฒ ๋๋์ด ๊ตฌ์ฑํ ์ํคํ
์ณ ์์ ์๋ก ๋ ํฌํธ ์ฌ์ดํธ์ ์ ์ฉํ๋ค๋ฉด, ์ ํ๋ฆฌ์ผ์ด์
ํ๋์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๋ฃ์ด ๊ฐ๋ฐํ์ง ์๊ณ ๋ธ๋ก๊ทธ ํ๋ก์ ํธ, ์นดํ ํ๋ก์ ํธ, ๋ฉ์ผ ํ๋ก์ ํธ ..
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ (AOP; Aspect-Oriented Programming) ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ๋ฌถ์ด ๊ฐ๋ฐํ๋ ๋ฐฉ์์ ์๋ฏธ โผ๏ธ ์ฌ๊ธฐ์ ๊ด์ (aspect)์ด๋ ?? → ์ด๋ค ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ๊ทธ ๊ธฐ๋ฅ์ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก ๊ตฌ๋ถํด ๊ฐ๊ฐ์ ํ๋์ ๊ด์ ์ผ๋ก ๋ณด๋ ๊ฒ์ ์๋ฏธ ํต์ฌ ๊ธฐ๋ฅ : ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ ๊ณผ์ ์์ ๋น์ฆ๋์ค ๋ก์ง์ด ์ฒ๋ฆฌํ๋ ค๋ ๋ชฉ์ ๊ธฐ๋ฅ์ ๋งํจ ์) ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ํ ์ ๋ณด ๋ฑ๋ก ์์ฒญ์ ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ , ๊ทธ ์ํ ์ ๋ณด๋ฅผ ์กฐํํ๋ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ค๋ฉด โถ ์ํ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ , โท ์ ์ฅ๋ ์ํ ์ ๋ณด ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฝ๋๊ฐ ํต์ฌ ๊ธฐ๋ฅ ๋ถ๊ฐ ๊ธฐ๋ฅ : ์ค์ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ๋๋ ํต์ฌ ๊ธฐ๋ฅ์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ํฉ์ด ์๊น. ํต์ฌ ๊ธฐ๋ฅ์ธ ๋น์ฆ๋์ค ..
์์กด์ฑ ์ฃผ์
(DI; Dependency Injection) ์ ์ด์ ์ญ์ ๋ฐฉ๋ฒ ์ค ํ๋๋ก, ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ ์ธ๋ถ ์ปจํ
์ด๋๊ฐ ์์ฑํ ๊ฐ์ฒด๋ฅผ ์ฃผ์
๋ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์๋ฏธ ์คํ๋ง์์ ์์กด์ฑ์ ์ฃผ์
๋ฐ๋ ๋ฐฉ๋ฒ ์์ฑ์๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
ํ๋ ๊ฐ์ฒด ์ ์ธ์ ํตํ ์์กด์ฑ ์ฃผ์
setter ๋ฉ์๋๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
์คํ๋ง์์๋ @Autowired๋ผ๋ ์ด๋
ธํ
์ด์
์ ํตํด ์์กด์ฑ์ ์ฃผ์
ํ ์ ์์ 1. ์์ฑ์๋ฅผ ํตํ ์์กด์ฑ ์ฃผ์
@RestController public class DIController{ MyService myService; @Autowired public DIController(MyService myService){ this.myService = myService; } @GetMappi..
์ ์ด์ ์ญ์ IoC ( Inversion of Control ) ์ผ๋ฐ์ ์ธ ์๋ฐ ๊ฐ๋ฐ์ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์๋์ ๊ฐ์ ์ฝ๋ ์ฌ์ฉ @RestController public class NoDIController{ private MyService service = new MyServiceImpl(); @GetMapping("/no-di/hello") public String getHello(){ return service.getHello(); } }์ฆ, ์ฌ์ฉํ๋ ค๋ ๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ณ ํด๋น ๊ฐ์ฒด์ ์์กด์ฑ์ ์์ฑํ ํ ๊ฐ์ฒด์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉํ๋ ์ผ๋ จ์ ์์
์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ดํ๋ ๊ตฌ์กฐ ํ์ง๋ง, ์ ์ด์ ์ญ์ (IoC)์ ํน์ง์ผ๋ก ํ๋ ์คํ๋ง์ ๊ธฐ์กด ์๋ฐ ๊ฐ๋ฐ ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ ๋์ Io..