translation

Teks yang diterjemahkan oleh AI.

statpan

Kisah Pengembangan Proyek LegiNote 2 - Stack Teknologi dan Worker

  • Bahasa Penulisan: Bahasa Korea
  • Negara Dasar: Semua Negaracountry-flag
  • TI
Gambar Profil

Ringkasan posting oleh durumis AI

  • Proyek LegiNote memanfaatkan Svelte, Rust, Go, dan Python untuk pengembangan layanan web, khususnya worker yang dikembangkan dengan Go berperan dalam pengumpulan dan pembaruan data OpenAPI.
  • Worker menjalankan fungsi pengaturan logika pengumpulan data, eksekusi, dan pemuatan ke DB, dengan tujuan untuk mencapai skalabilitas pada berbagai data API.
  • Proyek ini disusun dengan memisahkan folder berdasarkan fungsi untuk meminimalkan dependensi, dan menggunakan PostgreSQL, pq, dan sqlx untuk koneksi dan penanganan query database.

Halo, saya StatPan.

Saya sedang menulis tentang pengembangan proyek sampingan LegiNote.

Untuk bagian sebelumnya, silakan lihat tautan berikut.



Arsitektur Dasar

Kisah Pengembangan Proyek LegiNote 2 - Stack Teknologi dan Worker

Kontribusi dari 태양토끼님 (Taeyangtokki) untuk Desain Leginote


Leginote akan dikembangkan sebagai layanan web, dan kami berencana untuk menggunakan tumpukan teknologi berikut.

Frontend: Svelte

Backend: Rust (sangat mempertimbangkan rupring, tetapi dapat berubah)

Worker: Go (mengutamakan penggunaan std secara ekstrem, kecuali dependensi yang diperlukan)

Analisis Data: Python (dari prapemrosesan hingga integrasi kecerdasan buatan di masa mendatang)

Dari tumpukan teknologi ini, saya berencana untuk fokus pada pengembangan bagian worker dan analisis data, yang merupakan area kontribusi utama saya, dalam seri postingan blog ini.

Mari kita mulai dengan membahas worker.


Worker

Pemilihan Bahasa


Kisah Pengembangan Proyek LegiNote 2 - Stack Teknologi dan Worker

logo golang

Saya memulai pemrograman dengan Python, dan karena pekerjaan utama saya saat ini berada di bidang ilmu data, saya paling terbiasa dengan bahasa Python. Namun, karena hanya menguasai bahasa scripting, saya mulai tertarik pada bahasa kompilasi yang lebih kokoh, seperti Go dan Rust.

Terutama, bahasa yang paling menarik perhatian saya baru-baru ini adalah Rust, yang sering kali disebutkan bersamaan dengan C++ dan Golang. (Tentu saja, C++ juga merupakan bahasa yang hebat, tetapi saya tidak menyertakannya dalam pengembangan layanan jaringan ini. Saya juga tidak yakin apakah saya akan langsung menggunakannya di masa mendatang, kecuali jika saya menangani bagian dalam kerangka kerja deep learning.)

Setelah mempelajari Rust dan Golang, dan menggunakannya untuk permintaan jaringan sederhana, saya memperoleh pemahaman dasar tentang kelebihan dan kekurangan masing-masing bahasa. Akan terlalu panjang jika saya membahas kelebihan dan kekurangan kedua bahasa ini di sini, jadi saya akan membahasnya secara terpisah di postingan lain. Singkatnya,

Untuk proyek yang tidak pasti apakah akan menghasilkan pendapatan, dan untuk membangunnya tanpa dependensi tambahan di bidang jaringan, saya memutuskan untuk menggunakanGolang.


Peran Worker

Kisah Pengembangan Proyek LegiNote 2 - Stack Teknologi dan Worker

Layar OpenAPI

Peran worker adalah mengumpulkan dan memperbarui data melalui situs OpenAPI secara berkala, yang dapat dibagi menjadi tiga bagian berikut.

1. Mengatur logika pengumpulan untuk informasi tertentu

2. Mengatur peluncur yang menjalankan logika pengumpulan

3. Memuat data yang dikumpulkan ke dalam DB

Tujuannya adalah untuk menerapkan dan memperluas tiga langkah ini secara identik ke berbagai data API.



Cara Mengatur Proyek

Ada berbagai arsitektur untuk mengatur proyek, dan menggunakan kerangka kerja dapat membantu memulai proyek dengan struktur yang telah ada. Namun, seperti yang disebutkan sebelumnya, tujuan proyek ini adalah untuk meminimalkan dependensi selama pengembangan. Oleh karena itu, saya ingin memisahkan setiap folder berdasarkan fungsi agar lebih dekat dengan logika yang telah ditentukan.

Proyek ini akan diatur sebagai berikut.

leginote-worker-bill/
├── main.go
├── api/
│ └── client.go
├── db/
│ ├── connection.go
│ └── repository.go
├── util/
│ ├── error.go
│ └── runner.go

│ └── config.go
├── worker/
│ └── worker.go
├── go.mod
└── go.sum


api - Pengumpulan data dilakukan melalui OpenAPI data publik. Oleh karena itu, kode dasar untuk berkomunikasi dengan OpenAPI akan berada di bawah folder api. Saat ini, hanya ada satu API utama yang digunakan, sehingga hanya ada satu file klien.

db - Logika untuk berkomunikasi dengan DB didefinisikan di sini. Kode di dalam connection hanya menangani koneksi, sedangkan repository berisi logika untuk menjalankan berbagai SQL upsert. Saya berencana untuk membuat SQL sebagai file terpisah di masa mendatang karena menempatkan SQL langsung dalam kode akan menjadi terlalu rumit.

util - Ini adalah tempat di mana berbagai logika pendukung untuk tugas-tugas didefinisikan. error adalah skrip sementara yang dibuat untuk memproses hasil error yang dikeluarkan oleh Go dengan lebih mudah. Seperti yang akan Anda lihat dalam cerita pengembangan selanjutnya, ini akan menjadi penyebab efek kupu-kupu yang luar biasa(?)

File config digunakan untuk mendefinisikan fungsi untuk membaca file .env secara langsung, tanpa menggunakan paket tambahan.

worker - Ini adalah tempat di mana logika utama berada, yang menggunakan logika api dan db secara tepat untuk menghasilkan perilaku yang diinginkan. Jika jenis worker bertambah di masa mendatang, folder ini juga harus bertambah. Saat ini, hanya ada satu perilaku worker utama yang disertakan.


Di masa mendatang, saya berencana untuk terus mengembangkan kode sambil menjaga prinsip arsitektur berlapis.


Dependensi Proyek

pq untuk penggunaan postgres

sqlx untuk penggunaan query



Menutup Worker

Hanya menyajikan teori tanpa kode terasa membosankan, dan saya juga merasa sedikit lelah. Jadi saya akan mengakhirinya dengan cepat.

Bagian 2 telah berakhir. Saya berharap dapat menyertakan lebih banyak kode dan membahasnya di Bagian 3.




Selama pengembangan Leginote, jika Anda memiliki fitur yang menurut Anda diperlukan atau memiliki pertanyaan tentang pengembangan, silakan tinggalkan komentar!

statpan
statpan
Python, Typescript, Go, Rust 언어에 관심을 가지고 사용하고 있습니다. 주 업무 분야는 자연어 처리, 데이터 사이언스 영역 입니다.
statpan
Kisah Pengembangan Proyek LegiNote 3 - Request di GoArtikel ini memperkenalkan proses pengembangan proyek LegiNote yang memanfaatkan bahasa Go untuk mengambil informasi hukum dari OpenAPI Parlemen. Topik yang dibahas meliputi permintaan HTTP dan definisi struktur data.

August 26, 2024

Kisah Pengembangan Proyek LegiNote 1 - IdeStatPan memulai proyek LegiNote dengan tujuan meningkatkan aksesibilitas terhadap rancangan undang-undang dan notulen rapat DPR serta meningkatkan efisiensi pembentukan undang-undang dengan memanfaatkan AI.

August 17, 2024

[Non-Major, Bertahan sebagai Developer] 14. Ringkasan Konten Wawancara Teknis yang Sering Ditanyakan kepada Developer PemulaRingkasan pertanyaan teknis yang sering muncul dalam wawancara developer pemula (area memori, struktur data, basis data, dll.). Semoga membantu dalam mempersiapkan wawancara pengembangan.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

[Non-IT, Bertahan sebagai Developer] 16. Tips Menulis Portofolio Developer PemulaTips menulis portofolio developer pemula akan dibagikan. Menuliskan pengalaman proyek dan kemampuan pengembangan secara spesifik, serta menjelaskan dengan jelas layanan apa yang telah dikembangkan, sangatlah penting.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

[Non-Major, Surviving as a Developer] 7. Hal yang Membantu dan Tidak Membantu Saat Mencari Kerja di Bidang BaruSaat seorang non-major melamar pekerjaan sebagai developer, blog teknologi kurang efektif, tetapi memanfaatkan Git dan memperoleh sertifikasi Ahli Pengolahan Data dapat membantu.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

March 29, 2024

Membuat Program Otomatisasi untuk Meningkatkan Produktivitas.Menyediakan layanan pembuatan program otomatisasi untuk meningkatkan produktivitas. Dengan RPA dan AI, otomatisasi pekerjaan seperti web, dokumen, dan email dapat meningkatkan efisiensi.
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마

March 22, 2024

[Non-Major, Surviving as a Developer] 17. Portofolio Pengembang Pemula, Sejauh Mana?Portofolio pengembang pemula sebaiknya berfokus pada implementasi fungsi CRUD dasar dan pengalaman integrasi API eksternal.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

[Observability] Tantangan Vector Pengumpul LogBerbagi cara mengintegrasikan log Kubernetes dengan Loki menggunakan Vector, pengalaman penggunaan, dan hal-hal yang perlu diperhatikan. Akan dibahas kekurangan dokumentasi resmi dan hal-hal yang perlu diperhatikan saat menggunakan Helm.
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

March 9, 2024