본문 바로가기

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는 인터페이스 기반으로 동작하기 때문에 인터페이스가 없을경우 트랜잭션.. 더보기
Eclipse Subversion에서 SVN 로그인 정보 초기화하는 방법 (Windows) 1. 이클립스를 종료 2. C:\Users\Administrator(본인계정)\AppData\Roaming\Subversion\auth 파일 삭제 3. $이클립스설치경로\configuration\org.eclipse.core.runtime\keyring 파일 삭제 4. 이클립스를 재실행 후 신규계정으로 다시 로그인 더보기
Tomcat7 에서 서버 스타트 시 Exception: java.lang.OutOfMemoryError... 발생하면 해결 방법(Windows 기준) 톰켓 HOME/bin 에서 catalina.bat 파일 수정 아래와 같이 수정한다.(붉은색 텍스트) :doStart shift if not "%OS%" == "Windows_NT" goto noTitle if "%TITLE%" == "" set TITLE=Tomcat set _EXECJAVA=start "%TITLE%" %_RUNJAVA% set CATALINA_OPTS=-server -Xmx1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m goto gotTitle :doStop shift set ACTION=stop set CATALINA_OPTS=-server -Xmx1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSiz.. 더보기
데이터 모델 vs. 프로세스 모델의 필수조건, 상관모델링 정보화 시스템에서의 데이터베이스는 DBMS에 데이터베이스를 생성하고, 적절한 업무 프로세스에 의해 데이터의 CREATE, READ, UPDATE, DELETE가 발생하는 것을 의미한다. 만약 데이터베이스가 구축됐을지라도 업무적인 요구사항에 아무런 행위가 발생하지 않는다면 이는 적절한 데이터베이스라고 할 수 없고, 분석 및 설계단계에서 무엇인가 잘못됐음을 뜻한다. 그러므로 프로세스모델링을 진행할 때는 엔티티 타입에 대해 어느 정도 검증하면서 모델링을 진행한다 할지라도 데이터 모델과 프로세스 모델에 대한 종합적인 상관관계를 검증하는 작업이 필요하다. 업무 분석과정에서 마련해야 하는 업무 모델은 업무 요구사항에서 발생하는 세 가지 관점을 통합함으로써 얻을 수 있다. 첫 번째는 업무를 하고 있는 또는 해야만 하.. 더보기
아규먼트(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의 장점 - 경량 컨테이너 전체 .. 더보기
기본 논리적 데이터 모델링 구조 아래는 논리적 데이터 모델링의 기본 흐름도이다.모델링 전문가가 되기 위해서 반드시 알고 있어야 할 필수 지식 중 하나라 생각한다. 더보기
SID와 Service_name의 차이 SID : 하나의 DB 인스턴스 이름 Service Name : 하나 이상의 인스턴스를 그룹으로 묶어서 구성하였을 때, 그 그룹의 이름 예를 들어서, 한 시스템에 Oracle을 설치하고 2개의 인스턴스를 각각 ora1, ora2 란 이름으로 생성하였다고 하면, 각각의 인스턴스는 ora1, ora2 라는 SID를 갖게 된다. 그리고 이 인스턴스들을 한데 묶어서 그 그룹에 oragp 라는 이름을 부여하였다면, 그 이름이 바로 Service Name이 된다. 앞에서 언급했듯, 하나의 DB에 한 개의 인스턴스만 사용하는 경우가 많아서 SID와 Service Name을 특별한 구분없이 사용하는데, 만일 인스턴스가 여러 개라면 더 신중하게 사용해야 할 것이다. 더보기
[tnsnames.ora] file for connection load balancing setting === Oracle DB 커넥션 로드 밸런스 설정 시 tnsnames.ora 를 설정하는 예제 === Load Balancing ??부하 분산이라고 부르며 주로 1곳의 DB나 서버로 사용자 접속이 폭주하여 부하가 발생하는 것을 방지하고자 동일한 환경의 DB나 서버를 여러 대 두어 접속이 한 곳에 일방적으로 몰리지 않도록 분산시켜주는 기술을 일컫는다.(KT의 스타워즈 빠름빠름 광고를 생각하면 됨)또한, 한 곳의 DB나 서버에 장애가 발생할 경우 다른 DB나 서버로 접속되기 때문에 운영 측면에서도 효과적이다. 예를 들어 3개의 접근 가능한 DB가 있다고 가정하고... "DB이름"= (DESCRIPTION= (LOAD_BALANCE=OFF) (ADDRESS=(PROTOCOL=TCP) (HOST="첫 번째 DB.. 더보기
정규표현식 정규식 표현 방법 정규식에 관한건 Visual Basic 캬테고리에도 하나 있음을 참고 하세요 정규식은 모든 언어에서.. 개발되고 있으며 리눅스에서도 활용할 수 있으므로 꼭 알아두도록 합시다 ◐ 정규 표현식의 규칙문자열 패턴을 표한하기 위해 정규 표현식과 함께 사용되는 특수문자들이 있다. 정규 표현식에 사용되는 이 특수문자들의 사용법을 먼저 알아보도록 하자.☞ 패턴 표현에 사용되는 특수문자정규표현식에서 패턴을 표현하기 위해 사용하는 특수문자와 규칙은 다음과 같다. 1. '.' 특수 문자'.'은 어떤 문자이건 간에 임의의 한 글자를 나타낸다. 예를 들면, 패턴 a.c는 어느 한문자의 앞 문자가 a이고 뒷 문자는 c인 모든 문자열을 포함한다. 따라서 aac나 abc, acc는 이 패턴에 일치되는 문자열이다... 더보기
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.. 더보기
오라클 힌트와 사용법 * 오라클 hint 모음 * ALL_ROWS /*+ ALL_ROWS */- 최소한의 자원을 사용하여 결과값의 전체를 추출하게 합니다. AND_EQUAL /*+ AND_EQUAL (table index index [index] [index] [index] ) */- 복수의 단일 컬럼을 스캔하여 머지 방식으로 처리하게 합니다. APPEND_HINT /*+ APPEND */- 직렬 모드 데이터베이스에서 Direct INSERT를 실행하게 합니다.- Enterprise Edition 이 아닌 데이터베이스의 기본 모드는 직렬 모드입니다. 이러한 직렬 모드 데이터 베이스에서의 INSERT 작업은 Conventional를 기본값으로 하고 병렬 처리 시에는 Direct INSERT를 기본값으로 합니다. CACHE_HI.. 더보기
2013년 프로그래밍 언어 별 연봉 순위(북미 기준) 2013년 프로그래밍 언어 별 연봉 순위 집계표!!!!(오름차순) 더보기
HTTP Status Code Status Code Message Description Information 100 Continue 클라이언트로부터 일부 요청을 받은 후 나머지 요청 정보를 계속 보내라는 의미 101 Switching Protocols 서버는 클라이언트의 요청대로 Upgrade 헤더를 따라 다른 프로토콜로 바꿀 것임 Successful 200 OK 서버에 요청이 성공하였을 경우 출력 .. 더보기
이클립스에서 다중 스레드 관리하기 고전적인 병렬 스레드 문제를 하나 가정하자. 아래의 코드는 하나의 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 - 일반.. 더보기
ROWNUM이란 뭣인가? ROWNUM의 활용 ROWNUM이란 어떤 테이블 내에 물리적으로 저장되어 있는 컬럼이 아니라 SYSDATE나 USER 등과 같이 모든 SQL에 그대로 삽입해서 사용할 수 있는 가상(Pseudo)의 컬럼이다. SQL이 실행되는 과정에서 발생하는 일련번호이므로 각 SQL수행시마다 같은 로우라 하더라도 서로 다른 ROWNUM을 가질 수 있다. 그러므로 이러한 내부적인 값을 조건절에 사용하여 우리가 원하는 만큼만 처리가 수행되도록 할 수 있다. 이 방법 역시 전체를 처리하지 않고 일부만 처리하도록 유도하는 방법이므로 하나의 부분범위처리라고 말할 수 있다. SQL 실행과정의 어느 특정 부분에서 ROWNUM이 결정되어지므로 정확히 알지 못하고 사용하면 우리가 원하지 않는 결과가 추출될 수도 있다. ROWNUM이 결.. 더보기
계층 쿼리 사용법을 배워보자! 계층 쿼리의 사용법 계급적이고 수직적인 데이터를 표현하는 방법으로 ORACLE에서는 CONNECT BY 구문을 제공하고 있다. 하지만 많은 개발자들은 사용이 어렵다는 점과 성능상의 이유로 해당 구문의 사용을 기피하고 있다. 이러한 이유로 CONNECT BY 구문의 다양한 사용법과 해당 구문으로 최적의 성능을 보장받을 수 있는 방법에 대해 알아볼 필요가 있다 첫 번째로 START WITH, CONNECT BY 기본 사용문법 및 각 구문의 특징에 대해 알아보자. SELECT column_list FROM table_joins | tables [WHERE join_conditions and/or filtering_conditions] [START WITH conditions] CONNECT BY [NOCYCL.. 더보기