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.. ์ด์ 1 2 3 4 5 ๋ค์