๐ป 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/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/Spring
๊น์ํ - ์คํ๋ง ์
๋ฌธ : ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ [๋ฌด๋ฃ] ์คํ๋ง ์
๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ - ์ธํ๋ฐ | ๊ฐ์ ์คํ๋ง ์
๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ์ ๋ฐ์ ๋น ๋ฅด๊ฒ ํ์ตํ ์ ์์ต๋๋ค., ์คํ๋ง ํ์ต ์ฒซ ๊ธธ์ก์ด! ๊ฐ๋ฐ ๊ณต๋ถ์ ๊ธธ์ ์์ง ์๋๋ก ๋์๋๋ฆฝ๋๋ค. ๐ฃ ํ์ธํด์ฃผ์ธ www.inflearn.com ์์ 9์ 4์ผ ์๊ฐ ์์ - ๋ชฉํ๋ 2์ฃผ ์ด๋ด ์๊ฐ ์๋ฃํ๊ธฐ ๋ณต์ตํ ๊ฒธ ์คํ๋ง ์
๋ฌธ ๊ฐ์๋ถํฐ ๋ค์ ๊ณต๋ถํด๋ณด๊ธฐ๋ก ํ๋ค. ์ด๋ฒ ๊ฐ์ ์๊ฐ ๋๋๋ฉด ๋ก๋๋งต ์์๋๋ก ์๊ฐํ ์์ ์ด๋ค. ๊ทธ๋์ ์๊ฐ๋ง ํ๋ ์์ด๋์ด๋ฅผ ๊ฐ์ธ ํ๋ก์ ํธ๋ผ๋ ๊ตฌํํด๋ณด๊ณ ์ถ๋ค. ๋ฐฐํฌ๊น์ง ํ๋๊ฒ ์ฌํด ๋ชฉํ! Section 1. ํ๋ก์ ํธ ํ๊ฒฝ์ค์ ..
๐ป Programming/Spring
Q&A ๊ฒ์ํ ๋ง๋ค๊ธฐ 1. DB - QNA ํ
์ด๋ธ ์์ฑ CREATE TABLE QNA ( NUM NUMBER CONSTRAINT QNA_NUM_PK PRIMARY KEY, TITLE VARCHAR2(100) NOT NULL, CONTENTS VARCHAR2(4000), WRITER VARCHAR2(100) NOT NULL, REGDATE DATE, HIT NUMBER, REF NUMBER, STEP NUMBER, DEPTH NUMBER ); - ์์ฑ๋ QNA ํ
์ด๋ธ - SEQUENCE ์์ฑ : num์ ์ฌ์ฉ CREATE SEQUENCE QNA_SEQ INCREMENT BY 1 START WITH 1; 2. ํ์ผ ์ถ๊ฐ QnaDTO class ์์ฑ QnaDAO class ์์ฑ qnaMapper.xml ์์ฑ ..