JAVA: 282개의 글
디자인 패턴의 종류에 대해 알아보자 * 프로그래밍에서 디자인 패턴이란? 프로그래밍을 하다 보면 반드시 라이브러리, 패키지, 모듈, 프레임워크 같은 것들을 사용합니다. 이 프로그래밍을 도와주는 도구들을 자유자재로 활용하려면 도구의 정확한 용도와 장단점, 핵심적인 특성, 사용시 주의사항 등을 제대로 파악하고 있어야 합니다.라이브러리가 없다면 모든 프로그래머들이 시행 착오를 반복하면서 클래스나 함수, 메소드 등을 직접 만들어 프로그래밍 해야 합니다.하지만 우리가 일상적으로 접하는 문제 중 사앙수는 다른 많은 이들이 접했던 문제이며, 효율적인 해결법이 나와 있습니다. 디자인 패턴은 프로그램을 개발하는 과정에서 빈번하게 발생하는 디자인 상의 문제를 정리해서, 상황에 따라 간편하게 적용해서 쓸 수 있는 패턴 형태로..
블록 암호화에서의 운영 모드 이미지의 출처는 위키피디아 입니다. (http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation) 1. ECB (Electronic Code Block) Mode - 가장 단순한 모드로 블록단위로 순차적으로 암호화 하는 구조이다. - 한개의 블록만 해독되면 나머지 블록도 해독이 되는 단점이 있다. (Brute-Force Arttack, Dictionary Attack) - 암호문이 블록의 배수가 되기 때문에 복호화 후 평문을 알기 위해서 Padding을 해야한다. - error propagation : 각 블록이 독립적으로 동작하므로 한블록에서 에러가 난다고 해도 다른 블록에 영향을 주지 않는다. 해당 블록까지 에러 전파. 2..
AES 128 비트 암호화 / 복호화 ECB 모드
스프링에서 사용자(client) IP 가져오기 클라이언트의 IP 주소는 HttpServletRequest에 있는 getRemoteAddr( ) 메서드를 이용하여 알아낼 수 있다. 그러나 Proxy, Caching server, Load Balancer 등을 거쳐올 경우 getRemoteAddr( ) 를 이용하여 IP 주소를 가지고 오지 못하게 된다. 이럴경우 별도의 처리를 해주어야 한다. private String getIp(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); logger.info(">>>> X-FORWARDED-FOR : " + ip); if (ip == null) { ip = request.ge..
자바랑 MSSQL연동 때문에 몇시간을 보낸건지...설정해줘야할 자잘한 것들이 너무 많다. 1.MSSQL JDBC 드라이버 받기. http://www.microsoft.com/ko-kr/download/details.aspx?id=11774 위 링크에서 exe 파일을 받은 후 풀고싶은데다 압축을 푼다. 2. lib에 다운받은 압축파일 추가 하기 압축을 푼 파일을 보면 \sqljdbc_2.0\enu 안에 sqljdbc.jar 과 sqljdbc4.jar이 있는데 얘네를 lib에 추가해줘야 한다.sqljdbc.jar 과 sqljdbc4.jar의 차이는 jre와 jdk의 버전 차이다. jre6.0이상이라면 sqljdbc4를 써야한다.만약 버전이 뭔지 모르겠다면 그냥 아무거나 해본다. 자바가 버전 안맞다고 어떤거 ..
중복 로그인을 체크하는 로직을 구현하는 미션이 프로젝트 마지막 단계에 주어졌다. 중복 로그인했을 때 먼저 로그인한 사용자가 세션 아웃 되는 것을 표준으로 정하였다. 이 때 최종 접속자의 IP와 로그인시각을 안내 받아야 한다는 전제조건이 있다. 스프링에서 제공하여 security 기능을 이용하여 구현해 보고자 했으나 생각대로 잘 되지 않았다. 스프링 설정으로 중복 로그인을 체크할 수는 있었으나 최종 접속자의 IP와 접속시각을 보여주고자 하는 곳에서 난관을 만났다. 세션이 invalid 되었기 때문에 세션아이디를 비롯한 사용자아이디, 접속IP등 세션에 보관되어 있는 정보가 싸그리 사라져 버린 상황이었기 때문이다. 그래서 결국 로그인 히스토리를 보관하고 있는 테이블에서 정보를 추출하여 중복로그인을 체크하도록 ..
전화를 이용하여 PC 통신을 사용해본 사용자들이라면 하나의 아이디를 가지고 동시에 서비스에 접속하고자 할 때 한 사용자가 서비스가 중지되는 동시접속 방지의 기능을 본 적이 있을 것이다. 그러나 인터넷의 회원제 사이트에서는 이런 기능들을 찾아보기 힘들 것이다. 인터넷이라는 특성상 강제로 클라이언트를 종료하기 위 한 기능들이 부족하기 때문이다. 그렇지만 실제 상용의 서비스를 하는 사이트라면 한번씩은 이 문제에 대해 서 고민을 하게 된다. 만일 인터넷에서 동시접속을 방지하고자 한다면 어떻게 하면 좋을까? 지금부터 그 방법 을 공개하도록 하겠다. 1) 동시접속 방지의 밑그림 인터넷상에서 동시접속을 방지하고자 하면 어떤 알고리즘을 이용하면 가능할까? 지금부터 동시접속 방지를 위한 밑그림을 그려보겠다. 우선 홈페이..
Oracle JDK와 OpenJDKJava 애플리케이션을 실행하기 위해서는 JVM이 필요하고 컴파일하기 위해서는 JDK가 필요하다. 일반적으로 JDK를 설치하면 JVM(Hotspot이라고도 표현, Java 기술의 핵심)도 함께 설치된다. JDK는 2개 버전으로 나뉜다. 하나는 폐쇄적인 상업 코드 기반의 Oracle JDK이고 하나는 오픈 소스 기반의 OpenJDK이다. 둘 간의 큰 차이라면 Oracle JDK는 OpenJDK에는 없는 재산권이 걸린 플러그인을 제공한다. 해당 플러그인은 Oracle이 재산권을 보유하고 있다. (보다 정확히 설명하면 Oracle이 인수하여 없어진 Sun Microsystems 시절의 유산이다.) [관련 링크] Oracle JDK에 존재하고 OpenJDK에는 없는 대표적 기능..
메서드 를 선언 할 때 throws를 사용하여 처리를 하게되면 해당 예외상황이 일어났을 때 '기본적인 예외상황 처리'가 수행된 후 프로그램이 종료된다. 그런데 try{ }catch(){ } 를 사용했을 경우에는 프로그램 실행중에 예외상황이 발생하면 catch문을 실행하고 프로그램이 종료되는것을 설정할 수 있다. 즉, 프로그램을 안죽이고 계속 아래구문을 수행하는 것이 가능하다. 물론 프로그램이 종료되도록 수행하는 것도 가능하다. 예제) - try catch 구문 사용 - public class ExceptionTest1 { public static void main(String[]args){ int a=10; int b=0; int c=0; try{ c=a/b; }catch(NumberFormatExcep..
DBCP validationQuery 설정* 참고 사이트: http://linuxism.tistory.com/579 * 참고 사이트: Configuring the High Concurrency JDBC Connection Pool * 참고 사이트: DBCP 설정 정리 에러 메시지 일부분 - is longer than the server configured value of 'wait_timeout'. 원인 - 마지막으로 DB에 커넥션을 맺은후 사용이 없다 보니 데이터 베이스 커넥션이 끝겼다. 해결책 - 특정 시간마다 커넥션을 확인 하는 셋팅을 지정한다. 적용 코드 - MySQLvalidationQuery="select 1" - 오라클의 경우validationQuery="select 1 from dual" ..