โœ… Spring

โœจ Spring MVC ํŒจํ„ด ์ •๋ณต: DI๋ถ€ํ„ฐ Controller, DAO๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์ •๋ฆฌ!

Joyfullyever 2025. 4. 16. 23:16

๐Ÿ”ง 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 ๋“ฑ ํ™”๋ฉด๋‹จ ์ฒ˜๋ฆฌ