Email : philgookang@gmail.com | Phone Number : 010-9126-0221 |
Github : github.com/philgookang | Resume : resume.philgookang.com |
Name | Tibero Multi-Layer Disaster Recovery Server (Standby Cascade) |
Company | Tmax |
Duration | 2020-09-10 ~ 2021-02-24 |
Environment | Ubuntu 18, Docker |
Details |
Tibero RDBMS uses 9 seperate process called LNW to send changes occured on the database to a secondary disaster recovery server called Standby.
The problem with this method is that their is a maximum of 9 processes and puts a drain on the performance of the main database. To solve this issue, I enabled the Standby server to be able to process the received data, as well as, pass on the data to the next Standby server waiting in line. (a) Tibero limited secondary disaster recovery server architecture (b) Tibero using Standby Cascade which enabled secondary disaster recovery server to send to other disaster recovery servers This method enables a variety of use cases. The most basic would be used as a second standby server when the primary database server goes down. However, they can also be used as a read-only server, archiving server, testing server, and many more. (a) Tibero Primary(main) database can connect to Standby via sync/async protocol (b) Tibero using Standby Cascade can use sync/async protocol on the first layer but cannot on the next layer due to delays One large limitation of using Standby Cascade is the data sync protocol. On the first layer (Primary -> Standby) both sync and async works because Primary db generated all the information and the delay for primary having to wait for standby is minimal. However, once several layers of Standby Cascade nodes are connected, the amount of time primary needs to wait exponentially increases. Therefore, I developed the connection to only accept async protocols. This in turn created cracks in data because of the delay in being updated. To solve this issue, a separate project was undertaken. |
Name | Detecting Parts of Speech from Image for Caption Generation Using Deep Learning Models |
Company | Seoul National University (서울대학교 인터넷 데이터베이스 연구실) |
Duration | 2018-10-14 ~ 2019-10-15 (12 Months) |
Environment | Ubuntu 18, Anaconda |
Github | |
Survey Results | |
발표자료 | |
Details |
The capability to generate a description about the content of an image is becoming more important with the integration of smart devices and reliance on AI into our daily lives. In this research, I propose a novel approach that utilizes multiple Convolutional Neural Network(CNN) models that have been specially trained to detect features related to the Parts of Speech(PoS) such as noun, verb, pronoun, adjective, preposition, and conjunction. Using the PoS based CNN models, I extract features that the Long-Short Term Memory (LSTM) model uses to generate image captions. I validated my finds by using MSCOCO dataset through two different human surveys and several text metrics such as BLEU, ROUGE, CIDEr, and SPICE.
![]() To check if our Parts of Speech based CNN Models can detect Parts of Speech related features, we test our model through object detection. We use our Parts of Speech CNN Models to detect different objects in the image and mark the activated regions of the Convolution Layer by using a Grad-CAM Heat Map. The following images are examples for the Adjective CNN Model and the Verb CNN Model. ![]() (Right) Overlay of the Grad-CAM Heat Map and the input image with the word detected by our Adjective Model. ![]() (Right) Overlay of the Grad-CAM Heat Map and the input image with the word detected by our Verb Model. ![]() ![]() |
Name | Interior Based Social Networking Service and Online Commerce Server Development |
Company | Jibggumigi (집꾸미기) |
Duration | 2016-03-01 ~ 2017-03-01 (12 Months) |
Position | Dev Team Leader & Server Developer |
Environment | Amazon EC2, RDS MySQL, Route 53, S3, Cloudfront CDN |
Details |
Service Introduction
Jibggumigi is an online house interior magazine service that tags all furniture within the images of the magazine enabling the customer to view details about the furniture, links to any magazine with the same furniture, and also instantly purchase the furniture just by clicking the tag. This service is available for all platforms: web and mobile applications. How I Designed the Server Architecture Jibggumigi Facebook and Instagram page had over 750,000 followers thus resulting in large traffic on the webserver. Moreover, whenever our magazine went on Kakao Channel or Naver News, massive amounts of traffic occurred on our site. To handle the massive traffic, I distributed the connections onto 10 EC2 instances using a load balancer. To prevent the database from being overloaded, a Master-Slave architecture was utalized and also all queries results were cached to several Redis servers which also had a load balancer. All reading SQL queries were sent to the slave databases using Round Robin. All write related SQL queries were sent to the master database. User sessions and data within the sessions were placed in a separate Redis server what was designed has the session cache. An additional set of EC2 servers were generated for scheduling backup, push/email/sms notifications, and analytics. When accessing the web server, the database, or any of the internal production components, I implemented a 'gateway server'. The purpose of the gateway server is to limit access to any of the production components. The gateway server uses only internal private IP addresses to connect to each component and only the gateway server is accessible vis ssh publicly. An overview of the server architecture is available below. ![]() ![]() |
Name | Beep! Enable Any Smart Device To Because A Credit-Card Reader |
Company | SK플래닛 |
Duration | 2012-09-06 ~ 2014-03-29 (17 Months) |
Position | Server & API Developer |
Environment | Amazon EC2, RDS MySQL |
News Article | |
Details |
Service Introduction
Smartphone has been quickly adopted into Korea. We wanted to use the processing power of the smartphone and reduce the load for delivery men and small food store owners. Beep! is a purchasing platform that enables smartphones to process all credit cards purchases through NFC or attach a dongle removing the need to carry or buy a heavy card reading device. How I Designed the Server Architecture My responsibility for this service was to develop the API and manage the server and the database. This service was built on Amazon AWS services. The webserver API was developed using PHP with Codeigniter as the based framework. The database was built on Amazon RDS MySQL instance. We used a dedicated network line to connect to the VAN(PG) company to request purchases. ![]() ![]() ![]() |
Name | Tium Tium: Battle With Elements Game Application |
Company | Samsung Software Membership (삼성전자 소프트웨어 멤버십) |
Duration | 2012-03-02 ~ 2012-05-07 (2.5 months) |
Position | App Developer |
Environment | Windows 7, Bada SDK Bada IDE, Visual Studio C++, Cocos2d-x, OpenAL |
Details |
Game Introduction This game introduced a Radish that was born to stop the elements of nature from destroying the entire planet. Using the same interface that Super Mario uses, the user fights against the different types of enemy elements that appear on the screen. Developing Process This game was developed using Cocos2d-x on the Bada OS smartphone. Using tile mapping, I designed each level, the floor and the movement of the player. This game was registered to Samsung Young & Smart App competition and received 3rd place. ![]() ![]() ![]() Compressing Image Resources To reduce file size and count, all the images were combined into one large image with the location of each image save in a seperate config file. The large image would only be loaded once and reused over and over again-reducing loading time. ![]() ![]() ![]() |
Name | Test Case Tool Using PDF Reading |
Company | Samsung Software Membership (삼성전자 소프트웨어 멤버십) |
Duration | 2011-12-05 ~ 2012-02-15 (2.5 months) |
Position | PDF Viewer Developer |
Environment | Windows 7, WinForm, PDFLib.net Library, Office Winwork Library Visual Studio IDE, SQLite, C# |
Details |
Program Introduction This program, called Chaser, decodes a PDF file and presents the PDF file using a custom viewer with all the test cases within the file highlighted and record in the Test Case tab. For any test case not detected, the user can highlight the text and add it to the Test Case List. Whenever a test case is complete, the user can mark it as complete. Also, when the file is updated with additional test cases, the program will detect the new test case and also detect delete old test cases. Developing Process Due to the patient on PDF reading, there was no available library to decode the PDF file in winform, therefore, it required us to build every component of the program. My responsibility was to create the PDF viewer. Since there are no libraries that decode a PDF file as a viewer, the approach I used was to convert all the pages of the PDF into an image and use an image viewer to mimic the PDF reader. However, an issue with this approach was that we were unable to have the user interact with the content of the image. Therefore, we tracked the movement of the mouse and the down and up click and drew a blue selection box to represent the area the user has selected. Because we are using an image viewer, I also added a lazy loading feature that would reduce the memory required and make the program more responsive. ![]() ![]() ![]() ![]() ![]() ![]() |
Name | Altroid: Space Battle Game Application |
Company | Samsung Software Membership (삼성전자 소프트웨어 멤버십) |
Duration | 2011-02-02 ~ 2011-05-30 |
Position | App Developer |
Environment | iOS, Objective C, OpenGL ES, Cocos2d Xcode, Photoshop CS, GarageBand, CFXR |
Youtube | |
Details |
This game is a single shooter game with three levels. Developed on iOS, the player uses a joystick to maneuver and shoot the enemy planes. For this project, I planned, designed, and developed the entire application.
![]() I developed a custom joystick library class that will enable the user to freely control their airplane. The library uses the following attributes and functions to generate the virtual joystick. ![]() ![]() Object (Enemy) Motion Algorithm A smartphone screen is a 2-dimensional plane that gives enemy objects a x and y coordinate moves them in a linear motion. However, simple linear motion is easy to predict for the user and offers a low gaming experience. To give a naturalistic motion and better gaming experience, all motions used the Law of Sine and Cosine. When using Sine and Cosine, the motion was limited to Sine(0~2pi) and cosine (1~2pi) limiting the motion between pi and 2pi. Therefore, to solve the issues with the limits of Sine and Cosine, I utilized the Beizer Curve (BC) and High Order Curve (HOC) which uses the time domain to generate a smooth curve trajectory. The Bernstein Polynomial Formula was used to calculate the BC and HOC for the moving objects as seen in the images below. ![]() ![]() |