โจ Spring MVC ํจํด ์ ๋ณต: DI๋ถํฐ Controller, DAO๊น์ง ํ ๋ฒ์ ์ ๋ฆฌ!
๐ง Spring์์์ DI(์์กด์ฑ ์ฃผ์ ) ๋ฐฉ์ ์ ๋ฆฌ
Spring์์๋ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด DI(Dependency Injection) ๋ฐฉ์์ ์ฌ์ฉ
์ฃผ์ ๋ฐฉ์์ ๋ค์ ์ธ ๊ฐ์ง๊ฐ ๋ํ์
• ์์ฑ์ ์ฃผ์
(Constructor Injection)
→ ๊ฐ์ฒด ์์ฑ ์์ ์ ํ์ ์์กด์ฑ ์ฃผ์
public BoardServiceImpl(BoardDAO boardDAO) {
this.boardDAO = boardDAO;
}
• Setter ์ฃผ์
(Setter Injection)
→ ์ ํ์ ์์กด์ฑ ์ฃผ์
๊ฐ๋ฅ
public void setBoardDAO(BoardDAO boardDAO) {
this.boardDAO = boardDAO;
}
• ์ด๋
ธํ
์ด์
์ฃผ์
(@Autowired)
→ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ฉฐ, ๊ฐ์ฒด๋ ์ด๋ฏธ ๋ฉ๋ชจ๋ฆฌ์ ์์ด์ผ ํจ
@Autowired
private BoardDAO boardDAO;
์ด๋ฆ์ด ํท๊ฐ๋ฆด ์ ์๋ค๋ฉด @Qualifier("boardDAO")๋ก ๋ช ํํ๊ฒ ์ง์ ํด์ฃผ๋ ๊ฒ์ด ์ข์
๐งฉ ์ปดํฌ๋ํธ ์ค์บ์ ์ํ ์ด๋ ธํ ์ด์ ์ ๋ฆฌ
@Component : ๊ธฐ๋ณธ ์ปดํฌ๋ํธ, ์ด๋ฆ ์ง์ ํ์ ์์
@Repository("boardDAO") : DAO ์ ์ฉ ์ด๋ ธํ ์ด์ (DB ์ ๊ทผ)
@Service("boardService") : Service ๊ณ์ธต ์ ์ฉ ์ด๋ ธํ ์ด์
@Controller : ์น ์์ฒญ ์ฒ๋ฆฌ
์ด ์ด๋ ธํ ์ด์ ๋ค์ ๋ชจ๋ @Component๋ฅผ ์์๋ฐ๊ณ ์์ด ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ธ์ํ๊ณ ๊ด๋ฆฌ ๊ฐ๋ฅ
๐๏ธ ํจํค์ง ๊ตฌ์กฐ ์ถ์ฒ
com.example.biz.board // ์๋น์ค, DAO, ๊ตฌํ์ฒด
com.example.biz.vo // VO ํด๋์ค
com.example.common // ๊ณตํต ํด๋์ค (ex: JDBCUtil)
com.example.view.controller // ์๋ธ๋ฆฟ ๋ฐ Controller
biz๋ Business Logic์ด๋ผ๋ ์๋ฏธ๋ก ์๋น์ค ์ฝ๋์ ์ค์ฌ
board๋ก ๋ชจ๋ํํ๋ฉด ์ ์ง๋ณด์์ ์ข์
๐ BoardService ์ธํฐํ์ด์ค ์ ์
public interface BoardService {
boolean insert(BoardVO vo);
boolean update(BoardVO vo);
boolean delete(BoardVO vo);
BoardVO selectOne(BoardVO vo);
List<BoardVO> selectAll(BoardVO vo);
}
๐ง๐ป BoardServiceImpl ๊ตฌํ์ฒด
@Service("boardService")
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardDAO boardDAO;
public boolean insert(BoardVO vo) {
return boardDAO.insert(vo);
}
// ๋๋จธ์ง ๋ฉ์๋ ๋์ผ
}
๐ ๏ธ DAO ํด๋์ค ๊ตฌํ
@Repository("boardDAO")
public class BoardDAOImpl implements BoardDAO {
private Connection conn;
private PreparedStatement pstmt;
private String BOARD_INSERT = "INSERT INTO BOARD ...";
public boolean insert(BoardVO vo) {
// JDBC ์ฝ๋
}
}
โ๏ธ JDBCUtil ํด๋์ค (๊ณตํต ๊ธฐ๋ฅ)
public class JDBCUtil {
public static Connection connect() {
// DB ์ฐ๊ฒฐ ๋ฐํ
}
public static void disconnect(Connection conn, PreparedStatement pstmt) {
// ์์ ํด์
}
}
๐ ํด๋ผ์ด์ธํธ ์์ฒญ ํ๋ฆ (Spring MVC ๊ธฐ์ค)
๐ ์์ฒญ ํ๋ฆ ์ ๋ฆฌ
1. ์น ๋ธ๋ผ์ฐ์ ์์ ์์ฒญ ๋ฐ์
์: /board/list ๊ฐ์ URL ์์ฒญ
2. DispatcherServlet์ด ์์ฒญ ์ฒ๋ฆฌ
→ ์ ํต MVC์ FrontController ์ญํ
→ ๋ชจ๋ ์์ฒญ์ ์ง์
์ , Spring์ด ์๋์ผ๋ก ๋ฑ๋ก
3. HandlerMapping์ด ์ด๋ค Controller๋ฅผ ํธ์ถํ ์ง ๊ฒฐ์
→ ์ ํต MVC์ ActionFactory ์ญํ
→ URL๊ณผ @RequestMapping์ด ์ฐ๊ฒฐ๋จ
4. Controller(@Controller)๊ฐ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ
→ ์ ํต MVC์ Action ์ญํ
→ ํ์ํ Service ํธ์ถ, ๋ฐ์ดํฐ ์์ฑ
5. ViewResolver๊ฐ ์ด๋ํ ๋ทฐ ๊ฒฐ์
→ ์ ํต MVC์ ActionForward ์ญํ
→ return "boardList" → /WEB-INF/views/boardList.jsp๋ก ์ด๋
์ ํต MVC | Spring MVC | ์ค๋ช |
FrontController | DispatcherServlet | ์์ฒญ์ ์ง์ ์ |
ActionFactory | HandlerMapping | URL๊ณผ Controller ๋งคํ |
Action | @Controller | ์ค์ ๋ก์ง ์ฒ๋ฆฌ |
ActionForward | ViewResolver | ๋ทฐ ํ์ด์ง๋ก ์ด๋ |
โ ๋ฉด์ ์์ ์ด๋ ๊ฒ ๋งํ์!
Model → DB ์ฐ๋, DAO ๋ฐ VO
Controller → ์์ฒญ ์ฒ๋ฆฌ, ๋น์ฆ๋์ค ๋ก์ง ์ฐ๊ฒฐ (Service)
View → JSP ๋ฑ ํ๋ฉด๋จ ์ฒ๋ฆฌ