블로그 이미지
플로거
Android/J2EE/Web/Spring/Database

calendar

            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          

Notice

Statistics Graph
2017.07.25 17:52 Programming/Git

Git 핵심

  • Git 을 배우려면 Subversion 이나 Perforce 같은 다른 VCS 를 사용하던 경험을 지워야..
  • Git 은 미묘하게 달라서 다른 VCS 에서 쓰던 개념으로는 헷갈림.
  • 델타(각 파일에 대한 변화)가 아니라 스냅샷 
  • Git 은 커밋하거나 상태를 저장할 때마다 파일이 존재하는 그 순간이 중요.
  • 크기가 아주 작아 성능이 탁월하다.
  • Git은 성능을 위해 파일을 저장하지 않고, 이전 상태의 파일에 대한 링크를 저장한다.


Git의 세가지 상태 - Committed, Modified, Staged

  • Committed - 데이터가 로컬 데이터베이스에 안전하게 저장.
  • Modified -  수정한 파일을 Commit 하지 않은 것. 
  • Staged - 현재 수정한 파일을 곧 Commit 할 것이라고 표시.


저작자 표시 비영리 변경 금지
신고

'Programming > Git' 카테고리의 다른 글

Git 기초  (0) 2017.07.25
GIT - the stupid content tracker  (0) 2017.07.25
posted by 훈즈 플로거
2017.07.25 11:50 Programming/Git

Git ( ɡ ɪ t / ) -  컴퓨터 파일의 변경 내용을 추적 하고 여러 사람이 사용하는 파일에 대한 작업을 조율 하는 버전 관리 시스템 (VCS)입니다 .  주로 소프트웨어 개발에서 소스 코드 관리에 사용되지만 , 파일의 변경 내용을 추적하는 데 사용할 수 있습니다. 분산 개정 관리 시스템 으로서 속도, 데이터 무결성, 및 분산 된 비선형 워크 플로우에 대한 지원을 목표로합니다. 

Git은 리눅스 커널 개발을 위해 2005 년 리누스 토발즈 (Linus Torvalds) 에 의해 만들어졌으며 다른 커널 개발자들은 초기 개발에 기여했습니다.  2005 년 이래로 현재 유지 관리자는 Junio ​​Hamano 입니다.

대부분의 다른 분산 버전 제어 시스템과 마찬가지로 대부분의 클라이언트 - 서버 시스템 과 달리 모든 컴퓨터의 모든 Git 디렉토리 는 네트워크 액세스 나 중앙 서버와 관계없이 완전한 기록 및 전체 버전 추적 기능을 갖춘 본격적인 저장소 입니다. 

리눅스 커널과 마찬가지로 Git은 GNU General Public License 버전 2 의 조건에 따라 배포되는 자유 소프트웨어 입니다.  

출처 - 위기백과  https://en.wikipedia.org/wiki/Git



Creator - Linux 개발 커뮤니티(특히 Linux 창시자 Linus Torvalds)


장점


  • 빠른 속도

  • 단순한 구조

  • 비선형적인 개발(수천 개의 동시 다발적인 브랜치)

  • 완벽한 분산

  • Linux 커널 같은 대형 프로젝트에도 유요할 것(속도나 데이터 크기 면에서)

<< 버전 관리 시스템의 진화 >>

LVCS  ->  CVCS  ->  DVCS  로 발전되어 가고 있음


 LVCS(로컬 버전 관리 시스템  - RCS

CVCS(중앙 버전 관리 시스템) - CVS, Subversion, Perforce

DVCS(분산 버전 관리 시스템) - Git, Mecurial, Bazaar, Darcs



저작자 표시 비영리 변경 금지
신고

'Programming > Git' 카테고리의 다른 글

Git 기초  (0) 2017.07.25
GIT - the stupid content tracker  (0) 2017.07.25
posted by 훈즈 플로거
2017.07.16 01:03 Programming/Spring

성능을 개선하고 순환하는 의존성을 해결하기 위해 필요한 로컬 세션 캐싱을 제외하고 기본적으로 캐시가 작동하지 않는다. Mabatis 캐싱을 활성화하기 위해서 SQL 매핑 파일에 한줄을 추가하면 된다.

<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>

이 설정은 60 초마다 캐시를 지우는 FIFO 캐시를 생성한다. 이 캐시는 결과 객체 또는 결과 리스트를 512개까지 저장하고 각 객체는 읽기 전용이다. 캐시 데이터를 변경하는 것은 개별 쓰레드에서 호출자간의 충돌을 야기할 수 있다.

  • 매핑 구문 파일내 select 구문의 모든 결과가 캐시 될 것이다.

  • 매핑 구문 파일내 insert, update 그리고 delete 구문은 캐시를 지울(flush) 것이다.

  • 캐시는 Least Recently Used (LRU) 알고리즘을 사용할 것이다.

  • 캐시는 스케줄링 기반으로 시간순서대로 지워지지는 않는다. (예를들면. no Flush Interval)

  • 캐시는 리스트나 객체에 대해 1024 개의 참조를 저장할 것이다. (쿼리 메소드가 실행될때마다)

  • 캐시는 읽기/쓰기 캐시처럼 처리될 것이다. 이것은 가져올 객체는 공유되지 않고 호출자에 의해 안전하게 변경된다는 것을 의미한다.

사용가능한 캐시 전략은 4가지


  • LRU – Least Recently Used: 가장 오랜시간 사용하지 않는 객체를 제거

  • FIFO – First In First Out: 캐시에 들어온 순서대로 객체를 제거

  • SOFT – Soft Reference: 가비지 컬렉터의 상태와 강하지 않은 참조(Soft References )의 규칙에 기초하여 객체를 제거

  • WEAK – Weak Reference: 가비지 컬렉터의 상태와 약한 참조(Weak References)의 규칙에 기초하여 점진적으로 객체 제거

  • 디폴트 값은 LRU 이다.

flushInterval 은 양수로 셋팅할 수 있고 밀리세컨드로 명시되어야 한다. 디폴트는 셋팅되지 않으나 플러시(flush) 주기를 사용하지 않으면 캐시는 오직 구문이 호출될때마다 캐시를 지운다.

size는 양수로 셋팅할 수 있고 캐시에 객체의 크기를 유지하지만 메모리 자원이 충분해야 한다. 디폴트 값은 1024 이다.

readOnly 속성은 true 또는 false 로 설정 할 수 있다. 읽기 전용 캐시는 모든 호출자에게 캐시된 객체의 같은 인스턴스를 리턴 할 것이다. 게다가 그 객체는 변경할 수 없다. 이건 종종 성능에 잇점을 준다. 읽고 쓰는 캐시는 캐시된 객체의 복사본을 리턴 할 것이다. 이건 조금 더 늦긴 하지만 안전하다. 디폴트는 false 이다.


cache 적용시 디폴트 와 non-cache

  • select

flushCache 이 값을 true 로 셋팅하면 구문이 호출될때마다 로컬, 2nd 레벨 캐시가 지워질것이다(flush). 디폴트는 false이다.

 useCache 이 값을 true 로 셋팅하면 구문의 결과가 2nd 레벨 캐시에 캐시 될 것이다. 디폴트는 true이다.

  • insert, update and delete

flushCache 이 값을 true 로 셋팅하면 구문이 호출될때마다 캐시가 지원질것이다(flush). 디폴트는 false 이다.

  • non-cache (cache 가 적용된 mapper 내의 특정 쿼리에 대한 )

select 구문에서는 useCache=false, insert, update and delete 에서는  flushCache = true 를 명시적으로 준다.


결론적으로 MyBatis cache 를 적용하기 위해서는

MyBatis 설정

  • cacheEnabled ( 설정에서 각 매퍼에 설정된 캐시를 전역적으로 사용할지 말지에 대한 여부 )  디폴트 true

각각의 Mapper

  • 각 매퍼별 <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/> 설정 구문 추가

  • cache 대상 select 구문에는 별도의 기술이 필요없음

  • non-cache 대상 구문에만  select 구문에서는 useCache = false,

  • insert, update and delete 에서는  flushCache = true 를 명시적으로 준다.


저작자 표시 비영리 변경 금지
신고

'Programming > Spring' 카테고리의 다른 글

MyBatis Cache  (0) 2017.07.16
Spring Application Config  (0) 2017.05.10
Project Lombok  (0) 2016.04.01
posted by 훈즈 플로거
TAG cache, mybatis, Web
2017.05.10 16:30 Programming/Spring


Spring Application Config

<!-- Uncomment and add your base-package here: -->

<context:component-scan base-package="com.example" />

<!-- default-servlet-handler -->

<mvc:default-servlet-handler />

 

<!-- message-converter : utf-8 for post method -->

<mvc:annotation-driven>
  <mvc:message-converters>
   <bean class="org.springframework.http.converter.StringHttpMessageConverter">
    <property name="supportedMediaTypes">
     <list>
      <value>application/json;charset=utf-8</value>
     </list>
    </property>
   </bean>
   <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
  </mvc:message-converters>
  
  <mvc:path-matching registered-suffixes-only="true"/>
 </mvc:annotation-driven>

 

<!-- annotation-config -->

<context:annotation-config />


 <!-- DataSource -->

<util:properties id="prop" location="classpath:properties/database.xml" />

<bean id="dataSourceSpied" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">

<property name="driverClassName" value="#{prop['jdbc.driverClassName']}" />

<property name="url" value="#{prop['jdbc.url']}" />

<property name="username" value="#{prop['jdbc.username']}" />

<property name="password" value="#{prop['jdbc.password']}" />

<property name="defaultAutoCommit" value="#{prop['jdbc.defaultautocommit']}" />

<property name="maxActive" value="#{prop['jdbc.maxActive']}" />

<property name="minIdle" value="#{prop['jdbc.minIdle']}" />

<property name="maxIdle" value="#{prop['jdbc.maxIdle']}" />

<property name="maxWait" value="#{prop['jdbc.maxWait']}" />

<property name="testOnBorrow" value="#{prop['jdbc.testOnBorrow']}" />

<property name="testWhileIdle" value="#{prop['jdbc.testWhileIdle']}" />

<property name="timeBetweenEvictionRunsMillis" value="#{prop['jdbc.timeBetweenEvictionRunsMillis']}" />

<property name="validationQuery" value="#{prop['jdbc.validationQuery']}" />

<property name="poolPreparedStatements" value="#{prop['jdbc.poolPreparedStatements']}" />

</bean>


<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">

<constructor-arg ref="dataSourceSpied" />

<property name="logFormatter">

<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">

<property name="loggingType" value="SINGLE_LINE" />

<property name="sqlPrefix" value="SQL         :  " />

</bean>

</property>

</bean>


<!-- Mybatis -->

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property name="transactionFactory">

<bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />

</property>

<property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" />

</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">

<constructor-arg index="0" ref="sqlSessionFactory" />

</bean>


<!-- Transaction -->

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />

</bean>


<!-- Auto Scan -->

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage" value="com.example" />

</bean>


저작자 표시 비영리 변경 금지
신고

'Programming > Spring' 카테고리의 다른 글

MyBatis Cache  (0) 2017.07.16
Spring Application Config  (0) 2017.05.10
Project Lombok  (0) 2016.04.01
posted by 훈즈 플로거
2016.04.01 11:16 Programming/Spring


https://projectlombok.org/


http://jnb.ociweb.com/jnb/jnbJan2010.html



Installation


java -jar lombok.jar

Screenshot of the Lombok Installer




Maven

Adding lombok to your pom file

<dependencies>
	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<version>1.16.18</version>
		<scope>provided</scope>
	</dependency>
</dependencies>
<!-- 아래 정보도 필요할 수 있음 -->
<repositories>
    <repository>
        <id>projectlombok.org</id>
        <url>http://projectlombok.org/mavenrepo</url>
    </repository>
</repositories>


Maven > Update Project..



Lombok features.

val

Finally! Hassle-free final local variables.

@NonNull

or: How I learned to stop worrying and love the NullPointerException.

@Cleanup

Automatic resource management: Call your close() methods safely with no hassle.

@Getter/@Setter

Never write public int getFoo() {return foo;} again.

@ToString

No need to start a debugger to see your fields: Just let lombok generate a toString for you!

@EqualsAndHashCode

Equality made easy: Generates hashCode and equals implementations from the fields of your object..

@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor

Constructors made to order: Generates constructors that take no arguments, one argument per final / non-nullfield, or one argument for every field.

@Data

All together now: A shortcut for @ToString@EqualsAndHashCode@Getter on all fields, and @Setter on all non-final fields, and @RequiredArgsConstructor!

@Value

Immutable classes made very easy.

@Builder

... and Bob's your uncle: No-hassle fancy-pants APIs for object creation!

@SneakyThrows

To boldly throw checked exceptions where no one has thrown them before!

@Synchronized

synchronized done right: Don't expose your locks.

@Getter(lazy=true)

Laziness is a virtue!

@Log

Captain's Log, stardate 24435.7: "What was that line again?"



저작자 표시 비영리 변경 금지
신고

'Programming > Spring' 카테고리의 다른 글

MyBatis Cache  (0) 2017.07.16
Spring Application Config  (0) 2017.05.10
Project Lombok  (0) 2016.04.01
posted by 훈즈 플로거

티스토리 툴바