**XML
=> Hyper Text Markup Language : Tag 를 브라우저가 해석해서 랜더링
=> eXtensible Markup Language : 확장 마크업 언어
=> XML은 태그의 의미를 DTD에 설정한 곳이나 개발자가 해석
=> HTML이 구조적이지 못하여 데이터를 표현하는데 한계가 있어 만들어낸 데이터 표현 포멧
- 프로젝트 설정이나 OpenAPI 에 많이 사용
- 프로젝트 설정 파일로 사용되는 경우 우리가 해석할 수 없고 해석을 대신해주는 DTD를 상단에 선언해주어야 함
**Spring MVC Project 에서 사용되는 XML
1) 이름이 고정된 파일
=> Server.xml : Tomcat의 설정파일
=> pom.xml : Maven의 설정 파일
=> web.xml : Web Application의 설정 파일
=> applicationContext.xml : Spring MVC 전체에서 사용되는 설정 파일
=> dispatcher-servlet.xml : URL 패턴에 해당하는 요청에만 사용하는 설정 파일
=> mybatis의 환경설정파일과 매퍼 파일 - 대신 인터페이스를 사용할 수 있음
=> hibernate의 경우는 매퍼 파일
**개발환경
=> Operating System : Windows 10
=> Database : MySQL
=> Programming Language : Java 1.8
=> IDE : Eclipse
=> WAS : Apache Tomcat 9.0
=> Build Tool : Maven
=> Unit Test : JUnit
=> SCM(Software Configuration Management - 형상관리) : Git hub
=> Framework : Spring 5.0, Hibernate
**pom.xml 파일의 주요태그
1. properties
=> 아래에서 많이 사용할 문자열을 태그로 만들어 두는 것
2. repository
=> 기본적으로 Maven 중앙 저장소에서 다운로드 받는 데 다른 곳에서 다운받고자 할때 다운 받을 위치를 설정
3. dependencies
=> 사용할 외부 라이브러리
**Spring MVC Project 구조
1. web.xml
<!-- 애플리케이션이 시작될 때나 종료될때 또는 세션이 만들어질 때 세션이 소멸될 때 등의
이벤트가 발생하면 호출되는 객체의 클래스를 설정하는 태그가 listener
WEB-LIF 디렉토리에 applicationContext.xml 파일이 있어야 함 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- applicationContext.xml 파일의 경로를 수정하는 설정 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- URL 패턴에 따라서 사용할 스프링 설정 파일을 지정하는 태그 -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<!-- /는 .jsp를 제외한 모든 요청에 응답 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
2. root-context.xml
=> 모든 곳에서 사용할 bean을 설정하는 파일
=> 데이터베이스 접속 정보를 생성
3. servlet-context.xml
=> web.xml파일에 설정한 url 패턴에 해당하는 요청이 왔을 때 사용할 bean을 설정하는 파일
<!-- Spring MVC Project에서 사용하는 50여가지의 어노테이션을 사용할 수 있도록 해주는 설정-->
<annotation-driven />
<!-- 변화가 거의 없는 파일들을 저장해두면 캐싱하여 이용할 수 있도록 해주는 설정
기본은 root(webapp, WebContent) 디렉토리의 resources, 캐싱 시간 설정도 가능-->
<resources mapping="/resources/**" location="/resources/" />
<!-- Controller에서 forwarding 하는 View 이름을 넘겨주었을 때 실제 사용할 View를 결정하는 설정 -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!-- bean을 자동생성해주는 root 패키지 설정 클래스 생성시 이 패키지 안에 만드는 것을 권장
다른 패키지를 만들었다면 다른 패키지도 추가해주면 됨 -->
<context:component-scan base-package="kr.co.pk" />
4. kr.co.pk 패키지에 가면 HomeController가 생성되어 있음
//시작요청이 오면 home으로 포워딩
// : servlet-context 파일의 ViewResolver와 결합해서 실제 출력할 View를 결정
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
return "home";
}
**하나의 서비스 구현 절차
=> 어디에서 요청을 할 것인지, 어떤 요청을 할 것인지 결정
- 시작하자마자 : /
=> 대부분의 서비스는 2가지 형태
- 바로 데이터를 요청해서 출력하는 서비스 : 목록보기나 상세보기
: 요청 -> Controller -> Service -> DAO -> 저장소 -> DAO -> Service -> Controller -> View
- 입력화면을 이용해서 파라미터를 입력받고 요청하여 출력 : 삽입, 삭제, 로그인, 검색
* 삽입 : 요청-> Controller-> View-> Controller-> Service-> DAO-> 저장소 -> DAO -> Service -> Controller -> View
* 수정 : 요청-> Controller-> Service-> DAO-> 저장소-> DAO -> Service-> Controller-> View-> Controller-> Service
-> DAO-> 저장소-> DAO-> Service-> Controller-> View
**url 패턴을 '/' 나 '/*'를 사용했을 때의 문제점
=> / : .jsp를 제외한 모든 요청을 처리
=> /* : 모든 요청을 처리
=> 확장자가 jsp가 아니면(css, js) Controller가 처리하려 하고, Controller에 처리하는 코드가 없으면 404 에러발생
=> servlet-context.xml 파일에 Controller가 처리하지 않으면 WAS가 처리하도록 하는 설정을 추가 해 주어야 함
**집에 있는 PC를 고정된 IP를 갖도록 할 수 있음
=> IP 공유기를 사용할 경우 IP공유기 포트 포워딩을 검색
**Oracle과 MySQL의 차이
1. 테이블을 생성할 때 자료형의 차이
=> 오라클은 숫자를 number로 만들지만 MySQL은 int, float으로 생성
=> 오라클은 문자열을 char, varchar2, clob로 표현하지만 MySQL은 char, varchar, text로 표현
=> 오라클은 sequence로 일련번호를 만들지만 MySQL은 auto_increment로 생성
2. 조회에서의 차이
=> 오라클은 페이징(나누어서 가져오기)시 인라인뷰를 사용, MySQL은 limit 구문 이용(MySQL이 쉬움)
=> 오라클은 인코딩 설정을 하지 않아도 되지만 MySQL은 반드시 인코딩 설정을 해야 함
**Hibernate
=> ORM : Object Relation Mapper - 객체와 데이터베이스 테이블의 데이터를 매핑시키는 프레임워크
- 최근 등장하는 데이터베이스 연동 프레임워크는 거의 대부분 ORM
============================================================================
20.07.08
=> 어제까지 한 프로젝트 : http://github.com/itggangpae/springmvc0708.git
itggangpae/springmvc0708
Contribute to itggangpae/springmvc0708 development by creating an account on GitHub.
github.com
1. 자신의 데이터베이스를 사용하고자 하는 경우
=> root-context.xml 팔일의 DataSource 수정
=> 위의 주석을 해제하면 Oracle이고 그대로 두면 MySQL
2. ItemDAO 클래스
=> 하이버네이트 사용 - 그대로, MYBatis 사용 : 메소드 내 주석해제, 하이버네이트 호출구문 주석처리
3. ItremServiceImpl 클래스에서 ItemDAO로 작업시
=> xml 파일 - MyBatis, ItemMapper - 인터페이스를 이용하는 것이 됨
**File 클래스
=> java.io.File 클래스
=> 인스턴스 생성법, 디렉토리인 경우 내부 파일 목록을 가져오는 방법, 파일의 존재 여부 확인, 파일의 크기나 마지
막 업데이트 된 날짜를 가져오는 API는 중요
=> 애플리케이션을 만들게 되면 애플리케이션 안에 파일을 저장해서 사용하는 경우가 많은데 없으면 생성하고 있는
경우에는 서버에서 업데이트 된 날짜와 비교하여 수정하는 작업들을 수행해야 함
**파일 다운로드 뷰 생성
=> AbstractView로 부터 상속 받는 View 클래스를 생성
=> renderMergedOutputModel 이라는 메소드를 오버라이딩하여 그 안에 파일명, 파일 크기등을 설정해야 함
=> 다운로드 요청시 생성한 View를 이용하여 출력하도록 설정
**Excel 출력
=> apache poi 라이브러리를 이용
=> AbstractXlsView로 부터 상속 받는 클래스를 만들어서 출력
=> WorkBook이 파일이고 파일 안에 WorkSheet가 있고, 안에 Row가 있고, 안에 Cell이 존재
- 출력은 Cell을 생성하여 출력
=> Excel은 2003이전에는 확장자가 xls, 이후로는 xlsx인데 2개의 포맷이 다름
- 생성을 할 때 개념은 같은데 클래스 이름의 앞글자가 다름, H, X로 시작
=> 엑셀로 보여주는 요청이 파일 이름이 됨
- 확장자를 xls나 xlsx로 만드는 것이 좋음
**PDF 출력
=> iText API를 이용하여 출력
=> 거의 모든 프로그래밍 언어에서 사용이 가능
=> AbstractPdfView 클래스를 상속받는 클래스를 만들어서 출력
=> 기본적으로 한글 출력이 안됨
- 한글 폰트를 별도로 설정해야 함
**REST(Represenctational State Transfer)
=> 하나의 URI는 하나의 서비스를 대표하게 설계
=> 서버에 접근하는 기기의 종류에 상관없이 동일한 URI로 처리하도록 설계
=> 이전에는 서버가 데이터를 가지고 뷰를 만들어서 클라이언트에 전송하는 구조
- 서버는 데이터를 전송하여 클라이언트가 자신의 특성에 맞게 데이터를 골라서 출력할 수 있도록 설계
=> 최근에는 Server에서 Client에서 데이터를 넘길 때 JSON 형식을 가장 많이 사용
- XML: 사람이 보기쉽지만 사이즈가 크고, JSON: 사람이 보기 어렵지만 사이즈가 작고 클라이언트가 쉽게 해석
- 사람이 직접 설정하는 곳에서는 아직도 XML을 더 많이 사용
**Spring에서 json 출력
1. jsp 파일에서 JSONArray나 JSONObject를 출력
2. 출력할 뷰를 JacksonView를 이용하여 출력
3. Controller에서 ResponseBody를 이용하여 출력
4. RestController를 만들어서 String 리턴시 csv가, 그 외 객체 타입이나 List 리턴시 JSON으로 생성하여 출력
=> 데이터 리턴시 Object(Map 같은 객체)를 리턴
- Array나 List 리턴은 좋지 않음
'수업 정리' 카테고리의 다른 글
67일차 수업정리(텍스트 파일보고 다시 정리) (0) | 2020.07.10 |
---|---|
66일차 수업정리(RestController, ajax) (0) | 2020.07.09 |
63~66일차 수업 정리(Spring MVC Project) (0) | 2020.07.07 |
63일차 수업 정리(Spring - MVC패턴) (0) | 2020.07.06 |
62일차 수업 정리(Spring - Transaction, Hibernate, MyBatis) (0) | 2020.07.03 |