본문 바로가기

Java

mapper 인터페이스에서 사용 가능한 annotation Annotation Location XML Element Description @CacheNamespace class 네임스페이스가 되는 인터페이스별로 Cache를 설정한다. 사용 가능한 속성은 implementation, eviction, flushInterval, size, 그리고 readWrite 등이 있다. @CacheNamespaceRef class 다른 네임스페이스의 캐시 설정을 그대로 사용하기 위해 사용할 캐시 설정이 담긴 네임스페이스를 지정한다. 사용 가능한 속성은 네임스페이스의 이름 적어주는 value 한 개다. @ConstructorArgs method 조회 결과를 자바 객체에 설정할 때 생성자를 사용해서 처리한다. 사용 가능한 속성은 @Arg 어노테이션의 배열을 갖는 value 이다... 더보기
주어진 문자열이 다수의 문자열 집합에 속하는지 검증하는 유틸성 클래스 public class DataUtil { public static boolean existInSet(String source, Object... elements) { boolean bExits = false; for (Object objElement : elements) { if (source != null && source.equals(objElement)) { bExits = true; break; } } return bExits; } public static String valueOf(Object obj) { return (obj == null) ? "" : obj.toString().trim(); } } 더보기
ClassLoader를 활용한 Thread 호출하기 # Thread.currentThread().getContextClassLoader( ) 의 기능 ClassLoader의 주요 기능은 클래스를 로딩하는 것 뿐만 아니라 다른 리소스도 읽어 올 수 있는 유용한 기능을 제공한다. ClassLoader는 스레드에서 획득할 수가 있다. 여기서 획득된 스레드는 어떤 기반에서 생성된 것인지 구분을 해서 사용해야 한다. 주로 자바 main( ) 메소드 기반의 단독 애플리케이션을 예를 들지만 일반적으로는 웹 애플리케이션을 주로 다룰 것이다. 따라서 스레드를 어떤 기반에서 가져올 것인지 고려해야 하는 것이다. 단독 애플리케이션 환경에서는 ClassLoader.getSystemResourceAsStream( ) 메소드를 통해 해당 리소스를 읽어오면 되지만, 웹 애플리케이션.. 더보기
@Transactional 사용시 rollback이 안될 경우 Spring에서 트랜잭션 처리 시 @Transactional 어노테이션을 사용하면 rollback이 안된다. 이와 같은 오류로 어려움을 겪고 있다면 아래 해결 방법들을 이용해 보도록하자. 1. mysql 데이터베이스를 사용할경우 테이블 타입 확인 mysql은 테이블타입이 InnoDB일 때만 트랜잭션이 동작한다고 한다. 테이블 타입을 확인해보고 InnoDB로 변경해준다. 2. 인터페이스 코드 유무 확인 트랜잭션을 이용할 클래스들이 인터페이스를 사용하는지 확인해봐야 한다. @Transactional 어노테이션 같은 경우 Spring AOP를 이용하게 되는데 이 AOP는 기본적으로 Dynamic Proxy를 이용한다. Dynamic Proxy는 인터페이스 기반으로 동작하기 때문에 인터페이스가 없을경우 트랜잭션.. 더보기
아규먼트(argument) 와 파라미터(parameter) 의 차이 아규먼트(argument) 와 파라미터(parameter) 흔히들 구분하지 않고 사용한다.하지만 이 둘은 분명히 차이가 있다. PARAMETER란? 한글 그대로 번역하면 '매개변수'란 뜻이다. 즉, 함수를 정의 할 때외부로부터 받아들이는 임의의 값을 의미한다.가령 function f(x,y){return x+y;}; 에서 x,y가 파라미터라고 할수 있다. 그럼 ARGUMENT란? 우리말로는 '인수' 라고 번역되는데, 함수를 호출할 때 이 때 사용하게 되는 일련의 값들을 아규먼트라고 부른다.예컨대 위에 파라미터의 예를 들었던 함수를 호출한다고 하면, f(3,4); 에서 3,4등이 아규먼트이다. 즉, '파라미터의 값으로 아규먼트 3과 4를 대입하였다'라는 의미가 성립하는것이다. 이처럼 파라미터와 아규먼트는 .. 더보기
Spring Framework와 [IOC / DL / DI] 정의 1. Spring Framework란? 부품을 조립해주는 라이브러리(lib)로 라이브러리가 모이면 framework(재사용하는 틀)이 된다.요구명세서(목록)만 주면 객체도 생성하고 조립까지 해준다.생성 순서는 Big -> Small 의 형식이 아닌 Small -> Big 의 순서대로 간다. (ex) 로봇을 생성할 때 손가락 -> 손 -> 팔뚝 -> 팔 -> 몸통 -> 전체의 형식 위와 같이 Core 부분의 IoC Container가 Spring의 핵심이고, IoC에는 DI가 있으며 이것을 좀더 세부적으로 나눈다면 Setter Injection, Constructor Injection, Method Injection 등으로 나눌 수 있다. 2. Spring Framework의 장점 - 경량 컨테이너 전체 .. 더보기
Java에서 Linux Shell 명령어 실행하기 import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; public class ShellCommander { public static void main(String[] args) throws Exception { String command = "ls -al"; // 이 부분에 실행할 리눅스 Shell 명령어를 입력하면 된다. (여기선 ls -al 명령어 입력) shellCmd(command); } public static void shellCmd(String command) throws Exception { Runtime runtime = Runtime.getRuntime(); Process p.. 더보기
Java에서 SSH를 통해 리눅스 서버에 명령을 전달하는 코드 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer; import ch.ethz.ssh2.Connection;import ch.ethz.ssh2.Session;import ch.ethz.ssh2.StreamGobbler; import com.javasrc.jolt.component.linux.model.FileSystem; /** * SSHAgent는 Java 응용 프로그램이 SSH를 통해 원격 서버에서 명령을 실행할 수 있도록 * 한다. * @auth.. 더보기
이클립스에서 다중 스레드 관리하기 고전적인 병렬 스레드 문제를 하나 가정하자. 아래의 코드는 하나의 List을 여러 스레드가 동시에 접근하는 예이다. import java.util.ArrayList;import java.util.List; public class MultiThread { public static void main(String[] args) { new MultiThread().run(); } // 특정 List 주어진 단어를 10000개 집어 넣는 스레드 private class MyThread extends Thread { private final List queue; private final String word; public MyThread(List queue, String word) { this.queue = que.. 더보기
String.split 과 StringTokenizer의 차이 1. 차이점 split은 JDK 1.4에서부터, StringTokenizer는 JDK 1.0에서부터 추가되었다, split은 delemeter로 나눈 문자열이 빈문자열이면 빈 문자열을 출력하지만, StringTokenizer는 빈 문자열은 없앤다. 마지막 항목은 둘다 빈 문자열일 경우 리턴시 없애는데 이를 포함시킬 경우 split에 limit 인자를 추가한다.- 분해 방식 split은 내부적으로 정규표현식으로 분해하고 StringTokenizer는 문자열 하나하나를 분해한 다. split의 delemeter가 ^, *,| 등의 문자열일 경우 "\\" delemeter앞에 추가해주어야 한다. 2. 성능 - 아래의 샘플의 결과 split : 1121092 StringTokenizer : 423797 - 일반.. 더보기