✅ 각 페이지별 컨트롤러가 갖고있던 SessionFactory를 어디로 보내야할까?

 

: RequestMapping을 사용하면 상위 경로인 /Menu로 맵핑할 수있고, 그 아래에 각 화면에서 쓰는 Session들을 붙여서 jsp로 값을 전달해 줄 수 있다.

 

: 이때 ModelAndView를 프론트컨트롤러가 만든 Model로 교체하면 프론트 컨트롤러가 필요한 객체를 알아서 생성해준다.

 

👉 그런데! 이렇게 각 페이지마다 ServletContext와 SqlSessionFactory를 가지고 다녀야할까? ▶ 애초에 컨트롤러에서 서비스함수를 사용하는게 아니라 직접 repository함수를 사용하는건 MVC모델에도 맞지 않음.

 

 

 

#️⃣ 필요한 것들은 전역에서 저장해두고 쓸수있도록 하기 (Spring IoC 활용)

: 서블릿끼리 데이터를 공유하는 저장소가 있다고 해도, repository에 관한 세션객체를 서블릿들이 가지고 있게된다면 또다시 setter나 생성자로 연결해줘야하는 문제가 생긴다. 무엇보다도 서블릿에 계속해서 종속적이게 된다. ▶ 더 상위의 전역저장소에 저장해야한다 ▶ 스프링 IoC에게 객체 생성과 저장을 맡긴다

 

생성객체를 bean으로 담고 있으므로 각 리파지토리는 세션을 오픈해서 쓰기만 하면 됨!

 

 

 

✅ 스프링 MVC의 최종형태

 

 


 

 ✅ 처음부터 Spring MVC 구축해보기

: 위의 완전체를 보고 흐름으로 접근해봤다!

: 구조 자체는 금방 짰는데 자잘한 경로와 오류를 잡느라 좀 헤맸음.

 

1. maven 프로젝트 만들기 ▶ pom.xml 설정 (필요한것들 다 꽂아주기) 

2. 톰캣 연결하기 ▶ (webapp 내에 WEB-INF 폴더 만들고) web.xml 설정하기

3. 스프링 설정하기 ▶ web.xml에서 설정해놓은 이름에 따라서 -servlet.xml 파일 만들기

4. Repository 인터페이스 & 구현체, Service 인터페이스 & 구현체, Controller 구현체 java 파일 생성하기

-- 여기서 Mybatis를 사용하기위한 MyBatis.xml을 resources 내부에 넣어줌

이때 한번에 내부를 생성하려 하지 않고 해야할일만 간략히 적어뒀음!

5. 컨트롤러 구현하기 

  • @Controller
  • @RequetMapping("경로")
  • @Autowired (Service객체)
  • @RequestMapping(필요한 하위페이지)
  • Return값으로 list.jsp; 지정. --- 여기서 view폴더에 jsp 파일을 넣어준다

 

6. ServiceImp구현하기

  • @Service
  • @Autowired (리파지토리 객체)
  • 서비스함수 getList()구현 -- repository.findAll(); 사용

 

7. MbRepository  (==MyBatis Repository) 구현하기

  • @Repository
  • @Autowired (스프링이 만들어둔 세션객체)
  • @리파지토리의 findAll() 구현하기-- repository.findAll(); Dao사용. 리파지토리의 구현값 대신에 mybatis-config.xml과 MenuRepositoryMapper.xml에 설정해둔 값으로 조회한 객체를 만들어낸다

 


#️⃣ 놓쳤던 부분

1. mybatis-config.xml과 MenuRepositoryMapper.xml에서 프로젝트 패키지명 바꿔줘야하는데 놓침!

2. 서버에 기존 수업용 프로젝트와 새로만든 프로젝트 두개 다 가동중이었는데, 맵핑 이름이 같다보니까 자꾸 수업프로젝트가 우선으로 실행돼서 결국 새 프로젝트만 놔두고 서버에서 삭제시켰다.

3. detail.jsp 이름을 다른걸로 바꿔봤는데 return으로 jsp를 잘 넣어놔도 안됐다... 진행하는동안 404 에러가 제일 많이 났었다!!! 맵핑이 단순한거같으면서도 요상하게 어려움.

 

 

 

+ Recent posts