[WEB_MVC] Web정리
서블릿
서버쪽에서 실행되면서 클라이언트 요청에 따라 동적으로 서비스 제공하는 자바 클래스.
커넥션 풀
JNDI
실제 웹에서 ConncectionPool 객체 구현시 javax.sql.DataSource클래스 이용. 그리고 톰캣이 만들어놓은 커넥션풀 객체 접근시엔 JNDI를 이ㅛㅇ.
JNDI란 필요한 자원을 키/값 쌍으로 저장 후 필요할 떄 키를 이용해 값을 얻는 방법. 즉 미리 접근할 자원에 키를 지정한 후 어플이 접근중일떄 이 키를 이용해 자원에 접근해서 작업.
사용 예
- 웹 브라우저에서 name/value 쌍으로 전송 후 서블릿에서 getParameter(name)으로 값을 가져올 떄
- 해시맵이나 해시테이블에 키/값으로 저장한 후 키를 이용해 값을 가져올 떄
- 웹 브라우저에서 도메인 네임으로 DNS 서버에 요청시 도메인 네임에 대한 IP 주소를 가져올 떄
서블릿 포워드
하나의 서블릿에서 다른 서블릿이나 JSP와 연동하는 방법 = 포워드(forward)
요청에 대한 추가작업을 다른 서블릿에게 수행하게 함.
요청에 포함된 정보를 다른 서블릿이나 JSP와 공유 가능
요청에 정보를 포함시켜 다른 서블릿에 전달 가능
모델2 개발 시 서블릿에서 JSP 로 데이터를 전송하는 데 사용.
서블릿 포워드엔 4가지 방법이 존재
바인딩
사전적 의미: 두개를 하나로 묶는다.
대량의 정보를 JSP로 전송시엔 GET방식이 불편
세션 트래킹
- 쿠키: 클라이언트 PC의 쿠키파일에 정보 저장한 후 웹페이지들이 공유함.
- 세션: 서버 메모리에 정보 저장한 후 웹페이지들이 공유
ㄴ HTTP로 웹 페이지 보여주는 과정.
쿠키를 이용한 웹페이지 연동기능
쿠키란 웹페이지들 사이의 공유 정보를 클라이ㅓㄴ트 PC에 저장하고 필요할 떄 여러 웹페이지들이 공유해서 사용할 수 있도록 매개역할 하는 방법
- 정보가 클라이언트 PC에 저장
- 저장 정보 용량에 제한 있음
- 보안 취약
- 클라이언트 브라우저에서 사용 유무 설정
- 도메인 당 쿠키가 만들어집니다.
세션을 이용한 웹페이지 연동 기능
- 정보가 서버의 메모리에 저장
- 브라우저의 세션 연동은 세션 쿠키를 사용.
- 쿠키보다 보안에 유리
- 서버의 부하를 줄 수 있음.
- 브라우저당 한개의 세션이 생성
- 세션은 유효시간을 지님.
- 로그인 상태 유지기능이나 쇼핑몰의 장바구니 담기에 주로 사용.
제이쿼리 Ajax 기능
클라이언트의 작업과 상관없이 비동기적으로 서버와 작업을 수행할 시 Ajax기능을 사용.
자바스크립트를 이용한 비동기 통신으로 클라이언트와 서버간 XML이나 Json 데이터를 주고받는 기술을 의미함.
Model2로 작동하는 웹 사이트
스프링 의존성 주입
부품에서 어느 부품이 고장나면 교체하듯이 애플리케이션에서도 사용자의 요구사항에 따라 클래스 기능을 변경하거나 다른 클래스 기능으로 대체해야하는 경우가 자주 생김.
이러한 상황에서 좀 더 수월하게 대체할 수 있게 만든 기능이 의존성 주업(DI)와 제어역행(Ioc)임.
지금까지 프로그래밍 요청하면서 한 클래스가 다른 클래스의 기능을 쓰려면 개발자가 직접 코드에서 사용할 클래스의 생성자를 호출해서 사용.
사용할 클래스와 사용될 클래스의 관계는 개발자에 의해 직접 코드에서 부여됨.
의존성 주입이란 이런연관관계를 개발자가 직접 코딩을 통해 컴포넌트에 부여하는 것이 아니라 컨테이너가 연관관계를 직접 규정.
그럼 코드에서 직접 연관관계가 발생하지 않으므로 클래스의 변경이 자유로워짐 = 약한결합
관점 지향 프로그래밍(AOP)
메서드 안의 주 기능과 보조기능을 분리한 후 선택적으로 메서드에 적용해서 사용. AOP를 사용하면 전체코드에 흩어진 보조기능을 하나의 장소에 모아서 관리. 보조기능을 자신이 원하는 주 기능에 선택적으로 적용해서 코드로 단순해지고 가독성 상향.
스프링 MVC
- 모델2 지원
- 스프링과 다른 모듈과 연계 용이
- 타일즈나 사이트메시같은 뷰기술과 연계가 쉬움.
- 태그 라이브러리를 통해 메시지, 테마, 입력폼을 쉽게 구현 가능.
- 브라우저가 DIspatcherServlet에 URL로 접근해 해당 정보를 요청.
- 핸들러 매핑에서 해당 요청에 대해 매핑된 컨트롤러가 있는지 요청.
- 매핑된 컨트롤러에 대해 처리 요청
- 컨트롤러가 클라 요청 처리한 결과 View 이름을 ModelAndView에 저장해서 DispatcherServlet으로 반환
- Dispatcher서블릿에서는 컨트롤러에 보내온 View 이름을 viewResolver로 보내 해당 View를 요청합니다.
- viewResolver는 요청한 View를 보냅니다.
- View처리결과를 DispatcherServlet으로 보냅니다.
- DispatcherServlet은 최종결과를 브라우저로 전송합니다.
xml 주입 과정
Mybatis 특징
SQL 실행 결과를 자바 빈즈 또는 MAP 객체에 매핑해주는 Persistence 솔루션으로 관리. 즉 SQL 소스가 아닌 XML 로 분리함.
- SQL 문과 프로그래밍 코드를 분리해서 구현
- 데이터 소스 기능과 트랜잭션 처리 기능을 제공.
트랜잭션 기능
스프링은 트랜잭션을 마이바티스와 연동해서 사용.
트랜잭션은 XML에서 설정하는 것과 애너테이션 이용하는 법이 있음. XML은 설정파일이 복잡해지면 불편하므로 애너테이션으로 트랜잭션이 더 선호됨.
트랜잭션은 여러개의 DML 명령문을 하나의 논리적인 작업단위로 묶어서 관리하는 것으로, ALL또는 Noting 방식으로 작업 단위가 처리됨. 즉, SQL명령이 모두 정상으로 처리되면 모든 작업의 결과를 디비에 영구반영(Commit)하지만 그 중 하나라도 잘못된 것이 있으면 모두 취소(rollback)함.
ㄴ 일반적인 웹 어플의 service와 dao 클래스 구조
Service 클래스의 각 메서드가 애플리케이션의 단위기능 수행. 단위기능 1은 DAO 클래스의 SQL문 하나로 기능 수행하는 반면 단위기능 2 나 단위기능3는 여러개의 SQL을 묶어서 작업을 처리.
근데 묶어서 작업 처리 할 시 하나의 SQL이 잘못되면 이전에 수행한 모든 작업을 취소해야 작업의 일관성 유지
따라서 트랜잭션은 각 단위기능 수행 시 이와 관련된 데이터베이스 연동작업을 한번에 묶어서 관리하는 개념.
웹에서 묶어서 처리하는 기능의 예
- 게시판 조회시 해당 글 조회와 조회수 동시에 갱신
- 쇼핑몰에서 상품 주문시 상품을 테이블에 등록하는 기능과 주문자의 포인트를 갱신하는 기능.
- 은행에서 송금시 송금자의 잔고를 갱신하는 기능과 수자의 잔고를 갱신하는 기능.
은행계좌 트랜잭션 예시
홍길동이 500만원 인출하고 커밋한 후 이 경우 트랜잭션 적용 안하면 500만원 인출후 커밋했는데 김유신이 갱신하려할떄 이상 생기면? 김유신 계좌가 갱신되지 않으면 홍길동은 500보냈다 하고 김유신은 안받았다고 함. -> 문제 발생
그래서 트랜잭션을 적용해서 두 과정이 끝나야 최종 커밋이 되어야 함.
만약 문제가 최종 커밋 전 바뀌면 롤백하게 됨.
스프링 트랜잭션 속성