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.
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
•
•
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
•
•
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.
•
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
•
•
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
•
•
•
•
•
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
•
Gained experience with CORS error resolution during HTTPS deployment
•
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
•
•
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
•
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
•
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
•
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.
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.
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.
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.
▷ 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)
[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
•
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.