Search

Portfolio | Seoyeon Choo

View Portfolio on the Web: https://choo.oopy.io/portfolio/en
As team leader and backend lead developer, contributed to the Google Solution Challenge, achieving a Top 100 global ranking.
Experienced in refactoring legacy code and updating it based on client requirements through regular communication with real clients.
Applied a No Offset technique using super keys to improve paging performance and redesigned the database with indexing speed and usage frequency in mind.
Operated and managed AWS/GCP cloud environments, built CICD pipelines, and separated development and production environments to enhance team productivity.
Passionate about documenting and sharing development experiences, with over 120 technical posts published on a personal blog; active as a speaker and content creator in development communities and led code reviews in projects.
Email : t01053604256@gmail.com

1. Awards

Kakao Mobility Next Mobility Hackathon: Nemo-ton Finals Participant
August 31, 2023 | Entered the top 10 teams for the "Junggak" project, qualifying for the finals | Kakao Mobility
Google Solution Challenge Global Top 100
May 5, 2023 | Awarded as one of the world’s top 100 projects with "BeachCombine" | Google Solution Challenge
GDSC Korea Winter Cup 2nd place
February 24, 2023 | Awarded 2nd place out of 44 teams in Korea for the "BeachCombine" project | Google Developer Student Clubs Korea

2. Personal Experience & Projects

Chongdae Market

Community-based group buying service
A project developed during the Woowa Tech Course, focusing on implementing a high-availability, scalable system capable of handling large-scale real-time traffic. It allowed me to experience the advantages of Clean Architecture firsthand and fostered my interest in the commerce domain by experimenting with A/B testing, log collection, and more.
Technology: Java, SpringBoot, SpringData, MySQL, AWS EC2/S3/CloudFront/RDS/CloudWatch, Nginx, Docker, GitHub Actions
Jul 2024-Sep 2024
Backend
Improved Entity functionality by dividing some fields and logic into separate Domain components (Clean Architecture Adoption)
Optimized query performance for frequently accessed data by adding it as a DB field and applying indexes (200 million records query from 4.913s -> 0.001s)
Distributed requests between read/write DBs with AOP, designed deployment/monitoring/logging infrastructure
Implemented a Scheduler for automatic group purchase confirmations
Solved the issue of refreshToken expiration requiring re-login with an RTR method, enhancing user experience
During OAuth login migration, minimized internal changes by dividing DTOs per layer
Improved Gradle task redundancy when uploading OAS files (Swagger + RestDocs Documentation)
Shared domain insights and improved planning through discussions with tech leads from related companies

CrewWiki

A service for archiving fun information about Woowa Tech Course crew members
This project was conducted outside the Woowa Tech Course curriculum to preserve memories with crew members. More than 80 members used the site, sharing information.
Links: Website | GitHub
Technology: Java, SpringBoot, SpringData, MySQL, AWS EC2/S3
Mar 2024-May 2024
Backend
Implemented logic to store both document and log data, considering the wiki’s nature
Migrated to a new AWS account due to hacking, applying 2FA and Bastion Host for security

U’R

URL management service with drag-and-drop functionality
A project developed with the DDD community, providing various insights on data structures through collaboration with a search engine developer.
Technology: Java, SpringBoot, SpringSecurity, SpringData, MySQL, AWS EC2/RDS/S3, Docker, GitHub Action
Jun 2023- Aug 2023
Backend Lead
Designed the DB using a tree structure to implement folder and file organization
Provided URL info through OG Tag Crawling
Managed order changes using relative positions with drag-and-drop
Optimized tag update logic with HashSet

Junggak

Schedule and meeting management service based on departure time
Developed during Nemo-ton (short-term hackathon), this project offered insights into MVP considerations in the mobility domain.
Links: GitHub
Technology: Java, SpringBoot, SpringSecurity, SpringData, MySQL, AWS EC2/RDS/S3, Docker, GitHub Actions
Aug 31, 2023
Backend
Implemented logic to calculate the departure time for arrival by leveraging Kakao Mobility’s API
Built and deployed the service within a single day

Beach Combine

Marine waste cleanup tracking service using AI
A project developed for the Google Solution Challenge (long-term hackathon).
Technology: Java, SpringBoot, SpringSecurity, SpringData, MySQL, Redis, Google Cloud CE/Storage/SQL, Docker, GitHub Actions
Feb 2023-May 2023
Backend Lead
Gained an understanding of multi-cloud platforms by comparing GCP with AWS
Applied a No Offset technique using super keys to improve paging performance
Used Redis for managing blacklist tokens, gaining experience with in-memory DBs
Built a database of trash bin locations using public data portal’s API
Enhanced user flow and expanded planning with mentorship from Google employees

Atties

Art auction platform
Recruited external team members to create a sustainable revenue model by selling discarded graduation works.
Technology: Java, SpringBoot, SpringSecurity, SpringData, MySQL, Redis, AWS EC2/RDS/S3/Route53, Docker, Github Actions
Dec 2022- Feb 2023
Backend Lead
Optimized project by evaluating DTO retrieval methods, MVC, builder patterns, enums, and relationship methods
Improved query performance by first writing complex SQL and then transitioning to QueryDSL
Implemented a notification feature with Spring, gaining experience in asynchronous event handling
Built key business logic for auction scheduling, personalized recommendation algorithms, and user ID recovery via email

3. Work Experience & Project

FI Solution, Inc.

Application Software Development and Supply (40-50 employees, 10 in Development)
Started as a two-month school-linked internship during summer vacation and continued as a freelancer for a total of six months. Responsible for developing the Police Agency’s pre-registration system for fingerprints and on-site registrations.
Technology: Java, SpringBoot, SpringSecurity, SpringData, MySQL, AWS EC2/RDS/S3, Nginx
Maintenance of the back-office platform (consultation platform) used by an in-house call center department (20-30 employees)
Jun 2023 - Dec 2023
Backend
Legacy Code Analysis and Refactoring
Restructured database schema by dividing a table with over 90 columns into separate tables, eliminating sparse columns and creating a dedicated read-only table, which improved query performance
Introduced Spring Data JPA for easier maintenance and applied batch fetching, improving query performance from 12 seconds to 0.57 seconds
Optimized API performance from 6 seconds to 0.5 seconds by replacing list-traversal logic with QueryDSL
Resolved inconsistencies in layer separation and naming conventions and applied abstraction to remove duplicate code for clean code
Corrected legacy logic errors to establish consistent default exceptions and standardized custom exceptions, organizing team rules
Built a security-configured integrated testing environment and ultimately implemented RestDocs to increase development efficiency
Addressing Legacy Issues and Implementing Requirements
Modified logic to store email attachments in S3 instead of directly on the server, reducing unnecessary resource usage
Transitioned from session-based to token-based login to enable single sign-on across services
Development of a website enabling teachers from 43,000 kindergartens to register applications for the Police Agency fingerprint registration program
Jun 2023 - Jul 2023
Backend
Built a new team structure for the Police Agency project (2 backend and 2 frontend developers)
Contributed to collaboration and project environment setup as an initial team member
Documented requirements based on regular communication with the client
Adopted Java 17 and SpringBoot3 with updates to security settings and primary key generation strategy

NOI

IoT Hardware/Software Startup (10-15 employees, 2-5 in Development)
Handled maintenance of the existing website for three months and subsequently participated in a new application development for three months.
Technology: Java, SpringBoot, SpringSecurity, SpringData, MySQL, AWS EC2/RDS/S3
Development of "BrainQube," a brain training app providing training and result analysis
Jan 2024 - Mar 2024
Backend
Designed a database to store structured results of various brain training activities
Preserved training results by applying JPA SoftDelete during member withdrawals
Created a common module to verify mission completion across different functions
Website Maintenance
Mar 2023 - Jun 2023
Backend
Reduced server costs by migrating from Firebase to AWS
Migrated Firebase Authentication to a custom authentication server
Replaced Firebase Functions with a REST API deployed on AWS EC2

4. Community Involement

Woowa Tech Course 6th

Backend
Feb 2024 ~ Nov 2024 (10 months)
Experience programming in Java with Unit Testing, TDD, Clean Code, OOP
Developed an application meeting requirements (JdbcTemplate, MVC, JPA, HTTP Client)
Implemented Web Server, @MVC, JDBC Library from scratch

Nationwide IT Club DDD 9th

Server Member
May 2023 ~ Aug 2023 (4 months)
Bi-weekly networking and product development with developers and designers

GDSC Open Community

Educational Content Development Team (Organizing Team)
Mar 2023 ~ Jun 2023 (4 months)
Reviewed HTML, CSS, JS materials for over 150 students
Reviewed Spring materials for over 40 backend study participants

GDSC Hongik 1st

Backend Member
Sep 2022 ~ Feb 2023 (6 months)
Contributed as a speaker/listener at bi-weekly seminars, helping establish the first development community at my university
Presented on the Agile and Waterfall methodologies and their pros/cons
Completed backend seminars covering Spring, Spring Boot, and JPA

Nationwide IT and Entrepreneurship Club SOPT 30th

Server Member
Mar 2022 ~ Aug 2022 (6 months)
Completed 8 seminar sessions covering Node.js, Express, MongoDB, AWS EC2, S3, PM2

5. Education

Hongik University, Department of Computer Science / Mar 2019 ~ Aug 2024

Major GPA: 4.00 / 4.5, Overall GPA: 3.84 / 4.5

6. Technical Skills

Bold indicates Strong; Regular indicates Knowledgeable.

Backend

Spring Boot, Spring Data JPA, Spring Security, Spring MVC
JPA, Querydsl
Junit5, Jest
Node.js, Express

Frontend

HTML5, CSS3, Bootstrap
jQuery

DevOps

AWS EC2, S3, RDS, Route 53, CloudWatch, ELB
Google Compute Engine, Cloud Storage, Cloud SQL
Docker Container
Github Actions
MySQL, MongoDB, Redis, H2, Cloud Firestore

Language

Java, JavaScript, TypeScript, C++, C, Python

7. Additional Article

Legacy Code Refactoring Based on Clean Architecture

Addressing issues encountered in projects (DB dependency design) based on insights from Clean Architecture.

GCP Deployment A to Z Series

While preparing for the Google Solution Challenge, I created a guide covering the GCP deployment process.

Solving Heap Out Of Memory Errors and Memory Leak Checks

After resolving a Heap Out Of Memory error in JavaScript, I compiled various methods and pros/cons of memory leak checks.

8. Additional Introduction

1.
I enjoy exchanging in-depth opinions with diverse people.
In various organizations like development clubs, companies, and Woowa Tech Course, I have developed the skills to exchange ideas flexibly. Through deep discussions with colleagues at Woowa Tech Course, I received frequent positive feedback and achieved rapid growth.
2.
I am deeply interested in architecture open for extension.
Experiencing Clean Architecture helped resolve many structural issues faced during refactoring and testing. I was captivated enough to hold a dedicated presentation session and have since applied Clean Architecture to make my projects scalable.
I strive for code that is closed to modification but open to extension and maintain an open mind towards various technologies. While I don't believe in a "silver bullet," I trust that a foundation in Clean Architecture allows for effective technology integration.
3.
I strive for mutual growth through two-way communication in collaboration.
Recognizing that one-sided communication leads to individual rather than team growth, I’ve set ground rules to foster a team of mutual growth. I actively engage by asking questions to understand what the other party seeks to know.

9. Problem Solving Detail

This section focuses primarily on the problem-solving process related to the Chongdae Market project, a major experience in the resume.
Placing great importance on thoroughly analyzing requirements and designing and developing in a way that is maintainable.
Enjoys testing and refactoring and holds a strong interest in Clean Architecture.
Believes developers are problem solvers, and determining cause and effect is crucial in problem-solving.
▷  Project Overview
Chongdae Market is a service that connects people interested in community-based group buying, allowing them to purchase items at a lower cost, even in small quantities. This helps users engage in efficient and reasonable consumption without the burden of high shipping costs or bulk purchasing.
This project required extensive technical and planning consideration. Through research on companies offering similar group-buying services, the demand for group buying was identified, but it became clear that offering this as a C2C model would be challenging. Success within small communities was deemed essential, and so continuous efforts were made to promote group buying within familiar communities.
With a growing attachment to the app, personal sales, event organization, and ads fostered a deeper interest in the commerce and advertising domains. This experience naturally led to anticipating explosive growth for the app and to developing an interest in Clean Architecture and high availability.
▷ Role in the Project: Backend
Implemented authentication interceptor →  Relevant PR
Separated user management logic for group purchase participants into a domain, introducing Clean Architecture →  Relevant PR
Set up an integrated test environment with DB initialization in mind →  Relevant PR
Extracted OAS and rendered Swagger based on RestDocs →  Relevant PR
Separated data sources for read/write using AOP →  Relevant PR
Applied a logging framework and set up a monitoring dashboard →  Relevant PR
Improved infrastructure architecture for availability

Technical Considerations

▷ Consideration 1: How to break free from database-driven design? (feat. Clean Architecture)

[Related Links]  Related Post (1) /  Related Post (2)
[Problem Analysis]
During the initial development phase, the familiar Controller, Service, Repository, Entity structure was used. The Entity served as both the JpaEntity and the DB table, as well as the domain. Over time, the Service and Entity grew overly complex. Attempting to separate tables led to issues that affected the entire codebase.
[Solution Process]
Refactoring began by having JpaEntity return Domain objects so that domain logic wouldn't rely on other layers, but Service still depended on JpaRepository. Discovering Clean Architecture offered a clear solution with the concept “Database is just a detail!” which immediately resonated as it addressed the core issues.
Interest in Clean Architecture deepened, to the point of watching every available video on the topic, even in foreign languages. This journey helped establish a personal philosophy that “Clean Architecture is not just a style to follow but a set of principles to aspire to”. This process clarified previously vague principles, such as the Dependency Inversion Principle and the Single Responsibility Principle.
Before persuading the team, a clear outline was created on how to refactor database-dependent code according to Clean Architecture's principles. Driven by a desire to share this knowledge widely, an independent presentation session was organized at Woowahan TechCourse on the topic, titled “Finding the Rationale for Code Quality Improvement in Clean Architecture”.
After the presentation, the team agreed to refactor the architecture to adhere to Clean Architecture's principle that “Source code dependencies must always point inward, towards higher-level policies”. Through this approach, the structure was improved to prevent database changes from impacting core modules, and later changes to details like notifications or social login were minimally disruptive.

▷ Consideration 2: How to ensure high traffic handling and availability in a group-buying service?

[Problem Analysis]
To attract group-buying users, the Chongdae Market team planned various promotions, such as first-come-first-served discounts and cashback events. Currently, it operates within a single community of around 20-30 users, so there haven’t been major issues. However, a goal was set to ensure stable service for potential national expansion.
The existing structure was “Nginx Tomcat (WAS) MySQL (DBMS)”. WAS was run as a single instance, which led to unintended failures due to OOM or disk space issues. DBMS also risked failure under increased load or expanded disk space.
[Solution Process]
To minimize SPOF and improve infrastructure architecture for availability, WAS was deployed in different AZs, with an ELB placed in front to distribute requests. In this setup, ELB took over the proxy pass role that Nginx previously handled, leading to Nginx’s removal from the structure. With the increase in WAS servers, the need for zero-downtime deployment also emerged. Initially, deployment was handled serially for zero-downtime, but eventually, a full blue-green deployment strategy was introduced to achieve continuous zero-downtime deployment.
To enhance DBMS availability, replication was applied. By separating the writer and reader databases through replication, availability improved, and the system could flexibly handle more read requests than write requests.
In conclusion, this was a valuable experience in designing a scalable, high-availability system that considers single points of failure. The process also strengthened security by separating the VPC into private and public subnets.
Before Change
After Change

▷ Additional Considerations

How to resolve the issue of missing OAS files in the JAR file? →  Related Post
How to flexibly implement SoftDelete without altering numerous existing JPQL queries? →  Relevant PR

Strategic Considerations

▷ Consideration 1: How to manage conflicts among group-buying participants? (feat. CS)

[Problem Analysis]
One major anticipated issue in designing a community-based group-buying service was no-show management. Discussions with a tech lead from a company providing similar services revealed that even in a small trial region, frequent no-shows made CS unmanageable, leading to the service’s discontinuation.
[Solution Process]
It was idealistic to assume that no-shows wouldn’t occur when N participants shared items anonymously without a middleman. Thus, the initial target was set for specific communities (companies, schools, etc.). Validating the C2C group-buying service while minimizing no-shows was essential. If group buying was successfully active within a community, then expansion with a middleman could be considered. To test this approach, a new group-buying domain was introduced within the Woowahan TechCourse community.

▷ Consideration 2: How to attract group-buying participants? (feat. “Business is fun!”)

[Problem Analysis]
To assess demand for group buying, a total of 10 group buys were conducted through the Woowahan TechCourse Slack channel with 145 members before launching the app. This trial revealed that group buys without clear pricing and product information often failed, prompting an A/B test to develop a UI that made pricing and product information clear. After the app launch, it became evident that effective UI alone wouldn’t attract users; events and advertisements were also necessary.
[Solution Process]
Instead of expecting immediate app downloads, efforts focused on increasing user numbers by setting up a separate channel to receive orders. During the two-week timeframe, the first three days were dedicated to attracting participants, and the remaining days focused on recruiting group leaders. By hosting a first-come, first-served discount event and a referral event, over 30 users joined the channel within three days.
After securing more than 10 successful transactions, focus shifted to recruiting group leaders. A cashback event was held, offering up to 3000 won for successful transactions, successfully recruiting 10 leaders. This process is ongoing, with results from the leaders' transactions yet to be finalized. Once the leaders' results are gathered, it will be possible to calculate the CS rate and verify the sustainability of the service.