SlideShare ist ein Scribd-Unternehmen logo
1 von 73
https://elixir-lang.org/install.html
결론
회사에서
하라니까…
입사했을때는 C++ 개발자였던 내가 이세계로 워
프한 후(전배)에는 C#에 Elixir 개발자???!!!!
Elixir is a
dynamic, functional language
designed for building scalable and maintainable applications.
Elixir is a
dynamic, functional language
designed for building scalable and maintainable applications.
https://madnight.github.io/githut/#/pull_requests/2019/2
https://madnight.github.io/githut/#/pull_requests/2019/2
https://prograils.com/posts/why-discord-pinterest-moz-
bleacher-report-use-elixir-case-studies
얼랭 생태계를 날로 먹을 수 있다
(with OTP)
https://elixirschool.com/ko/
https://elixirschool.com/ko/
https://hexdocs.pm/elixir/Enum.html
이것도 사실 엘릭서의 장점임
(문서화 간단함)
- Dynamic type임 (요즘 대세)
- UnitTest, Dynamic Supervisor 로 보안.
- Dynamic Supervisor
- 프로세스를 무한히 늘리기 편함
- 도데체 함수형 언어란 무엇인가??????????
- 함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀
리하는 프로그래밍 패러다임의 하나이다. 명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하
는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. (from 위키)
- 특징은 다음과 같다
- Pure function (스레드 안전 -> 병렬처리 간단함 -> WA!!!) 사실 완벽한건 아님
- 익명함수, higher-order function(아직도 익명함수, 1급함수 안되는 언어 없제????)
- 사실 중요한건 Stateless라는 특성
- C 같은 State(상태) 중심 언어와는 달라서 코딩할 때 적응이 필요
- 어떤 현상의 재현이 간단함 (버그가 엄청 생기지 않음!)
- (딴이야기긴 한데) 재귀 짜기가 쉬움.
- 패턴매칭덕분임
- Erlang 승차감 조쿠요
- 언어단에서 지원해주는 것도 많음
- 저는 자세히 모르고 Discord가 잘 압니다
- https://blog.discordapp.com/scaling-elixir-f9b8e1e7c29b
- 얼랭 자체가 안전성에 미친 사람들이 만듬
- 실시간 코드 변경
- 유닛 테스트
- Supervisor 모델
- 문제가 되는 놈만 죽이자!
- 초기상태? 그냥 바로 만들어보자
- 이걸 해주는 것이 Supervisor
사실 Erlang꺼임
ㅎㅎ;;;ㅈㅅ…ㅋㅋ!!
- 객체지향 하다 온 사람이 적응하기 힘듬
- Stateless
- 액터 모델
- 러닝 커브가 쎔(특히 한국인은 더)
- Macro 와 Erlang이 2가지 러닝커브
- 가볍게 쓰긴 좋다는 말이다!!!!!(머쓱)
- 느림
(책에서도 단독으로 쓰는건 권장 ㄴ)
https://blog.discordapp.com/using-rust-to-scale-elixir-
for-11-million-concurrent-users-c6f19fc029d3
보통 RUST나 C랑 섞어 씁니다
- 버전업을 팍팍함(원래 어린애가 쑥쑥 자람)
- 의존성들이 따라오질 못함
- 레포들이 업데이트가 느림
- (물론 어느정도 대책은 있습니다)
- 참고자료가 아무래도 적음
- 진짜로 적음
- DB 래퍼
- 유닛 테스트 툴
- Config 저장
- 명령어 alias
- 빌드 툴
- 의존성 관리
- 바이너리 배포(최근에 추가됨!!!!!)
- 포매터도 있다
- 언어 차원에서 빌드툴을 지원
- 의존성 추가, 버전 등을 명시하기 편함.
- 프로젝트 관리도 편하다 (umbrella)
- Aliases까지 지원
- 프로젝트에 맞게 세팅 가능.
- 기존 명령어까지 override
- Mix deps.~~ 로 의존성 관리 가능
(Hex 사용)
A database wrapper and language integrated query for Elixir
코드 준비 끝!
명령어 두줄로
설정 끝!
마이그레이션 끝!스키마 정의 끝!
있을만한건 다 있다
테스트별 세팅, 세팅, 종료처리, 등등
이제 리팩토링 막함(편안)
ㅇㅈ합니다
Prof. cglee
설정도 테스트를 위해
따로 만들 수 있음.
ㅇㅈ합니다
222222
Prof. cglee
ㅇㅈ합니다
3333
Prof. cglee
Mix format
CI에서 연결해서 사용도 가능
Githook에 연결해서 사용도 가능
심지어 옵션 설정도 가능함(라인 글자 제한 등등…)
이것도 Elixir 버전에 따라서 쑥쑥 성장중
코드 에러도 잡아줘서 완전 편함
- 기능이 안정적이다
- 언어 버전이 올라갈 때 묶인 기능이 같이 올라감
- 선택의 고민을 할 필요가 없음 (선택의 여지가 없다는 말도 되지만…)
- 서포트가 안 끊긴다(언어가 살아있는 한 아마도…)
- 간단하게 올리기 쉽다.
- 기본 제공하고 플러그인 설치는 다르지 않을까요. 이미 제공되어있는거니…
WELCOME MULTI-THREADING
NO FREE LUNCH
Actor 끼리 Message로 통신
https://www.brianstorti.com/the-actor-model/ https://hamait.tistory.com/716
•Create more actors
•Send messages to other actors
•Designate what to do with the next message
편하게 쓸 수 있게
이미 준비되어있다.
https://hamait.tistory.com/716
- 기능이 안정적이다
- 언어 버전이 올라갈 때 묶인 기능이 같이 올라감
- 선택의 고민을 할 필요가 없음 (선택의 여지가 없다는 말도 되지만…)
- 서포트가 안 끊긴다(언어가 살아있는 한 아마도…)
- 간단하게 올리기 쉽다.
- 기본 제공하고 플러그인 설치는 다르지 않을까요. 이미 제공되어있는거니…
근데 인터페이스 바뀌
었는데요?
인자가 없는 Run
인자가 True인 run
인자가 False인 run
이런식으로 가능
(이제 case do 같은거 잘 안씀)
(사실씀)
여러 오브젝트에서 특정 값을 추출
해내는 래핑 함수 같은거 만들때 편
함.
에러 처리할 때 이 패턴매칭을 많이
씀
LET IT CRASH!!!!!!!
아까 봤던 액터 모델
그럼 데이터는 어떻게 주고받지?
DB는 하나일텐데, DB도 액터인가?
-> 공유자원을 쓸 수 밖에 없는 상황이 생기기
에 완벽하게 모든게 Pure Function인건 아님
EX) ETS, DB ADAPTER, FILE
대체적으로 원칙이 지켜짐.
(가끔 안되서 짜증나긴 하는데) 편함
Immutable
생각보다 잘해준다.
다 참조형식으로 함.
(head tail이 괜히 있는게 아니더라. 왜 PL때 이런거 안알려줬지…)
Manning의 action in elixir에서.
Manning의 action in elixir에서.
Manning의 action in elixir에서.
버그 찾기가 좋아짐(것같은 착각이 듬)
- 그 함수에서 자기 할일만 잘 하면 버그가 잘 안생김
- 버그가 터져도 자기 할 일만 잘 하게 고치면 됨
list를 한차례씩 변환해주는 코드
어떤 데이터가 차례차례 바뀌어간다는 느낌이 있어서 좋음 (중간에 다른코
드 끼어드는것도 막고)
이런식으로 하면 진짜 코드 재로딩 한다.
(recompile로 전체 가능)
(피닉스 쓰면 코드 바뀔때마다 알아서 재로딩해준다)
매크로 등등…
매크로 등등…
- 당장 쓰는 사람이 없고
- 뽑을려는 회사도 없고
- 앞으로 어떻게 될지 모르겠다(신생언어니까)
- 넘나 편하고
- 생산성은 확실히 좋은것같고
- 힙스터감성을 느끼기도 좋음
(무수한 악수요청을 받을 수 있음)
어쩔수 없다냐~
https://www.irasutoya.com/
미쿠냥콘 3
냥냥한 미쿠콘
이상 이미지출처들

Weitere ähnliche Inhalte

Was ist angesagt?

조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
devCAT Studio, NEXON
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
게임 애셋 스트리밍 패치
게임 애셋 스트리밍 패치게임 애셋 스트리밍 패치
게임 애셋 스트리밍 패치
Seungjae Lee
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
흥배 최
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
devCAT Studio, NEXON
 

Was ist angesagt? (20)

今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편
 
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용 [Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
게임 애셋 스트리밍 패치
게임 애셋 스트리밍 패치게임 애셋 스트리밍 패치
게임 애셋 스트리밍 패치
 
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
 
PEGで構文解析をする
PEGで構文解析をするPEGで構文解析をする
PEGで構文解析をする
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
 
C# における Redis 徹底活用
C# における Redis 徹底活用C# における Redis 徹底活用
C# における Redis 徹底活用
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템Python과 Git으로 만드는 모바일 게임 패치 시스템
Python과 Git으로 만드는 모바일 게임 패치 시스템
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better Engineer
 

Ähnlich wie [Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다

이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
devCAT Studio, NEXON
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
Daum DNA
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
codenavy
 
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
NAVER D2
 

Ähnlich wie [Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다 (20)

Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
Java the good parts
Java the good partsJava the good parts
Java the good parts
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In Production
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
Node.js in Flitto
Node.js in FlittoNode.js in Flitto
Node.js in Flitto
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
7 8 1
7 8 17 8 1
7 8 1
 
In c
In cIn c
In c
 
Hoodpub 기술 발표
Hoodpub 기술 발표Hoodpub 기술 발표
Hoodpub 기술 발표
 
올챙이 현재와 미래
올챙이 현재와 미래올챙이 현재와 미래
올챙이 현재와 미래
 
Nodejs를 이용한 개발
Nodejs를 이용한 개발Nodejs를 이용한 개발
Nodejs를 이용한 개발
 
강분도 - 공개SW개발과 우분투 (2010Y10M05D)
강분도 - 공개SW개발과 우분투 (2010Y10M05D)강분도 - 공개SW개발과 우분투 (2010Y10M05D)
강분도 - 공개SW개발과 우분투 (2010Y10M05D)
 
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
백억개의 로그를 모아 검색하고 분석하고 학습도 시켜보자 : 로기스
 
5 6 1
5 6 15 6 1
5 6 1
 

Kürzlich hochgeladen

Kürzlich hochgeladen (8)

JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 

[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다