반응형

프로그래밍 105

Kafka 기본 개념 및 아키텍처

안녕하세요 Dibrary입니다. 이번에는 Data처리에 핵심 기술인 Apache Kafka에 대해 정리해보겠습니다. 분산 스트리밍 플랫폼. 데이터를 유실없이 안전하게 전달하는 것이 주 목적인 ‘메시지 시스템’에서 데이터를 처리할 수 있습니다. 분산 스트리밍 플랫폼. 데이터를 유실없이 안전하게 전달하는 것이 주 목적인 ‘메시지 시스템’에서 데이터를 처리할 수 있습니다. 기본 아이디어는 Pub / Sub 모델 입니다. 메시지를 관리하는 Queue가 중앙에 있고, 독립적으로 발행, 소비가 이뤄집니다. 카프카의 특징 1. Pub / Sub 모델 2. 확장성 3. 메시지 순차처리 4. 분산처리 Producer는 데이터를 push , Consumer는 데이터를 pull 합니다. Foo와 Bar는 각각 3개의 Par..

[Effective Python] 1장 - 파이썬답게 생각하기

안녕하세요 Dibrary입니다. 이 글은 Effective Python (한국어 번역제목은 '파이썬 코딩의 기술' 입니다)의 1장 내용을 정리했습니다. 1. 사용중인 파이썬의 버전을 알아두자 이렇게 간단히 버전을 확인할 수 있습니다. 2. PEP8 스타일 가이드를 따르자 PEP 8 – Style Guide for Python Code | peps.python.org PEP 8 – Style Guide for Python Code Author: Guido van Rossum , Barry Warsaw , Nick Coghlan Status: Active Type: Process Created: 05-Jul-2001 Post-History: 05-Jul-2001, 01-Aug-2013 Table of Con..

[파이썬 클린코드] 2장 (파이써닉 코드) 정리

안녕하세요 Dibrary입니다. 아래 내용은 파이썬 클린코드의 2장 중 핵심 내용만을 정리한 것입니다. 디자인 패턴은 언어와 무관한 고차원 개념으로, 코드로 즉시 변환되지 않는다. 그러나 관용구는 실제 코딩으로 변환된다. 관용구를 따르는 코드를 파이썬에서 '파이써닉'하다고 한다. 1. 리스트에서 특정 요소를 가져올 때, for문으로 찾지 말고 슬라이싱을 하자. 둘 다 같이 2로 나눴을 때 나머지가 1 나오는 값만 담는 것인데, slice를 사용해서 해당 위치의 값만 곧바로 담을 수 있다. 2. 파일을 열고 닫는 등의 작업이 필요한 경우 '컨텍스트 관리자'를 사용하자. 위 코드는 finally를 이용해서 정상종료 혹은 비정상종료에도 파일을 닫는 코드가 들어있다. with를 사용한 컨텍스트 관리자는 내부에서..

파이썬으로 AWS S3에 있는 파일 GET, PUT하기

안녕하세요 Dibrary입니다. 저번에 만든 AWS S3에 파이썬을 사용해서 파일을 넣고, 꺼내보겠습니다. 이번에 할 파일은 CSV파일로 간단히 해 볼건데, 주의할 점은 각 행마다 column갯수가 같아야 합니다. 즉, 각 행마다 콤마 갯수가 같아야 하는 것이죠. 다르면 어떻게 되냐구요? 이런 tokenizing data 에러를 마주할 수 있습니다. 파이썬으로 AWS를 연동하고 싶으면 boto3 모듈을 설치해야 합니다. 찾아보니 boto3는 AWS를 사용하게 해 주는 SDK라고 합니다. 그리고 aws_access_key_id와 aws_secret_access_key를 가지고 있어야 하는데, 이는 보안이 굉장히 중요하므로 별도로 저는 만들어서 사용했습니다. 위 코드에서 제것의 값은 가렸습니다. 해당 함수를..

AWS - S3 프리티어로 사용해보기 (버킷생성)

안녕하세요 Dibrary입니다. 이번에는 Data Lake로 많이들 사용하는 AWS의 S3 를 사용해보겠습니다. 돈을 내야 할 수 있는데, S3도 프리티어를 사용해서 간단한 개인 프로젝트 정도는 진행할 수 있습니다. 프리티어로 할 수 있는 기능은 아래와 같습니다. 1년간 매 달마다 5GB의 스토리지 사용 가능 20000건의 get요청, 2000건의 put, delete 요청 가능 즉, 너무 큰 데이터를 다뤄버리면 원치 않게도 영수증을 받아보게 될 수 있습니다. (실제로 전... 경험이 있어요 ㅠ.ㅜ 물론 다행이도 전화 통화에 이메일까지 죄다 써서 '공부'한 것임을 어필해서 0원으로 만들어주는 크레딧을 받았답니다.) 먼저 aws에 로그인 한 후에 s3를 검색해서 찾아갑니다. 그러면 아래와 같은 화면이 나올..

[파이썬 클린코드] 1장 (코드 포매팅과 도구) 정리

안녕하세요 Dibrary입니다. 아래 내용은 파이썬 클린코드의 1장 중에 핵심 내용만을 정리한 것입니다. 프로그래밍 언어의 진정한 의미는 아이디어를 다른 개발자에게 전달하는 것이다. 코드를 클린한 상태로 만들면 유지보수성 향상, 기술부채 감소, 민첩한 개발, 지속적인 배포등 여러 장점들이 있다. 클린코드는 품질 좋은 소프트웨어를 개발하고, 견고하고 유지보수가 쉬운 시스템을 만들고, 기술 부채를 회피하는 것을 말한다. 좋은 코드 레이아웃에서 가장 필요한 특성은 일관성. 파이썬이 따라야 하는 코딩 스타일은 PEP-8이다. PEP 8 – Style Guide for Python Code | peps.python.org PEP 8 – Style Guide for Python Code Author: Guido v..

[Scala] 중첩함수, 매개변수 사용하기

안녕하세요 Dibrary입니다. 이번에는 Scala에서 중첩함수 및 매개변수를 여러 방법으로 사용해보겠습니다. 먼저, 중첩함수란 함수 내에 함수가 정의되어 있는 꼴입니다. 예시 코드를 먼저 보겠습니다. 보시면 max 함수 안에 max가 또 들어있죠. 근데 사실 안에 있는 max와 밖에 있는 max는 다릅니다. 왜냐하면, 전달인자 갯수가 다르기 때문입니다. 밖에 있는 max는 전달인자 3개, 안에 있는 max는 전달인자 2개. 그렇죠? 그리고, 실질적으로 max(a, max(b, c)) 코드가 실행 코드인데, 이 코드는 전달인자가 2개인 max만을 사용합니다. max(b, c)의 결과는 1개의 값으로 나오므로, 결국 max (a, 1개의 값) 꼴이기 때문입니다. 스칼라는 매개변수를 순서와 관계없이 지정할 ..

파이썬에서 쓰이는 비트연산

안녕하세요 Dibrary입니다. 이번에는 비트연산자를 사용하는 방법에 대해 정리해보겠습니다. 입력 정수에 대해서 2진수로 바꾸려면 for문을 돌면서 나눈 나머지를 합하는 방법도 있습니다만, 파이썬은 쉬운 방법을 가지고 있습니다. 123이라는 입력 변수를 bin으로 확인하면 2진수 숫자가 나옵니다. 해당 자료형은 '문자열'입니다. 2진수 숫자 '문자열'을 다시 int에 넣고 2진수임을 알려주면 원래 10진수 숫자가 나옵니다. 그럼 n진수로 된 숫자는 int만 쓰면 다시 원래대로 바꿀 수 있을까요? 저도 궁금해서 for문으로 확인해보았습니다. 되는 경우도 있고, 안 되는 경우도 있는데, 36 이후부터는 다 안됩니다. 알고리즘 문제를 풀다 보면 2진수, 3진수, 8진수, 16진수 정도가 가장 많이 나올텐데, ..

[Scala] 재귀함수

안녕하세요 Dibrary입니다. 어떤 언어든 함수 기능은 다 가지고 있습니다. 그럼에도 스칼라의 함수가 좀 더 특별하게 느껴지는 이유는 스칼라로 순수함수를 구성하면 굉장히 유용하기 때문일거 같네요. 순수함수가 가지는 특징은 아래와 같습니다. 입력 매개변수만을 가지고 계산을 수행한다. 동일 입력에 대해 항상 같은 값을 반환한다. 함수 외부의 어떤 데이터에 영향을 주거나 / 받지 않는다. 이런 특징 덕분에 스칼라는 함수형 프로그래밍에 적합한 언어입니다. 특히 부수효과를 발생시키지 않을 수 있다는 점이 매력적이죠. 간단하게 곱셈을 하는 함수를 정의해보았습니다. 33*44의 결과를 내보냅니다. 함수 정의할 때 중요한 점은 자료형을 명시해주어야 한다는 겁니다. 명시하지 않으면 아래와 같이 에러를 볼 수 있습니다...

[Scala] 와일드카드, 패턴가드 및 반복자가드 매칭

안녕하세요 Dibrary입니다. 이번에는 여러가지 매치되는 것만 걸러내는 방법을 배워보겠습니다. 책에는 단어가 '가드'라고 나오는데, 처음에 이게 왜 가드라고 하는걸까~ 싶었는데, 다음 단계로 진행하지 못하게 막는 의미로 본다면 '가드'를 쓸 수 있는거 같네요. 조건에 맞게 걸러내는 방법이 몇 가지 있는데, 그 중에 와일드카드 패턴매칭은 모든 입력 패턴을 매치시킴으로써 scala.MatchError가 발생하는 것을 방지합니다. 먼저 OK라는 문자를 가진 message 변수를 선언해보고 status에서 match를 해 보겠습니다. OK는 200에 매치 되므로 결과는 200이 나왔습니다. 만일 다른 값이라면 어떨까요? 예상한 대로 -1로 빠집니다. 결국 OK를 제외한 그 어떤 경우라도 other로 빠져서 -..

반응형