개발 127

추상화클래스와 인터페이스의 용도, 차이점, 공통점

abstract class와 interface는 비슷하지만 다르다.공통점, 차이점, 용도에 대해 알아보자~ 1. 공통점 abstract class(추상 클래스)와 interface 는 선언만 있고 구현 내용이 없는 클래스이다. 그래서 자기 자신이 new를 해서 객체를 생성할 수 없으며,추상클래스를 extends 받거나, interface를 implements 한 자식만이 객체를 생성할 수 있다.상속받은 자식이 구현을 반드시 하도록 해야할 때 사용한다. JAVA에서는 type이 지정되있기 때문에 선언된 type과 자식의 type이 같아야만 한다. 2. 차이점 추상클래스는 말그대로 클래스이고, interface는 구현하기 전에 메소드에 대해 명세된 것이랄까?그래서 상속을 받음에도 불구하고 클래스에선 상속이라..

개발/ETC 2013.04.09

Java HttpClient 호출시 파라미터 있을 경우

HttpClient는 브라우저가 어떤 URL에 요청하면 서버를 통해 웹페이지를 뿌려주듯이 내가 브라우저의 역할을 하고, URL을 보내면 서버가 나를 브라우저라 생각하고 결과를 날려준다. 예제는 인터넷에 많이 있으니 파라미터가 있을 경우의 요점만 정리하겠음 일단 GET인지 POST인지 method 종류를 알려주어야한다. 1. GET 일 경우 String url = "http://marobiana.tistory.com"; HttpClient client = new HttpClient(); GetMethod method = new GetMethod(url); client.executeMethod(method); 만약 id=marobiana, password=1234 라는 파라미터를 더 붙여야할 경우, meth..

개발/JAVA 2013.04.09

Custom tag 라이브러리 만들기

옛날엔 태그라이브러리를 사용하기 귀찮고 복잡?했다고 한다 지금은 간단히 쓸 수 있도록 JSTL이 업데이트 됐다. 사용법 두 가지를 설명하겠다. 1. 템플릿(jsp) user 객체의 id값으로 name을 받아오는 예제이다. ... taglib들 생략 태그로 출력한 EL태그로 출력한 ${value.name} 결과 >> 태그로 출력한 사자고양이EL태그로 출력한 사자고양이 ${value.name} 이렇게 쓸 수 있는 것은, tag 파일에서 attribute에 set을 해주기 때문이다 custom : prefix user : 태그 파일 이름 (여기서는 /WEB-INF/tags/user.tag 이다) returnColumn, id, var : 속성이다. 속성의 이름은 tag 파일에서 지정한다. 2. tag 파일(t..

개발/JSP 2013.04.09

Custom annotation 만들기 (Spirng AOP 이용)

예전 블로그에 올렸던거 슬슬 여기로 옮겨놔야지..다시 정리해본다ㅎㅎ 사용자가 만들어 사용하는 Custom Annotation은 어떻게 효과적으로 응용할 수 있는지 궁금할 것이다.인터넷에 예제도 별로 없고.. 내가 짠 것은 아니지만, Spring 프렘웍의 AOP를 이용해서 만든 커스텀 어노테이션 사용법에 대해서 정리하겠다 * AOP(Aspect Oriented Programming)이란? 먼저, OOP(Object Oriented Programming)의 경우, 객체 단위로 기능을 묶어서 코딩하는 방법이다.이런 구현방법이 단점이 될 상황이 있다. 사용자 인증을 항상 해야 한다고 하면, 객체마다 반복되는 코드가 생기게 될 것이다. 그래서 사용자 인증 같이 자주 사용되는 코드를 단위로 묶어서 필요할 때마다 삽..

개발/Spring 2013.04.09

linux] ssh 암호 생략하고 접속하기. ssh-copy-id

우리서버(이하 클라이언트)에서 타겟서버로 ssh 명령어를 통해 접근할 때, 암호를 입력해야 접근 가능하다.암호를 생략하는 방법에 대해 정리한다. RSA 암호키를 통해 암호를 생략할 수 있다.아래와 같은 과정을 통해 접속을 한다. 1. 클라이언트에 키를 생성한다. (private, public)2. 타겟서버에 public key를 복사해 놓는다. (public key는 여러서버에 복사해도 상관없다. private key가 핵심이기 때문에)3. 클라이언트에서 타겟서버로 ssh로 접속4. 타겟서버에서 public key로 암호화 된 정보를 클라이언트로 주면,클라이언트에서는 private key와 타겟서버의 public key로 해독한다.인증이 되면 암호 입력 필요 없이 접속 가능하다. 명령어들을 통한 예제를 ..

개발/ETC 2013.03.22

톰캣 실행시 OutOfMemory : permgen space, 톰캣 안켜짐

2주 전쯤, 급하게 개발할것이 있었는데 ㅠㅠ (급할 때마다 꼭 이클립스는 말을 안듣지...)로컬에서 톰캣 실행하는데 mapper 로그까지 뜨다가 중간에 멈추더니 안켜짐.. 분명 잘되는 A프로젝트에선 켜져서 잘 했었는데, 다른 프로젝트(B,C)에서 안켜지기 시작.잘되던 A프로젝트 톰캣을 켜보니 여기도 안켜지기 시작... 이것은 메모리 문제일 것이라는 촉이 왔음. 기존에 잘 되고있었기 때문에, 굳이 eclipse.ini 파일의 메모리 설정을 바꾸고 싶지는 않았다. 톰캣을 delete 하고 B,C 프로젝트를 다시 새로 세팅해서 해봤음.그래도 똑같음. 퇴근하라는 계시인듯해서 그냥 집에 감. 다음날 아침, mapper 로그까지 뜨더니 멈춘 뒤로, 20분동안 그냥 냅둬봤음.전날 저녁엔 별짓을 해도 안되더니 아침에 ..

개발/JAVA 2013.03.07

특정 날짜 하루에 해당하는 데이터를 찾을 때

아래 처럼 날짜를 text box에 입력 받는다. String으로 받아서 select * from 테이블 where dttm = '2013-02-15' 조회를 해보면 데이터가 원하는대로 나오지 않는다. 기본으로 '2013-02-15 00:00:00' 이렇게 들어있기 때문이다. (2월15일의 딱 열두시 00분 00초 인 데이터를 찾는것) 그래서 전에는dttm >= '2013-02-15 00:00:00' AND dttm DTTM >= #{dttm} AND DTTM dttm에는 2013-02-15 00:00:00.0 (타임스템프) 값이 들어있다.interval 1 day로 하루가 더해지면,2013-02-15 00.00.00.0 ~ 2013-02-16 00.00.00.0 사이의 데이터가 보여지게 되는 것이다. ..

개발/Spring 2013.02.15

linux] 메모리 관리에 관한 명령어들

서버가 툭하면 뻗고 서버끼리 종속이 되어있는 서비스를 맡고있는데서버상태 확인할때마다 쓰는 명령어들을 정리하겠다. 1) 웹서버에 Heap이 꽉 찼다!!(free, ps, kill 명령어) 메모리를 확인해야한다.free -m 을 쳐본다. $ free -m TotalUsedFree SharedBuffersCachedMemory2,056,9721,948,088108,884 0 211,0761,589,068-/+ buffers/cache147,9441,909,028 Swap1,052,2164,012 1,048,204 결과에서 -/+ buffers/cache 부분의 Used와 Free를 보면 된다.연두색이 실제 사용되는 메모리분홍색이 사용 가능한 메모리이다. 만약 free가 모자르다. 그러면 ,아래 명령어로 실행되..

개발/ETC 2013.02.07

도메인 객체에 Serializable 을 implements 하는 이유

내가 왕신입때 물어봤었던 질문이다.(지금도 쪼렙이지만...)왜 도메인객체에(혹은 DTO?) Serializable을 implements 하는지. public class User implements Serializable { private String name; private int age; private String info; // ... getter, setter} 사용하는 이유는 remote 서버에 전송을 할 때 사용한다. 클래스에 있는 필드 정보를 직렬화하여, 사용할 수 있게 하는 것이다.(직렬화 할 때 메소드는 포함하지 않는다고 한다.즉, 필드들만 직렬화 한다.) implements는 했지만 별다른 메소드를 구현할 필요는 없다. 실제 사용하는 예 중에는 memcached를 쓸 때였다.도메인 객체에..

개발/JAVA 2013.02.07