The TECH TRACK series sheds light on the developers of projects currently under development by NC. Take a look at the various jobs and the career path that has been built to become an expert.
In this episode, we will be introducing the server programmer of <Project G>, Park Sangin.
Project G | NC's first-ever large-scale war Real-Time Strategy (RTS) genre game. Players can employ diverse strategies in the world of territorial disputes while gathering limited resources and growing their power.
TRACK 1 | my CAREER
Build Servers With Honesty and Without Compromise
Do Things Right, No Stopgap Measures
Our task is to create a virtual world that can support numerous concurrent players. I am responsible for the design and implementation of quests, guilds, and territory systems, as well as data synchronization between servers. To accomplish this, I am also working on an automatic protocol generation module between servers and schema1 design tasks. Given that I'm working on the game's core content and handling large-scale data on the network, I make a conscious effort to be extremely cautious.
I believe that the role and personality of server programmers, who form the foundation of a game, can vary slightly depending on the nature of the game project they are involved in. I was always rather meticulous and detail-oriented, but these traits have been further amplified since I joined <Project G>. The strength of <Project G> lies in its real-time combat and large-scale processing capabilities. As I work on a server capable of implementing a series of processes to handle the large-scale, real-time data of concurrently connected players without errors, I pay great attention to even the smallest issues and address them promptly. If the number of overlooked small things accumulates over time, any potential issue that might arise will require more time and resources to resolve than necessary. In the <Project G> team, I aspire to become a server programmer who prioritizes doing things right, even if it takes more time, and follows proper procedures instead of relying on stopgap solutions.
1The task of configuring a database to suit the specific characteristics of a game when storing game data.
CAREER PATH | Becoming a "Server Programmer"
I have 8 years of experience as a developer, with 1 year and 9 months at NC. Before joining NC, I was a junior server programmer at a specialized MMORTS development company. During my time there, I contributed to content development, framework design, service operations, and various server development tasks, participating in a total of four game releases. I gained comprehensive development experience leading up to the launch of each project. These invaluable opportunities allowed me to learn and grow significantly as a server programmer. In my last project, I had the opportunity to take on the role of a lead server programmer, which allowed me to enhance not only my technical skills but also gain management experience in leading a project and a team. After joining NC, I have been actively involved in the development of <Project G>'s systems using my experiences with games from similar genres. Specifically in the handling of large-scale data processing and systems that are typical of an MMORTS.
The Experiences You Accumulate Become Entirely Your Own
Proficiency in C and C++ programming, multi-thread programming, network programming, understanding of MySQL and MSSQL databases, as well as a strong grasp of data structures and algorithms are essential skills for a server programmer.
Acquiring practical skills is important, but I also believe that having experience creating your own "side projects" is crucial. Designing and implementing your own projects without relying on others will not only help you gain a comprehensive understanding of servers but also significantly improve your problem-solving skills. By going through the development process on your own, encountering various challenges, and dedicating time to finding solutions in your own unique way, you gain valuable experience. It's also a great idea to try sharing your source code on platforms such as GitHub. This can become a great opportunity to explain your approach and how you built your development structure, as well as the obstacles you faced and the solutions you found along the way. Only when you can explain your development process to others, do the results truly become your own. Firsthand experiences like this will become an excellent foundation for building technical competence and will prove to be good groundwork for practical skills as well.
TRACK 2 | my PROJECT
Maximizing the Fun of Strategies Through Server Technology
Breaking From Conventional Formulas and Winning Through Strategy
The fun of RTS games comes from meaningful victories achieved through deliberately calculated strategies. This satisfaction will entice players to come back to the game for more. In this regard, <Project G> has been designed first and foremost with enhanced strategic aspects. Typical RTS games have simplified the strategic elements by presenting combat results in just numbers or in a fixed number of turns. This makes it hard for players to devise and anticipate complex strategies. As a result, games tend to be influenced more by non-strategic factors such as levels or items. Games like those simply don't provide as much fun for players.
<Project G> breaks away from the stereotype where higher-leveled players always win and instead, allows the player's skills and strategies to have a significant impact on the outcome of battles. By actively utilizing strategic weapons like dragons and taking advantage of the combat system based on RPS (Rock-Paper-Scissors) mechanics, players can analyze and combine various tactical possibilities to create their own unique strategies. Players will also experience the fun of various political relationships forming through collaboration or competition with diverse players, which will act as variables affecting the results of battles.
Contemplating Real-Time, Large-Scale Data Processing With Minimal Load
The strategic elements of the game are only able to shine thanks to the "real-time, large-scale data processing capabilities" of <Project G>'s servers. This plays a crucial role in maintaining the data that allows users' characters to exist in the real-time world even when they are offline, as well as in creating the real-time responsiveness required for combat outcome predictions and quick reactions. In other similar genres, combat results are either presented through simulations or operate on a fixed turn-based system, where the user's inputs are irrelevant to the outcome. However, by implementing real-time combat, <Project G> allows user inputs to have real impact on the results.
To achieve this, our team is currently designing and building a server model that can simulate countless objects in real-time. To enhance the real-time, large-scale processing power without overloading the servers, we are utilizing all of NC's know-how and expertise, such as designing the servers to operate on parallel processing.
"Do Things the Right Way, Not the Quicker Way"
(Team members discussing solutions on GitHub)
A great deal of effort was put into designing fields and user objects during server development so the game can handle objects that continued to function even when the user was offline. For games in <Project G>'s genre, it is important for objects to perform actions independently of user input. And when a server is processing numerous independent objects, there is a tendency for loading issues to arise. I remember spending a considerable amount of time discussing solutions while going through trial and error for this issue with my teammates. "Do things the right way, not the quicker way" is our team's motto. We faced problems with the mindset of finding the fundamental solution, even if it took longer, because that's the proper way to go about things.
After countless trials and errors, we found our solution in separating the objects. We first conceptualized game objects based on their real-time properties and then classified them. We distinguished between "field objects" that require real-time interaction and "user objects" that could be automatically processed even offline. Instead of processing all objects in real-time, we made the processing intervals of certain objects adjustable based on their class. This was to reduce server load while maintaining real-time responsiveness. As a result, real-time gameplay could be handled smoothly without the server overloading during high traffic, and we were able to steadily increase the number of interactive objects in the game. This allowed for the large-scale battles of <Project G> to come together into one immersive experience.
TRACK 3 | my ENVIRONMENT
Building On My Specialties With Resilience and Perseverance
I want to build experience as a server programmer while growing as a specialized developer. To become a specialist in your field, personal growth through hard work is important. However, during my time at NC, I personally experienced that having a supportive environment is just as necessary.
When environmental factors such as task allocation according to specialization, automation of repetitive tasks, and the establishment of shared platforms are in place, developers are able to truly concentrate on their core tasks and enhance productivity. Previously, we expended a significant amount of resources on handling various tasks related to game launches in addition to server development. However, at NC now, we not only leverage our own platforms like NC Cloud, Air, or Purple to assist with service development, but also collaborate with specialized teams, enabling us to achieve even better results. Therefore, I am able to concentrate on my work and develop my expertise in this specific field much more efficiently thanks to the environmental support I receive. It is truly an optimized environment to grow as a specialist.
Approaching Projects With Responsibility and Ownership
It's easy to lose sense of ownership during development when you're working as a team with many talented developers on a large project like <Project G>. However, when every individual comes together with a mindset of "my own responsibility," we are able to build a much stronger synergy than by just simply working as an associate for a team. Our team is making efforts to strengthen the sense of individual "ownership" among developers and create an environment where they can demonstrate it. We allocate tasks based on each person's expertise and experience. Additionally, when certain issues arise, we provide ample time for brainstorming and troubleshooting, encouraging everyone to take personal responsibility and find solutions. Afterwards, we conduct a post-mortem to collectively analyze the root causes of the issues and establish countermeasures. In an atmosphere where professionalism and ownership are recognized and encouraged, everyone is able to work with a heightened sense of responsibility, including myself.
Every developer involved in this project has a strong sense of responsibility and is giving their all to enhance the development progress as the game's launch date approaches. We identify and resolve any problems as well as continuously conduct research and testing in order to improve the user experience. I believe that the overall level of polish of this project and the continuous growth achieved by each developer was only possible thanks to exactly those kinds of efforts that went into the project. Moving forward, the team will continue to enthusiastically work towards our launch goals and release a game that will satisfy the users.