๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

728x90

Spring๐Ÿƒ

(33)
OAuth2 ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ Open Standard for Authorization ์ฆ‰, ๊ฐœ๋ฐฉํ˜• Authorization ์˜ ํ‘œ์ค€์ด๋ฉฐ API ํ—ˆ๊ฐ€(Authorize)๋ฅผ ๋ชฉ์ ์œผ๋กœ JSON ํ˜•์‹์œผ๋กœ ๊ฐœ๋ฐœ๋œ HTTP ๊ธฐ๋ฐ˜์˜ ๋ณด์•ˆ ํ”„๋กœํ† ์ฝœ. ์‚ฌ์šฉ์ž๋“ค์ด ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์›น์‚ฌ์ดํŠธ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ณตํ†ต์  ์ˆ˜๋‹จ์œผ๋กœ์„œ ์‚ฌ์šฉ ๋˜์–ด์ง€๋Š” ๊ธฐ์ˆ  ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•œ ์ธ์ฆ(Authentication) ๋ฐ ์ธ๊ฐ€(Authorization) ์˜ ์œ„์ž„ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ ‘๊ทผ ํ† ํฐ (Access Token) ์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ตฌ์กฐ ๊ฐ•์˜ : ์นด์นด์˜ค๋ฅผ ์ด์šฉํ•œ OAuth2 ๋กœ๊ทธ์ธ ์„œ๋น„์Šค ๊ตฌํ˜„ 1. ํšŒ์›๊ฐ€์ž… ์„ค๊ณ„ 1) User ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ ์ด๋ฆ„ ..
Spring Security ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์ ์šฉ๋ฐฉ๋ฒ•// ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐimplementation 'org.springframework.boot:spring-boot-starter-security'Config ํŒจํ‚ค์ง€์— WebSecurityConfig ํด๋ž˜์Šค ์ƒ์„ฑ//์Šคํ”„๋ง ๋ถ€ํŠธ 2.7 ์ด์ƒpackage com.sparta.springsecurity.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import or..
์Šคํ”„๋ง ์ˆ™๋ จ : Project MySelectShop (3) ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ JPA ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ ๊ด€์‹ฌ์ƒํ’ˆ ๋ชฉ๋ก ํŽ˜์ด์ง• ๋ฐ ์ •๋ ฌ ๊ฐ€๋Šฅ ํด๋” ์ƒ์„ฑ ๋ฐ ์กฐํšŒ ๊ฐ€๋Šฅ ๊ด€์‹ฌ์ƒํ’ˆ์— ํด๋” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ํด๋” ๋ณ„ ๊ด€์‹ฌ์ƒํ’ˆ ์กฐํšŒ ๊ฐ€๋Šฅ ํŽ˜์ด์ง• ๊ธฐ๋Šฅ : Springframwork.data.domain Page ๊ตฌํ˜„์ฒด ๊ธฐ๋Šฅ ๋ฉ”์„œ๋“œ URL ์š”์ฒญ ์‘๋‹ต ๋ฉ”์ธํŽ˜์ด์ง€ GET /api/shop index.html ํ‚ค์›Œ๋“œ๋กœ ์ƒํ’ˆ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ชฉ๋ก์œผ๋กœ ํ‘œ์‹œ GET /api/search?query=๊ฒ€์ƒ‰์–ด [ { "title" : String, "link" : String, ”image” : String, "lprice" : int }, …] ๊ด€์‹ฌ์ƒํ’ˆ ๋“ฑ๋ก POST /api/products Header Authorization : Bearer { "title" : String, "image" : ..
์Šคํ”„๋ง ์ˆ™๋ จ : Project MySelectShop (2) ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ๋ชฉํ‘œ ์ธ์ฆ/์ธ๊ฐ€์— ๋Œ€ํ•ด ์ดํ•ด ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ/๋กœ๊ทธ์•„์›ƒ์„ ๊ตฌํ˜„ํ•˜๊ณ  ํ๋ฆ„์„ ์ดํ•ด ํ˜„ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ ์ธ์ฆ/์ธ๊ฐ€ ๊ธฐ๋Šฅ์˜ ํ•œ๊ณ„๋ฅผ ์ดํ•ด 1. ์ธ์ฆ/ ์ธ๊ฐ€ ์Šคํ”„๋ง์—์„œ ์ธ์ฆ/์ธ๊ฐ€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์ธ์ฆ์ด๋ž€? ํ•ด๋‹น ์œ ์ €๊ฐ€ ์‹ค์ œ ์œ ์ €์ธ์ง€ ์ธ์ฆํ•˜๋Š” ๊ฒƒ ์ธ๊ฐ€๋ž€? ํ•ด๋‹น ์œ ์ €๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ—ˆ๊ฐ€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ 1) ์ธ์ฆ์˜ ๋ฐฉ์‹ : ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ธ์ฆ -> ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„ - ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์—ฐ๊ฒฐ๋œ๋‹ค -> Http ํ”„๋กœํ† ์ฝœ : ๋น„์—ฐ๊ฒฐ์„ฑ ๋ฌด์ƒํƒœ๋กœ ํ†ต์‹  ๋น„์—ฐ๊ฒฐ์„ฑ : ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์Œ ~ ๋ฆฌ์†Œ์Šค ์ ˆ์•ฝ๋ชฉ์  ๋ฌด์ƒํƒœ : ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ ~ ์š”์ฒญ์—๋งŒ ์‘๋‹ต, ๊ทธ ์„œ์‚ฌ๋Š” ์•Œ์ง€ ๋ชปํ•œ๋‹ค. ~ ์ฟ ํ‚ค - ์„ธ์…˜ ๋ฐฉ์‹ ..
์Šคํ”„๋ง ์ˆ™๋ จ : Project MySelectShop (1) ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ 1. ์š”๊ตฌ์‚ฌํ•ญ ํ™•์ธ - ํ‚ค์›Œ๋“œ๋กœ ์ƒํ’ˆ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ชฉ๋ก์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ - ๊ด€์‹ฌ์ƒํ’ˆ ๋“ฑ๋กํ•˜๊ธฐ - ๊ด€์‹ฌ์ƒํ’ˆ ์กฐํšŒํ•˜๊ธฐ - ๊ด€์‹ฌ์ƒํ’ˆ ์ตœ์ €๊ฐ€ ๋“ฑ๋กํ•˜๊ธฐ 2. ๋„ค์ด๋ฒ„ ์˜คํ”ˆ์†Œ์Šค API๋ฅผ ํ™œ์šฉ 3. ์ƒํ’ˆ ๊ฒ€์ƒ‰ API์˜ ๋™์ž‘ ์ˆœ์„œ 4. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ ์„ธํŒ… 1) Controller, Service, Dto ํŒจํ‚ค์ง€ ๋ฐ ํด๋ž˜์Šค ์ƒ์„ฑ 2) org.json ํŒจํ‚ค์ง€ ์„ค์น˜ ~ from maven repository 3) Postman์œผ๋กœ ํ™•์ธ 4) UI ์‚ฌ์ „์ž‘์—… : ์ด๋ฏธ์ง€, HTML, JS, CSS ์ค€๋น„ 5. AllInOneController๋กœ ๊ฐœ๋ฐœํ•ด๋ณด๊ธฐ : ํ•œ๊ณ„์  ํŒŒ์•… ๋ชฉ์  1) ํ•œ ๊ฐœ์˜ ํด๋ž˜์Šค์— ๋„ˆ๋ฌด ๋งŽ์€ ์–‘์˜ ์ฝ”๋“œ๊ฐ€ ์กด์žฌ - ์ฝ”๋“œ ์ดํ•ด๊ฐ€ ์–ด๋ ค์›€: ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋‹ค ์ฝ์–ด์•ผ ์ฝ”๋“œ ๋‚ด์šฉ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ..
T ์•„์นด๋ฐ๋ฏธ : JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ (2) ์—ฐ๊ด€๊ด€๊ณ„ ๊ฐ์ฒด๋ฅผ ํ…Œ์ด๋ธ”์— ๋งž์ถ”์–ด ๋ชจ๋ธ๋งํ•˜๋Š” ๊ฒฝ์šฐ( ์ฐธ์กฐ ๋Œ€์‹  ์™ธ๋ž˜ ํ‚ค๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ ) : ๋ฐ์ดํ„ฐ ์ง€ํ–ฅ ๋ฐฉ์‹ @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; @Column(name = "TEAM_ID") private Long teamId; … } @Entity public class Team { @Id @GeneratedValue private Long id; private String name; … } // Main //ํŒ€ ์ €์žฅ Team team = new Team(); team.setName("TeamA"); em..
T ์•„์นด๋ฐ๋ฏธ : JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ (1) JPA ๊ธฐ์ดˆ ์ •๋ณต ํฌ์ธํŠธ 1. ๊ฐ์ฒด - RDB ๊ฐ„ ๋งคํ•‘(์„ค๊ณ„ ๊ณผ์ •) 2. ์‹ค์ œ JPA ๋™์ž‘ ~ ์˜์†์„ฑ ์ปจํ…Œ์ŠคํŠธ ๊ฐ์ฒด ๋งคํ•‘ํ•˜๊ธฐ ํ•„์š”ํ•œ ์–ด๋…ธํ…Œ์ด์…˜ : @Entity @Id : DB PK์™€ ๋งคํ•‘ํ•  ํ•„๋“œ Persistence.xml JPA ์„ค์ • ํŒŒ์ผ jakartax.persistence ~ : JPA ํ‘œ์ค€ ์†์„ฑ (๊ฑฐ์˜ ์‚ฌ์šฉ ์•ˆํ•จ) hibernate : ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ์ „์šฉ ์†์„ฑ ์‹ค์Šต : (* = ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ํ•˜๋Š” ์ผ ํŒŒ์•…ํ•˜๊ธฐ) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ผœ๊ธฐ Maven์„ ์‚ฌ์šฉํ•œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ -> JDK 8, hibernate-entitymanager, h2database ์‚ฌ์šฉ Main, ์—”ํ‹ฐํ‹ฐ ํŒจํ‚ค์ง€ - Member ํด๋ž˜์Šค ์ƒ์„ฑ + @Entity/@Id ~ ๊ธฐ๋ณธ DB ์—ฐ๊ฒฐ์„ธํŒ… ์™„๋ฃŒ Getter, Setter ์„ค์ • ~ JPA ..
JPA : ORM ์ด์ „๊นŒ์ง€ ํ๋ฆ„ ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ๋ณด๋‹ค ์ž์„ธํ•˜๊ฒŒ ์ •๋ฆฌ : https://cdaosldk.tistory.com/167 ORM์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ(JDBC, Querry Mapper) ์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•œ ๊ฒƒ : https://cdaosldk.tistory.com/69 1. DB ํƒ„์ƒ ํ›„ JAVA ์•ฑ๊ณผ ์—ฐ๋™์„ ์œ„ํ•ด JDBC ์ถœ์‹œ JDBC Driver Manager๋Š” ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ DB์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต JDBC Driver Manage cdaosldk.tistory.com ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง์ ‘ ๋‹ค๋ฃฐ ๋•Œ์˜ ๋ฌธ์ œ์  1. ๋ฒˆ๊ฑฐ๋กœ์›€ - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ -> create table user ( id int not null, name varchar(20) not null, age i..

728x90