- ๐ํ
์ด๋ธ๊ณผ ๋ชจ๋ธ ์ค๊ณ (๊ฐ์ด)
- ์ผ๊ตฌ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ ์ํ ํ ์ด๋ธ์ ์ค๊ณํ๋ค.(PK, FK, UK ์ ์ฝ์กฐ๊ฑด ํ์ธ).
- ์ผ๊ตฌ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ ์ํ ์ ์ ํ ํ ์ด๋ธ์ ํ๋๊ฐ ๊ตฌ์ฑ๋์ด ์๋ค.
- ๐Service ์์ฑ (๊ฐ์ ๊ตฌํ)
- ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ํ ์์ฒญ์ ์ฝ์์ ํตํด ์ ๋ ฅ๋ฐ๋๋ค.
- ์์ฒญ์ ๋ง๋ ์๋น์ค์ ๋ฉ์๋๊ฐ ์ ์ ํ ์คํ๋๋ค.
- Scanner๋ก ์์ฒญํ๋ ๋ชจ๋ ๋ฌธ์์ด์ ํ์ฑํ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ ์ฌ์ฉํ๋ค.
- ๐DAO ์์ฑ (๊ฐ์ ๊ตฌํ)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ DAO๋ฅผ ์ฑ๊ธํค ํจํด์ผ๋ก ๊ตฌํํ์๋ค.
- ์ฟผ๋ฆฌ๋ก ํด๊ฒฐํ ์ ์๋ ์๋ต์ ๋ณด๋ ์ฟผ๋ฆฌ๋ก ํด๊ฒฐํ์๋ค. ex) ํฌ์ง์ ๋ณ ํ ์ผ๊ตฌ ์ ์ ํ์ด์ง๋ฅผ Pivot์ ์ฌ์ฉํ์๋ค.
- DAO์์ ๋๋น๋ก ๋ถํฐ ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ DTO or Model์ ์ฎ๊ธธ ์ ์๋ค.
- ๐คฃ๊ธฐ๋ฅ ํ์ธ (๊ฐ์ด)
- ์ผ๊ตฌ์ฅ ๋ฑ๋ก, ์ผ๊ตฌ์ฅ ๋ชฉ๋ก๋ณด๊ธฐ.
- ํ ๋ฑ๋ก, ํ ๋ชฉ๋ก๋ณด๊ธฐ.
- ์ ์ ๋ฑ๋ก, ํ๋ณ ์ ์ ๋ชฉ๋ก.
- ์ ์ ํด์ถ ๋ฑ๋ก, ์ ์ ํด์ถ ๋ชฉ๋ก.
- ํฌ์ง์ ๋ณ ํ ์ผ๊ตฌ ์ ์ ํ์ด์ง.
- ๐์์ฑ๋
- DAO์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์๋ค.
- ๋ณ์๋ช , ๋ฉ์๋๋ช ์์ฑ์ ์ผ๊ด์ฑ์ด ์๋ค. (์ฝ๋ ์ปจ๋ฒค์ ์ด ์๋ค)
- ์ ์ ํด์ถ ๋ฑ๋ก์์ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์๋ค. (Begin Transaction ~)
- ์ ์ ํด์ถ ๋ฑ๋ก์์ reason ์นผ๋ผ์ ๋ํ Enum์ด ๊ตฌํ๋์ด ์๋ค.
- ์๋น์ค ๋ ์ด์ด ๋ถ๋ฆฌ
- ์์ธ์ฒ๋ฆฌ
- ๋ฆฌํฉํ ๋ง
- ํ ์คํธ์ฝ๋ ์์ฑ
- Intellij Plugin ์ฌ์ฉํจ (Code With Me)
- ํ๋์ ๋ธ๋์น์์ ๊ฐ์ด ์์ - (ํ์ดํ๋ก๊ทธ๋๋ฐ ์ธ์ ํธ์คํธ ์ด๋ฆ์ผ๋ก ์ปค๋ฐ๋จ)
- ๊ธฐ๋ฅ์ ๋๋ก ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๊ธฐ๊ฐ ์ ๋งคํด์ ํ์ด ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์งํํจ
- ํ ์ด๋ธ๊ณผ ๋ชจ๋ธ ์ค๊ณ, DB ์ฐ๊ฒฐ (์ตํ์ค, ์กํํ)
- ์ํคํ ์ณ ๋ฐ ๋ฉ์ธ ๋ก์ง ๊ตฌํ (์ตํ์ค, ์กํํ)
- ๊ตฌํ ๊ธฐ๋ฅ ์์ฑ (๋ฒ๊ฐ์ ๊ฐ๋ฉด์ ์งํ)
- ์ตํ์ค - ์ผ๊ตฌ์ฅ ๋ฑ๋ก, ํ ๋ฑ๋ก, ์ ์ ๋ฑ๋ก, ์ ์ ํด์ถ ๋ฑ๋ก, ํฌ์ง์ ๋ณ ๋ชฉ
- ์กํํ - ์ ์ฒด ์ผ๊ตฌ์ฅ ๋ชฉ๋ก๋ณด๊ธฐ, ์ ์ฒด ํ ๋ชฉ๋ก, ํ๋ณ ์ ์ ๋ชฉ๋ก, ์ ์ ํด์ถ ๋ชฉ๋ก
- ๋ฆฌํฉํ ๋ง (์ตํ์ค, ์กํํ)
-
์ผ๊ตฌ์ฅ ํ ์ด๋ธ (์ด 3๊ฐ ์ผ๊ตฌ์ฅ)
- stadium
id (PK, ์๋ ๋ฒํธ ์ฆ๊ฐ) (int) name (varchar) created_at (timestamp)
-
ํ ํ ์ด๋ธ (์ด 3๊ฐ ํ)
- team
id (PK, ์๋ ๋ฒํธ ์ฆ๊ฐ) stadium_id (int) name (varchar) created_at (timestamp) stadium_id๋ fk ์ ๋๋ค.
-
์ ์ ํ ์ด๋ธ (๊ฐ 9๋ช )
- player
id (PK, ์๋ ๋ฒํธ ์ฆ๊ฐ) team_id (int) name (varchar) position (varchar) created_at (timestamp) team_id์ position์ ๋ค์ค ์นผ๋ผ ์ ๋ํฌ ์ ์ฝ์กฐ๊ฑด์ด ํ์ํฉ๋๋ค. team_id๋ fk ์ ๋๋ค.
-
ํด์ถ์ ์ ํ ์ด๋ธ
- out_player
id (PK, ์๋ ๋ฒํธ ์ฆ๊ฐ) player_id (int) reason (varchar) created_at (timestamp) player_id๋ fk ์ ๋๋ค.
- BaseBallApp ์์ฑ
main ํจ์๋ฅผ ๊ฐ์ง๋ ํด๋์ค
ํด๋น ํด๋์ค์์ Scanner๋ก ์
๋ ฅ์ ๋ฐ๊ณ ,
์
๋ ฅ๋ฐ์ ๊ฐ์ ํ ๋๋ก Service์ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
Service์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ค return ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ Console์ ์ถ๋ ฅํฉ๋๋ค.
์ฝ์ ์์
1. ์ฝ์์ ์ถ๋ ฅ๋๋ ์ง๋ฌธ
- ์ด๋ค ๊ธฐ๋ฅ์ ์์ฒญํ์๊ฒ ์ต๋๊น?
2. ํด๋ผ์ด์ธํธ๊ฐ ์
๋ ฅํ๋ ๋ด์ฉ
- ์ ์๋ฑ๋ก?teamId=1&name=์ด๋ํธ&position=1๋ฃจ์
3. main ๋ฉ์๋์์ ํ ์ผ
- ์
๋ ฅ๋๋ ๊ฐ์ ํ์ฑํ๋ค.
- ? ์์ ๋ด์ฉ์ด ์ ์๋ฑ๋ก์ด๋ฉด PlayerService์ ์ ์๋ฑ๋ก() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- ํธ์ถ์์ ์ธ์๋ก 1, ์ด๋ํธ, 1๋ฃจ์๋ฅผ ์ ๋ฌํ๋ค.
- PlayerService์ ์ ์๋ฑ๋ก() ๋ฉ์๋์์ ํด๋น ๊ฐ์ ๋ฐ์์ PlayerDao์ insert() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- ๊ฐ์ด DB์ ์ ๋ค์ด๊ฐ๋ค๋ฉด, ๊ฒฐ๊ณผ๊ฐ 1๋ก ๋ฆฌํด๋ ๊ฒ์ด๋ค. 1์ด ๋ฆฌํด๋๋ฉด Console์ ์ฑ๊ณต์ด๋ผ๋ ๋ฉ์์ง๋ฅผ ์ถ
๋ ฅํ๋ค.
- DBConnection ์์ฑ
DB ์ฐ๊ฒฐ Connection์ ์์ฑํ๋ ํด๋์ค
- Model ์์ฑ
๋ชจ๋ธ์ ํ ์ด๋ธ๊ณผ ๋ค๋ฅด๊ฒ camel ํ๊ธฐ๋ฒ์ผ๋ก ๋ณ์ ๋ค์ด๋ฐ์ ํฉ๋๋ค.
- Stadium
- Team
- Player
- OutPlayer
- Dao ์์ฑ
- StadiumDao.java
- TeamDao.java
- PlayerDao.java
- OutPlayerDao.java
- Service ์์ฑ
- StadiumService.java
- TeamService.java
- PlayerService.java
- OutPlayerService.java
- ์ผ๊ตฌ์ฅ ๋ฑ๋ก ๐
์์ฒญ : ์ผ๊ตฌ์ฅ๋ฑ๋ก?name=์ ์ค์ผ๊ตฌ์ฅ ์๋ต : ์ฑ๊ณต์ด๋ผ๋ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค.
insert into stadium(name)
values(?)
- ์ ์ฒด ์ผ๊ตฌ์ฅ ๋ชฉ๋ก๋ณด๊ธฐ ๐
์์ฒญ : ์ผ๊ตฌ์ฅ๋ชฉ๋ก ์๋ต : ์ผ๊ตฌ์ฅ ๋ชฉ๋ก์ Model -> Stadium์ List์ ๋ด์์ ์ถ๋ ฅํ๋ค.
select * from stadium
- ํ ๋ฑ๋ก ๐
์์ฒญ : ํ๋ฑ๋ก?stadiumId=1&name=NC ์๋ต : ์ฑ๊ณต์ด๋ผ๋ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค.
insert into team (stadium_id, name) values (?, ?)
- ์ ์ฒด ํ ๋ชฉ๋ก ๐
์์ฒญ : ํ๋ชฉ๋ก ์๋ต : ํ ๋ชฉ๋ก์ Stadium ์ ๋ณด๋ฅผ ์กฐ์ธํด์ ์ถ๋ ฅํด์ผ ๋๋ค. TeamRespDTO๊ฐ ํ์ํ๋ค.
select t.id, t.name, t.created_at, s.name
from stadium s
join team t on t.stadium_id = s.id
- ์ ์ ๋ฑ๋ก ๐
์์ฒญ : ์ ์๋ฑ๋ก?teamId=1&name=์ด๋ํธ&position=1๋ฃจ์ ์๋ต : ์ฑ๊ณต์ด๋ผ๋ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค.
ํฌ์ง์ ์ ์๋์ ๊ฐ์ด ์ค๋ณต๋์ง ์๊ณ ์ ๋ ฅ๋์ด์ผ ํฉ๋๋ค. ๊ฐ์ ํฌ์ง์ ์ ๋ ๋ช ์ ์ ์๊ฐ ๋ฑ๋ก๋ ์ ์์ต๋๋ค. player ํ ์ด๋ธ์ ํฌ์ง์ ์นผ๋ผ์ ํ ๋ณ๋ก ์ ์ผํด์ผ ํฉ๋๋ค.
์ฆ, player ํ ์ด๋ธ์ team_id์ position์ ๋ค์ค ์นผ๋ผ ์ ๋ํฌ ์ ์ฝ์กฐ๊ฑด์ด ํ์ํฉ๋๋ค.
Position ํด๋์ค
1๋ฃจ์ First Baseman (FB)
2๋ฃจ์ Second Baseman (SB)
3๋ฃจ์ Third Baseman (TB)
ํฌ์ Catcher (C)
ํฌ์ Pitcher (P)
์ ๊ฒฉ์ Short Stop (SS)
์ข์ต์ Left Fielder (LF)
์ค๊ฒฌ์ Center Fielder (CF)
์ฐ์ต์ Right Fielder (RF)
insert into player (team_id, name, position) values (?, ?, ?)
- ํ๋ณ ์ ์ ๋ชฉ๋ก ๐
์์ฒญ : ์ ์๋ชฉ๋ก?teamId=1 ์๋ต : ์ ์ ๋ชฉ๋ก์ Model -> Player๋ฅผ List์ ๋ด์์ ์ถ๋ ฅํ๋ค. (team_id๋ ์ถ๋ ฅํ์ง ์์๋ ๋๋ค)
select id, name, position, created_at from player
where team_id = 1
- ์ ์ ํด์ถ ๋ฑ๋ก ๐
์์ฒญ : ํด์ถ๋ฑ๋ก?playerId=1&reason=๋๋ฐ ์๋ต : ์ฑ๊ณต์ด๋ผ๋ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
๋ ๊ฐ ์ด์์ write ๋ฌธ์ด ์คํ๋์ด์ผ ํฉ๋๋ค. ์ด๋๋ ๋ฐ๋์ ํธ๋์ญ์ ๊ด๋ฆฌ๊ฐ Service์์ ํ์ํฉ๋๋ค. out_player์ ํด์ถ ์ ์๋ฅผ insertํ๊ณ , player ํ ์ด๋ธ์์ ํด๋น ์ ์์ team_id๋ฅผ null๋ก ๋ณ๊ฒฝํฉ๋๋ค.
insert -> out_player : insert into out_player (player_id, reason) values (?, ?)
update -> player : update player set team_id = null where id = ?
- ์ ์ ํด์ถ ๋ชฉ๋ก ๐
์์ฒญ : ํด์ถ๋ชฉ๋ก ์๋ต : OutPlayerRespDTO์ ๋ด์์ ์ถ๋ ฅํฉ๋๋ค.
select p.name, p.position, op.reason, op.createdAt
from player p
left join out_player op on op.player_id = p.id
์๋๋ player ํ ์ด๋ธ๊ณผ out_player ํ ์ด๋ธ์ด join ๋ ๊ฒฐ๊ณผ์ ๋๋ค. ํด์ถ ๋ ์ ์๋ ์์ ํ์๊ฐ ๋๊ณ , ํด์ถ ๋์ง ์์ ์ ์๋ ํ์๋์ง ์์ต๋๋ค. ์ด๊ฒ์ OuterJoin์ ๋ํด์ ์ดํด ํ๊ณ ์์ด์ผ ํ ์ ์๋ ๋ฌธ์ ์ ๋๋ค. ํด๋น ๋ฌธ์ ๋ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ๋ก๋ ํด๊ฒฐํ ์ ์์ต๋๋ค. (pdf ์ฐธ๊ณ )
- ํฌ์ง์ ๋ณ ํ ์ผ๊ตฌ ์ ์ ํ์ด์ง
์์ฒญ : ํฌ์ง์ ๋ณ๋ชฉ๋ก ์๋ต : PositionRespDto ์ ๊ฐ์ ๋ด์์ ์ฝ์์ ์ถ๋ ฅํฉ๋๋ค.
select
MAX(CASE WHEN a.team_name = '" + team + "' THEN a.player_name ELSE '-' END) as " + team + ",
ยทยทยท
a.position,
from (
select p.name as player_name, p.position, t.name as team_name
from team t
join player p on p.team_id = t.id
) a
group by a.position;
ํฌ์ง์ ์ ํ ์ด๋ธ์ ์นผ๋ผ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋กฏ๋ฐ, NC, ๊ธฐ์, ํดํ๋ ๊ฐ์ ๋๋ค. ๊ฐ์ด ์นผ๋ผ์ผ๋ก ์ฌ๋ผ์ ์๋ ํํ์ ๊ฒฐ๊ณผ์ ๋๋ค. ์ค๋ฌด๋ฅผ ํ๋ค ๋ณด๋ฉด, ๋ค์ํ ์๊ตฌ์ฌํญ์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค.
๊ฐ๋ น ํ์ฌ์ ๋ค๋ฅธ ๋ถ์์์ ์๋์ ๊ฐ์ ์๊ตฌ๋ฅผ ํ ์ ์์ต๋๋ค.
- ๊น๋๋ฆฌ ๊ฐํ์ 1๋ฃจ์๊ฐ ๋๊ตฐ์ง, 2๋ฃจ์๊ฐ ๋๊ตฐ์ง ๋ณด๊ณ ์ถ์ด
- ๊ทธ๋ฐ๋ฐ, ๊ธฐ์กด์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ ์ธ๋ก๋ก ๋๋ฌด ๊ธธ๊ฒ ๋ณด์ฌ์ ๋ณด๊ธฐ๊ฐ ๋๋ฌด ํ๋ค์ด
- ๊ฐ๋ก๋ก ์ข ์๋์ ๊ฐ์ด ๋ณด์ฌ์ค ์ ์๊ฒ ๋?
๋น์ฐํ ํด๋ผ์ด์ธํธ๋ ์ ๋ฌธ ์ฉ์ด๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ์๊ตฌํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ํผ๋ฒ์ ์ฌ์ฉํด์ ์ธ๋ก๋ก ๋ณด์ด๋ ๋ฐ์ดํฐ๋ค์ ๊ฐ๋ก๋ก ๋ณด์ฌ์ค ์ ์์ต๋๋ค.