{{위키데이터 속성 추적}}
{{Infobox programming language
| name = 그렘린<br />Gremlin
| logo = 
| year = {{시작 날짜와 나이|2009}}
| designer = Marko A. Rodriguez
| developer = [[아파치 소프트웨어 재단]]의 아파치 팅커팝
| written_in = [[자바 (프로그래밍 언어)|자바]]
| latest release version = 그렘린 3.4.10<ref name="Gremlin Releases">{{웹 인용|url=https://tinkerpop.apache.org/docs/3.4.10/upgrade/#_tinkerpop_3_4_10|title=Gremlin 3.4.10|accessdate=January 18, 2021}}</ref>
| dialects = Gremlin{{nbh}}Java8, Gremlin{{nbh}}Groovy, Gremlin{{nbh}}Python, Gremlin{{nbh}}Scala, Gremlin{{nbh}}Clojure, Gremlin{{nbh}}PHP, Gremlin{{nbh}}JavaScript, Gremlin{{nbh}}Typeset
| operating_system = [[크로스 플랫폼]] (멀티 플랫폼)
| license = [[아파치 라이선스 2.0]]
| website =  [http://tinkerpop.apache.org/ 공식 사이트]
| status = 개발 중
| influenced_by = [[정규 표현식]], [[XPath]], 리플, [[SPARQL]], [[SQL]], [[자바 (프로그래밍 언어)|자바]]/[[자바 가상 머신|JVM]]
}}
'''그렘린'''(Gremlin)은 [[아파치 소프트웨어 재단]]의 아파치 팅커팝(Apache TinkerPop)이 개발한 [[그래프 순회]] 언어이자 [[가상 머신]]이다. 그렘린은 [[온라인 트랜잭션 처리|OLTP]] 기반 그래프 데이터베이스, [[온라인 분석 처리|OLAP]] 기반 그래프 프로세서와 함께 동작한다.

그렘린의 [[오토마타 이론|오토마타]] 및 [[함수형 프로그래밍|함수형 언어]] 파운데이션은 그렘린이 자연스럽게 [[명령형 프로그래밍|명령형]], [[선언현 프로그래밍|선언형]] 쿼리, 호스트 언어 아그노스티시즘, 사용자 지정 [[도메인 특화 언어]], 확장 가능한 컴파일러/옵티마이저, 싱글 및 멀티 실행 모델, hybrid depth- 및 breadth-first 평가, [[튜링 완전]]을 지원할 수 있게 한다.<ref name="Gremlin Machine and Language">{{서적 인용|eprint=1508.03843|title=The Gremlin Graph Traversal Machine and Language|pages=1|last1= Rodriguez|first1=Marko A.|class=cs.DB|year=2015|doi=10.1145/2815072.2815073|chapter=The Gremlin graph traversal machine and language (invited talk)|isbn=9781450339025}}</ref>

== 역사 ==
* 2009-10-30 프로젝트 탄생, 팅커팝(TinkerPop)의 이름
* 2009-12-25 v0.1 최초 릴리스
* 2011-05-21 v1.0 출시
* 2012-05-24 v2.0 출시
* 2015-01-16 팅커팝이 아파치 인큐베이터 프로젝트가 됨
* 2015-07-09 v3.0.0-incubating 출시
* 2016-05-23 아파치 팅커팝이 최상위 프로젝트로 됨
* 2016-07-18 v3.1.3 및 v3.2.1이 아파치 팅커팝으로 첫 출시
* 2017-12-17 v3.3.1 출시

== 벤더 연동 ==
그렘림은 [[아파치 라이선스|아파치2-라이선스]]의 그래프 순회 언어이며 그래프 시스템 벤더들에 의해 사용할 수 있다. 일반적으로 두 종류의 그래프 시스템 벤더가 있다: OLTP [[그래프 데이터베이스]] 및 OLAP 그래프 프로세서. 아래의 표는 그렘린을 지원하는 그래프 벤더를 요약한 것이다.

{| class="wikitable"
|-
! 벤더
! 그래프 시스템
|-
| [[Neo4j]]
| 그래프 데이터베이스
|-
| [[OrientDB]]
| 그래프 데이터베이스
|-
| [[DataStax]] Enterprise (5.0+)
| 그래프 데이터베이스
|-
| [[아파치 하둡|Hadoop]] ([[Apache Giraph|Giraph]])
| 그래프 프로세서
|-
| [[아파치 하둡|Hadoop]] ([[아파치 스파크|Spark]])
| 그래프 프로세서
|-
| [[InfiniteGraph]]
| 그래프 데이터베이스
|-
| [[JanusGraph]]
| 그래프 데이터베이스
|-
| [[Cosmos DB]]
| 그래프 데이터베이스
|-
| [[Amazon Neptune]]
| 그래프 데이터베이스
|-
| [[Ontotext]] 그래프DB
| [[Triplestore]]
|}

== 순회의 예 ==
그렘린-그루비 환경에서 다음의 그렘린 쿼리 및 응답의 예는 [https://web.archive.org/web/20180207123351/https://grouplens.org/datasets/movielens/ MovieLens] 데이터셋의 그래프 표현에 상대적이다.<ref name="NoSQLNow Slides">{{웹 인용|url=http://www.slideshare.net/slidarko/the-gremlin-traversal-language|title=The Gremlin Graph Traversal Language|accessdate=August 22, 2015}}</ref> 데이터셋에는 영화를 평가하는 사용자들이 포함되어 있다. 사용자는 각자 하나의 직업이 있으며 각 영화는 그와 연계된 하나 이상의 분류가 있다. MovieLens 그래프 스키마는 아래와 같다.
<syntaxhighlight lang="cypher">
user--rated[stars:0-5]-->movie
user--occupation-->occupation
movie--category-->category
</syntaxhighlight>

=== 단순 순회 ===

{{pull quote|그래프의 각 꼭짓점의 경우 레이블을 제외시키고 개개의 레이블을 묶고 계수할 것.}}

<syntaxhighlight lang="groovy">
gremlin> g.V().label().groupCount()
==>[occupation:21, movie:3883, category:18, user:6040]
</syntaxhighlight>

{{pull quote|만들어진지 가장 오래된 영화의 연도는?}}

<syntaxhighlight lang="groovy">
gremlin> g.V().hasLabel('movie').values('year').min()
==>1919
</syntaxhighlight>

{{pull quote|다이 하드의 평균 평점은?}}

<syntaxhighlight lang="groovy">
gremlin> g.V().has('movie','name','Die Hard').inE('rated').values('stars').mean()
==>4.121848739495798
</syntaxhighlight>

== 같이 보기 ==
* [[SPARQL]]
== 각주 ==
{{각주}}

== 외부 링크 ==
* [https://web.archive.org/web/20170710070127/http://www.tinkerpop.com/ Apache TinkerPop Homepage]
* [https://web.archive.org/web/20180208095222/http://gremlindocs.com/ GremlinDocs.com (TinkerPop2)]
* [https://web.archive.org/web/20180212070550/http://sql2gremlin.com/ sql2gremlin.com (TinkerPop2)]
* Rodriguez, M.A., "[https://arxiv.org/abs/1508.03843 The Gremlin Graph Traversal Machine and Language]," Proceedings of the ACM Database Programming Languages Conference, October, 2015.

{{아파치}}

[[분류:클러스터 컴퓨팅]]
[[분류:하둡]]
[[분류:아파치 소프트웨어 재단]]
[[분류:자바 플랫폼]]
[[분류:스칼라로 작성된 자유 소프트웨어]]
[[분류:선언형 프로그래밍 언어]]
[[분류:아파치 라이선스 소프트웨어]]
[[분류:질의 언어]]
[[분류:기계 학습 및 데이터 마이닝 소프트웨어]]