Programing_Java

๐ŸŒฑ [Spring MVC ๊ตฌ์กฐ] DI, Controller, Service, DAO ๊ทธ๋ฆฌ๊ณ  DispatcherServlet๊นŒ์ง€ ์ •๋ฆฌ ๋ณธ๋ฌธ

โœ… Spring

๐ŸŒฑ [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