본문 바로가기
반응형

분류 전체보기319

[Freemarker] Data Model 만들기 (ObjectWrapper, TemplateModel) Freemarker는 자바 객체를 데이터 모델로 사용할 수 있다. 다만 사용자의 자바 객체를 Freemarker 엔진이 해석할 수 있도록 ObjectWrapper 클래스와 Adapter 클래스를 구현해줘야 한다. FreeMarker 엔진은 ObjectWrapper 클래스와 Adapter 클래스를 통해서 자바객체를 트리형태로 해석할 수 있다. ObjectWrapper 사용자의 자바 객체를 위한 ObjectWrapper 클래스를 구현하기 위해서는 ObjectWrapper 인터페이스를 구현해야 한다. ObjectWrapper 인터페이스는 다음과 같은 메소드를 가지고 있다. TemplateModel wrap(Object obj) throws TemplateModelException;wrap() 메소드는 사용자의.. 2019. 8. 6.
[Freemarker] 템플릿 특별 변수들(Special Variables) 프리마커 템플릿 언어(Freemarker Template Language)를 이용해서 템플릿을 작성할 때, FTL이 제공하는 특별한 변수들을 알고 있으면 좀 더 템플릿을 잘 짤 수 있다. 이 특별 변수를 사용하기 위해서는 템플릿에서 .variable_name 형태로 써야한다. 즉, auto_esc라는 특별 변수를 템플릿에 사용하려면 .auto_esc로 쓰면 된다. 프리마커 템플릿 언어의 특별 변수들은 기본적으로 스네이크 표현법을 지원하며 2.3.23 버전부터 카멜 표기법도 제공된다. Freemarker Special Variables auto_esc - auto-escaping 설정 여부를 나타내는 불리언 변수 caller_template_name - 현재 macro 혹은 function이 호출된 템플릿.. 2019. 7. 31.
[Freemarker] 프리마커 템플릿 언어 문법(FTL;Freemarker Template Language) 문법 자바 템플릿 엔진(Java Template Engine)인 프리마커(Freemarker)를 이용해 템플릿을 작성할 때 사용하는 프리마커 템플릿 언어(Freemarker Template Language, FTL)은 다양한 문법과 기능을 제공한다. 이 문법을 잘 알고 있으면 효율적으로 템플릿을 작성할 수 있다. 자세한 문법은 Freemarker 매뉴얼을 참고하도록 하고, 이 포스트에서는 자주 사용하는 Freemarker 문법(Directive)들을 간략하게 요약해보겠다. assign 프리마커 템플릿에서 변수를 사용하고 싶을 때, assign 디렉티브를 사용할 수 있다. this code block assigned 라고 명시하면 그 다음부터 ${name}을 이용하면 "Dave"라는 값이 찍히게 된다. 혹은 과.. 2019. 7. 26.
[Freemarker] 프리마커 - 자바 템플릿 엔진(Java Template Engine) 업무에 사용하기 위해서 오픈소스 자바 템플릿엔진(Java Template Engine)을 조사하다가 Freemarker(프리마커)라는 템플릿 엔진을 알게 되었다. 템플릿 엔진(Template Engine)이란? 아파치 프리마커(Apache Freemarker)는 텍스트 형태로 데이터를 출력해주는 자바 템플릿 엔진(Java Template Engine) 라이브러리다. (링크 : https://freemarker.apache.org) 템플릿 엔진(Template Engine)이란 템플릿 양식과 데이터 모델에 입력되어 있는 데이터를 합성하여 문서를 만들어주는 소프트웨어를 말한다. 사용자는 템플릿을 작성하여 템플릿 엔진에 입력한 다음, 데이터 모델을 차례로 템플릿 엔진에 입력하면 데이터 모델에 대응되는 결과 문.. 2019. 7. 25.
[Java] 자바8의 람다식(lambda expression) 1996년 처음 공개된 이후 자바에는 괄목할 만한 두 번의 변화가 있었다. 그 첫 번째가 '지네릭스(Generics)'의 등장이었고, 두 번째가 바로 '람다식(Lambda Expression)'의 등장이다. 특히 람다 표현식의 지원으로 자바는 객체지향 언어의 특징과 함께 함수형 언어의 특성을 갖추게 되었다. 람다식(Lambda expression) 람다식은 1930년대 알론조 처치(Alonzo Church)라는 수학자가 처음 제시한 함수의 수학적 표기방식인 람다 대수에 그 뿌리를 두고 있다. 람다식을 이용하면 코드가 간결해지고, 지연 연산 등을 통해서 퍼포먼스를 향상을 도모할 수 있는 장점을 얻을 수 있다. 반면 모든 엘리먼트를 순회하는 경우에는 성능이 떨어질 수도 있고, 코드를 분석하기 어려워 질 수 .. 2019. 7. 24.
[Bash] pushd, popd 명령어 터미널이나 Bash 스크립트에서 현재 작업 디렉토리를 변경하기 위해서 가장 많이 사용하는 명령어는 'cd' 명령이다. cd 명령어 change directory 명령, 즉 cd 명령은 bash 명령을 배울 때, "Hello world" 프로그램처럼 가장 먼저 배우는 명령어다. cd path cd 명령뒤에 이동하려는 디렉토리 이름이나 경로를 입력하면 현재 작업 디렉토리를 변경하게 된다. 현재 작업 디렉토리는 `pwd` 명령을 이용해서 확인할 수 있다. (Present Working Directory의 약자겠지?) 일반적으로 cd 명령이면 쉘을 사용하는데 문제가 없다. 하지만 여러 디렉토리 경로를 오가는 경우 이전에 있었던 경로들을 기억해놓으면 좋다. cd 명령어도 직전 디렉토리로 돌아가는 옵션을 제공하고 .. 2019. 7. 23.
[Bash] date 명령 - 과거와 미래 날짜, 시간 구하는 방법 Bash 스크립트를 작성하다보면 시간 포맷을 명령어의 인자로 입력해야하는 경우가 있다. 이 때, 특정 시간이 아닌 현재 시간을 기준으로 몇 분전이나 몇 분후를 입력하고 싶은 경우가 있다. 시스템 시간 정보를 얻어 올 수 있는 date 명령어의 옵션을 이용하면 쉽게 과거와 미래시간을 계산해 올 수 있다. 리눅스에서 Date 사용 리눅스의 경우 다음과 같이 date명령의 -d 옵션을 이용하여 과거 시간을 가져올 수 있다. date -d 'yesterday'# 어제 date -d '1 day ago'# 1일전 date -d '1 week ago'# 1주일전 date -d '1 month ago'# 1달전 date -d '1 year ago'# 1년전 date -d '10 second ago'# 10초전 dat.. 2019. 7. 23.
[실용주의 프로그래머] - 앤드류 헌트, 데이비드 토머스 좋은 책과 좋은 글은 한번 쓰여지고 여러번 읽힌다. 읽히고 나서 끝이 아니라 다른 글에서 다시 만나 다시금 생명력을 얻게 된다. 이렇게 좋은 글은 꾸준히 인용되어 그 삶을 계속 연장해나간다. "실용주의 프로그래머(The Pragmatic Programmer)"도 그런 종류의 책이다. 소프트웨어 엔지니어링 분야의 수 많은 책과 글들이 이 책을 인용하고 있다. 이 책의 부제는 'From Journeyman to Master(숙련공에서 마스터로)'다. 초보자에서 중급자를 넘어 마스터로 넘어가기까지는 굉장히 많은 경험과 노력이 필요하다. 소프트웨어 분야가 특히 그렇다. 새로운 언어와 프레임워크의 등장으로 누구나 쉽게 '코딩'을 할 수 있게 되었다. 이제 동작하는 코드는 누구나 만들 수 있다. 하지만 정말 잘 짜.. 2019. 7. 14.
XML External Entity Injection Attack (XXE Injection 공격) XML 파서를 사용하기 위해 구글링을 하다가 'XXE Injection Attack(XML External Entity Injection 공격)'에 대해서 알게되었다. XXE Injection 공격은 OWASP Top 10 - 2017에도 선정된 웹 애플리케이션 취약점이다. (OWASP는 The Open Web Application Security Project의 약자로 웹 애플리케이션에서 흔히 발생할 수 있는 대표적인 취약점을 모아서 4년마다 발표하는 프로젝트다.) 1. XML Entity XML 엔티티(Entity)는 반복적으로 나오는 문자열이나 특별처리가 필요한 특수 문자를 XML 문서에서 사용하기 위해 미리 정의해놓고 사용하는 개체다. XML Entity는 앰퍼샌드('&') 문자로 시작하고 세미콜.. 2019. 7. 10.
반응형