[๐ ์ฌ์ดํด2 - ๋ฏธ์ (๊ธฐ๋ฌผ ํ์ฅ + DB ์ ์ฉ)] ์ํฐ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#333
[๐ ์ฌ์ดํด2 - ๋ฏธ์
(๊ธฐ๋ฌผ ํ์ฅ + DB ์ ์ฉ)] ์ํฐ ๋ฏธ์
์ ์ถํฉ๋๋ค.#333ParkJiYeoung8297 wants to merge 25 commits intowoowacourse:parkjiyeoung8297from
Conversation
- ๋ธ๋ผ์ฐ์ ์๋ฒ ์ฌ๋ ๋ฉ์๋ ์ถ๊ฐ - ๋ฐ์ดํฐ ์ด๊ธฐ ๋ก๋์ DB connection ๋ถ๋ฆฌ
younghoondoodoom
left a comment
There was a problem hiding this comment.
์๋ ํ์ธ์ ์ํฐ~! ์ด๋ฒ ์ฌ์ดํด2๋ ์ ๋ถํ๋๋ฆฝ๋๋ค ๐
์ฌ์ดํด2๋ ์ ๊ตฌํํด์ฃผ์ จ๊ตฐ์~! ๋ค๋ง, ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ์ง ๋ชปํ ๋ถ๋ถ๊ณผ ๊ณ ๋ฏผ์ด ํ์ํ ๋ถ๋ถ์ด ๋ณด์ฌ์ ์ฝ๋ฉํธ ๋จ๊ฒจ๋จ์ผ๋ ๋ฐ์ ๋ถํ๋๋ฆฝ๋๋ค!
๋ค์์ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ๋๋ค.
- PieceFinder๋ฅผ ํตํด Piece์์ Board ์ ๋ณด ์กฐํํ๊ธฐ
๋ฆฌ๋ทฐ conversation์์ ๋ํ ๋๋ ๋ณด์์ฃ !
- Service์์ JanggiGame ๋๋ฉ์ธ ์์ฑ
๋ฆฌ๋ทฐ conversation์์ ๋ํ ๋๋ ๋ณด์์ฃ !
- DB Connection pool
๋ฆฌ๋ทฐ conversation์์ ๋ํ ๋๋ ๋ณด์์ฃ !
- DB ๊ธฐ๋ฌผ ๋ฐ์ดํฐ update ๋ฐฉ๋ฒ
๋ง์ฝ ๊ธฐ๋ฌผ์ ์ด๋ํ ๋๋ง๋ค update๋ฅผ ํ๋๊ฒ ์๋ ๊ฒ์์ด ๋๋ฌ์๋ ๋ง์ง๋ง ์ํ์ ๋ํด์ db update๋ฅผ ํ๋ ๊ตฌ์กฐ์๋ค๋ฉด delete -> insertํ๋๊ฒ ๋ ํจ์จ์ ์ผ ์ ์์๊ฑฐ ๊ฐ์์. ํ์ง๋ง ์ง๊ธ์ ๊ธฐ๋ฌผ์ ์ด๋ํ ๋๋ง๋ค ์์น๋ฅผ updateํ๋ ๊ตฌ์กฐ๋ค๋ณด๋ ๋ชจ๋ ๊ธฐ๋ฌผ์ ์ญ์ ํ๊ณ ๋ค์ insert๋ฅผ ํ๋๊ฒ ์ฟผ๋ฆฌ๋ ํจ์ฌ ๋ง์ด ๋๊ฐ๊ณ ์์ ๋น์ฉ์ด ๋ ๋ง์ ๊ฒ ๊ฐ๋ค์ฌ!
- ํ ์คํธ ์ฝ๋
๊ธฐ๋ฅ์ด ๋ง์์ง๋ค๋ณด๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๋จ์ ํ ์คํธ ์ฝ๋์ ๋ํ ๋ถ๋ด์ด ์๋๊ฑธ ์ฌ์ค์ ๋๋ค. ๋ค๋ง, ๋ชจ๋ ๋จ์์ ๋ํด์ ํ ์คํธ๋ฅผ ์์ฑํ๋๊ฒ ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ์ ๋ํ๋ ๊ฒ๋ ๋ง์ต๋๋ค. ์ง๊ธ์ ํ๋ก๋์ ์ ๊ตฌํํ๋ ํ๋ จ๋ ํ์ง๋ง ํ ์คํธ ์์ฑ์ ๋ํ ํ๋ จ๋ ํ๋ ๋ฏธ์ ์ ๋๋ค. ๋ชจ๋ ๋จ์์ ๋ํด์ ํ ์คํธ๋ฅผ ์์ฑํ์๋๊ฑธ ์ถ์ฒ๋๋ ค์. ์ง๊ธ ํ ์คํธ ์ฝ๋๊ฐ ๋ง์ด ๋ถ์กฑํด๋ณด์ ๋๋ค!
- ๊ฐ ๊ธฐ๋ฌผ ๋ฆฌํฉํ ๋ง
์ถ์ ํด๋์ค๋ util์ฑ ๋ฉ์๋๋ฅผ ๊ณ ๋ คํด๋ณด์ธ์~!
| outputView.printChangeTurnMessage(janggiGame.getCountry().getName()); | ||
| playTurn(janggiGame, board); | ||
| isGameContinue= isGameContinue(); | ||
| private static void checkRetryLimit(int retry) { |
There was a problem hiding this comment.
์ด ๋ฉ์๋๋ ์์์๋ง ๋ด๋ถ ๋ฉ์๋์ธ๋ฐ static์ผ ์ด์ ๊ฐ ์์๊ฑฐ ๊ฐ์์. ๊ทธ๋ฆฌ๊ณ ๋ฉ์๋ ์์ ์ ๋ฆฌ๋ ๋ถํ๋๋ฆฝ๋๋ค!
There was a problem hiding this comment.
๋ต static ์ ๊ฑฐํ๊ณ , ์์ ์ ๋ฆฌํ๊ฒ ์ต๋๋ค!
ํน์ ๋๋ ์ ์ด๋ค ๊ธฐ์ค์ผ๋ก ๋ฉ์๋ ์์๋ฅผ ์ ๋ฆฌํ์๋์ง ๊ถ๊ธํฉ๋๋ค!
| int choose = inputView.chooseGameStartNewOrAgain(); | ||
| if (choose == 2) { | ||
| int num = inputView.requestGameId(); | ||
| janggiService.validateExistGame(choose); |
There was a problem hiding this comment.
db์์ ์ฅ๊ธฐ ๊ฒ์์ด ์กด์ฌํ๋์ง ์ฒดํฌํ๋๊น์ ์ฅ๊ธฐ ๊ฒ์์ ๊ฐ์ ธ์ค๋๊ฒ ๋๋น ์ฟผ๋ฆฌ ํจ์จ ์ ์ข์๊ฒ ๊ฐ์์
There was a problem hiding this comment.
num์ด ์๋๋ผ choose๋ฅผ ๋๊ธฐ๊ณ ์๋๋ฐ์?
There was a problem hiding this comment.
-
์ฌ์ฉ์์๊ฒ game_id๋ฅผ ์ ๋ ฅ๋ฐ๊ณ ์ด id๊ฐ ์๋์ง๋ง ์ฒดํฌํ๋ฉด, ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. Controller์์๋ janggiGame ๋๋ฉ์ธ์ ์ฌ์ฉํ์ง ์๊ณ , ๋ชจ๋ game_id๋ก ์ฌ์ฉํ๋๋ก ๋ถ๋ฆฌํด๋์๊ธฐ ๋๋ฌธ์ ๊ฒ์ฆ๋ง ์ํํ์ต๋๋ค!
-
num์ ๋๊ฒจ์ผํ๋๋ฐ ์๋ชป ํ๋ค์.๐ num์ผ๋ก ์์ ํ์ต๋๋ค.
| ); | ||
| } | ||
|
|
||
| // public static Board defaultBoard() { |
There was a problem hiding this comment.
์ฃผ์์ฒ๋ฆฌ ํ๋ ๋์ ๋ถํ์ํ๋ฉด ์ญ์ ๋ถํ๋๋ฆฝ๋๋ค
| for (Direction direction : directions) { | ||
| List<Piece> pieces = new ArrayList<>(); | ||
| int i = Position.MAX_ROW; | ||
| Position now = start; | ||
| while (i-- > 0) { | ||
| Optional<Position> position = move(now, direction); | ||
| if (position.isEmpty()) { | ||
| break; | ||
| } | ||
| now = position.get(); | ||
| if (Direction.getDiagonalDirections().contains(direction) && (!now.isInPalace())){ | ||
| break; | ||
| } | ||
| Piece endPiece = finder.find(position.get()); | ||
| if (isNotPo(endPiece) && isDifferentCountry(endPiece.getCountry()) && hasNotPoAmongPath(pieces) && hasOnePieceAmongPath(pieces)) { | ||
| availableRoute.add(position.get()); | ||
| } | ||
| pieces.add(endPiece); | ||
| } |
There was a problem hiding this comment.
์ด ๋ถ๋ถ๋ 10์ค ์ ์ง, depth ์ ์ง 1๋ก ์์ ๋ถํ๋๋ ค์
| public BoardDto buildBoardDto(Board board) { | ||
| public BoardDto buildBoardDto(int gameId) { | ||
| Connection conn = ConnectionManager.getConnection(); | ||
| JanggiGameRepository janggiGameRepository = new JanggiGameRepository(conn); |
There was a problem hiding this comment.
JanggiGameRepository๋ฅผ ๋ฉ์๋ ๋ด์์ ์์ฑํ๋ ์ด์ ๊ฐ ๋ญ๊ฐ์?
| Connection conn = ConnectionManager.getConnection(); | ||
| JanggiGameRepository janggiGameRepository = new JanggiGameRepository(conn); | ||
| JanggiGame janggiGame = janggiGameRepository.findByGameId(gameId); | ||
| ConnectionManager.closeConnection(conn); |
There was a problem hiding this comment.
db connection์ ๋ํ ๊ด๋ฆฌ๋ ๋ชจ๋ service์์ ํ๊ณ ์๋ค์. ์ ์ด๋ฐ ๊ฒฐ์ ์ ํ์ จ๋์ง ์ค๋ช ๋ถํ๋๋ ค์!
| public List<Position> findAvailablePositions(Position start) { | ||
| Piece startPiece = board.getOrDefault(start, None.INSTANCE); | ||
| Piece endPiece = board.getOrDefault(end, None.INSTANCE); | ||
| PieceFinder finder = new PieceFinder() { | ||
| @Override | ||
| public Piece find(Position position) { | ||
| return board.getOrDefault(position, None.INSTANCE); | ||
| } | ||
| }; | ||
| return startPiece.getAvailableRoute(start,finder); | ||
| } |
There was a problem hiding this comment.
- PieceFinder๋ฅผ ํตํด Piece์์ Board ์ ๋ณด ์กฐํํ๊ธฐ
Piece์์ Board๋ฅผ ํธ์ถํ๋ฉด ์์กด์ฑ ๋ฐฉํฅ์ด ๊นจ์ง๊ธฐ ๋๋ฌธ์ PieceFinder๋ฅผ ์ฌ์ฉํ์
จ๊ตฐ์. PieceFinder๋ฅผ ํตํด์ board์ ๋ํ ์ง์ ์์กด์ ๋์์ผ๋ ์ข์ ๋ฐฉํฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค~!
ํ์ง๋ง ๊ตณ์ด PieceFinder์ ๋ง๋ค ํ์๊ฐ ์์๋ ์ถ์ ์๊ฐ์ ์์ต๋๋ค. ๊ทธ๋ฅ getAvailableRoute์ ํ์ฌ ๊ธฐ๋ฌผ์์น๋ฅผ board์์ ๋ณต์ฌํด์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ์ผ๋ฉด ๊ฐ๋จํ๊ฒ ๋๋๋ ์ผ์ด ์๋๊ฐ ์ถ์ด์!
๊ทธ๋ฆฌ๊ณ ์ด ๊ฒฝ์ฐ๋ ioc๋ ์๋๊ณ , ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ธฐ๋ฌผ ์์น๋ฅผ ์กฐํํ๊ฑฐ์
๋๋ค. ioc์ ๋ํด์๋ ์ข ๋ ๊ณต๋ถํ์๋๊ฑฐ ์ถ์ฒ๋๋ฆฝ๋๋ค!
| } | ||
|
|
||
| public void run() { | ||
| int gameId = initOrGetGame(); |
There was a problem hiding this comment.
- Service์์ JanggiGame ๋๋ฉ์ธ ์์ฑ
controller์์ JanggiGame ๊ฐ์ฒด์ ์ง์ ์์กดํ์ง ์๊ธฐ์ํด id๋ฅผ ํตํด ํต์ ํ๋๊ตฐ์! ํ์ง๋ง ํ์คํ ์ด ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด์ service๋ง๋ค id๋ฅผ ์ ๋ฌํด์ฃผ๊ณ service์์ JanggiGame์ ์ฐพ์์ ์ฐ๋๊ฒ ๋นํจ์จ์ ์
๋๋ค. ํนํ db ์ฟผ๋ฆฌ๊ฐ ๋ง์ด ๋๊ฐ์.
controller์ service๊ฐ id๋ฅผ ํตํด ํต์ ํ๋๊ฑด ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. controller๊ฐ janggiGame์ ์์กดํ๊ณ ์์ผ๋ฉด ๋๋ฉ์ธ ์บก์ํ๊ฐ ๊นจ์ง๊ณ ์ํฅ๋ฒ์๊ฐ ๋์ด๋๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด๋๋ก ์ ์งํ๋ฉด์ db ์ฟผ๋ฆฌ๋ฅผ ๋ ๋๊ฐ๊ฒ ํ๊ธฐ์ํ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํด๋ณด์ธ์!
์ฌ์ดํด 2
2.1๋จ๊ณ - ๊ธฐ๋ฌผ์ ํ์ฅ
1)๊ถ์ฑ(ๅฎฎๅ) ์์ญ์ ๊ท์น์ ํฌํจ
(๋จ, ๊ธฐ๋ฌผ์ด ๋๊ฐ ์ด๋ ์ ๊ถ์ฑ์ ๋ฒ์ด๋์ง ์๋์ง๋ piece ํ์นธ์ฉ ์ด๋ํ๋ฉด postion.isInPalace()๋ฅผ ํธ์ถํด์ ํ๋จ)
2)์์ด ์กํ์ ๋ ๊ฒ์์ ์ข ๋ฃ
3)๊ธฐ๋ฌผ์ ๋ํ ์ ์
4)์ด๋ ํ๋จ ๋ก์ง ๋ณ๊ฒฝ
ํ์ฌ๋ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ฌผ์ ์ ํํ๋ฉด ์ด๋ ๊ฐ๋ฅํ ์ขํ๋ฅผ ๋ฐํํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค.
2.2๋จ๊ณ - DB ์ ์ฉ
1)DB ์ ํ ์ด์
H2๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ด์ฅ๋์ด์์ด์, ์ค์น์์ด ์ฌ์ฉํ ์ ์๋ H2๋ฅผ ์ ํํ์ต๋๋ค.
Application์ ์คํ์ํค๋ฉด "janggiGame.mv.db"ํ์ผ์ด ๋ก์ปฌ์ ์ ์ฅ๋๊ณ , H2 ์ฝ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฆฝ๋๋ค.
http://localhost:8082/ ๋ฅผ ํตํด H2 ์ฝ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
2)DB ์ ์ฅ ์์
์ง๋ฌธ
1. PieceFinder๋ฅผ ํตํด Piece์์ Board ์ ๋ณด ์กฐํํ๊ธฐ
์ฌ์ดํด 2์ ๋ค์ด์์, ๊ฐ ๊ธฐ๋ฌผ์์ ์ด๋ ๊ท์น์ ๋ฐ๋ผ ํ์นธ์ฉ ์ด๋ํ๋ฉฐ ์ด๋ ๊ฐ๋ฅํ์ง ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
์ด์ ๋ฐ๋ผ, Piece์์ ๋ค๋ฅธ ๊ธฐ๋ฌผ์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ๋๋ฐ, Piece๊ฐ Board์๊ฒ ๋ฌผ์ด๋ณด๋ฉด ์ํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํด์ ๋ถ๊ฐ๋ฅํ์ต๋๋ค.
๊ทธ๋์ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๋, PieceFinder ์ธํฐํ์ด์ค๋ฅผ Board์์ ๊ตฌํํ๊ณ , Piece์๊ฒ ์ธํฐํ์ด์ค๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ฃผ๋ฉด, Piece๊ฐ ์ธํฐํ์ด์ค๋ฅผ ํตํด Board์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ์ ์ด์ ์ญ์ (IoC)์ด ๋๋ค๋ ๋ต๋ณ์ ๋ฐ์์ต๋๋ค.
Piece์์ PieceFinder๋ก Board์ ์ ๋ณด๋ฅผ ์ผ๋ถ๋ง ํ์ํ๋ ๊ตฌ์กฐ๊ฐ ๊ด์ฐฎ์์ง ๊ถ๊ธํฉ๋๋ค.
(๊ทผ๋ฐ ์ด๊ฒ ์ ์ด์ ์ญ์ ๊ฐ๋ ์ด ๋ง์๊น์? Board๊ฐ Piece๋ฅผ ์ ์ดํ๋๋ฐ, ์ธํฐํ์ด์ค๋ฅผ ํตํด Piece๊ฐ Board ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ตฌ์กฐ์ฌ์ ์ ์ด์ ์ญ์ ์ด๋ผ๊ณ ์ดํดํ๋๋ฐ, ์ด๊ฒ ๋ง๋์ง๋ ๊ถ๊ธํฉ๋๋ค.)
(Board.java - findAvailablePositions() ์ฐธ๊ณ )
2. Service์์ JanggiGame ๋๋ฉ์ธ ์์ฑ
DB๋ฅผ ์ถ๊ฐํ๋ ๊ณผ์ ์์ ๊ธฐ์กด์ Controller์์ ์ฌ์ฉํ๋ JanggiGame ๋๋ฉ์ธ์ ์ ๋ถ int gameId๋ก ์์ ํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ , Service์ ๊ฐ ๋ฉ์๋๋ง๋ค gameId๋ก DB๋ฅผ ์กฐํํด์ JanggiGame์ ์์ฑํ๊ณ , ์ด๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ์ต๋๋ค.
์ต๋ํ ๊ธฐ์กด ์ฝ๋ ๋ณ๊ฒฝ์์ด DB ๊ธฐ๋ฅ์ ๋ถ์ด๊ณ ์ถ์ด์, ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋๋ฐ ์ด๊ฒ ์ ์ ํ ๋ฐฉ๋ฒ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
(Service์์ ๋งค๋ฒ JanggiGame์ ์๋ก ์์ฑํ๋ ๊ฒ์ด ๋ง๋์ง์ ๋ํด ์๋ฌธ์ด ๋ค์ด์ ๋๋ฆฌ๋ ์ง๋ฌธ์ ๋๋ค.
Service์์ ์ฅ๊ธฐ๊ฒ์์ ํ๋ฒ ์์ฑํ๊ณ , ์ด๋ฅผ controller์ ๋๊ธฐ๋ ๋ฐฉ์์ ๊ณ์ธต์ ๋ถ๋ฆฌ๊ฐ ํผ์ฌ๋ ๊ฒ ๊ฐ์์ ์ง์ํด์ผํ ๊ฑฐ ๊ฐ์๋ฐ ,
Service์ ๋ฉ์๋๋ง๋ค JanggiGame์ ์์ฑํ๋ ๋ฐฉ์์ด ์ ์ ํ ๊ฑธ๊น์?)
3. DB Connection pool
DB Connection์ ํธ๋์ญ์ ๋จ์๋ก ์ด๊ณ ๋ซ์์ผํ๋ค๊ณ ์๊ฐ์ ํด์, Service์ ๋ฉ์๋์์ ๋งค๋ฒ connection pool์ ์ด๊ณ ๋ซ๋ ์ฝ๋๊ฐ ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ค๋ณด๋ ์ฝ๋์ ์ค๋ณต์ด ๋ง์์ง๋ ๊ฒ ๊ฐ์๋ฐ, ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ๋ฆฌํฉํ ๋งํ๋ ๋ฐฉ๋ฒ์ด ์์์ง ๊ถ๊ธํฉ๋๋ค.
4. DB ๊ธฐ๋ฌผ ๋ฐ์ดํฐ update ๋ฐฉ๋ฒ
ํ์ฌ๋ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ฌผ์ ์ด๋ํ์ ๋, piece_position ํ ์ด๋ธ์์ ํด๋น ๊ฒ์๊ณผ ๊ด๋ จ๋ piece๋ฅผ ๋ชจ๋ ์ญ์ ํ๊ณ , ์๋ก insertํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. deleteํ๊ณ insertํ๋๊ฒ ๋นํจ์จ์ ์ด๋ผ๊ณ ๋๊ปด์ง๊ธฐ๋ ํ์ง๋ง, ์์ ๊ท๋ชจ์์๋ ํด๋น piece๋ฅผ ์ฐพ์์ updateํ๋ ๊ฒ๋ณด๋ค delete + insert๊ฐ ๊ฐ๋จํ๊ณ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์งํค๋๋ฐ ๋ ๋์ ๊ฑฐ๋ผ๊ณ ์๊ฐ์ด ๋๋๋ฐ ์ด์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์๋์ง ๊ถ๊ธํฉ๋๋ค.
5. ํ ์คํธ ์ฝ๋
๊ธฐ๋ฅ์ด ๋ง์์ง๊ณ , DB๊น์ง ์ถ๊ฐํ๊ณ ๋๋๊น ์ด๋ ํ ์คํธ๋ฅผ ์ฐ์ ์ ํด์ผํ ๊น์ ๋ํด ๊ณ ๋ฏผ์ด ์๊ฒผ์ต๋๋ค.
์ ๋ ํ์ฌ ๋๋ฉ์ธ ํ ์คํธ ์์ฃผ๋ก ์์ฑ์ ํ๋๋ฐ, ๋๋ฉ์ธ ์ธ ๊ณ์ธต์์๋ DB๋ฅผ ๊ฑฐ์น๋ ๋ฑ์ ๊ธฐ๋ฅ๋ค์ด ์ถ๊ฐ๋๋๊น
"๋๋ฉ์ธ ํ ์คํธ ์ถ๊ฐ๋ณด๋ค ์ฐจ๋ผ๋ฆฌ service์์ ํ๊บผ๋ฒ์ ํ ์คํธํ๋ ๊ฒ์ด ๋์๊น?"๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
ํ ์คํธํด์ผํ ๊ธฐ๋ฅ์ด ๋ง์ ๋, ์ฐ์ ์์๋ก ๋์๋ ํ ์คํธ๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
6. ๊ฐ ๊ธฐ๋ฌผ ๋ฆฌํฉํ ๋ง
๊ฐ ๊ธฐ๋ฌผ ํด๋์ค์์ ๋น์ทํ ๋ก์ง์ด ์๋๊ฑฐ ๊ฐ์๋ฐ ์ด ๋ถ๋ถ์ ๋ฆฌํฉํ ๋งํ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๊ณ ์์ต๋๋ค.
ํน์ ์ถ์ฒํด์ฃผ์ค ๋ฐฉ๋ฒ์ด ์์์ง ์กฐ์ธ์ ๊ตฌํ๊ณ ์ถ์ต๋๋ค.