외부 인증기관에서 인증서를 전달받지 않고, 내부적으로 사용할 RSA 키 페어가 필요하다면 아래 설명된 절차를 통해서 간단하게 키 페어를 만들어 낼 수 있다.

 

RSA key pair 생성

openssl genrsa -des3 -out private.pem 2048

 

private.pem파일을 열어보면 -----BEGIN RSA PRIVATE KEY----- 로 표시되는 것을 확인 할 수 있다.

 

Private key에 포함된 정보 확인

RSA private key로부터 public key를 만들어 낼 수 있다. 어떻게 그게 가능한지 보기 위해서 아래 명령어를 사용해보자.

 

openssl rsa -text -in private.pem

 

해당 .pem 파일로 필요한 .der 파일을 명령어로 만들 수 있다.

 

openssl rsa -in private.pem -outform der -out private.der

 

 

Post method 포스트맨 파일 업로드 실제 예제

 

Another version

Older version

 

Postman 사용시 유의.

코드 레벨에서 Content-Type: {multipart/form-data} 를 기입하지 않아야 에러가 나지 않는다.

혹은,

postman header 영역에서의 content-type: multipart/form-data 를 해제 시켜준다.

 

 

Fails If In Header 

Works 

 

출처: stackoverflow.com/questions/16015548/tool-for-sending-multipart-form-data-request

Request 객체의 메소드
return String getParameter(name) // 파라미터 변수 name에 저장된 변수를 얻어내는 메소드로, 이때 변수의 값은 String으로 리턴된다. String getParameterValues(name) // 파라미터 변수 name에 저장된 모든 변수값을 얻어내는 메소드로, 이때 변수의 값은 String 배열로 리턴된다. checkbox에서 주로 사용된다. Enumeration getParameterNames() // 요청에 의해 넘어오는 모든 파라미터 변수를 Enum타입으로 리턴한다. String Protocol() // 웹 서버로 요청 시, 사용 중인 프로토콜을 리턴한다. String getServerName() // 웹 서버로 요청 시, 서버의 도메인 이름을 리턴한다. String getMethod() // 웹 서버로 요청 시, 요청에 사용된 요청 방식(GET, POST, PUT 등)을 리턴한다. String QueryString() // 웹 서버로 요청 시, 요청에 사용된 QueryString을 리턴한다. String getRequestURI() // 웹 서버로 요청 시, 요청에 사용된 URL 로부터 URI 값을 리턴한다. String getRemoteAddr() // 웹 서버로 정보를 요청한 웹 브라우저의 IP주소를 리턴한다. int ServerPort() // 웹 서버로 요청 시, 서버의 Port번호를 리턴한다. String getContextPath() // 해당 JSP 페이지가 속한 웹 어플리케이션의 콘텍스트 경로를 리턴한다. String getHeader(name) // 웹 서버로 요청 시, HTTP 요청 헤더(header)의 헤더 이름인 name에 해당하는 속성값을 리턴한다. Enumeration HeaderNames() // 웹 서버로 요청 시, HTTP 요청 헤더(header)에 있는 모든 헤더 이름을 리턴한다.
Response 객체의 메소드
return void setHeader(name, value) // 헤더 정보의 값을 수정하는 메소드로, name에 해당하는 헤더 정보를 value값으로 설정한다. void setContentType(type) // 웹 브라우저의 요청의 결과로 보일 페이지의 contentType을 설정한다. void sendRedirect(url) // 페이지를 이동시키는 메소드로, url로 주어진 페이지로 제어가 이동한다.
Session 객체의 메소드
return String getId() // 해당 웹 브라우저에 대한 고유한 세션 ID를 리턴한다. long getCreationTime() // 해당 세션이 생성된 시간을 리턴한다. long getLastAccessedTime() // 웹 브라우저의 요청이 시도된 마지막 접근시간을 리턴한다. void setMaxInactiveInterval(time) // 해당 세션을 유지할 시간을 초단위로 설정한다. int getMaxInactiveInterval() // 기본값은 30분으로 setMaxInactiveInterval(time) 로 지정된 값을 리턴한다. boolean isNew() // 현재의 웹 브라우저가 새로 부른 즉, 새로 생성된 세션의 경우 true 값을 리턴한다. void invalidate() // 현재 정보의 유지로 사용 시, 설정된 세션의 속성 값을 모두 제거한다. 주로 세션을 무효화 시킬때 사용 HttpSession session = request.getSession(false); //기존 세션 객체가 있으면 그 걸 리턴, 없으면 null 리턴


개발자들이 직접 작성한 오픈소스 면접 질문들을 모아놓은 github 프로젝트 



#어썸인터뷰

https://github.com/MaximAbramchuck/awesome-interviews

 

#어썸인터뷰 자바개발자

https://github.com/MaximAbramchuck/awesome-interviews#java





href 값 안

/secondMain.do#suikbunbe


위와같은 포커싱이라면 가지않는다


/secondMain.do%23suikbunbe 


하기와 같이 특수문자들은 # -> %23 인코딩 해주어야 메일함에서 링크 이동후 포커싱이 된다

게시물의 총 수

ResultSet 사용시

rs.last();

int totalRecode = rs.getRow();

 

레코드 사이즈

recordSize = 10;

한페이지당 보여줄 게시물의 갯수

 

Vector 사용시

int totalRecode = vector.size();

 

현제 보고 있는 페이지

currentPage = 1;

if(request.getParameter("currentPage") != null)

{

     currentPage = request.getParameter("currentPage");

}

 

현재 보고 있는 페이지 번호.

 

게시물에 따른 총 페이지 수

int totalPage = (int)Math.ceil((float)totalRecode/(float)recordSize);

 

게시물 번호

int num = totalRecode - ((currentPage-1) * recordSize);

 

블럭 사이즈

blockSize = 5;

 

네비게이션에 보여질 페이지 갯수

ex ) ◁ [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] ▷

 

네비게이션

시작 페이지 : int firstPage = currentPage - ((currentPage-1)%blockSize);
마지막 페이지 : int lastPage = firstPage + (blockSize-1);

 

네비게이션에 나오는 첫번째 페이지와 마지막 페이지

1, 2, 3, 4, 5 일때 1과 5

6, 7, 8, 9, 10 일때 6과 10

 

커서 포지션

int curPos = recordSize*(currentPage-1);

: 네비게이션의 각 페이지 별로 rs 객체 또는 백터의 커서 처음 시작 위치


샘플(1)

아래와 같이 2개의 데이터를 저장해보도록 하겠습니다.


Map map;
List list = new ArrayList();

// 첫번째
map = new HashMap();
map.put("국어", 90);
map.put("수학", 80);
list.add(map);

// 두번째
map = new HashMap();
map.put("국어", 55);
map.put("수학", 65);
list.add(map);


System.out.println(list);

[{수학=80, 국어=90}, {수학=65, 국어=55}]



샘플(2)


이제 집어넣은 데이터를 가져올 차례입니다.

 

List 에 저장된 HashMap 데이터를 사용하기 위에서는 HashMap을 만든 다음, 캐스팅 연산으로 가져오도록 합니다.


HashMap getMap = new HashMap();

getMap = (HashMap)list.get(0);
System.out.println("1번째 국어 점수 : " + getMap.get("국어"));

getMap = (HashMap)list.get(1);
System.out.println("2번째 국어 점수 : " + getMap.get("국어"));



1번째 국어 점수 : 90

2번째 국어 점수 : 55

AOP (Aspect Oriented Programming)

전통적인 객체지향 기술의 설계 방법으로는 독립적인 모듈화가 불가능한 트랜잭션 경계설정과

같은 부가기능을 어떻게 모듈화 할 것인가를 연구해온 사람들은, 이 부가기능 모듈화 작업은 기존의 객체지향 설계 패러다임과는 구분되는 새로운 특성이 있다고 생각했다.


그래서 이런 부가기능 모듈을 객체지향 기술에서 주로 사용하는 오브젝트와는 다르게 특별한 이름으로 부르기 시작했다.


그것이 바로 애스펙트 (aspect) 이다.


애스펙트란 그 자체로 애플리케이션의 핵심기능을 담고 있지는 않지만, 애플리케이션을 구성하는 중요한 한 가지 요소이고, 핵심기능에 부가되어 의미를 갖는 특별한 모듈을 가리킨다.


2차원적인 평면 구조에서는 어떤 설계 기법을 동원해도 해결 할 수 없었던 것을, 3차원의 다면체 구조로 가져가면서 각각 성격이 다른 부가기능은 다른 면에 존재하도록 만들었다.


이렇게 독립된 측면에 존재하는 애스펙트로 분리한 덕에 핵심기능은 순수하게 그 기능을 담은 코드로만 존재하고 독립적으로 살펴볼 수 있도록 구분된 면에 존재하게 된 것이다.


이렇게 애플리케이션의 핵심적인 기능에서 부가적인 기능을 분리해서 애스펙트라는 독특한 모듈로 만들어서 설계하고 개발하는 방법을 애스펙트 지향 프로그래밍(Aspect Oriented Programming) 또는 약자로 AOP 라고 부른다.

- 프록시 패턴

부가기능을 통해 핵심기능을 이용하게 되는것.

부가기능 코드에서는 핵심기능으로 요청을 위임해주는 과정에서 자신이 가진 부가적인 기능을 적용

해줄 수 있다. 비즈니스 로직 코드에 트랜잭션 기능을 부여해주는 것이 바로 대표적인 경우이다.


이렇게 마치 자신이 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 것을 대리자, 대리인과 같은 역할을 한다고 해서 프록시(Proxy) 라고 부른다.


그리고 프록시를 통해 최종적으로 요청을 위임받아 처리하는 실제 오브젝트를 타깃(target) 또는

실체(real subject)라고 부른다.


프록시는 사용 목적에 따라 두 가지로 구분 할 수 있다.

첫째는 클라이언트가 타깃에 접근하는 방법을 제어하기 위해서다.

두번째는 타깃에 부가적인 기능을 부여해주기 위해서다.



- 데코레이터 패턴

데코레이터 패턴은 타깃에 부가적인 기능을 런타임 시 다이내믹하게 부여해주기 위해 프록시를

사용하는 패턴을 말한다.


다이내믹하게 기능을 부가한다는 의미는 컴파일 시점, 즉 코드상에서는 어떤 방법과 순서로 프록시와 타깃이 연결되어 사용되는지 정해져 있지 않다는 뜻이다.


이 패턴의 이름이 데코레이터라고 불리는 이유는 마치 제품이나 케잌 등을 여러 겹으로 포장하고 그 위에 장식을 붙이는 것처럼 실제 내용물은 동일하지만 부가적인 효과를 부여해줄 수 있기 때문이다.


따라서 데코레이터 패턴에서는 프록시가 꼭 한 개로 제한되지 않는다.

프록시가 직접 타깃을 사용하도록 고정시킬 필요도 없다. 그저 프록시가 여러개라면 순서를 정해서 단계적으로 위임하는 구조로 만들면 된다.


예를 들어, 소스코드를 출력하는 기능을 가진 핵심기능이 있다고 생각해보자.


이 클래스에 데코레이터 개념을 부여해서 타깃과 같은 인터페이스를 구현하는 프록시를 만들 수 있다. 예를 들어 소스코드에 라인넘버를 붙여준다거나, 문법에 따라 색을 변경해주거나, 특정 폭으로 소스를 잘라주거나, 페이지를 표시해주는 등의 부가적인 기능을 각각 프록시로 만들어주고 런타임 시에 이를 적절한 순서로 조합해서 사용하면 된다.



'Server Enterprise > Doc' 카테고리의 다른 글

[HashMap] 다중 리스트 데이터 담기  (0) 2014.02.18
[AOP] 애스펙트 지향 프로그래밍  (0) 2014.01.24
[Templet & Callback] 패턴  (0) 2014.01.24
[JSPF] Jsp Include 방식의 차이와 JSPF 설명  (0) 2013.10.30
URI Encoding  (0) 2013.02.17

- 템플릿

템플릿(template)은 어떤 목적을 위해 미리 만들어둔 모양이 있는 틀을 가리킨다.

프로그래밍에서는 고정된 틀 안에 바꿀 수 있는 부분을 넣어서 사용하는 경우에 템플릿이라고 부른다.


JSP는 HTML이라는 고정된 부분에 EL과 스크립릿이라는 변하는 부분을 넣은 일종의 템플릿 파일이다. 


템플릿 메소드 패턴은 고정된 틀의 로직을 가진 템플릿 메소드슈퍼클래스에 두고,

바뀌는 부분서브클래스의 메소드에 두는 구조로 이뤄진다.



- 콜백

콜백(callback)은 실행되는 것을 목적으로 다른 오브젝트의 메소드에 전달되는 오브젝트를 말한다.

파라미터로 전달되지만 값을 참조하기 위한 것이 아니라 특정 로직을 담은 메소드를 실행 시키기

위해 사용한다.


자바에선 메소드 자체를 파라미터로 전달할 방법은 없기 때문에 메소드가 담긴 오브젝트를 전달해야 한다. 그래서 펑셔널 오브젝트(functional object)라고도 한다.

+ Recent posts