Programing_Java
๐ฑ [Spring MVC ๊ตฌ์กฐ] DI, Controller, Service, DAO ๊ทธ๋ฆฌ๊ณ DispatcherServlet๊น์ง ์ ๋ฆฌ ๋ณธ๋ฌธ
๐ฑ [Spring MVC ๊ตฌ์กฐ] DI, Controller, Service, DAO ๊ทธ๋ฆฌ๊ณ DispatcherServlet๊น์ง ์ ๋ฆฌ
Joyfullyever 2025. 4. 20. 20:24๐งฉ 1. DI (์์กด์ฑ ์ฃผ์ ) ๋ฐฉ์ ๋น๊ต
• ๋ฐฉ์, ์ค๋ช , ์ฌ์ฉ ์์
์์ฑ์ ์ฃผ์ | ํ์ ์์กด์ฑ ์ฃผ์ ์ ์ ํฉ | @Autowired ์์ฑ์ |
Setter ์ฃผ์ | ์ ํ์ ์์กด์ฑ ์ฃผ์ | setXXX() ๋ฉ์๋์ @Autowired |
ํ๋ ์ฃผ์ (@Autowired) | ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋จ | @Autowired private BoardDAO boardDAO; |
@Autowired
private BoardDAO boardDAO;
๐ง 2. Bean ๋ฑ๋ก ๋ฐฉ๋ฒ๊ณผ ์ด๋ ธํ ์ด์
• ์ด๋ ธํ ์ด์ , ์ญํ , ๋น๊ณ
@Component | ๊ธฐ๋ณธ ์ปดํฌ๋ํธ | ์ด๋ฆ ์๋ต ๊ฐ๋ฅ (์๋ฃํ์ผ๋ก ์ฐพ์์ง) |
@Controller | ์ปจํธ๋กค๋ฌ์ฉ | ์์ฒญ์ ๋ฐ์ ์ฒ๋ฆฌ |
@Service | ์๋น์ค ๊ณ์ธต | ๋น์ฆ๋์ค ๋ก์ง ๋ด๋น |
@Repository | DAO ๊ณ์ธต | DB ์ ๊ทผ ์ฒ๋ฆฌ |
์ด๋ฆ์ด ํท๊ฐ๋ฆฌ๋ฉด? → @Qualifier("boardService") ๋ฑ์ผ๋ก ๋ช ์์ ์ผ๋ก ์ง์ ํด๋ ๋จ
๐๏ธ 3. Spring MVC 3๊ณ์ธต ๊ตฌ์กฐ
[Client] → Controller → Service → DAO → DB
↑ ↑
@Controller @Service
• Controller : ์ฌ์ฉ์ ์์ฒญ ์ฒ๋ฆฌ (@Controller)
• Service : ํต์ฌ ๋ก์ง ์ฒ๋ฆฌ (@Service)
• DAO : DB ์ฐ๋ ์ฒ๋ฆฌ (@Repository)
• VO(DTO) : ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฐ์ฒด
๐งฑ 4. VO ํด๋์ค ๋ง๋ค๊ธฐ (JSP๊ธฐ๋ฐ์ด๋ SPRING๊ธฐ๋ฐ ๊ณตํต)
• ์ปฌ๋ผ๋ช ๊ธฐ๋ฐ์ผ๋ก private ํ๋ ์์ฑ
• getter/setter
• toString()
public class BoardVO {
private int seq;
private String title;
...
}
๐ 5. ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด ํจํค์ง ๊ตฌ์กฐ
com.example.biz.board // ์๋น์ค/DAO/Controller ๋ฑ
com.example.biz.board.impl // ๊ตฌํ์ฒด (Impl ํด๋์ค)
com.example.biz.common // JDBCUtil, ์์, ๊ณตํต์ฝ๋
com.example.view.controller // DispatcherServlet ๋ฑ ๋ทฐ ์ด๋ ์ปจํธ๋กค๋ฌ
• Biz = ๋น์ฆ๋์ค ๋ก์ง ์๋ฏธ
• impl = ๊ตฌํ์ฒด ๋ชจ์
๐งฉ 6. Service์ DAO ์์ฑ ์์
์ธํฐํ์ด์ค (Service) :
public interface BoardService {
boolean insert(BoardVO vo);
BoardVO selectOne(BoardVO vo);
List<BoardVO> selectAll(BoardVO vo);
}
๊ตฌํ์ฒด (ServiceImpl) :
@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 insertSQL = "INSERT INTO BOARD ...";
public boolean insert(BoardVO vo) { ... }
}
๐ 7. JDBCUtil ๋ฐ DB ์ฐ๊ฒฐ
• JDBCUtil ํด๋์ค๋ com.example.common์ ๋
• DB ์ฐ๊ฒฐ์ ์ํ ๊ณตํต ๋ฉ์๋ ์ ์
• pom.xml์ ojdbc6 ์์กด์ฑ ์ถ๊ฐ
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
</dependency>
๐ 8. ์ ํต์ ์ธ MVC ๊ตฌ์กฐ → Spring MVC ๋ณํ
๊ธฐ์กด ๋ฐฉ์:
• controller.jsp์์ action ํ๋ผ๋ฏธํฐ ์ฝ์
• ์๋ธ๋ฆฟ์ผ๋ก ๋ถ๊ธฐ ์ฒ๋ฆฌ
• ์์ฒญ ํํ: ?action=insert
Spring MVC ๋ฐฉ์:
• URL ํจํด: *.do
• ์์ฒญ์ .do๋ก ๋ฐ๊ณ , ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ํด๋์ค ๊ตฌ์ฑ
๐ฆ 9. Spring MVC ํ๋ฆ ๊ตฌ์ฑ ์์ ๋งคํ
• ์ ํต Servlet ๋ฐฉ์, Spring MVC ๊ตฌ์ฑ
FrontController | DispatcherServlet |
ActionFactory | HandlerMapping |
Action | Controller |
ActionForward | ViewResolver |
โ ์ต์ข ์ ๋ฆฌ
• ์ญํ , ์์, ํด๋์ค, ์ด๋ ธํ ์ด์ , ์์น
์์ฒญ ์ฒ๋ฆฌ | LoginController | @Controller | com.example.view.controller |
๋น์ฆ๋์ค ๋ก์ง | BoardServiceImpl | @Service("boardService") | com.example.biz.board.impl |
DB ์ฒ๋ฆฌ | BoardDAOImpl | @Repository("boardDAO") | com.example.biz.board.impl |
VO | BoardVO | ์์ | com.example.biz.board |
๊ณตํต ๊ธฐ๋ฅ | JDBCUtil | ์์ | com.example.common |