전체 글 97

Let's Encrypt로 인증서 발급받고 적용하기

https는 추가적인 암호화 과정이 필요해 메모리를 더 사용하고 페이지 로딩이 느려지는 경향이 있다. 그럼에도 이제 대부분의 사이트는 https를 사용한다. https에 사용되는 인증서는 SSL 인증서를 구매해야 하는데, 이전 검색해 보았을 때 COMODO의 가장 싼 인증서가 1년에 3만원이었던 것 같다. 비싼 가격은 아니지만 결제해야 된다는 것 자체가 부담스럽다. 그런 인증서를 Let's Encrypt를 통해 무료로 발급받아 사용할 수 있다. 물론 이런저런 제한과 90일마다 갱신해야한다는 귀찮은 점은 감수해야 한다. Play framework에서 Let's Encrpy로 발급받은 인증서를 적용하려면 몇 가지 과정이 필요하다. 이전 Netty 서버에 적용할때도 한참 고생했던 기억이 있다. 발급받는 곳마다..

ScalaTags, Html Element를 편하게 작성하자

Scala.JS나 Akka Http처럼 스칼라 자체에서 html을 작성해야 하는 경우에 모든 것을 텍스트로 처리하기는 곤란하다. 아무리 s"$variable" 같은 스트링 인터폴레이션이 지원된다 하더라도, 엘리먼트 안에 엘리먼트가 존재하는- hierarchy 형태라면 제대로 태그를 닫았는지도 의심스럽다. ScalaTags를 사용하면 그런 고민에서 벗어날 수 있다. 사실 너무 간단해서 한번 보면 누구나 사용할 수 있을테지만. 0. Dependency 추가, Import문 작성libraryDependencies += "com.lihaoyi" % "scalatags_2.11" % "0.6.5"import scalatags.Text.all._ScalaTags 역시 명시적으로 import문을 작성해야 한다. µP..

Scala 2017.07.11

µPickle(micro-pickle) 라이브러리를 이용한 Scala 에서의 JSON 변환

µPickle은 자바의 유명한 라이브러리 Jackson처럼 Scala의 객체를 JSON 문자열로 변환해주는 라이브러리다. 공식 홈페이지에 따르면 0.4.3 현재 Boolean, Byte, Char, Short, Int, Long, Float, Double등의 기본 자료형(당연히 String도 포함)Tuple1부터 Tuple22까지,불변 콜렉션인 Seq, List, Vector, Set, SortedSet, Option, Array, Maps,CanBuildForm으로 구현 가능한 모든 콜렉션,Duration(Scala.concurrent)과 Either(Left, Right 각 자료를 가지는),case class와 case object,sealed trait과 seald class,UUID,null 등의..

Scala 2017.07.11

Scala.js 0.6.18을 사용해 보고.

Scala.JS는 프론트엔드에서도 스칼라를 사용할 수 있게 하는 라이브러리 프로젝트다. 커피스크립트나 다트같은 것들과 마찬가지로 .scala 파일이 js 파일로 변환되는 형식이다. 공식 홈페이지에서 자랑하는 몇 가지 특징을 살펴보자면 1. Correctness 스칼라의 강력한 타입 시스템을 이용하기 때문에 JS에서의 타입 문제(Number에 +를 했을 때 String으로 변환되는 등의)를 피해갈 수 있다. 또, 친숙한 Undefined, 호이스팅 문제도 해결해준다(사실 이미 let 등으로 피해갈 수 있다). 2. Performance Scala.js는 컴파일할 때 'fast optimizing' 과정을 거치는데, 이 때 더 효율적인 JS로 최적화해준다. 생성되는 JS파일은 전체 어플리케이션 용으로 만들어..

Scala/ScalaJS 2017.06.30

sealed 키워드와 final 키워드의 차이

두 가지 키워드 모두 자바에서 클래스에 쓰는 final 키워드와 마찬가지로 더 이상 상속하지 못하게 할 때 사용한다. 하지만 sealed 키워드는 final 키워드와 달리 같은 파일에서는 상속할 수 있다. 하나의 파일에 하나의 구현(Nested Class를 제외하고)만 가능한 자바와 달리 스칼라는 그런 제한이 없기 때문에 존재하는 키워드라고 볼 수 있다. sealed class Fruit(color: String) { def printColor = println(color) } class Apple extends Fruit("Red") { def print = "Apple" }같은 파일에서의 sealed class 상속 class Banana extends Fruit("Yellow") { }다른 파일에서..

Scala 2017.06.13

롬복(Lombok)의 어노테이션들 - (SneakyThrows, Synchronized, Log)

11. @SneakyThrows논란의 여지가 있는 어노테이션이라고 소개되고 있다. 메소드 선언부에 사용되는 throws 키워드 대신 사용하는 어노테이션으로 예외 클래스를 파라미터로 입력받는다.public static String utf8ToString(byte[] bytes) throws UnsupportedEncodingException{ return new String(bytes, "UTF-8"); } @SneakyThrows(UnsupportedEncodingException.class) public static String utf8ToStringWithLombok(byte[] bytes) { return new String(bytes, "UTF-8"); }val bytes = "Hello!".ge..

Java | Android 2017.05.31

롬복(Lombok)의 어노테이션들 - (EqaulsAndHashCode, XArgsConstructor, Data, Value, Builder)

6. @EqualsAndHashCodeequals(Object) 메소드와 hashCode() 메소드를 오버라이드한다. @ToString 어노테이션과 마찬가지로 exclude 파라미터로 필드를 제외하거나 callSuper 파라미터로 부모 객체를 생략하거나 포함할 수 있다. 또, 필드에 객체 직렬화(Serializable)에서 제외할때 사용하는 transient 키워드를 사용하면 exclude 파라미터로 입력한 것과 같이 두 메소드에서 제외된다.@EqualsAndHashCode(exclude = "value") private static class LombokClass1 { private String name = "lombok"; @Setter private int value; } @EqualsAndHash..

Java | Android 2017.05.31

롬복(Lombok)의 어노테이션들 - (val/var, NonNull, Cleanup, ToString)

개인적으로 현 시점 자바 프로그래밍에서 롬복(Lombok)은 빼놓을 수 없는 라이브러리라고 생각한다. 많은 사람들이 JAVA를 싫어하는 이유인 보일러 플레이트 코드(Boilerplate code : 반복적으로 사용되는 코드) 대부분을 어노테이션 추가만으로 깔끔하게 해결해주기 때문이다. 그만큼 롬복은 자주 사용하고 있지만 생각보다 모르고 있던 어노테이션도 많고, 새로운 어노테이션도 생겼기에 정리하고자 한다. 롬복은 프로젝트 폴더에 lombok.config 파일을 만들어 세부적인 설정을 적용할 수 있다. 기본적으로 disable로 설정되어있는 어노테이션은 flagUsage를 ALLOW로 설정해야 사용이 가능해진다.lombok.---.flagUsage = ALLOW---는 어노테이션명 1. val정말 굉장한 ..

Java | Android 2017.05.30

Java의 Builder Pattern과 Scala의 Default Parameter

1. Java에서의 Builder Pattern자바에서 빌더 패턴(Builder Pattern)은 두 가지 경우에 주로 사용된다. 1) 생성자 파라미터가 많거나 선택적인 생성자 파라미터가 필요할 때생성자 파라미터가 많은 경우 빌더 패턴을 적용하면 훨씬 사용하기 편해진다. 특히 생성자에서 선택적으로 사용되는 파라미터가 필요한 경우에는 선언해야 하는 생성자의 수가 많아지게 되는데, 최악의 경우 파라미터 조합의 수만큼 생성자가 필요해진다. 이런 상황에 빌더 패턴을 이용하면 선언이 필요한 생성자의 수를 크게 줄일 수 있다. 2) 파라미터에 기본 값이 필요할 때위 경우와 개념적으로는 같다. 자바는 파라미터의 기본 값이 지원되지 않기 때문에 기본 값을 사용한다고 가정하면 오버로드된 메소드들(혹은 생성자)이 필요해진..

Scala 2017.05.28

Java HTML parser, Jsoup로 원하는 값 얻어내기 - Ajax

1. Chrome 개발자도구 Network 탭 크롬에서 F12키나 Ctrl+Shift+I 혹은 메뉴의 '도구 더 보기'에서 열 수 있는 개발자도구는 아주 강력하다. HTML dom 탐색은 물론 javascript나 css 소스를 탐색하고 수정할 수 있을뿐 아니라 수정해 곧바로 적용해 볼 수 있다. 이번 포스트에서 주로 사용하는 Network탭에서는 실시간으로 Request / Response 정보를 확인 수 있다. 각 요청이 시작되기 전/후를 스크린샷으로 남기는 기능과 원하는 요청만 표시하는 필터같은 유용한 기능도 있다. 다양한 기능을 한번씩 사용해 보면 많은 도움이 된다. 2. Jsoup로 네이버 검색어 자동완성 목록 얻어오기 네이버 검색창에 단어를 입력했을 때 나오는 검색어 자동완성 목록을 Jsoup..

Java | Android 2017.05.27