2020-12-22

jsbak·2020년 12월 22일
0
  1. 3 - tier
  2. model2
  3. MVC
  4. layer
  5. 프레임워크

클라이언트 서버 시스템 N-tier구조

ORM은 중간에 쿼리를 안쓰는데
(하이버네이트)
왜 때문에 mybatis를 ORM이라 부르는 이유
테이블과 테이블간의관계 성을 이용해서
has a, has many, 직접바인딩하지 않아도 알아서 바인딩하기 때문에 ORM이라고 할 수 있는데
우리가 중프 했을때 ibatis같은 코드로 mybatis를 쓴다면 ORM이라고 할 수 없다.

모델링이 중요하다

로깅 프레임워크를 적용 -> 퍼사드 패턴 적용
리모컨과 뷰어?(뭐라하더라지 프레임워크가 존재한다.

완전 검증
필수 입력값 검증뿐만이 아니라. 데이터 길이, 형식, 타입

persistance layer을
앞에서 비지니스 로직에 검증을 하지 않았다는 것을 하기 때문에

모든 레이어에서 검증하는 것이 맞다
그러면 중복되는 코드가 발생
이 레이어드간 공통점
모든 검증은 Domain(VO)로 표현하기 때문에
각 레이어에서 공통적으로 사용하는 Domain에서 검증한다면 다 같다는 것 -> 에서 출발한게 벨리데이션 프레임워크(validation framework)

log4j

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을 설정해서 플레이스 홀더('${}')로 적용

Simple Logging Facade for Java (SLF4J)

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로 변경

  1. 메시지 : 사용자가 결정
  2. layout : 어떻게 찍을지(형식)
  3. 어팬더 : 이 메시지를 어디에 로그를 찍을지
  4. 로거 : 찍어주는 녀석(실제 로거를 찍는녀석, 로거메시지 전달자)
    appender : where
    message : what
    layout : how
    logger : who(전달자)
    level : logging event 등급, 보통 4개 debug->info->warn->error(->fatal)

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);
  • 로거의 이벤트를 따로 설정하기 위해서 QFN을 이용한다.
  • 설정파일에서 아래 등급에 해당하는 메시지를 무시하게된다.
  • 따라서 별도의 로거를 등록을하고 따로 이벤트를 설정할수 있다.
<Logger name="kr.or.ddit" level="debug">
      <AppenderRef ref="Console"/>
</Logger>

name의 하위에 해당하는 모든 구조에 적용이 가능하다.

중복 방지
additivity="false" 추가

튜닝이 필요할때는 여기

우리는 형식을 바꾸고 싶어서 Layout
Pattern Layout

QFN대신 생략하고 페이지의 첫문자로사용하고 싶을떄는 뒤에 처럼 줄여쓸수 있다.

log4jdbc

링크 : https://log4jdbc.brunorozendo.com/

프록시는 대리자, 대리할 대상이 존재하지 않으면 의미없다(사용할 수 없다)


혼자서는 못쓴다 서드 파티 프레임워크

이렇게 변경해야한다
jdbc:log4 카피

QTN 카피

jdbc.sqltiming 카피 -> log4j2.xml에 추가

잘 안되서 다른 녀석으로 교체

jdbc.resultsettable 얘도 추가

링크 : 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 에 등록을 해준다.

EL의 장점

간결
기호 중복이 없다.
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만듬, 비동기 데이터 받음
껍데기요청(동기)과, 속채우기 요청(비동기)

jquery parents()

jquery Form method()

resetForm(), clearForm()

오늘의 미션?

목록조회 완성? 동기요청만 사용
이녀석을 비동기방식으로 바꾸기

prodList의 ajax js코드를,
이것도 라이브러리화(모듈화각) ㅇㅇㅇㅇ

3번째나?? 뭔가를 주시는데
미리예고? 나눠준 시퀀스다이어그램이랑 클래스다이어그램 분석해보기다이어그램 해석할 줄 알기 해석해보고 오기
해결본? 가져가서 비교??

profile
끄적끄적 쓰는곳

0개의 댓글