Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

사적인 블로그

[연말정산] 팔삭둥이 개발자 2024 회고록 본문

TIL

[연말정산] 팔삭둥이 개발자 2024 회고록

DevYeri 2025. 1. 10. 14:24

업무 기간 : 2024.4.29 ~ 2024.12.31
입사 8개월차 개발자의 2024 업무 회고록입니다.

진짜 지루하게 이미지 1도 없이 글로만 승부합니다.

 

1. 이벤트 개발

1) 사전예약 이벤트 기능 구현 (5월, 7월, 11월)

새로 오픈하는 게임들의 사전예약 이벤트 기능을 구현했다. (1 PC게임, 2 모바일 게임)
입사 후 처음 맡았던 업무이기도 했는데, 이미 사전예약 이벤트 관련해서는 메인 로직이 구현되어있었기 때문에 신규 게임 맞춤형 프레임으로만 작업하면 되는 부분이었다. 기능개발보다는, 프론트 레거시의 작동방식과 DB설계구조 등을 회사의 핵심 키워드인 user, game과 연관지어 학습하는 것이 가장 큰 의미를 지닌 업무였다. 이미 1n년간 쌓여온 레거시 코드의 숲에서 무엇이 중요하고, 무엇이 덜 중요한 코드인지 보는 눈을 키울 수 있었다. 랜딩업무로는 최적이었다고 생각한다.

 

 

2) 보너스 캐시 지급 기능 개발 (12월 ~)

리얼캐시가 아닌 보너스 캐시이지만, user의 지갑에 손을 대는(?) 작업이다보니 가장 꼼꼼하게 보고 있는 작업이다.
조금 다른 이야기이지만 전자 결제를 공공연히 사용하고 있는 2024년에, 나의 자산이 단순한 숫자로 DB에 앉아있는걸 보면 기분이 묘하다. 돈이란 무엇인가 잠시 생각하게 되는데, 어쨌든 모든 데이터가 중요하지만 돈 관련된 데이터는 잘못 건드리면 진짜 큰 일 나기때문에 작업을 잘 하는것도 중요하지만 문제시 돌아갈 길을 잘 만드는것도 중요하다.

 

보너스캐시 대상자 선정, 대상자 검증, 지급로직의 검증 등을 이정도면 약간 의심병..아닌가...?싶을 정도로 넣었는데 그게 맞는 길이라고 하신다. 로그 역시도 중요포인트들마다 설계해 넣었고 캐시지급!딸깍! 버튼을 누르실 작업자가 지급 전 데이터를 꼼꼼하게 확인하여 진행할 수 있도록 UI를 설계하였다. (이미 대상자를 화면에 출력하기 전 백 로직에서 두번 세번 검증 후 출력되지만, 그래도 모를 기계미스와 휴먼미스의 교차검증을 위해)
(하지만 저렇게 휴먼검증을 마친 대상자는 백에서 또 DB데이터와 비교하여 검증을 거친다)

 

개발자의 기본소양이 의심병 강박증 어쩌구..라는 우스갯소리를 들었는데, 스스로 꽤나 최적화되어있는 인간이라는 생각이 들었다. 그러나 이렇게 준비해놔도 어디서 뒤통수를 칠 지 모르기때문에 로그를 DB에도 일부 적재해 빠르게 에러위치를 찾을 수 있게 작업하였고, 혹시나 내가 빠르게 대응하지 못할 상황일 경우 동료분들이 에러코드와 로그만 보고도 쉽게 문제를 찾을수있도록 UML과 함께 문서화하여 공용위키에 올렸다.

 

이제 QA 전 막바지 작업중인데, 또 새로운 걱정이 생기고 있다. 아마 대상자가 n천명은 될텐데, 한 사람당 로그가 이만큼 찍혀도 되는건가..? 서버 용량 괜찮은가 싶은 생각이 들고있다. 그래도 시니어분들이 우리 서버가 이정도는 감당한다고 하시니(신규 서버라 용량이 널널하다), 일단 믿어본다..! 만약 용량이 너무 많아진다면 로그를 빼야할텐데, 아직까진 필수로 필요한 로그와 아닌 로그의 차이가 피부로 덜 와닿는다. 한 번 뒤통수 얼얼하게 맞아봐야 직감적으로 느낄듯. 그래서 경험이 중요하다. 어쩌면 문제 없이 서비스가 진행된경험보다, 에러의 경험이 더.

 

+ 사실 나같은 개발쪼랩+걱정인형들은 문제없이 돌아가면 더 불안하다. 왜... 에러가없지...?^^ 그럴리가 없을텐데 ㅋㅎ... 사실 에러는 로직상의 원인도 있지만(나정도 수준이면 이게 가장 크겠지만) 쓰고있는 언어나 프레임워크의 특성, 하드웨어와 네트워크상의 재해, 타 코드와의 의도치않은 간섭 등이 겹쳐지는거라서 예상되는건 예방을 하더라도, 그 외의 에러는 어느정도 토테미즘의 영역에 들어가야하는게 아닌가 싶기도하다. 내가 만든 컴퓨터, 내가 만든 프레임워크와 언어, 내가 만든 브라우저, 내가 만든 네트워크로 프로그램을 구현하는게 아닌이상 아마 모든 에러를 원천에 완벽하게 막을 수 있는건 어렵겠지.. 결국 그나마 가능성을 높이는건 집단지성뿐이라는 결론이다. 인간이 살아남은 경로와 같군..

 

 

2. 모바일게임 홈페이지 오픈

1) 모바일 웹 개발 및 배포 (7월, 11월)

2개 모바일게임의 웹페이지를 개발 및 배포하였다. 기존에 서비스되고있는 모바일게임이 있어 웹페이지, 대시보드 등의 기능들을 게임 특성에 맞게 작업하여 배포하는 작업이었다. 기작업 하셨던 분이 모듈화를 잘 해놓으셔서 유연성 있게 수월히 작업할 수 있었다. PC게임에 비하면 규모가 작긴 하지만 홈페이지다보니 회사에서 사용하는 게시판 로직의 기본적인 특성에 대해서 알 수 있었다.

 

 

3. KR 이관 프로젝트

4/4분기를 강타했던 입사 후 가장 큰 프로젝트였다. 타 퍼블리싱사에서 운영하던 게임을 자체 운영으로 가져오면서 필요한 인프라구축과 웹페이지 개발을 진행했다. 새로운 게임을 퍼블리싱하는건 개발팀의 주요 업무 중 하나였지만, 이 경우 한국 리젼에서 오픈하는건 처음이었기 때문에 브랜치 분리부터 시작해 소문자 a부터 대문자 Z까지의 작업이 필요했다.

 

1) ID/PW 복구 기능 개발: 비밀번호 복구 프로세스 구축 (9월~10월)

기존 게임들은 메인 플랫폼에서 로그인하면 연결된 다른 여러 게임에서도 동일계정이 연동되어 추가적인 가입이 불필요했지만, 이 경우 국가가 바뀌면서 기존 플랫폼을 사용할 수 없어 신규 플랫폼 개발작업부터 진행되어야했다. 나는 플랫폼의 여러 기능 중 회원의 ID/PW 찾기 기능을 맡게되었다. 디자인 퍼블리싱 작업을 제외한 프론트, 백엔드 개발을 진행하면서 비로소 플랫폼 소스구조의 전체적인 특성에 대해 이해할 수 있었다. (폴더구조, 작업순서, 회사에서 선호하는 코드체 등등)

본격적인 작업 전 KR에서 계약을 맺은 결제사의 본인인증 서비스를 연동하는 작업을 진행하였는데, 입사 후 처음 해보는 이기종통신이라 스택버전을 맞추기 위해 중간에 미들서버를 두면서 통신구조를 설계해나갔다. 유저의 CI/DI 값을 어느 서버, 어느 레이어에서 다룰 것인지, 검증은 어떻게 진행할것인지 등을 고민하고 구현해나가는게 재미있었다.

 

회원기능 자체는 기존 플랫폼에 있는 기능이다보니 참고할 레거시가 있었지만 기획이 다른 부분이 있다보니 레거시를 참조하면서 아예 처음부터 개발작업을 진행하였고 스타트업이 아닌 이상 1n년 이상의 레거시가 쌓인 회사에서는 쉽게 할 수 없는 일이라고 생각해 즐겁게 작업했다. 퍽 운이 좋았다고 생각한다. 아주 작게는 클래스명, 변수명을 고안하는것부터 검증로직, 로그작업(UUID 추적) 등을 진행할 수 있었고 기능의 처음부터 끝까지 작업한 첫 과제였다.

 

이때 이메일 인증 과정에서 백 로직을 거친 후 다음 단계로 넘어갈 flag가 JS에 위치해있었는데, 배포 후 오픈된 사이트를 개발자도구로 뜯어본 유저가 보안 이슈로 알려주어서 바로 로직 수정작업을 했었다. 최종검증은 백에서 끝났기 때문에 flag만 백으로 가져오면 되어서 수정시간은 길지 않았지만, 그 30여분동안 등에서 식은땀이 어찌나 나던지..😌 커뮤니티에서 나름의 조롱도 듣고.. 다시는 다시는 다시는(네버에버에버) 중요 데이터를 프론트에 두지 않으리라 아주 굳게 다짐하며 뼈에 새긴 순간이었다. 앞으로 개발일 하면서 그 순간은 평생 못 잊을듯.

 

2) 마이페이지 비밀번호 변경 기능 구현 (11월)

마이페이지 내 기능으로 비밀번호 찾기/변경 기능을 구현했다. 앞선 과제와 첫 화면을 제외하고는 모두 같은 로직이었기 때문에 기존 코드를 재사용하여 작업했다. 사실 처음 PW찾기 기능을 구현할때에는 같은 로직을 재사용하게 될 것을 크게 염두하지 못하고 작업했었는데, 그러다보니 손쉽게 다른 곳에서 가져다쓸 수 있게 하는데에는 그냥 코드를 쓰는것과는 또 다른 고민과 일련의 작업이 필요함을 깨달았다. 하드코딩을 최대한 지양했다고 생각했는데 그럼에도 불편한 부분들이 있었다. 작업 자체는 규모가 크지 않았지만, 내가 쓴 코드를 내가 재사용하다보니 코드의 재사용성/유연성을 높이는 것에 대해 적나라하게 느낀 작업이었다.

 

3) CCU SP 연동 작업 수행 (11월)

인게임 데이터를 프로시져 콜을 통해 불러오는 작업을 진행했다. 이 역시 이미 다른 게임에서 돌아가고 있는 ccu job 코드가 있어 SP name과 dataSource만 잘 바꾸면 되는 일이었다. 타 회사의 DB에 직접적으로 접촉하는 첫 경험이었어서 너무 신기했고 재밌었다.

 

4) 미성년자 결제 법정대리인 동의 기능 개발 (10월)

홈페이지의 결제 기능 중 미성년자 결제 법정대리인 동의 기능을 작업했다. 이미 시니어분이 결제기능을 도맡아 진행하고 계셨고, 연동하는 결제사가 많아 작업량이 방대하다보니 내가 한 파트를 떼어와 작업하고 다시 큰 결제로직에 이어붙이는 작업이었다. 검증 조건만 잘 설계되면 나머지는 DB에 적재만 하면 되는 기능이었는데 오히려 기획에서 팝업창을 여러개 쓰길 원하시다보니 부모창, 조부모창, 증조부모창까지 안전하고 적절하게 데이터를 가져오는게 어려웠다. 더군다나 이미 JS로 씨게 디였기 때문에 최대한 탈취되도 무방한 데이터를 안전하게 넘기려고 애썼다.


어떻게 보면 동료 개발자분과의 첫 협업이었는데 기능을 메서드 단위로 잘 나눠서 써야 여러 이유로(보통 기획 변경이 제일 많은듯..) 차후 기능의 일부만 채택해서 쓰는 상황이 된대도 손쉽게 수정이 가능하겠다는걸 느꼈다.

 

5) 이관코드 복원기능 개발 (10월)

user의 인증은 유저별 이관코드를 발급하여 진행했는데, 모종의 이유로 이관코드를 잃어버린 경우 백오피스에서 복구해주는 기능을 작업했다. 이때 기존에는 없던 기능이라 테이블 생성이 필요해 처음으로 이관코드 로그 테이블 생성 작업을 진행했고, 현재 백단에서는 Grails를 사용하는데 JPA와 비슷한 특유의 스캐폴딩(DB CRUD 처리 가능) 기능으로 도메인을 생성하고 데이터를 활용하는 작업을 진행했다. 이 과정에서 백엔드의 이해도를 보다 심화시킬 수 있었다.

 

 

4. 백오피스 기능 추가

1) 회원 계정 조회 기능 추가 (8월)

작성 순서는 뒤로 밀렸지만, 백엔드에서 백엔드로 끝나는 첫 작업이었다. 기존의 회원조회 조건에서 조건을 추가하는 기획이었는데, 백단에서 DB와 연동되어 데이터를 select해오는 부분에 대해 이해할 수 있었다. 유지보수의 개념이었기에 레거시를 이해하는데 더 비중이 있었던 작업.

 

 

5. 서버 모니터링 및 관리

1) 서버 트래픽 모니터링 및 용량 관리

회사에서는 약 서른대정도의 vmss를 돌리고있는데 개발팀에서는 서버 트래픽 모니터링과 tomcat 관리를 하고있다. 대형게임의 오픈과 동시에 DDOS 공격, 트래픽 급증 등의 이슈로 로그가 많이 쌓여 서버들의 용량이 위험한 순간들이 잦았다. 덕분에 모니터링 알람이 뜨거나 빨간dot이 보인다 싶으면 바로 서버에 접속해 로그를 정리하며 대응하였고 팀에서는 이러한 부분을 자동화/안정화 시키기 위해 쉘을 돌리고 로그삭제 정책을 변경하였다. 덕분에 리눅스 서버 구조 및 명령어와 많이 친밀해질 수 있었다.

 

2) 실시간 서버 이슈 대응

게임 산업 특징으로 저녁이나 새벽에 트래픽이 많아지다보니 퇴근 이후 서버장애 알람이 오는 경우가 있었다. 또는 정말 예상치 못한 이유로 문제가 터지는 경우에도 함께 대응을 진행했다. 주로 원격으로 붙어 진행함.

 

 

6. 메인 플랫폼 기능 개선

1) 메인 플랫폼 기능 개선 및 배포 작업

여러 건의 플랫폼 및 각 게임 사이트의 기능개선 작업을 진행했다. 해당 건은 기획이 발생하면 일정 조율 후 작업 진행하였다. 대부분 레거시의 유지/보수/일부 개선작업이었기 때문에 큰 어려움 없이 작업할 수 있었다. 갈수록 느끼지만, 개발에서 중요한건 쓰기보다 읽기인 것 같다.