Spring_03_Spring Legacy 템플릿
[Spring 템플릿 사용하기]
- spring 프로젝트 만들기: new-other-Spring Legacy Project
- controller 패키지 만들기: kr.board.[controller]→ [ ] context path
[context root 변경]Web Project Settings
[web.xml]java-→Java로 변경
[Spring 디렉토리 구조]
[서버 등록]
- 프로젝트를 서버탭으로 드래그앤드롭
2. 톰캣 modules에서 프로젝트 등록
[spring 환경설정] 1~25번
[pom.xml]
S1. Spring version: 5.0.2 버전으로 변경, java version: 1.8 버전으로 변경
S2. JDK version: 1.8 버전으로 변경
S3. 기본 Dependency 추가: Mybatis, lombok
[package 구조]
- controller: POJO
-업무단위별로 Controller
- entity: DTO와 같은 역할, 테이블 간의 관계
- mapper:DB에 연결하는 객체(Connection, sqlSession) 필요없이 내부 API로 DB와 연결하기 때문에 Mapping만 함
[controller-BoardController]업무단위별 Controller 통합
S4. Controller 생성: Controller들을 통합하여 업무단위별로 Controller로 생성
예)BoardController, MemberController
[entity-Board]DTO 역할
S5. entity 생성
- 버전이 높을수록 객체와 테이블 간의 관계를 맺기 때문에 class명은 테이블명과 똑같이 생성
- Board 객체에 필요한 필드 작성, lombok으로 전체 생성자와 기본생성자 만들기
[mapper-BoardMapper.java]DAO 역할
S6. DB와 연결하는 인터페이스 생성: BoardDAO와 같은 역할
※DAO 메소드 내부 코드(DB 연결객체)는 Spring 내부 API로 진행하므로 추상메소드로 생성
[mapper-BoardMapper.xml]BoardMapper 인터페이스를 찾는 역할(namespace)
S7. Mapper 생성
※mapper 파일 생성: mapper- “인터페이스 파일명과 동일한 파일이름”
[controller-BoardController]
- annotation 방식으로 Controller 역할을 하는 class임을 명시
S9. HandlerMapping: annotation 방식으로 RequestMapping 작성(“HashMap Key”)
S10. 기능별 Controller은 메소드로 변환: 이동할 페이지 viewname 리턴
[jsp 파일]
- 링크 경로에 resources 추가
[WEB Layer] Frontcontroller, HandlerMapping, ViewResolver 설정
1) Frontcontroller: DispatcherServlet이 [servlet-context.xml]파일을 통해 Controller들을 찾아서 객체 생성
2)HandlerMapping: DispatcherServlet이 HandlerAdapter를 통해 이동할 Controller 실행
(console창)
3)ViewResolver : DispatcherServlet이 HandlerAdator을 통해 실행한 Controller에서 return한 viewname을 ViewResolver에 반환→완전한 주소로 생성
[web.xml]
S11. FrontController(DispatcherServlet) 생성
- Tomcat이 start되면 제일 먼저 web.xml을 읽음
- Spring Container: Tomcat 실행 시 가장 먼저 생성되어 bean(객체) 생성, 관리, 삭제하는 메모리 공간
- DispatcherServlet: Front Controller와 같은 역할, [servlet-context.xml]파일을 읽고 POJO로 연결시킴
[servlet-context.xml]
S12. base-package scan: Controller들을 scan하는 작업
S13. ViewResolver
- <bean>: xml 파일에서 객체를 의미하며, 객체를 생성하는 태그
- InternalResourceViewResolver: 가장 많이 사용되는 ViewResolver
4)객체 바인딩: DB의 정보를 view에서 받기 위해 Model에 객체 바인딩(request과 같은 기능)
- 데이터 객체바인딩: model.addAttribute(이름, 데이터)
- 데이터 가져오기: request.getAttribute(이름), ${ }
[BoardController]
S14. Model에 객체 바인딩
- 매개 변수에 Model 받아오기(객체바인딩에 쓰는 객체)
- Board(entity)에 저장할 데이터 추가하여 ArrayList에 저장
- model에 ArrayList(board_list) 객체 바인딩
[BoardMain]
- EL 표현식으로 request 객체에서 저장한 데이터(board_list) 받아오기
[Persistence Layer]DB 연동 및 SQL문장 Mapper
1)DB 연동: HikariCP가 DB와 연동하는 역할
[web.xml]
S15. ContextLoaderListener
- DB 연결하는 객체
- Spring Container에 가장 먼저 만들어지는 객체
- root-context.xml에 DB 관련 환경설정하고
- 해당 파일을 읽어서 DB 연결 진행
[root-context.xml]
S16. root-context.xml: DB 연동 관련 환경설정하는 xml 파일
<db.properties>
-JDBC: Connection, PrepareStatement
-mybatis: sqlSessionFactory
<Spring>
-DB 연결: Spring Framework API(Hikari CP)가 담당
-SQL Mapping: mybatis가 담당
S17. HikariCP
- Spring과 mybatis의 역할이 중복되므로 역할 분리
- DB 연결 부분→Spring에서 HikariCP가 담당(overhead가 적은 성능이 좋은 cp api)
- sql Mapping→mybatis가 담당
- DB에 연결하기 위해 HikariCP에서 필요한 class
1)HikariConfig: DB 접속정보를 가진 class
2)HikariDataSource: DB 접속정보를 바탕으로 Connection Pool을 만들어줄 class
[pom.xml]
S18. HikariCP 설치: maven repository에서 Hikaricp(4.0.3) 가져오기
[root-context.xml]
<bean> 태그 사용법: setter
- 객체 호출: <bean id=”사용할 클래스이름” , class=”불러올 클래스 경로”>
- 속성값 추가: <property name=”속성이름”, value=”속성에 추가할 값”>
S19-1. HikariConfig: DB 접속정보(driver, url) 등을 가지고 있는 class
- hikariConfig class 추가하기
-class 경로: Maven Depndencies에서 Copy Qualified name으로 경로복사
- id: 클래스이름을 소문자로 기입
- url 속성: jdbcUrl
- username, password 속성: C:\eGovFrame-4.0.0\bin 폴더 'mysql 참고' 파일
[실습용 공통 컴포넌트] id, pw 입력
<bean> 태그 사용법: 생성자
- 클래스 및 생성자 호출: <bean id=”class/생성자명”, “class/생성자 경로”>
- 생성자 주입: <constructor-arg ref=”사용할 생성자명”>
S19-2.HikariDataSource: DB 접속정보(HikariConfig)를 가지고 Connection Pool 생성하는 class
2)Mapper
[BoardMapper]
S20. 추상메소드 만들기
- annotation 방식으로 mapper 역할을 하는 class임을 명시
- DAO 내부메소드(sql 문장실행기능)를 추상메소드로 만들기
-interface에서 필요한 구현클래스를 만드는 sqlSessionFactoryBean 객체가 있으므로 내부코드가 필요없음
[root-context]
S21. Mapper 역할 class 메모리 등록
- root-context Namespace: mybatis-spring 등록
[pom.xml]
S22. DB 관련 API 추가
[root-context]
S23.sqlSessionFactoryBean 생성: mapper의 인터페이스가 필요한 구현클래스(DB 연결) 생성
- Connection Pool을 만드는 HikariDataSource를 참조하여 DB연결
[BoardMapper.xml]
S24-1. xml 파일에 sql문장 작성
[BoardMapper.java]
S24-2. annotation 방식으로 sql문장 작성
[Web Layer+Persistence Layer]Controller와 Mapper 연결하여 DB 데이터 전송
[Mysql 연결 및 테이블 생성]
- mysql 서버 구동: C:\eGovFrame-4.0.0\bin\mysql-5.7.32 [startup] 클릭
*mysql 구동 오류 해결: vcredist_x64.exe 다운로드 및 실행
https://www.microsoft.com/ko-KR/download/details.aspx?id=40784
2. Data Source Explorer: DB-eclipse 연동하는 역할
- properties-Driver Properties 확인
3. DB 연결: com 더블클릭
[mysql.sql]
4. sql scrapbook 열기: 오른쪽 마우스-Open SQL Scrapbook
5. Scrapbook DB 연결: Type(MySql_5.1), Name(com), Database(com) 선택
6. 테이블 생성
- 테이블명은 entity 클래스명과 동일하게 작성
- 컬럼은 [Board]에서 작성한 필드명과 타입과 동일하게 생성
*문장실행: 문장 블럭 씌운 후 Alt+X
*저장: Ctrl+S-저장할 프로젝트 선택(SpringMVC1)
**sqlDeveloper에서 Mysql 연결하기 https://reference-m1.tistory.com/122
[BoardController]
S25. Autowired로 BoardMapper 선언(BoardController↔Mapper): DAO와 Controller 연결
- Autowired: Spring Container에 이미 만들어진 객체를 가져와 의존성 주입
[기능별 메소드 만들기]
[BoardController]
- BoardMain 첫화면으로 만들기
- 주소가 “/” 일 때 Redirect 방식으로 boardList 호출하기
- boardList(게시글 전체 조회메소드)가 실행되어 boardMain으로 이동하게 됨
■Mapping의 종류(HandlerMapping 역할)
- RequestMapping: GET/POST 방식 상관없이 요청받는 방법
- GetMapping: GET 방식으로 요청받는 방법
- PostMapping: POST 방식으로 요청받는 방법
2. 게시글 작성화면으로 페이지로 이동하기: BoardWrite 리턴하기
3. 작성한 게시글 DB에 저장하기
[BoardController]
- 매개변수에 Board(DTO) 받아오기
- Autowired로 선언한 Mapper의 boardInsert 메소드에 board 넣기
- redirect 방식으로 boardList로 이동하기: 작성한 게시글 반영해서 출력
[BoardMapper]
- annotaion 방식으로 insert sql문장 작성
- boardInsert 메소드 추상메소드로 만들기
4. 게시글 세부정보 조회 메소드
[BoardController]
- BoardMain에서 보낸 게시글 번호 원하는 이름으로 받기
-@RequestParam(“전송한 변수명”) 원하는 변수명
- 게시글 번호에 해당하는 게시글 조회: boardMapper의 getDetail에 게시글번호 넣기
- 게시글 조회한 결과 model에 객체 바인딩하기
- boardDetail 페이지로 이동하기
[BoardMapper]
- annotaion 방식으로 select sql문장 작성
- getDetail 메소드 추상메소드로 만들기
5. 게시글 삭제하는 메소드: 전송한 변수명과 상관없이 원하는 변수명으로 받아오기
[BoardMain]
- 값을 보낼 주소/${전송할 값 변수명}
[BoardController]
- 원하는 변수명으로 받기
-RequestMapping: ("/요청 주소/{전송받은 변수명}")
-매개변수: @PathVariable 전송받은 변수명, @PathVariable 전송받은 변수명2
[web.xml]
S26. 한글 인코딩: request가 DispatcherServlet(FrontController)로 전송되기 전 한글인코딩
[Spring 전체 구조]
'Spring' 카테고리의 다른 글
[Spring]6. Spring Boot&React 연동 (0) | 2023.09.20 |
---|---|
[Spring]5. Spring Boot (0) | 2023.09.15 |
[Spring]4. Ajax 비동기 통신 (0) | 2023.09.14 |
[Spring]2. 게시판 조회 및 삭제 실습 (0) | 2023.09.09 |
[Spring]1. Spring 개요 (0) | 2023.09.06 |