Skip to main content

Experiences

Roles and outcomes by company

This page presents my responsibilities, key engineering decisions, and their effects on products and operations in chronological order. For selected case studies covering the problem context, alternatives, and implementation in depth, see the Portfolio.

2025/06 - Present

Performance by TBWA #

Platform Developer (Associate Research Engineer)

Java Spring JSP MyBatis MariaDB NestJS TypeScript BullMQ Redis MikroORM Python FastAPI AWS S3 GitHub Actions Docker Git

B2C Advertising Campaign Manager #

2025/06 - Present

Built the campaign creation, payment, approval, and delivery flow of a Spring/JSP-based B2C advertising campaign manager, along with external media integrations

  • Implemented the core flow from campaign creation and creative approval through payments, mileage, reporting, and delivery, while evolving the data model with changing service requirements
  • Reduced data inconsistency risk in the non-transactional YouTube Demand Gen API by designing compensating transactions that remove external resources in reverse order alongside database rollback
  • Defined a clear human-recovery boundary by recording failures and notifying Slack when automatic compensation also fails, preventing silent operational gaps
  • Restricted production API documentation and root access while standardising setup, Git Hooks, and internal AI-agent guidelines to strengthen both service security and team delivery practices

B2B Advertising Campaign Manager #

2025/08 - 2026/03

Extended and operated a legacy Spring/JSP-based B2B advertising campaign manager

  • Removed an operational context switch by integrating Google Authorized Buyer review results into the campaign and creative screens, including approval state and policy-violation details
  • Replaced direct target-file access with S3 presigned URL downloads to improve access control over file delivery
  • Reduced change cost in a live legacy system through incremental MyBatis mapper adoption, shared responses, and DTO/VO separation rather than a disruptive rewrite
  • Added creative-level reporting and strengthened metric edge cases and client state handling, improving the reliability of operational data and predictability of the input flow

Platform Alert Backend #

2025/08 - 2026/02

Built a new NestJS alert service that tracks advertising budget consumption in real time and notifies the operations team

  • Built Redis-backed budget reporting and Slack alerts so the operations team could quickly identify budget consumption at ad-group and ad level
  • Replaced direct scheduler delivery with BullMQ event processing to isolate delivery load and make missed alerts traceable through retries and failure logs
  • Separated ABI and Addirect data sources while adding NaN/null safeguards and Redis pipelines to improve report stability and lookup efficiency
  • Automated GitHub Actions, PM2 deployment, SSH access control, and temporary AWS Security Group changes to reduce repetitive release work and manual access scope

Internal NestJS Backend Template #

2026/01 - 2026/03

Designed and built an internal backend standard template to remove the setup cost repeated on every new service

  • Packaged repeated service setup and shared concerns into an executable standard skeleton, reducing the initial cost of starting a new backend
  • Designed a pnpm workspace with separate API and worker runtimes so each could evolve and scale independently
  • Provided reusable boundaries for shared-kernel, contracts, messaging, and persistence, together with an outbox/inbox example for domain separation and reliable messaging
  • Maintained the README and extension guide with the implementation so teams could understand how to adopt and extend the template

2025/04 - 2025/06

ALTAVA Group #

Backend Developer

TypeScript JavaScript Hono.js Cloudflare Workers Cloudflare D1 Kysely Zod R2 Slack

Platform Serverless Backend #

2025/04 - 2025/06

Developed and operated a B2C platform backend on Hono.js and Cloudflare Workers D1

  • Separated event handling from weekly ranking and reward aggregation, enabling independent execution control and failure isolation
  • Migrated the JavaScript codebase incrementally toward TypeScript and Kysely, reducing raw SQL dependencies and improving data-operation efficiency with the D1 Batch API
  • Delivered product capabilities for ranking, points, help, internationalised news, and SSE real-time streams while maintaining their schemas and migrations
  • Added environment-aware execution and Slack notifications so operators could observe the state of serverless batch work

Platform Batch Scheduler #

2025/04 - 2025/05

Adjusted the operating conditions of the weekly design and user ranking batch scheduler and integrated Slack notifications

  • Aligned the design and user ranking jobs with product policy by moving from monthly to weekly rankings and updating comment-based calculations
  • Decoupled weekly ranking controls from featured-design scheduling so each batch could be operated independently
  • Added dev/live message routing and a manual-run flag to support validation and controlled reruns

2021/04 - 2023/05

WEBZEN #

Senior Backend Developer

Node.js Vue.js Python Linux Docker Redis GitLab Nuxt.js FastAPI JavaScript TypeScript TypeORM Git ExpressJS Ubuntu centOS HTML SQL NoSQL PostgreSQL Nginx InfluxDB Grafana Prometheus Nginx Redmine Teams

Live Game Operations Tool Development and Operations #

2021/05 - 2023/05

Developed additional features for a Nuxt.js-based live game operations tool and maintained it continuously

  • Controlled access to live operations by separating screens and capabilities by game service and administrator role, with unified API authentication and authorization
  • Isolated log extraction in a dedicated backend and optimised CSV processing, eliminating client freezes and reducing average request time from 5 seconds to 1 second
  • Reworked large MSSQL jobs with stream-based chunk processing, cutting average scheduling time from 10 seconds to 3 seconds and average memory usage by more than 40%
  • Maintained API documentation and Redmine work history so live-service changes and collaboration context remained traceable

Alert Backend Design and Implementation #

2021/08 - 2023/05

Designed and built an alert backend for metrics from monitored servers

  • Designed one backend to process Grafana alerts across multiple live services and route them by team, individual, and organisation
  • Unified Microsoft Teams, Slack, and email message creation and delivery behind a shared interface, reducing duplication and increasing new-channel development speed by more than 30%
  • Attached rendered panel images to alerts so operators could understand the context of an anomaly more quickly
  • Standardised provisioning and delivery with Docker, setup scripts, and GitLab CI/CD, and documented the integration contract with Swagger

Monitoring System Implementation #

2021/04 - 2023/05

Designed and built a monitoring system to collect and visualise metrics from live service servers

  • Evaluated monitoring stacks through a proof of concept and built a shared foundation for collecting and visualising service-specific metrics from live servers
  • Packaged collectors for Ubuntu and CentOS and versioned their distribution and installation guides, keeping data collection consistent across operating environments
  • Standardised open-source upgrades and environment recreation with Docker and setup scripts, reducing migration and repeat-installation effort
  • Incorporated feedback from partner teams into operations and tracked changes in Redmine, maintaining a working feedback loop with the organisations using the system

2020/03 - 2021/03

AlphaBridge #

Backend Developer

Python Flask REST API Git Jenkins Docker AWS EC2 AWS RDS AWS Route 53 AWS Elasticsearch Service AWS Elastic Load Balancing AWS CloudFront AWS S3 JavaScript Apollo Server ExpressJS Node.js Redis MariaDB Nginx SQL NoSQL GitHub Linux Ubuntu Slack Grafana Prometheus Nginx Notion

TangoPick Beta Backend and Infrastructure #

2020/03 - 2021/03

Built a Python Flask RESTful API server along with AWS infrastructure and deployment automation

  • Owned the server-side scope needed for TangoPick beta validation by designing, building, and operating the Flask API and the ExpressJS/GraphQL back office
  • Applied Nginx reverse proxying, workload distribution, and Docker packaging to separate service concerns and make the system deployable
  • Automated repeated releases through a Jenkins, GitHub, and Bash-based CI/CD pipeline
  • Established Grafana and Prometheus monitoring and maintained Swagger and Notion documentation to share service health and API collaboration standards
Jaeyong Shim
Author
Jaeyong Shim
Live-service operations tools and external system integrations 👨‍💻