Scala 49

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

Java의 Builder Pattern과 Scala의 Default Parameter

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

Scala 2017.05.28

Scala와 Java의 String interpolation(문자열 덧붙이기)

String Interpolation은 자주 쓰이고 유용한 구문이다. 대부분의 뷰 템플릿 엔진에서는 지원하고 있고, 당연하게 쓰이고 있다. 간단하게 설명하자면 문자열을 출력하거나 선언할 때 중간중간 다른 변수를 끼워넣는 구문이다. 간단하게 예를 들자면 JSP에서 123456 cs 으로 쓰는 바로 그 기능이다. 1. 스칼라에서의 String interpolationval str1 = "Hello" val str2 = "World" val int1 = 100 val string = s"$str1 $str2 - $int1" println(string) // Hello World - 100 // 값으로 선언해 사용할 수 있다. println(s"${str1} World!") // Hello World! // {..

Scala 2017.05.27

Java의 Enum과 Scala의 Enum

Enumeration, 줄여서 enum이라고 부르는 열거 자료형은 자바나 스칼라 모두에서 아주 유용하게 쓰인다. Effective Java에 따르면 enum은 JVM에서 지원하는 싱글톤으로써 syncronized된 'getInstance' 메소드들을 선언할 필요 없이 아주 간편하게 만들 수 있고(메소드나 필드에서는 syncronized 키워드가 필요할 수 있다), 프로그램 전역에서 호출이 가능한 장점이 있다. 1. 자바에서의 enum자바의 enum은 열거 자료형으로써의 역할을 충실하게 수행해준다. public enum Fruits { Apple, Banana } public static void main(String[] args) { // 기본적인 호출 Fruits fruits = Fruits.Apple..

Scala 2017.05.16

Scala의 Symbol(심볼)

스칼라에는 심볼 혹은 심볼 리터럴이라고 불리는 특이한 객체가 있다. 심볼은 String과 다르게 단 하나의 객체만을 가진다는 특징이 있다. JVM에서 String은 값은 같지만 '다른' 객체가 생길 수 있다. 옛날 코드, 특히 URL을 인코딩하는 예제에 많이 보이는 이상한 경우다.val str1 = new String("String") val str2 = new String("String") println(str1 eq str2) // false // 스칼라에서 eq는 자바의 ==와 같다. // 반대로, 스칼라에서 ==는 자바의 .equals() 메소드와 같다. new String()을 이용하지 않고 "..." 구문으로 문자열을 만들거나 intern() 메소드를 이용하면 다른 결과가 나타난다. 두 가지 ..

Scala 2017.05.15

Scala와 Java에서 일반적인 파일 입출력

자바는 1.7부터 Paths와 Files 클래스를 이용해 이전보다 훨씬 간편하게 파일 입출력이 가능해졌다. 1. Path 객체// 상대주소나 절대주소를 이용한 Path Path path = Paths.get("/resources/test.txt"); // URI를 이용한 Path ClassLoader classLoader = FileInputOutputJava.class.getClassLoader(); URL url = classLoader.getResource("test.txt"); Path resourcePath = Paths.get(url.toURI()); // throw URISyntacExceptionPaths.get() 메소드를 이용해 직접 파일의 위치를 입력하거나 URI 객체를 이용해 파일을..

Scala 2017.05.11