클라이언트 서버 시스템 N-tier구조
ORM은 중간에 쿼리를 안쓰는데
(하이버네이트)
왜 때문에 mybatis를 ORM이라 부르는 이유
테이블과 테이블간의관계 성을 이용해서
has a, has many, 직접바인딩하지 않아도 알아서 바인딩하기 때문에 ORM이라고 할 수 있는데
우리가 중프 했을때 ibatis같은 코드로 mybatis를 쓴다면 ORM이라고 할 수 없다.
모델링이 중요하다
로깅 프레임워크를 적용 -> 퍼사드 패턴 적용
리모컨과 뷰어?(뭐라하더라지 프레임워크가 존재한다.
완전 검증
필수 입력값 검증뿐만이 아니라. 데이터 길이, 형식, 타입
persistance layer을
앞에서 비지니스 로직에 검증을 하지 않았다는 것을 하기 때문에
모든 레이어에서 검증하는 것이 맞다
그러면 중복되는 코드가 발생
이 레이어드간 공통점
모든 검증은 Domain(VO)로 표현하기 때문에
각 레이어에서 공통적으로 사용하는 Domain에서 검증한다면 다 같다는 것 -> 에서 출발한게 벨리데이션 프레임워크(validation framework)
apache.org - logging service
log4j 1, 2 차이
설정파일
1에서는 프로퍼티
2에서는 xml으로
링크 : http://logging.apache.org/log4j/2.x/index.html
Maven, Ivy, Gradle, and SBT Artifacts
클릭
나중에 버전이 달라졌을때 쉽게 변경하기 위해서
pom.xml에서
log4j-version을 설정해서 플레이스 홀더('${}')로 적용
slf4j
http://www.slf4j.org/
자바를 위한 로깅 퍼사드의 약자( 퍼사드? 리모컨 )
실제 로그를 찍지는 않지만 로그는 찍는 프레임워크에서 전달을 해준다.
org/slf4j
그룹 아이디
jcl-over-slf4j/
아티팩트 아이디
아래 버전 아이디
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.9</version>
</dependency>
log4j slf4j binding
log4j-slf4j-impl 카피
log4j 아래로 이동
slf4j를 이용하기 위해서
commons-logging 제외
jcl 자카르타
jcl-over-slf4j/ common logging을 눌러버리고(over) 대신한다.
/jcl-over-slf4j/ 만 카피
아티팩트 아이디 추가
org.slf4j-version 버전프로퍼티 추가
플레이스 홀더로 버전프로퍼티 설정
log4j.org에서 왼쪽 메뉴 중간에
configuration 클릭
아래에서 2번째 xml파일 복사
src/main/resources 아래에
반드시 log5j2.xml 으로 설정해야 찾음
error에서 debug로 변경
Appenders -> 여러곳에 출력
Console 에다가 출력하겠다.
10:29:13.923 [localhost-startStop-1] INFO org.apache.tiles.access.TilesAccess - Publishing TilesContext for context: org.apache.tiles.request.servlet.ServletApplicationContext
%d{HH:mm:ss.SSS} >> 10:29:13.923
[%t] >> [localhost-startStop-1]
%-5level >> 이벤트 등급 INFO
%logger{36} >> org.apache.tiles.access.TilesAccess
%msg >> Publishing TilesContext for context: org.apache.tiles.request.servlet.ServletApplicationContext
String의 format과 유사
일정한 형식으로 로그 메시지를 남기고 싶다면 해당 하는 시그니처의 메서드를 이용한다.
logger.debug("currentPage : {}, searchType: {}, searchWord: {}",
pageParam, searchType, searchWord);
<Logger name="kr.or.ddit" level="debug">
<AppenderRef ref="Console"/>
</Logger>
name의 하위에 해당하는 모든 구조에 적용이 가능하다.
중복 방지
additivity="false" 추가
튜닝이 필요할때는 여기
우리는 형식을 바꾸고 싶어서 Layout
Pattern Layout
QFN대신 생략하고 페이지의 첫문자로사용하고 싶을떄는 뒤에 처럼 줄여쓸수 있다.
링크 : https://log4jdbc.brunorozendo.com/
프록시는 대리자, 대리할 대상이 존재하지 않으면 의미없다(사용할 수 없다)
혼자서는 못쓴다 서드 파티 프레임워크
이렇게 변경해야한다
jdbc:log4 카피
QTN 카피
jdbc.sqltiming 카피 -> log4j2.xml에 추가
잘 안되서 다른 녀석으로 교체
링크 : https://log4jdbc.brunorozendo.com/
레벨을 높여서 잘보인다
도메인 생성
패키지 생성 dao, service, controller
view단 생성
DAO 인터페이스 생성 - QFN 카피
복사한 kr.or.ddit.prod.dao.IProdDAO
namespace에 등록
Configuration에 추가하기 mapper
DAO 인터페이스 정의하기
DAO 구현체 만들기 -> 의존할 객체를 생성 -> SQLSessionFactory필요
Service 인터페이스 정의
Service 구현체 만들기 -> 의존성, 싱글턴
Controller 생성
View 생성
prefix=" WHERE " 맨앞에 올 문장
prefixOverrides="AND" 맨앞에서 지울문장
suffixOverrides="" 맨뒤에서 지울 문장
IOthersDAO 생성후 QFN 카피
xml 생성 한뒤 namespace 설정
마저 등록을 해준다. configuration.xml 에 등록을 해준다.
간결
기호 중복이 없다.
null 고려할 필요가 없다.
null을 EL에 알아서 "" 바꾸어 준다.
검색어 : jquery form
링크 : http://malsup.com/jquery/form/
ajaxForm이 우리의 asyncForm인것
그리고fucntion은? success함수
option
http://malsup.com/jquery/form/#options-object
ajax에서 사용하던 option을 다 쓸 수 있으며, 추가적으로 clearForm이라던가 이런거를 쓸 수 있다. (clearForm - 응답데이터가 오면 Form을 지워준다)
비동기는 요청 때마다 새로운 숫자가 들어가서 남아 있는 상태가 된다.
코드가 한줄? 응답데이터 왔어 그럼 page 숫자가 reset되야한다.
-> resetForm()..
동기방으로는 데이터를 가져오지 않을 것이다.
동기와 비동기 요청을 분리해서 사용
동기 UI만듬, 비동기 데이터 받음
껍데기요청(동기)과, 속채우기 요청(비동기)
resetForm(), clearForm()
목록조회 완성? 동기요청만 사용
이녀석을 비동기방식으로 바꾸기
prodList의 ajax js코드를,
이것도 라이브러리화(모듈화각) ㅇㅇㅇㅇ
3번째나?? 뭔가를 주시는데
미리예고? 나눠준 시퀀스다이어그램이랑 클래스다이어그램 분석해보기다이어그램 해석할 줄 알기 해석해보고 오기
해결본? 가져가서 비교??