2022_02_12 - oneso123456789/2022 GitHub Wiki

other

๋กœ์ปฌ ๊นƒ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์—…๋ฐ์ดํŠธ๋Š” remote -> fetch๋กœ Add Create/update specification
ํ•ญ๋ชฉ์— ๊นƒํ—ˆ๋ธŒ์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์€ ๋ธŒ๋žœ์น˜๋ฅผ Source ref๋กœ ์ฐธ์กฐํ•ด์„œ ๊ฐ€์ ธ์˜ค๋ฉด๋จ.

์˜์†/๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต์˜ CRUD ๊ตฌํ˜„

PART 3์˜ ์˜ˆ์ œ๋Š” ๋‹จ์ˆœํ•œ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋งŒ์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—
ํ…Œ์ด๋ธ”, ์Šคํ€€์Šค, ์•ฝ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋“ค์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋ฉด ์ด์ œ๋Š” ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ
๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ CRUD(Create, Read, Update, Delete)์ž‘์—…์„ ์ง„ํ–‰ํ•จ

์˜์† ๊ณ„์ธต์˜ ์ž‘์—…์€ ํ•ญ์ƒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ง„ํ–‰ํ•จ

  • ํ…Œ์ด๋ธ”์˜ ์นผ๋Ÿผ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” VO(Value Object) ํด๋ž˜์Šค์˜ ์ž‘์„ฑ
  • MyBatis์˜ Mapper ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ž‘์„ฑ/XML ์ฒ˜๋ฆฌ
  • ์ž‘์„ฑํ•œ Mapper ์ธํ„ฐํŽ˜์ด์Šค์˜ ํ…Œ์ŠคํŠธ

์œ„์˜ ๊ณผ์ • ์ „์— ๋จผ์ € JDBC ์—ฐ๊ฒฐ์„ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ,
SQL Developer์˜ ์—ฐ๊ฒฐ ์ž์ฒด๊ฐ€ ์ด๋ฏธ JDBC ์—ฐ๊ฒฐ์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋กœ๋„ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์Œ.

์˜์† ๊ณ„์ธต์˜ ๊ตฌํ˜„ ์ค€๋น„

๊ฑฐ์˜ ๋ชจ๋“  ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ตœ์ข… ๋ชฉ์ ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜๊ฑฐ๋‚˜,
์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœํ•  ๋•Œ ์–ด๋А ์ •๋„์˜ ์„ค๊ณ„๊ฐ€
์ง„ํ–‰๋˜๋ฉด ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ด€๋ จ ์ž‘์—…์„ ํ•˜๊ฒŒ ๋จ

VO ํด๋ž˜์Šค ์ž‘์„ฑ

VO ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์€ ํ…Œ์ด๋ธ” ์„ค๊ณ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด๋จ
ํ˜„์žฌ oracle ์ƒ์˜ tbl_board ํ…Œ์ด๋ธ”์˜ ๊ตฌ์„ฑ๊ณผ ๊ฐ™๊ฒŒ ์ž‘์„ฑํ•จ

๊ฒฝ๋กœ๋Š” com.crow.domainํŒจํ‚ค์ง€ ์•ˆ์— BoardVO ํด๋ž˜์Šค๋กœ ์ •์˜ํ•จ
๋‹ค๋ฅธ ํŠน๋ณ„ํ•œ๊ฑด ์—†์ง€๋งŒ @Data ์–ด๋…ธํ…Œ์ด์…˜์„ ์„ ์–ธํ•ด์ค˜์„œ Lombok์„ ์ด์šฉํ•ด์„œ
์ƒ์„ฑ์ž์™€ getter/setter, toString() ๋“ฑ์„ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•จ

Mapper ์ธํ„ฐํŽ˜์ด์Šค์™€ Mapper XML

ํŒŒํŠธ1์—์„œ ๋ดค์ง€๋งŒ MyBatis๋Š” SQL์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์–ด๋…ธํ…Œ์ด์…˜์ด๋‚˜ XML์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Œ
๊ฐ„๋‹จํ•œ SQL ์ด๋ผ๋ฉด ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ฌด๋‚œํ•˜์ง€๋งŒ,
SQL์ด ์ ์  ๋ณต์žกํ•ด์ง€๊ณ  ๊ฒ€์ƒ‰๊ณผ ๊ฐ™์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ SQL๋ฌธ์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š”
์–ด๋…ธํ…Œ์ด์…˜์€ ๊ทธ๋‹ค์ง€ ์œ ์šฉํ•˜์ง€ ๋ชปํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ

XML์˜ ๊ฒฝ์šฐ ๋‹จ์ˆœ ํ…์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜์ง€๋งŒ,

์–ด๋…ธํ…Œ์ด์…˜์˜ ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋‹ค์‹œ ๋นŒ๋“œ ํ•˜๋Š” ๋“ฑ์˜ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์ด
๋–จ์–ด์ง€๋Š” ์ด์œ ๋กœ ๊ธฐํ”ผํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์ข…์ข… ์žˆ์Œ.

Mapper ์ธํ„ฐํŽ˜์ด์Šค

root-context.xml์€ PART 1์—์„œ 'com.crow.mapper`ํŒจํ‚ค์ง€๋ฅผ ์Šค์บ”(์กฐ์‚ฌ)ํ•˜๋„๋ก
์ด๋ฏธ ์„ค์ •ํ•ด ๋ณธ ์ ์ด ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ํ™œ์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ์ž‘ํ•จ

<mybatis-spring:scan base-package="com.crow.mapper" />

Mapper ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ๋ฆฌ์ŠคํŠธ (select)์™€ insert(๋“ฑ๋ก) ์ž‘์—…์„ ์šฐ์„ ํ•ด์„œ ์ž‘์„ฑํ•จ.
com.crow.mapperํŒจํ‚ค์ง€๋ฅผ ์ž‘์„ฑํ•˜๊ณ  BoardMapper ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•จ

BoardMapper.interface ์ž‘์„ฑ

@Select("select * from tbl_board where bno > 0)"
public List<BoardVO>  getList();

BoardMapper ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ์ด๋ฏธ ์ž‘์„ฑ๋œ BoardVO ํด๋ž˜์Šค๋ฅผ ์ ๊ทน์ ์œผ๋กœ
ํ™œ์šฉํ•ด์„œ ํ•„์š”ํ•œ SQL์„ ์–ด๋…ธํ…Œ์ด์…˜์˜ ์†์„ฑ๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
SQL๋ฌธ์„ ์ž‘์„ฑํ• ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ;(์„ธ๋ฏธ์ฝœ๋ก )์ด ์—†๋„๋ก ์ž‘์„ฑํ•ด์•ผํ•จ

SQL ๋’ค์— 'where bno > 0'๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์€ ํ…Œ์ด๋ธ”์„ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ bno๋ผ๋Š”
์นผ๋Ÿผ ์กฐ๊ฑด์„ ์ฃผ์–ด์„œ Primary key(์ดํ•˜ PK)๋ฅผ ์ด์šฉํ•˜๋„๋ก ์œ ๋„ํ•˜๋Š” ์กฐ๊ฑด์ž„
์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ํŽ˜์ด์ง•์—์„œ ์ฒ˜๋ฆฌํ•˜๊ฒ ์Œ

SQL Developer์—์„œ ๋จผ์ € ์‹คํ–‰๊ฒฐ๊ณผ๋ฅผ ํ™•์ธ๋ณผ๊ฒƒ
๊ทธ ์ด์œ ๋Š”

  1. SQL์ด ๋ฌธ์ œ๊ฐ€ ์—†์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„
  2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ commit์„ ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋‚˜์ค‘์— ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋จผ์ € ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•จ

์ž‘์„ฑ๋œ BoardMapper ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์ธ
'src/test/java'์— com.crow.mapperํŒจํ‚ค์ง€๋ฅผ ์ž‘์„ฑํ•˜๊ณ  BoardMapperTests ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•จ

BoardMapperTests ํด๋ž˜์Šค

๊ณ„์†ํ•˜๋˜๊ฑฐ์ฒ˜๋Ÿผ ํ…Œ์ŠคํŠธ ์–ด๋…ธํ…Œ์ด์…˜ ๋ช…์‹œํ•ด์ฃผ๊ณ  BoardMapper์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋ฅผ ์ฃผ์ž… ๋ฐ›์•„์„œ ๋™์ž‘ํ•จ
ํด๋ž˜์Šค ์„ ์–ธ๋ถ€์—๋Š” PersistenceConfig ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์Šคํ”„๋ง ์„ค์ •์„ ์ด์šฉํ•˜๊ณ 
์žˆ์Œ์„ ๋ช…์‹œํ•จ
testGetList()์˜ ๊ฒฐ๊ณผ๋Š” SQL Developer์—์„œ ์‹คํ–‰๋œ ๊ฒƒ๊ณผ ๋™์ผํ•ด์•ผ๋งŒ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ ๊ฒƒ์ž„

Mapper XMLํŒŒ์ผ

BoardMapperTests๋ฅผ ์ด์šฉํ•ด์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด
src/main/resource ๋‚ด์— ํŒจํ‚ค์ง€์™€ ๋™์ผํ•œ com.crow.mapper๋‹จ๊ณ„์˜ ํด๋”๋ฅผ
์ƒ์„ฑํ•˜๊ณ  XMLํŒŒ์ผ์„ ์ž‘์„ฑํ•จ
์ด๋•Œ ํด๋”๋ฅผ ํ•œ๋ฒˆ์— ์ƒ์„ฑํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ํ•˜๋‚˜์”ฉ์ƒ์„ฑํ•ด์•ผํ•จ

ํŒŒ์ผ์˜ ํด๋” ๊ตฌ์กฐ๋‚˜ ์ด๋ฆ„์€ ๋ฌด๋ฐฉํ•˜์ง€๋งŒ ํŒจํ‚ค์ง€์™€ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๋™์ผํ•˜๊ฒŒ
ํ•ด์ฃผ๋ฉด ๋‚˜์ค‘์— ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์ƒํ™ฉ์„ ํ”ผํ• ์ˆ˜ ์žˆ์Œ

BoardMapper.xml ์ž‘์„ฑ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.crow.mapper.BoardMapper">


<select id="getList" resultType="com.crow.domain.BoardVO">
<![CDATA[
select * from tbl_board where bno > 0
]]>
</select>
</mapper>

XML์„ ์ž‘์„ฑํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ์˜ namespace ์†์„ฑ๊ฐ’์„ Mapper ์ธํ„ฐํŽ˜์ด์Šค์™€
๋™์ผํ•œ ์ด๋ฆ„์„ ์ฃผ๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•˜๊ณ ,

ํƒœ๊ทธ์˜ id ์†์„ฑ๊ฐ’์€ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๊ฒŒ ์ž‘์„ฑํ•จ

resultType ์†์„ฑ์˜ ๊ฐ’์€ select ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ ํŠน์ • ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋กœ
๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ์„ค์ •ํ•จ

XML์— ์‚ฌ์šฉํ•œ CDATA ๋ถ€๋ถ„์€ XML์—์„œ ๋ถ€๋“ฑํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•จ

XML์— SQL๋ฌธ์ด ์ฒ˜๋ฆฌ๋˜์—ˆ์œผ๋‹ˆ BoardMapper ์ธํ„ฐํŽ˜์ด์Šค์— SQL์€ ์ œ๊ฑฐํ•จ
(์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ž‘์„ฑํ•œ๋ถ€๋ถ„)

โš ๏ธ **GitHub.com Fallback** โš ๏ธ