Loading views...

Personal tech skills

Creator
Creator
Seonglae ChoSeonglae Cho
Created
Created
2023 Nov 25 5:19
Editor
Edited
Edited
2024 May 20 16:53
Refs
Refs

Dev Skills

NPM Modules

Code Separation

I believe that refactoring code into cohesive functions that can be separated and reused is an important skill for implementing higher-level functions in any programming language. That's why I modularize and manage parts that can be separated into NPM modules within the team. I use abstract classes or intuitive import and export folder structures to separate code by function in various modules.

Module Testing

Some of the in-house NPM modules are tested using a framework called Testyts. Currently, some modules have been moved to a testing framework called Vitest, which provides coverage visualization and various testing functions. I require tests to be added as functions are developed, and I have built a structure that separates and distributes the test code for distribution. In addition, I use the PNPM workspace to manage common dependencies in one monorepo for in-house modules.

Module Building

Modules written in TypeScript are built with tsc and then distributed in the company's NPM registry. C++ code is also built and distributed using node-gyp and Node Addon. In addition to tsc, I use esbuild or other build methods to distribute code. github-setter is a typical project that I distribute using esbuild.
npm
npm
 
 
 

Tech Stacks

As I have worked on several personal projects for a long time, I have come to realize that deploying on the web is relatively easy, but it takes a lot of effort and time to do it right. Through developing many projects, I have come to learn the importance of deployment and have grown personally.

Azure Pipeline

I use Azure Build Pipeline for building and uploading images to our in-house registry for every commit or tag in the main branch. I have also enabled direct deployment to an Azure Release Pipeline instance as an on-premises service.

Github Action

I use Github Action to build Texonom and Seongland Docker images, and then automatically upload them to the Github container registry. When working with GCP, I have experience using gsutil cp to transfer static build files to the GCP bucket as part of the deployment flow.
As a Github Action, the Intuiter builds electron, creates an exe, and distributes it as an exe distribution to Winget. It then automatically creates and adds a pull request to micosoft/winget-pkgs. This method is also applied to screencast, which is another electron-based project.
In Seongland, I have experience implementing a Github Action that builds and automatically distributes worker source code to Cloudflare workers.

Linux Container

Vercel service is used for simple web projects that do not require container image building, but some projects require the use of container images. Since Linux containers are difficult to deploy automatically, it was a challenging task. However, I have applied my understanding of the structure and history of the container to the deployment of many projects. I am now familiar with using Docker and docker-compose for web apps in various ways. I currently use Rancher Desktop mainly for local development.

Kubernetes

Deploying instances based on docker run or docker-compose required an outage to update the service, so I had to use a different approach. Initially, I used a combination of LB and Cloud run on GCP as a container deployment platform when I didn't understand Kubernetes. However, since the platform is not open-source, I didn't know the internal structure, and there was no way to deal with an error when it occurred. Thus, I felt the need to use Kubernetes, which is more compatible with open-source technologies. I currently use the corresponding platform to distribute Texonom and Seongland to each namespace of the Kubernetes cluster. The Kubernetes manifest files are managed as files in each repo and are distributed without interruption through the rolling update.

Cloud Service

AWS, Oracle Cloud, Azure

To understand and compare various cloud service structures, I personally created a gateway, public IP, instance, and VPC in each cloud and have experience setting web app access in the cloud service instance.

GCP

I have tried several cloud services, and I am particularly impressed with GCP. I have personal experience with Cloud run, Cloud Build, Cloud Registry, Load Balancer, Cloud Storage, and GCP App engine. I use GCP LB in front and connect to a GCP bucket, GCP App engine, or cloud run depending on the subdomain or route.
notion image
notion image
Although it is not a GCP service, I also analyze the use of pages I developed using Google Search Console and Google Analytics.

Cloudflare

Cloudflare is not a cloud computing service, but I use it for DNS management. In addition to DNS management, Cloudflare offers various services that use domains, such as Cloudflare Worker, App, Analytics, and Zero Trust.
 
 

Git

I believe that development task management is crucial for version control of enterprise-grade source code. Through several projects, I have experienced that development task management can make the project direction clear, improve efficiency, or make it very bad.

Azure DevOps

I have experience in creating a development culture within a team using branch policies and security in Azure DevOps. In-house Semantic Commit, Semantic Branch, and Semantic Versioning are used to consistently manage sources within the team.

Github

Managing code by oneself for a long time makes it difficult to understand the code even if you have been working on it. Therefore, even when working on various projects on Github, I always create a branch for each issue and make a pull request. I also enforce branch protection rules for the main branch. For the same reason, I keep Semantic Commit, Semantic Branch, and Semantic Versioning consistent even on personal Github.
I believe that the key to programming is to eliminate repetition. When working on various projects with limited study time and stack, the amount of repetitive code writing increases. To solve this problem, I utilize various boilerplates as a Github template repository, and I share them by making them public.
 
 
 
 
 
 
 
 
 

Recommendations