2022.02.24 ์ ๊ธฐ๋ก
=> ๊ณต๋ถ ๊ด๋ จ
1) ๋ชจ๋ ์๋ฐ ์คํธ๋ฆผ(Stream) & ์ ์ถ๋ ฅ ์คํธ๋ฆผ(IO Stream)
2) ๊ธ์ผ ๋ฐฐ์ด ๋ด์ฉ ๋ณต์ต
3) ์คํ๋ง ๊ฐ์ฒด์งํฅ CH2
=> ํ์ด๋ ํ๋ก์ ํธ ๊ด๋ จ
1) UI ํ์
โถ ๋ฌธ์ ์ ๋ฆฌ
1. ์คํธ๋ฆผ ๊ด๋ จ ์ ๋ฆฌ
> ๋ฌธ์ : ์คํธ๋ฆผ์์ Map(), flatMap()์ ์ฐจ์ด?
> ์ ๋ฆฌ : ์คํธ๋ฆผ์ ์คํธ๋ฆผ์ ๋ฐํํ๋ ์ค๊ฐ์ฐ์ฐ๊ณผ ์คํธ๋ฆผ์ ๋ฐํํ๋ ์ค๊ฐ ์ฐ์ฐ. ์คํธ๋ฆผ์ ํํ๊ฐ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ flatMap์ด ์ ์ฉ
โถ ๊ณต๋ถ ๋ด์ฉ
Mybatis
mapper ์๋ฆฌ๋จผํธ
- class ์์ฑ : Interface ๊ธฐ๋ฐ์ ๋งตํผ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์์ฑ๊ฐ์ผ๋ก ์ค์
- ⇒ Interface & XML ํ์ผ์ ๊ฒฝ๋ก๋ Java ์๋ฃํ์ผ๋ก ํํ
- Interface ๋งตํผ์ ์ฅ์ : SqlSession ์ธ์คํด์ค๋ก SQL ๋ช ๋ น์ XML ๋งตํผ๋ณด๋ค ์ฝ๊ฒ ์ ๊ณต๋ฐ์ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌ
- Interface ๋งตํผ์ ๋จ์ : ๋งคํ ์ค์ ๊ธฐ๋ฅ๊ณผ ๋์ SLQ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ๋ถํธ
⇒ XML ๋งตํผ์ ์ฅ์ : ๋งคํ ์ค์ ๊ธฐ๋ฅ(์๋ ๋งคํ)๊ณผ ๋์ SQL ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ํธ๋ฆฌ
⇒ XML ๋งตํผ์ ๋จ์ : SqlSession ์ธ์คํด์ค๋ก SQL ๋ช ๋ น์ ์ ๊ณต๋ฐ์ ์ฌ์ฉํ๊ธฐ ๋ถํธ, DAO ๋ง๋ค๊ธฐ ๋ถํธ (๊ฐ๊ฐ์ ๋ช ๋ น์ ๋ง๋ ์ฟผ๋ฆฌ๋ฌธ์ ํธ์ถํด์ผํจ)
XML ๋งตํผ ํ์ผ๊ณผ Interface ๋งตํผ ํ์ผ์ ํ๋์ ๋ ํผ๋ก ๋์๋๋๋ก ์ค์ ํ์ฌ ์ฌ์ฉ - ๋งตํผ ๋ฐ์ธ๋ฉ(Mapper Binding)
⇒ SQL ๋ช ๋ น์ XML ๋งตํผ์ ๋ฑ๋กํ๊ณ DAO ํด๋์ค๋ Interface ๋งตํผ๋ฅผ ์ด์ฉํด์ ์์ฑ
- mapper ์๋ฆฌ๋จผํธ์๋ XML ๋งตํผ ํ์ผ๋ง ๋ฑ๋กํ์ฌ ์ค์
XML ๋งตํผ ํ์ผ๊ณผ Interface ๋งตํผ ํ์ผ์ ํ๋์ ๋งตํผ๋ก ๋์๋๋๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ
- ⇒ XML ๋งตํผ์ mapper ์๋ฆฌ๋จผํธ์ namespace ์์ฑ๊ฐ์ผ๋ก ๊ฐ์ ์ด๋ฆ์ Interface ๋งตํผ ํ์ผ์ ์์ฑ
- ⇒ XML ๋งตํผ์์ SQL ๋ช ๋ น์ด ๋ฑ๋ก๋ ์๋ฆฌ๋จผํธ์ Interface ๋งตํผ์ ์ถ์ ๋ฉ์๋๊ฐ ๋์ผํ ํํ๋ก ์์ฑ → DAO ํด๋์ค์์ ์ถ์๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ ๊ฐ์ ์ด๋ฆ์ ์๋ฆฌ๋จผํธ์ SQL ๋ช ๋ น์ ์ ๊ณต๋ฐ์ ์ฌ์ฉ
- ์ผ๋ฐ์ ์ผ๋ก parameterType ์์ฑ๊ฐ์ ์ถ์ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก ์ค์ ํ๊ณ resultType ์์ฑ๊ฐ์ ์ถ์๋ฉ์๋์ ๋ฐํํ์ผ๋ก ์ค์
- ⇒ ๋งตํผ ๋ฐ์ธ๋ฉํ ๊ฒฝ์ฐ ์๋ฆฌ๋จผํธ์ parameterType ์์ฑ์ ์๋ต ๊ฐ๋ฅ (ํ์ ์์๋ ์๋ต)
mapper ์ธํฐํ์ด์ค
- mybatis ํ๋ ์์ํฌ๋ ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ์ฌ ๋งตํผ ์ค์ ๊ฐ๋ฅ
- ⇒ ์ถ์ ๋ฉ์๋์ ๋งตํผ ์ด๋ ธํ ์ด์ (Mapper Annotation)์ ์ฌ์ฉํ์ฌ SQL ๋ช ๋ น ๋ฑ๋ก
@insert : INSERT ๋ช ๋ น์ ๋ฑ๋กํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
- value ์์ฑ : ์ถ์๋ฉ์๋์ ๋ฑ๋กํ SQL ๋ช ๋ น์ ์์ฑ๊ฐ์ผ๋ก ์ค์
- ⇒ ์ด๋ ธํ ์ด์ ์ value ๋ค๋ฅธ ์์ฑ์ด ์๋ ๊ฒฝ์ฐ ์์ฑ๊ฐ๋ง ์ค์ ๊ฐ๋ฅ
@update: UPDATE ๋ช ๋ น์ ๋ฑ๋กํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
@delete : DELETE ๋ช ๋ น์ ๋ฑ๋กํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
@select : SELECT ๋ช ๋ น์ ๋ฑ๋กํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
- ๋ฌธ์ ์ : ๊ฒ์ํ์ ์ปฌ๋ผ๋ช ๊ณผ DTO ํด๋์ค์ ํ๋๋ช ์ด ๋ชจ๋ ๋ค๋ฅด๋ฉด ๊ฒ์ํ์ ์ปฌ๋ผ๊ฐ์ด DTO ํด๋์ค์ ํ๋์ ํ๋๋ ์ ์ฅ๋์ง ์์ DTO ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ์ ๊ณตํ์ง ์๊ณ NULL ์ ๊ณต
- ํด๊ฒฐ ๋ฐฉ์ 1) : ๊ฒ์ํ์ ์ปฌ๋ผ๋ช ์ DTO ํด๋์ค์ ํ๋๋ช ๊ณผ ๊ฐ๋๋ก ๊ฒ์ํ๋ค.
- ⇒ SELECT ๋ช
๋ น์์ Column Alias ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ๊ฒ์๋์์ ๋ณ์นญ์ ์ค์ ํ์ฌ ๊ฒ์ (SQL as ์ด์ฉ ๋ณ์นญ)
- SQL ๋ช ๋ น์ ๊ตฌ์ฑํ๋ ์ผ๋ถ๋ถ์ ๋ฌธ์ฅ์ ๋ฑ๋กํ๊ธฐ ์ํ ์๋ฆฌ๋จผํธ
- sql ์๋ฆฌ๋จผํธ์ ๋ฑ๋ก๋ SQL ๋ฌธ์ฅ์ SQL ๋ช ๋ น์ ํฌํจํ๋ ์๋ฆฌ๋จผํธ
- refid ์์ฑ : sql ์๋ฆฌ๋จผํธ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ์๋ณ์๋ฅผ ์์ฑ๊ฐ์ผ๋ก ์ค์
- sql
- ํด๊ฒฐ ๋ฐฉ์ 2) : mybatis ํ๊ฒฝ์ค์ ํ์ผ์์ setting ์๋ฆฌ๋จผํธ๋ฅผ ์ด์ฉํ์ฌ [mapUnderscoreToCamelCase] ์ด๋ฆ์ผ๋ก ์ ์ฉ๋ ์คํ ๊ด๋ จ ๊ฐ์ [true]๋ก ๋ณ๊ฒฝ
- ⇒ SQL ๋ช ๋ น์์ ์ฌ์ฉ๋ ์คํ ์ดํฌ ํ๊ธฐ๋ฒ์ ์๋ณ์๊ฐ ์๋์ผ๋ก ์นด๋ฉ ํ๊ธฐ๋ฒ์ผ๋ก ๋ณ๊ฒฝ๋์ด ๊ฒ์
- resultMap ์์ฑ : ๋งคํ์ ๋ณด๊ฐ ์ ์ฅ๋ resultMap ์๋ฆฌ๋จผํธ์ ์๋ณ์๋ฅผ ์์ฑ๊ฐ์ผ๋ก ์ค์ - ์๋ ๋งคํ ์ฒ๋ฆฌ
resultMap
- ๊ฒ์ํ์ ์ปฌ๋ผ๊ฐ์ ํด๋์ค์ ํ๋์ ๋งคํ๋์ด ์ ์ฅ๋๋๋ก ์ค์ ํ๋ ์์ ์๋ฆฌ๋จผํธ
- type ์์ฑ : ๊ฒ์ํ์ ์ปฌ๋ผ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ํ๋๊ฐ ์ ์ธ๋ DTO ํด๋์ค๋ฅผ ์์ฑ๊ฐ์ผ๋ก ์ค์
- ⇒ ํด๋์ค๋ช
๋์ ๋ณ์นญ ์ฌ์ฉ ๊ฐ๋ฅ⇒ PK ์ ์ฝ์กฐ๊ฑด์ด ๋ถ์ฌ๋ ์ปฌ๋ผ๊ฐ์ ๋งคํ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ
- ๊ฒ์ํ์ ์ปฌ๋ผ๊ฐ์ ํด๋์ค์ ํ๋์ ์ ์ฅ๋๋๋ก ๋งคํ ์ค์ ํ๋ ์๋ฆฌ๋จผํธ
- column ์์ฑ : ๊ฒ์ํ์ ์ปฌ๋ผ๊ฐ์ด ์ ์ฅ๋ ์ปฌ๋ผ๋ช ์ ์์ฑ๊ฐ์ผ๋ก ์ค์
- property ์์ฑ : ๊ฒ์ํ์ ์ปฌ๋ผ๊ฐ์ด ์ ์ฅ๋ ํด๋์ค์ ํ๋๋ช ์ ์์ฑ๊ฐ์ผ๋ก ์ค์
- ๊ฒ์ํ์ ์ปฌ๋ผ๊ฐ์ ํด๋์ค์ ํ๋์ ์ ์ฅ๋๋๋ก ๋งคํ ์ค์ ํ๋ ์๋ฆฌ๋จผํธ
- id
⇒ DTO ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค ์์ฑ ํ Setter ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๊ฒ์ํ์ ์ปฌ๋ผ๊ฐ์ ์ ๋ฌ๋ฐ์ ์ธ์คํด์ค์ ํ๋๊ฐ์ผ๋ก ๋ณ๊ฒฝ → ์์ฑ์๋ก ํ๋ ๋ฐฉ๋ฒ ์์ง ์์๊น?
constructor
- ๋งค๊ฐ๋ณ์๊ฐ ์ ์ธ๋ ์์ฑ์๋ฅผ ์ด์ฉํ์ฌ DTO ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์์ฑ์์ ํ๋ ์ด๊ธฐํ ๋ช ๋ น์ ์ด์ฉํ์ฌ ๊ฒ์ํ์ ์ปฌ๋ผ ๊ฐ์ ํ๋ ๊ฐ์ผ๋ก ์ ์ฅ๋๋๋ก ๋งคํ ์ฒ๋ฆฌ
- ์์ฑ์๋ฅผ ์ด์ฉํ์ฌ ๋งคํ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์์ ์๋ฆฌ๋จผํธ
- ⇒ idArg ์๋ฆฌ๋จผํธ์ arg ์๋ฆฌ๋จผํธ๋ฅผ ํ์ ์๋ฆฌ๋จผํธ๋ก ์ฌ์ฉํ์ฌ ๋งคํ ์ ๋ณด ์ ๊ณต
- ⇒ ์์ฑ์ ๋งค๊ฐ๋ณ์์ ํ์ ์๋ฆฌ๋จผํธ์ ๊ฐฏ์์ Java ์๋ฃํ์ด ๋ฐ๋์ ์ผ์นํด์ผ๋ง ์์ฑ์๋ฅผ ์ด์ฉํ์ฌ ๋งคํ ์ฒ๋ฆฌ
- idArg : ๊ฒ์ํ์ ์ปฌ๋ผ๊ฐ์ ์์ฑ์ ๋งค๊ฐ๋ณ์์ ์ ๋ฌํ์ฌ ์ ์ฅํ๋ ์๋ฆฌ๋จผํธ
- ⇒ PK ์ ์ฝ ์กฐ๊ฑด์ด ๋ถ์ฌ๋ ์ปฌ๋ผ๊ฐ์ ๋งคํ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ
- arg : ๊ฒ์ํ์ ์ปฌ๋ผ๊ฐ์ ์์ฑ์ ๋งค๊ฐ๋ณ์์ ์ ๋ฌํ์ฌ ์ ์ฅํ๋ ์๋ฆฌ๋จผํธ
- javaType ์์ฑ : ๊ฒ์ํ์ ์ปฌ๋ผ๊ฐ์ด ์ ์ฅ๋ ๋งค๊ฐ๋ณ์์ Java ์๋ฃํ์ ์์ฑ๊ฐ์ผ๋ก ์ ์ธ
selectKey ์๋ฆฌ๋จผํธ ⇒ ๋ต๋ณํ ๊ฒ์ํ์ ์ข๋ค. (์ํ์ค)
- SELECT ๋ช ๋ น์ ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ์ ์ธ์คํด์ค์ ํ๋๊ฐ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํ ์๋ฆฌ๋จผํธ
- ⇒ insert ์๋ฆฌ๋จผํธ์ ์ข ์๋ ํ์ ์๋ฆฌ๋จผํธ
- ⇒ ์๋ ์ฆ๊ฐ๊ฐ ๋๋ ๋์๊ฐ์ ๊ฒ์ํ์ฌ ์ธ์คํด์ค์ ํ๋์ ์ ์ฅ
- resultType ์์ฑ : SELECT ๋ช ๋ น์ ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ์ ๋งคํํ์ฌ ์ ๊ณตํ๊ธฐ ์ํ Java ์๋ฃํ์ ์์ฑ๊ฐ์ผ๋ก ์ค์
- keyProperty ์์ฑ : SELECT ๋ช ๋ น์ ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ์ธ์คํด์ค์ ํ๋๋ช ์ ์์ฑ ๊ฐ์ผ๋ก ์ค์
- order ์์ฑ : [BEFORE] & [AFTER] ์ค ํ๋๋ฅผ ์์ฑ๊ฐ์ผ๋ก ์ค์
DAO
SqlSession.getMapper(Class<T> clazz)
- ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ์ธํฐํ์ด์ค(Clazz - ์ธํฐํ์ด์ค ๋งตํผ) ์ ๋ฌ๋ฐ์ Mapper ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ ๋ฉ์๋
- ⇒ ๋งค๊ฐ๋ณ์์ xxx.class ํ์์ผ๋ก Class ๊ฐ์ฒด(Clazz)๋ฅผ ์ ๋ฌํ์ฌ ์ ์ฅ
- Class.forname()์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
Mapper
- ์ธํฐํ์ด์ค ๋งตํผ์ ์ถ์๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ฑ๋ก๋ SQL ๋ช ๋ น์ ์ ๊ณต๋ฐ๊ธฐ ์ํ ์ธ์คํด์ค
mybatis-config.XML
package (๊ณ์ ๋งคํ ์ํด๋ ๋จ) ⇒ ๋์ ํจํค์ง ์์ ๋ค ๋ง๋ค์
- ํน์ ํจํค์ง์ ์์ฑ๋ ๋ชจ๋ Interface ๋งตํผ ํ์ผ์ ์๋์ผ๋ก ๋งตํผ๋ก ๋ฑ๋ก๋๋๋กํจ.
- name ์์ฑ : ๋งตํผ๋ก ๋ฑ๋ก๋ Interface ๋งตํผ ํ์ผ์ ํจํค์ง๋ฅผ ์์ฑ๊ฐ์ผ๋ก ์ค์
DTO
- SQL ๋ช ๋ น์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ ์๋ณ์๋ฅผ ์ ์ธํ ๋ ์ค๋ค์ดํฌ ํ๊ธฐ๋ฒ ์ฌ์ฉ
- ์ค๋ค์ดํฌ ํ๊ธฐ๋ฒ(Snake Case) : ์๋ณ์ ์ ์ธ์ ๋จ์ด์ ๋จ์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด _ ๊ธฐํธ ์ฌ์ฉ
- Java ์๋ฃํ (Class, Interface, Enum)์ ํ์ค์นผ ํ๊ธฐ๋ฒ ์ฌ์ฉ
- ⇒ ํ์ค์นผ ํ๊ธฐ๋ฒ(Pascal Case) : ๋ชจ๋ ๋จ์ด์ ์ฒซ๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ํํํ์ฌ ์๋ณ์ ์ ์ธ
- Java ์๋ฃํ์ ์ ๋ํ ์๋ณ์๋ ์นด๋ฉ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ ์ธ
DAO์ ๋ค์ด๊ฐ๋ ๋ด์ฉ์ด ๋ฐ๋ณต๋๋ค?
⇒ ๋ฐ๋ณต๋๋ ๋ด์ฉ์ ๋ฐ๋ก ๋นผ์ ํด๋์ค๋ฅผ ๋ง๋ค์ (์ ์ง๋ณด์)
- SqlSessionFactory ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํด๋์ค ์์ฑ
- ⇒ ๋งตํผ๋ฅผ ์ฌ์ฉํ๋ DAO ํด๋์ค๊ฐ ์์๋ฐ๊ธฐ ์ํ ๋ถ๋ชจํด๋์ค
- ⇒ ์์์ ๋ชฉ์ ์ผ๋ก ์์ฑ๋ ํด๋์ค์ด๋ฏ๋ก ์ถ์ํด๋์ค๋ก ์ ์ธํ๋ ๊ฒ์ ๊ถ์ฅ
โถ ํ์ด๋ ํ๋ก์ ํธ
> ์คํ 9์ UI ๊ด๋ จํ์
> ์ ๊ธฐ ๋ฐฐ์ก ๋ฐ ๊ธ ์์ฑ ํต์ผ ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒฐ์
> ์ ๊ธฐ ๋ฐฐ์ก ์ถ๊ฐ ๋ฐ ์์ธ ์ฌ๋ถ ๊ฒฐ์
> ๋๋ต์ ์ธ ๋ถํธ์คํธ๋ฉ ์ค๊ฐ ํ์ธ
> ๋ด์ผ ui ํ์