관리 메뉴

HAMA 블로그

Anorm 2.5 (1) - Anorm 이란 ? 본문

PlayFramework2

Anorm 2.5 (1) - Anorm 이란 ?

[하마] 이승현 (wowlsh93@gmail.com) 2016. 8. 26. 20:19

 Anorm 2.5 공식 문서에서 번역했습니다.  원문 바로가기


플레이는 간단한 데이터 접근 레이어를 포함한다. 그 이름은 Anorm 이며  plain SQL 을 데이터베이스와 상호 작용 하기 위해 사용하며 결과 데이타셋을 변환시키고 파싱할 수 있는 API 를 제공한다.

Anorm 은 ORM(Object Relational Mapper) 이 아니다.

다음 문서를 참고해서 예제 DB로 이용하자 .MySQL world sample database.

만약 당신의 웹 어플리케이션에서 이용하길 원하면 다음 MySQL 웹싸이트 지침서를 따르고 다음에 설명된 대로 설정해보자. on the Scala database page .

살펴보기

SQL 데이터베이스에 접근하기 위해 다시금 plain old SQL 로 회귀한다는건 좀 이상한 느낌이 들 수 있겠다.특히 고차원의 ORM  (하이버네이트 같은)을 사용이 익숙한 자바 개발자라면 더더욱...

우리는 이런 툴들의 사용의 이점에  일부분 동의 할지라도 모든 곳에서 필요가 없음에 대해 알고 있으며  특히 스칼라 같은 고차원적인 언어의 힘을 가지고 있을 때는 더더욱 필요가 없게되며 빠르게 개발하는것에 대해 역효과만 초래 할 뿐이다. 

 

JDBC 를  pain 하게 사용하게 하자. 그러나 더 나은 API 를 제공할것이다.

우리는 JDBC API 를 직접적으로 사용한다는게 얼마나 순진한 생각이고 지루한 일이 될지 충분히 알고 있습니다. 특히 자바에서 말이죠.  체크드 예외를 다루어야하며 어디서나 결과셋을 돌고 또 돌아야하죠. 데이타셋의 로우 데이터를 자신의 데이터 구조에 맞추기 위해서 말입니다.

우리는 더 간단한 API 를 JDBC 를 위해 제공하며, 스칼라를 이용하면 더 이상 예외에 괴롭힘을 당하지 않아도 되고, 데이터 변환에 있어서 함수형 언어를 이용한 엄청 편리한 개발이 가능합니다. 

 플레이 Scala SQL 접근 레이어의 목적은 다양한 API 들을 효과적으로 JDBC 데이터에서 다른 스칼라 구조로 변환하는데 있습니다.


더이상 DSL 을 관계형 데이타베이스에 접근하기위해 사용할 필요가 없습니다.

SQL 은 이미 훌륭한 DSL 입니다. 바퀴를 또 다시 발명하고 익혀야 할 필요가 없습니다.게다가  SQL 구문은 데이타베이스 벤더들 마다 조금 씩 다릅니다. 

만약 각종 ORM 의 DSL 을 배우는것은 또 다른 방언들을 배우게 되는것이며 (거기서 헤맬수도 있으며 ) 특정 데이타베이스의 흥미로운 부분들의 사용을 포기하는것을 의미합니다.

플레이는 때때로 당신에게 미리 만들어진 SQL 구문을 제공할것입니다. 그렇다고 이게 SQL 자체의 순수한 면을 감추는데 이용되지는 않을 겁니다. 플레이는 낭비적인 코딩의 양을 줄여줄 것이며 항상 plan old SQL 를 지향할 것입니다.


SQL 가 만들어지는데  타입안전 DSL 은 실수다.

타입안전 DSL 이 더 나은지에 대해서 몇몇 논쟁이 있어왔다. 모든 당신의 쿼리들이 컴파일러에 의해 체크되어야하는지 말이다. 불운하게도  컴파일러는  당신의  메타모델 정의기반으로 정의된 쿼리를 체크하는데 그것은  당신의 데이터 구조를 데이타스키마로 매핑하도록 자체적으로 코딩한다. 

거기에는 메타모델이 얼마나 정확하냐에 대한 보장이 없다.심지어 컴파일러는 당신의 코드와 쿼리가 정확한 타입을 가지고 있다고 말하지만 그것은 런타임에 데이타베이스와의 타입 미스매치로 인한 심각한 문제를 도출 시킬 수 있다. 


당신의 SQL 코드를 컨트롤 하라.

ORM 은 간단한 케이스에서는 잘 작동하지만 복잡한 스키마를 다루거나 이미 존재하는 데이타베이스를 다룰때 당신의 ORM 프레임워크와 기나긴 사투를 벌여야 할 가능성이 크다. 스스로 짠 SQL 쿼리는 간단한 헬로월드 프로그램에서는 지루한 일이 겠지만 실제세계의 어플리케이션에서는 시간을 절약해주며 SQL 코드를 당신이 컨트롤함에 따라 코드를 단순화 시킬 수 있게 될 것이다. 

Comments