1월 회고
23년을 마무리하면서 1년의 회고를 작성할려고 생각했을 때 가장 먼저 드는 생각이 ‘나 1년동안 뭐했지..?’ 였다. 그렇다보니 내가 원하는 만큼의 회고를 작성하지 못하게 되는 아쉬움이 있어서 24년도는 한 달 회고를 작성해보고자 한다.
회고를 위한 카테고리를 나눠서 카테고리별로 내용을 정리해볼려고 한다.
- 회사
- 개인공부
- 취미 생활
- 다음 달 목표
이 4개의 카테고리를 중점으로 회고를 작성해보고자 한다.
회사
회사에서는 자잘한 업무들과 크게 2가지 업무를 하고있는데
- 오래된 서버를 새로 구성하는 작업
- 새로 시작하는 프로젝트
1. 오래된 서버 리뉴얼
기존에 존재하는 아주 오래된 서버가 하나 있다. 거의 회사 초기에 만들어져서 아주 작은 수정들만 있고 유지되고있는 서버이다. 워낙 오래된 서버다보니 레거시도 너무많고 이제 사용하지 않는 코드도 너무 많은 상태이다. 심지어 언어도 바뀌고 데이터베이스도 바뀐 상태기 때문에 그 모든작업들을 해주어야 한다.
>> 필요없는 코드 정리 <<
먼저 이제 사용하지 않는 코드들을 정리했다. 사용하지 않는 코드를 정리하기 위해서는 현재 작성된 코드 전체를 이해해야한다. 그말인 즉슨 모든 코드를 분석하고 테스트해봐야 한다는것…. 이 작업만 몇날 걸린것 같다.
워낙 예전에 만들어진 코드들이라서 그때 당시의 의도를 혼자서 전부 파악하기는 불가능해서 그때 당시의 코드를 작성하신 분들에게 조금씩 물어물어 진행했다. (다행히 그때 코드를 만드신분이 전부 회사에 남아계셨음…)
그렇게 어찌저찌 코드분석을 끝내고 새로운 repoistory에 코드를 옮기기 시작헀다.
>> 자바코드를 코틀린 코드로 변환 <<
이 작업은 사실상 기존의 코드를 옮기면서 동시에 진행되었다. 새로운 repository를 만들었고 거기에 완전히 새롭게 만드는 작업이었기 때문에 처음부터 코틀린 코드로 만들었다. 그런데 자바에서 코틀린으로 옮기는 과정에서도 기존의 코드 사용방식도 다르고 심지어 레거시 서버와 현재 사용하는 코드의 아키택처도 다르기 때문에 해당 부분도 고려해야 했다.
이 부분에 대해서 어떤 순서로 리팩토링을 진행해야할지 고민을 조금 했는데 다음과 같은 방법으로 진행했다.
- 아키택처는 전혀 변경없이 코드만 변환
- 이후에 리팩토링을 진행하면서 아키택처 변경
일단 기존의 코드 모양은 최대한 유지하면서 코틀린으로 변환하는 작업을 진행했다. 언어도 바꾸고 구조도 바꾸면서 진행하면 기존의 결과와 다른 결과가 나왔을 때 잘못된 부분을 찾기가 쉽지 않기 때문에 하나씩 진행하기로 했다.
>> 테스트 및 리팩토링 <<
코틀린으로 코드를 변경한 후 일단 테스트를 진행했다. 먼저 잘 동작하는지를 확인한 후 리팩토링을 진행해야 하기 때문이다. 서버 특성상 테스트코드를 만드는게 쉽지않아서 테스트코드는 거의 만들지 못하고 실 테스트를 위주로 진행했다.
테스트를 모두 진행한 후 리팩토링을 진행하였다. 외부 api와 내부 코드를 확실하게 분리하고 추상화가 필요한부분은 추상화를 진행하고 메소드로 분리가 필요한 코드들은 분리했다.
>> 데이터베이스 마이그레이션 <<
기존의 데이터베이스는 mysql을 사용하고 있었는데 회사 전체 데이터베이스를 postgreSQL로 마이그레이션을 했었다. 꽤나 예전에 진행한 작업이지만 레거시 서버가 더 오래전부터 존재해있었고 마이그레이션 당시에 이 서버는 대상에 들어가있지 않았기 떄문에 아직 mysql을 그대로 사용하고 있었다.
데이터베이스 종류는 바꾸지 않고 버전만 최신으로 올려서 다시 관리할지 아니면 postgreSQL을 그대로 따라갈지를 고민했는데 아무래도 마이그레이션을 진행하는 쪽으로 결정을 내렸다. 이유는 관리측면에서 그게 훨씬 유리할 것이라고 생각했기 때문이다. 2종류의 데이터베이스를 관리할려면 학습도 2종류 모두 해야하는데 그러기에는 너무 많은 리소스가 들어가기 때문에 하나의 종류로 통일시켜서 관리하는게 훨씬 유리할것이라고 생각했다.
사라진 코드가 많은 만큼 필요없는 테이블도 굉장히 많았다. 당연히 필요없는 테이블과 필요한 테이블을 분리해야했다. 코드 분석은 이미 끝난상태이기 때문에 테이블도 어느정도 정리는 되있었다.
테스트용 postgres인스턴스를 먼저 만들었다. 필요한 테이블들을 옮기고 데이터가 잘 들어가는지 테스트를 진행했다. 데이터가 잘 들어가는 것을 확인한 후 실 서버용 디비를 만들었을 때 데이터가 잘 옮겨질지를 미리 테스트해봐야해서 데이터 마이그레이션을 진행했다. DBeaver를 사용했다.
>> 인프라 작업 <<
여기까지 했으면 애플리케이션 작업은 마무리가 되었다. 하지만 아직 갈길이 멀다. 인프라 작업을 진행해야 한다. ECS에 새로운 서비스를 만들고 컨테이너를 띄워야 한다. CI/CD 작업도 해야한다.
우선은 ECS에 컨테이너를 올려보자. 기존에 존재하는 클러스터를 사용할 예정이기 때문에 task와 service만 만들어주면 된다. 기존 클러스터에서 사용되고있는 지표를 잘 보면서 진행해야 한다. cpu와 메모리를 너무 적게 할당하면 서버 유지가 안되고 너무 많이 할당하면 다른 service에 영향을 줄 수가 있다. 여러 시행착오를 통해 최적의 양을 찾아야 한다.
서버가 잘 올라갔다면 이제 CI/CD 작업을 해야한다. 회사에서 github action을 사용하고 있기 때문에 여기서도 똑같이 진행하기로 했다. 먼저 dockerFile을 만들어서 컨테이너로 만드는 작업부터 진행했다. 스트레스 조금 받으면서 완성한 후 github action코드를 만들어서 무한 테스트를 진행하며 CI/CD를 만들었다.
>> 마무리 <<
모든 작업이 끝났으므로 전체 테스트를 다시 진행했다. 테스트를 진행하면서 빼먹은 부분이 있다면 조금씩 보안하면서 진행했다.
서버 하나를 옮기는 뭔가 엄청나게 거대한 작업이었지만 코드의 양과 테이블의 양이 많지 않아서 혼자서 가능했던 것 같다. 너무 오랫동안 묵혀있던 서버이고 필요없는 코드도 너무 많아서(기존 코드의 60%는 걷어낸 것 같다) 필요하다고 느끼는 작업들도 계속 미루고 있었는데 이제 이 서버에서 필요한 작업들을 진행할 수 있게 되었다. 기존에 팀에서 사용하는 코어와 인프라를 그대로 사용했기 때문에 다른 팀원들도 어렵지 않게 접근 할 수 있을 것이다.
서버를 옮기는 작업만 진행하지 않고 다른 작업들도 조금씩 겸하면서 진행해서 전체 기간은 2달-2달반정도 걸린 것 같다.
새로 시작하는 프로젝트
회사에서 이번에 거대한 새로운 프로젝트를 시작하기로 했다. 원래 진행하던 방식과는 다르게 거의 모든 팀원이 투입되어야 할 정도로 거대한 프로젝트이다. 백엔드 팀원들도 전부 투입되서 각자 어떤 부분을 맡아서 진행할지 나누고 무한회의를 진행하면서 가닥을 잡아가고 있다.
이제 막 첫 삽을 뜬 정도이지만 정말 급한 작업이 아닌 이상 이 프로젝트를 가장 우선순위로 진행될 것 같다.
개인 공부
올해 목표중에 공부하고 싶은 내용이 너무 많다. 뭐부터 해야할지, 어디까지 해야할지 아무것도 정해지지 않고 그저 필요하다고 느끼고 하고싶다고 느낀것들을 머리속으로만 생각해놓은 상황이다. 1월은 공부에 크게 집중하지 못했다. 할려고 계획중인 것 중에 가장하고 싶었던 공부가 데이터베이스 공부이다. 재밋기도 하고 회사에서 데이터베이스로 한 부분을 담당하고 싶다는 욕심도 있다. 이런 마음으로 2월 공부의 목표를 적어보면
- postgreSQL - 인덱스
- SQL공부
- 알고리즘(?)
크게는 이정도로 볼 수 있을것 같다. 좀더 세세하게 들어가면
>> 인덱스 <<
postgres에서의 인덱스 종류와 각 인덱스의 동작 방식을 이해하고 실제로 많은 데이터가 있을 때 인덱스의 유무가 성능적으로 어느정도로 차이를 보여주는지를 직접 테스트 해보기
- 인덱스 생성, 수정, 삭제 속도
- 인데스가 있을 때와 없을 때의 조회 속도
- 인덱스를 포함한 쿼리 실행계획과 없을 때의 실행계획 비교
>> SQL 공부 <<
sql은 각잡고 한번에 하기보다는 책 하나를 유투브보는 습관처럼 시간될 때마다 조금씩 읽어보고 실습하는 과정으로 진행할 예정이다.
>> 알고리즘 <<
알고리즘도 sql과 비슷한 느낌으로 시작할 예정이다. 너무 어려운 내용보다는 내 이해도가 낮은 부분부터 조금씩 진행해볼 예정이다. 2월을 진행해보고 더 구체적인 계획을 세워야 겠다.
취미 생활
>> 운동 <<
내가 삶에서 꽤나 중요하게 생각하는 부분은 운동이다. 건강을 위해서라도 너무 많지는 않아도 너무 적지도 않게 할려고 생각하고 있다. 하지만 일단 지금 갈비뼈를 다친 상태라서 잠시 휴식…
>> 스노우 보드 <<
1월에는 퇴근 후 에덴벨리도 종종 다녀왔고 하이원도 1번 다녀왔다. 하이원은 확실히 멀어서 가기가 힘듦.
독서
회사에서 진행중인 세미나로 인해 강제로 책을 읽고 있다.
>> 함께 자라기 <<
정말 제목 그대로 함께 성장하는 방법이라고 해도 무방하다. 내가 성장하는 방법, 함께 성장하는 방법, 협업하는 방법, 에자일 방법 등의 내용들을 다루고 있는데 아주 얇지만 굉장히 유익한 책이다. 협업을 하는 위치에 있다면 팀장이든 팀원이든 상관없이 한 번쯤은 꼭 읽어보고 함께하는 팀원들과 다같이도 한 번쯤은 꼭 읽어봐야 하는 책이라고 생각한다.
>> 넛지 <<
이번에 새롭게 시작한 책인데 전체적으로 너무 마음에 드는 내용이다. 아무래도 올해 책 0순위가 될 것같은 느낌이 강하게 드는 책이다. 일상생활에서도 너무 유익하고 제품을 만드는 입장에서도 너무 유익한 책이다. 여러관점에서 읽어볼 수 있을것 같다. 아직 많이 남았기 때문에 열심히 읽어야 한다.