<if test = '@com.test.Utils@isEmpty(param)'>
   AND searchVal = #{param}
</if>

@classpath@method(param) 과 같이 사용이 가능

 

보안상 쓸일은 없겠지만 아래와 같이 사용도 가능

SELECT '${@com.test.Utils@isEmpty(param)}' FROM DAUL

 

반응형

'back > Mybatis,Ibatis' 카테고리의 다른 글

[Mybatis] 동적쿼리 (if test) 문자열처리  (4) 2020.03.27
[Ibatis] dtd 경로 문제  (1) 2019.12.30
[Mybatis] $과 # 차이  (0) 2019.12.05
[Mybatis] like 조건시 문자열 처리  (1) 2019.02.13

MySQL 에서 일반적으로 사용되는 스토리지엔진은 MyISAM 과 InnoDB이다.

MyISAM이 default 스토리지엔진으로 사용된다.

각각의 스토리지엔진은 아래와 같은 장단점이 존재한다.

 

MyISAM

트랜잭션 지원 하지 않음

테이블 단위로 데이터가 저장된다

로우레벨 lock의 지원되지 않음

무결성이 보장되지 않음

table 퍼포먼스 속도가 InnoDB보다 빠르다

소규모 프로젝트에 적합하다. 

 

InnoDB

로우 레벨 lock 을 지원하며 이에따라 insert/update 성능이 MyISAM 보다 뛰어나다.

ACID (Atomicity, Consistency, Isolation and Durability) 속성을 제공한다.

외래키(Foreign Key)를 지원한다.

FullText 인덱싱 지원을 하지 않는다.

* FullText 인덱싱 : 값 전체를 인덱스로 사용

* table 단위의 데이터 저장이 아니기 때문에 SELECT COUNT(*) FROM table 은 전체테이블 rows를 스캔하게 된다.

  반면 MyISAM 은 table 단위로 저장되므로 이같은 경우엔 강점이 있다.

 

출처: What are the main differences between INNODB and MyISAM

 

 

※ MyISAM 은 어떻게 읽어야 할까?

https://lists.mysql.com/mysql/204267

 

 

 

 

반응형

'DB' 카테고리의 다른 글

데이터베이스 격리 수준 : Database Isolation level  (0) 2020.03.20

URL에 직접 접근할 수 없도록 처리

: header 에서 referer 정보를 확인하여 직접 접근 여부 판별이 가능하다.

referer 는 변조가 가능하여 직접 접근을 완벽히 막는 방법이라고 할 순 없을 듯 하나, 보통은 이정도만 처리해도 될 듯 하다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    String contextPath = request.getContextPath();
    
    if(handler instanceof HandlerMethod) {
        HandlerMethod handlerMethod = (HandlerMethod)handler;
        
        RefererUncheck lefererUncheck = handlerMethod.getMethodAnnotation(RefererUncheck.class);
        
        logger.info("Header Check. (getRemoteAddr=" + StringUtils.trimToNull(request.getRemoteAddr()) + ")");
        logger.info("Header Check. (getRequestUrl=" + StringUtils.trimToNull(request.getRequestURI().substring(contextPath.length())));
        try {
            // URL 접속정보
            String referer = StringUtils.trimToNull(request.getHeader("Referer"));
            logger.info("referer : " + referer);
            // 리퍼럴 어노테이션이 없고, ajax 통신이 아닌경우만 체크
            if (lefererUncheck == null && !this.isAjaxRequest(request)) {
                logger.debug("Referer Check Start! (Referer=" + StringUtils.trimToNull(request.getHeader("Referer")) + ")");
                logger.debug("Referer Check success! (URI=" + request.getRequestURI() + ")");
                if (StringUtils.isEmpty(referer)) {
                    throw new CustomException("error.referer");
                }
            }
            
        } catch (CustomException be) {
            request.getRequestDispatcher(contextPath+ "/cmm/error.jsp").forward(request, response);
            return false;
        } catch (Exception e) {
            logger.error(e.getMessage());
            return false;
        }
    }
    
    return true;
}
private boolean isAjaxRequest(HttpServletRequest request) {
    final String header = request.getHeader(Constants.AJAX_HEADER);
    if( header != null && header.equals("true") ) {
        return true;
    }
    return false;
}
 
cs

 

referer Mozilla doc

 

 

반응형

20년 6월.

이직과 결혼이 겹쳤다.

정신도 없고 시간도 없다.

결정적으로 마음이 붕떠 공부가 되질 않는다.

새신랑 되고나서, 새직장에서, 새로운 마음가짐으로 다시 열공해야지.

 

희수야 사랑한다!

앞으로 70년간 행복하자!

 

반응형

'etc. > life' 카테고리의 다른 글

금연 시작  (1) 2019.09.10

vue 프로젝트 생성 후

.vue 파일이 아래 이미지와 같이 온통 하얀색으로 표시된다면

marketplace 에서 vetur extension plugin을 설치하여 highlighter 를 적용해줄 수 있다.

(보통 우측 하단에 친절하게 vetur 확장자를 설치하라고 안내 팝업이 떠있다)

 

 

 

반응형

vue 사용하기

 

1. HTML 내에 script src 추가

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

 

2. vue cli 설치하여 사용

1) node 설치

2) vue 설치

> npm install -g @vue/cli

> vue create test

https://www.youtube.com/watch?v=5lDEee-Ur34&list=PLB7CpjPWqHOtYP7P_0Ls9XNed0NLvmkAh&index=13

 

3. vue cli 설치 없이 사용

> npx @vue/cli create test

* babel, router, vuex, linter/formatter 옵션 체크(space bar) 나머지는 전부 Y(엔터)

 

프로젝트 생성된 후, 서버 실행

> npm run serve

 

 

 

 

반응형

alias (별칭) 생성/조회/수정/삭제

긴 명령어를 매번 치기 힘들 때, 별칭(alias)을 만들어 사용할 수 있다.

서버를 시작하기 위해 cd ~/domains/api/bin/start.sh 를 사용하는 경우 아래와 같이 alias 를 CRUD 할 수 있다.

 

alias 생성
> alias api_start='cd ~/domains/api/bin/; ./start.sh'

alias 목록 조회
> alias

alias 수정
생성과 동일. alias 중복시 덮어써진다.

alias 삭제
> unalias api_start

 

 

반응형

[에러로그]

2020-05-12 10:44:05,194 INFO org.springframework.scheduling.quartz.LocalDataSourceJobStore - ClusterManager: detected 1 failed or restarted instances.

 

[원인]

쿼츠 클러스터링 모드에서 인스턴스 간 타임싱크(time sync)가 맞지 않아 발생하는 에러.

 

[해결]

ntp(network time protocol) 상태 확인 및 설정 필요.

 

 

https://stackoverflow.com/questions/15701417/strange-behavior-of-quartz-in-cluster-configuration

 

반응형

Maven Build 시 test 건너뛰기 

Maven Build (install) 시 Maven Test 이후에 Build를 하게 된다.

이때 jUnit 테스트 에서 Exception 발생 및 Assert not Equal 등으로 Test가 실패할 경우 Build 는 실패 (Fail) 하게 된다.

jUnit Test 가 실패해도 Build 는 되게끔 Maven Test 단계를 건너뛰는 방법은 아래와 같다.

 

1. CMD 에서 빌드시

mvn install -DskipTests 

 

2. IDE Run configurations 에서 빌드시

1. Goals 에 다음과 같이 옵션 부여 : install -DskipTests 

2. Skip Tests 체크박스 체크 후 run

3. pom 수정 : surefire plugin 사용 (skipTests 속성 값 true/false 로 지정)

1
2
3
4
5
6
7
8
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M4</version>
    <configuration>
      <skipTests>true</skipTests>
    </configuration>
</plugin>
cs

 

surefire doc:

https://maven.apache.org/surefire/maven-surefire-plugin/examples/skipping-tests.html

반응형

1. Inter-bean reference 

@Configuration 과 함께 @Bean 을 사용 하는 경우.

cglib proxy 에 의해 생성된 proxy 객체를 사용.

@Bean 은 하나만 생성된다.

일반적인 경우 위 방법을 사용한다.

 

2. Lite Mode

@Configuration 없이 @Component 등의 annotation과 @Bean을 같이 사용.

cglib proxy 에 의한 객체를 사용하지 않고 일반 메소드 처럼 동작하게 된다.

@Bean 이 여러개 생성 될 수 있다.

 

Lite Mode를 언제 사용하는지 모르겠다. 알아만 두자.

 

한글 설명 :

https://multifrontgarden.tistory.com/253

공식 doc :

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Bean.html

반응형

+ Recent posts