์Šคํ”„๋ง

ํšŒ์› ์œ ํ˜• 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..
KIMHYEYUN
'์Šคํ”„๋ง' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (4 Page)