본문 바로가기
반응형

전체 글318

[Java] Project Lombok Annotations (프로젝트 롬복 어노테이션) 스프링 프레임워크 책을 읽다가 프로젝트 롬복(Project Lombok)에 대해서 알게 되었다. 프로젝트 롬복(Project Lombok) 프로젝트 롬복(Project Lombok)은 자바로 작성된 소스코드를 좀 더 간결하게 만들어 주기 위해 만들어진 프로젝트다. 최신 자바 버전에서는 점점 나아지고 있지만 자바의 가장 큰 문제점은 소스코드에 군더더기가 너무 많다는 점이다. Student 클래스를 자바로 작성해보자. public class Student { private final int id; private final String name; private final int age; private final String department; public Student(int id, String name, .. 2019. 9. 24.
에버노트에서 마크다운 사용하기 (Evernote + Markdown) PC와 노트북, 모바일 폰과 태블릿 등 다양한 환경에서 문서 작성과 확인을 위해 에버노트(Evernote)를 사용하고 있다. 인터넷에 연결되어 있기만하면 실시간으로 수정된 문서의 내용이 클라우드로 백업이 된다. 또 한, 별도의 프로그램을 설치하지 않고 웹 브라우저를 통해 문서를 작성할 수 있어서 오랜기간동안 에버노트를 사용해오고 있다. 하지만 최근들어 업무에 github을 사용하기 시작했고, 문서를 마크다운(Markdown) 형식으로 작성하기 시작했다. 편리한 마크다운 언어의 장점을 에버노트에도 이용하고 싶다는 욕구가 생겼다. 마크다운 (Markdown) 마크다운(Markdown)은 텍스트 작성에 사용되는 언어로 2004년 존 그루버(John Gruber)와 아론 스워츠(Aaron Swartz)에 의해 .. 2019. 9. 24.
[Javascript] debugger 키워드, 개발자 도구를 이용한 디버깅 자바스크립트 코드를 디버깅 할 수 있는 가장 간단한 도구는 'debugger' 키워드다. 별도의 IDE 없이 브라우저의 개발자 도구와 debugger 키워드를 이용해서 자바스크립트 코드를 디버깅 할 수 있다. debugger 키워드 자바스크립트 코드를 브라우저에서 디버깅하기 위해 'debugger'라는 키워드를 코드에 넣을 수 있다. 자바스크립트 실행 엔진이 코드를 수행하다가 'debugger'라는 키워드를 만나면 코드 실행이 그 부분에서 일시 중지되고 개발자의 판단을 기다리게 된다. 크롬의 개발자 도구에서 다음 코드를 실행해보자. function method1 () { value1 = 20; debugger; return value1 * 2; } console.log(method1()) 이 코드를 실행.. 2019. 9. 20.
[Javascript] console 객체를 이용한 디버깅 언어를 막론하고 프로그래머들이 가장 먼저 작성하는 프로그램은 'Hello World'다. 화면에 'Hello World'를 찍어보면서 동작하는 무언가를 처음 만들어 보는 것인데 사실 가장 원초적인 디버깅 방법을 배운거라 생각한다. 브라우저에서 동작하는 자바스크립트(Javascript)언어 역시 'Hello World'를 콘솔에 찍어 볼 수 있는 기능을 제공한다. console 출력 자바스크립트 코드를 실행 할 수 있는 웹 브라우저(크롬, IE, 사파리, 오페라)들은 console 객체를 지원한다. 각 브라우저의 개발자 도구를 이용하면 현재 페이지의 자바스크립트 코드가 console 객체를 이용해 출력한 결과물을 확인할 수 있다. 크롬의 경우 [F12] 키를 누르면 개발자 도구를 사용하기 위한 창이 열린다.. 2019. 9. 18.
Good commit practices (커밋 로그 잘쓰기) - 커밋 메시지를 위한 7대 법칙 소프트웨어 프로젝트를 진행하면서 다른 개발자와의 협업은 매우 중요하다. 깃허브, 슬랙 등의 협업 도구가 많이 있지만 가장 본질적인 협업 도구는 소스코드이며, 그 중에서도 '커밋 로그'는 다른 개발자와의 소통에서 가장 중요한 수단이다. 소스코드의 수정, 즉 소스코드의 Diff는 무엇이 바뀌었는지를 말하고 커밋 메시지는 왜 바뀌었는지를 설명한다. (소스코드의 Diff는 What, 커밋 메시지는 Why를 말한다.) 따라서 깔끔한 소스코드를 작성하는 것만큼이나 제대로 된 커밋 로그를 작성하는 것도 매우 중요하다. 소스코드를 보면 좋은 개발자인지를 알 수 있고, 커밋 로그를 보면 좋은 협업자인지 알 수 있다. 소스코드는 고쳐 쓸 수 있지만 커밋 메시지는 영원하다. 따라서 좋은 커밋 메시지를 작성하는게 개발자에게는.. 2019. 9. 16.
소스그래프(Source Graph)로 아이패드(iPad)에서 웹으로 소스코드 분석하기 아이패드(iPad)를 들고 다니면서 출퇴근 길에 오픈소스 분석을 해보고 싶어서 툴을 찾아봤다. 오픈소스 코드의 경우 깃허브(Github)에 공개되어 브라우저를 통해서 얼마든지 볼 수 있다. 하지만 정말 필요한 기능은 소스코드에서 심볼을 따라 갈 수 있는 기능이었다. 메소드를 어디서 호출하는지, 메소드의 정의는 어디있는지를 따라 갈 수 있어야 편하게 소스코드 분석이 가능하다. 깃허브 웹 사이트는 그런 기능이 없다. 이런 주제로 팀내 스터디에서 좋은 툴이 없냐고 얘기를 나누다가 '소스그래프(SourceGraph)'라는 도구를 동료 개발자분이 추천해주셨다. 웹 브라우저에서 동작하는 "Sourcegraph(소스 그래프)"는 제한적이나마 심볼을 따라다닐 수 있는 기능을 제공한다. 소스그래프(SourceGraph).. 2019. 8. 10.
StAXParser를 이용한 DomTree 만들기 업무상 이유로 HTML 엔티티가 데이터로 포함되어 있는 XML 문서를 다룰 일이 있었다. XML에는 기본적으로 5개의 엔티티가 정의되어 있다. 그 외의 데이터는 DTD를 통해 선언을 해주거나 엔티티로 해석할 수 없도록 이스케이핑(Escaping)을 해줘야 한다. HTML 엔티티가 포함되어 있는 XML 문서를 파싱해서 DOM 트리를 사용해야 하는 경우 설정이 좀 까다로울 수가 있다. 이런저런 설정을 찾다가 StAXParser를 이용해서 DOM 트리를 만들어주는 코드를 작성해봤다. & 문자로 시작하는 엔티티를 해석하지 않고, 문자 그대로 사용하는 동작을 구현해봤다. (물론 실무에는 사용하지 않고 그냥 연습 코드로만 작성해봤다. 현실에서는 XML 문서에다가 이상한 엔티티 섞지말아달라고 생산자에게 안내를 해줘야.. 2019. 8. 9.
[Freemarker] 데이터 모델 메소드 (Data model Methods) 정의 사용자의 자바 객체를 데이터 모델로 사용할 때, 데이터 모델을 위한 메소드를 만들어 제공할 수도 있다. 예를 들어 템플릿을 작성할 때 데이터 모델에 'user_,method()'라는 메소드를 정의해 줄 수 있다. 'user_method()'는 템플릿에서 다음과 같이 사용할 수 있다. ${user_method(“abc”, x)} 이와 같은 사용자 정의 메소드는 TemplateMethodModelEx 인터페이스를 구현함으로써 제공할 수 있다. TemplateMethodModelEx 인터페이스는 다음과 같은 메소드를 가지고 있다. Object exec(java.util.List arguments); 템플릿 언어에서 사용자 정의 메소드를 호출하면, 메소드 이름에 대응되는 TemplateMethodModelEx .. 2019. 8. 8.
[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.
반응형