현재 우리는 Spring MVC templet을 기반으로 개발중이다. 밑은 Spring의 기본 동작 흐름이다.
하지만 시작하기 앞서 항상 2가지는 확인하고 가자 1. mySQL의 bat파일을 실행했는가? 2. DataBase tab에서 mysql과 eclipse를 연결해주었는가?
~~.do
라고 뜨는데 이때 모든 요청을 Dispatcher Servlet
이 받는다. 즉, 예전의 front controller
가 Dispatcher Servlet
이다.Dispatcher Servlet
을 만든적이 없다. 그럼 누가 만들어주냐? 바로 web.xml
이 만들어준다. 여기에 적으면 spring 특정 객체 memory 영역에 올라가 내가 따로 손대지 않아도 알아서 만들어준다.Dispatcher Servlet
이 실질적인 일을하냐? 그것은 아니다. 그저 안내하는 역할만 한다. 실제로 일을 하는 녀석은 바로 @Controller
이라고도 불리고 POJO
라고도 불리는 plan old java object
녀석들이 실제로 동작을 하는 녀석들이다. 그럼 이 dispatcher servlet
과 실제로 일하는 POJO
가 어떻게 연결되나? 바로 mapper
가 해준다. 다만 조건이 있다.POJO
에 request mapping이 되어있어야한다. @Controller
라고 명시되어있어야 한다. annotation
을 바로 찾을 수 있을까?servlet-context.xml
의 이 친구가 여기에서만 찾으라고 명시해 두었기 때문이다. 위의 코드를 해석하자면@controller
가 적혀있는 녀석들을 dispatcher servlet
과 POJO
는 서로 다른 파일이기 때문이다. 그렇다면 이 둘을 연결해주는 매개체가 필요하다. 그것이 바로 adapter
이다.Mapper
은 그저 POJO
파일을 찾는 역할만 하고 POJO
와 dispatcher servlet
연결하여 실행하는 녀셕이 바로 adapter
이다. POJO
가 DB에 접근할 때를 알아보자 이때 필요한 녀석이 바로 mybaits
이다. 이녀석이 java와 sql분리를 실현할 수 있도록 도와주는 녀석이다. DBCP
라는 개념이 등장하는데 자세한 부분은 앞서 포스팅한 부분을 읽어보면 된다. 이 DBCP
를 구동하기위해 필요한 lib중 가장 기본적인 녀석이 hikariCP
인데 이녀석 또한 mybatis
안에 포함되어 구동된다. hikariCP
의 내부에는 JDBC
가 있어 conn
을 알아서 만들어준다. 또한 spring
에서는 <tag>
로 만들어진것들은 모두 spring memory에 올라가서 언제는 쓰일 수 있게 한다.root-context.xml
안에 이녀석에게 있다. config
== conn
을 연결할 수 있는 정보이다. 그래서 datasource
객체를 만들 때 필요한 정보들을 config
id에 담아서 보낸 것이다. 그래서 2번까지가 JDBC의 conn
생성이라 생각하면 된다. 그리고 실제로 DB에 접속하는 JDBC의 DAO의 역할은 하는 녀석들은 session factory
에 있다. POJO
와 Sql문을 적는 Mapper.xml
이 둘을 이어주는 interface
이다.Mapper.xml
은 최상단에 Mapper
interface를 적어줌으로써 mybatis
가 알아서 Mapper.java
, Mapper.xml
을 이어준다. Mapper.xml
을 바로 찾을 수 있을까?hikariCP
가 알아서 연결해준다.POJO
에 있는 이녀석 @Autowired
가 해준다. 이는 memory에 interface를 올려놓고 주입받아서 쓰는 법으로 의존성은 높히고 결합도를 낮추는 방법 즉, Dependency Injection DI
라고 한다. 이는 Spring에서 아주 중요한 개념이다.POZO
에서는 매개변수를 쓰기만 하면 의존성 주입으로 받아올 수 있다.@RequestMapping("/boardInsert.do")
public String boardInsert( Board board ) { <= 의존성 주입부분
mapper.boardInsert(board);
return "redirect:/boardList.do";
}
@RequestMapping("/boardList.do")
public String boardList( Model model ) { <= 의존성 주입부분
List<Board> list = mapper.boardList();
model.addAttribute("list", list);
return "boardList";
}
servlet-context
에서 full path로 붙혀서 넘겨준다.