전체 글
-
📸 [Flutter] Google Cloud OCR 연동하기📖 개발 공부/flutter 2023. 10. 18. 22:48
나는 독서 기록을 할 때, 기억하고 싶은 구절은 기본 카메라앱으로 스캔 후 복사하여 노션에 붙여넣고 있다. 하지만 이 과정은 나에게 꽤나 번거롭다. 그래서 카메라에서 문장을 스캔&선택한 후 곧바로 해당 문장에 대한 나의 생각을 기록하고 싶어서 독서 기록 앱을 만들고 있다! 플러터로 개발을 하고 있고, 플러터로 Google Cloud OCR을 연동하여 이 기능을 구현해보려구 한다! 📸 코드 작성에 앞서, Google Cloud에서 제공하는 Vision AI 를 사용하기 위해 키를 발급 받아야 한다. 다음 링크에 들어가서 발급 받으면 된다. https://cloud.google.com/vision cloud.google.com 발급받는 과정 요약 Vision AI 무료로 사용해보기 → 가입 → 서비스 계정 ..
-
[Flutter] .env 파일 이용하여 환경변수 관리하기📖 개발 공부/flutter 2023. 10. 2. 09:00
Flutter에서 .env 파일을 이용하여 환경변수를 쉽게 관리할 수 있다. 방법은 flutter_dotenv 패키지를 사용하는 것이다! flutter_dotenv | Flutter Package Easily configure any flutter application with global variables using a `.env` file. pub.dev (나는 flutter pub get 명령어를 이용해서 설치했다.) 1. assets 폴더 하위에 .env 파일을 생성한다. 애플리케이션에 사용할 값들을 .env 파일에 다음과 같은 형태로 저장한다. AUTH_TOKEN_KEY=auth_token_value 2. 그리고 pubspec.yaml에 다음과 같이 .env 파일 경로를 추가한다. assets:..
-
[파이썬으로 살펴보는 아키텍처 패턴] Part1. 도메인 모델링을 지원하는 아키텍처 구축카테고리 없음 2023. 9. 24. 13:16
1장. 도메인 모델링 1장에서는 도메인 모델 패턴으로 비즈니스 계층을 만드는 방법을 보여준다. 자신의 비즈니스 로직이 여러 곳에 퍼지면 안된다는 사실을 알고 있지만, 이를 고치는 방법에 대해서는 전혀 모른다. 대부분 개발자가 새로운 시스템을 설계하라는 요청을 받으면 즉시 데이터베이스 스키마를 그리기 시작하고 그다음 객체 모델을 생각한다. 여기서부터 모든 것이 잘못되기 시작한다. 대신 먼저 행동하고 저장에 대한 요구 사항은 행동에 맞춰 정해져야 한다. 4가지 핵심 설계 패턴 저장소 패턴 서비스 계층 패턴 작업 단위 패턴 애그리게이트 패턴 값객체는 내부에 있는 데이터에 의해 결정되며 오랫동안 유지되는 정체성이 존재하지 않는다. 엔티티는 오랫동안 정체성이 존재하는 도메인 객체이다. 이는 참조 번호에 의해 구분..
-
[MongoDB] Sharded Cluster📚 개발 도서 2023. 9. 11. 09:20
ReplicaSet 배포형태에 이어 분산을 위한 배포 형태인 Sharded Cluster에 대해 알아보자. 용어부터 정리하면, 샤딩은 하나의 큰 데이터를 여러 장비에 걸쳐서 데이터를 분할하는 과정을 의미. 분할된 데이터셋의 모음을 샤드라고 한다. 분산이 되는 기준을 샤드키라고 하는데, 샤드키는 컬렉션의 필드에 생성된 인덱스를 이용해서 활성화한다. 각각 샤드는 레플리카셋으로도 관리 된다. "복제: for HA, 샤딩: for 분산처리(scale-out)" 장점 용량의 한계를 극복할 수 있다. 데이터 규모와 부하가 크더라도 처리량이 좋다. 고가용성을 보장한다. 하드웨어에 대한 제약을 해결할 수 있다. 단점 관리가 비교적 복잡하다. Replica Set과 비교해서 대체적으로 쿼리가 느리다. 요청이 들어왔을 때..
-
[MongoDB] Replica Set (레플리카셋)📖 개발 공부 2023. 9. 5. 23:36
Replica Set 구성 Replica Set의 사용 목적이 HA이기 때문에, 각 멤버들이 각 다른 서버에 위치해있어야 목적에 맞게 효과를 볼 수 있다. Status Description Primary • Read/Write 요청 모두 처리할 수 있다. • Write를 처리하는 유일한 멤버이다. • Replica Set에 하나만 존재할 수 있다. Secondary • Read에 대한 요청만 처리할 수 있다. • 복제를 통해 Primary와 동일한 데이터 셋을 유지한다. • Replica Set에 여러개가 존재할 수 있다. 아무런 설정없이 읽기/쓰기 요청을 하면 기본적으로 Primary가 처리한다. readPreference 옵션을 넣어 요청해야한다. Replica Set Election (Fail-Ov..
-
[MongoDB] MongoDB 배포형태 (Standalone/Replica Set/Shared Cluster)📖 개발 공부 2023. 9. 5. 00:17
Standalone study용 test용 의 배포 형태이다. 운영 환경에서 Standalone 배포 형태는 위험하다. 데이터베이스 점검을 하는 경우, 서비스 또한 중단이 되어야 하기 때문이다. Replica Set 동일한 데이터를 갖고있는 몽고 DB 서버를 여러 대 가지고 있는 형태이다. 한쪽으로 write를 하면 다른 서버에 데이터를 복제시킨다. 위의 그림을 예시로 들면, 3대 중에 1대가 죽더라도 나머지 2대가 살아있어서 점검이 있더라도 지속적으로 점검이 가능하다. 실제 현업에서 가장 많이 사용되는 배포 형태이다. → HA (High Availabilty) 고가용성 보장 하지만 갑자기 서비스의 인기가 급격히 늘어나서 데이터 쓰기양이 많아진다고 해보자. scale-up을 통해 서버의 스토리지를 계속해..
-
MSA와 Event-Driven 아키텍처📖 개발 공부 2023. 9. 3. 16:03
MSA(Microservice Architecture)는 무엇인가 시스템을 독립적인 단위의 작은 서비스들로 분리한다. (크기보다는 독립성이 중요) ⇒ 독립적인 단위: 다른 서비스와 다른 이유로 변경되고, 다른 속도로 변경되는 단위 격리된 환경에서 각자의 역할을 수행한다. 각 서비스들은 API(인터페이스)를 통해서만 통신한다.(다른 서비스의 DB 접근 불가) 기존의 Monolithic 아키텍처 모든 기능들이 한 서버 안에 들어가 있고, 공유 데이터베이스를 사용한다. MSA 아키텍처 기능 별로(도메인 별로) 서버가 나뉘어있고, 각자의 데이터베이스를 사용하며 API를 이용하여 통신한다. MSA로 얻으려는 것 모듈성(높은 응집도, 낮은 결합도) 서비스 별로 독립적인 개발과 배포가 가능하다. 서비스(코드) 크기가..
-
[개발일지] MongoSocketException 이슈 해결기📖 개발 공부 2023. 8. 30. 22:38
갑자기 내가 작업했던 rpc에서 이유없는 INTERNAL 에러가 내려왔다. 데이터독을 보니 MongoSocketWriteException MongoSocketReadException: Prematurely reached end of stream (after a period of inactivity) 요 에러들이 지속적으로 발생하고 있었다. Elasticsearch가 복병일 줄 알았더니,, 그 전에 데이터를 조회하기 위해 Mongo에 접근할 때 에러가 났다. 아무런 변화가 없었는데 갑자기 왜 이런 에러가 났을까? 원인 파악 추측1: 커넥션풀 이슈? 추측2: 유휴 커넥션 이슈? 해결 원인 파악 정말 변화가 없었을까.. 파악해보았다. 생각해본 변화는 기능 개선 코드 리팩토링 이뿐이었다.. 그런데 확인해보니 이..