새로운 회사에 온지 3주가 지났다. 이번 주에는 CS당번 순서라서 일주일간 CS업무를 담당하였다. 아직 적응이 되지 않은 상태에서 CS업무를 담당하다보니 하루 하루 정신없이 보냈던 것 같다. 자세한 내용은 아래에 적어보겠다.

7월부터는 임금제도가 변경되었다. 입사한지 3주밖에 되지 않았지만 상반기에서 하반기로 넘어가는 시기에 입사를 하다 보니 회사에서 새로운 변화가 많이 있다.

입사 3주차에 접어들면서 주변 동료들과는 어느정도 익숙해 져서 인지 첫 2주 보다는 많이 편안해 진것 같다. 너무 서두르지 말고 잘 적응해서 동료들과 편안한 관계를 이어가게 되었으면 좋겠다.

개발일을 하는 동료들과 얘기를 할때 내가 가진 생각들을 종종 얘기하곤 한다. 주변의 동료와 내가 가진 생각이나 지식을 나누고자 하는 마음에 얘기를 하는 것이지만 가끔 아직 적응도 제대로 하지 못한 뉴비가 벌써부터 말을 너무 섣불리 하고 있는게 아닌가 하는 조바심이 난다. 이전 직장에서도 말하는것을 조심하자고 그렇게 다짐했건만 여기에서도 개발얘기에 내 의견이나 내가 알고 있는 지식을 말하려고 하는 경향을 조금씩 보이는 것 같아서 경계해야 겠다. 이번 주에는 좀더 동료들의 얘기를 듣는데 집중해보자.

아래 내용은 내가 이번 주에 겪었던 일들에 대한 정리이다.

운영이슈 처리

회사에서는 개발자들이 일주일마다 로테이션을 돌면서 CS 업무를 담당하는데, 이번 주에는 CS를 담당하는 주라서 CS업무를 담당하였다. 이런 제도는 모든 사람이 공평하게 CS업무를 담당하면서 다른 부서의 일이나 새로운 사람이 회사의 시스템에 적응하는데 도움이 많이 되는 것 같아서 좋은 제도라 생각되었다. 이전에는 오래된 개발자가 레거시 시스템에 대해 잘 알고 있기 때문에 대부분의 이슈 대응을 처리하였었다. 그러다 보니 기존 직원들은 계속해서 이슈 대응에 시간을 할애하게 되고 신규 직원들은 이슈 대응을 하지 않으니 기존 시스템을 계속해서 모르는 상태로 남아 있는 것이었다. CS당번 제도는 이러한 문제를 해결해 주면서 반복적인 업무들은 문서화를 해둠으로써 내가 이전에 겪었던 문제점을 많이 해소하고 있다.

아무튼 이번 주에 CS당번을 하면서 많은 일을 처리하였고, (나중에 들어보니 이번주가 유달리 이슈가 많았다고 한다 ㅠㅠ) 덕분에(?) 현재 서비스 되고 있는 시스템에 대해 어느정도 파악을 할 수 있게 되었다. 아래 그림은 내가 이번주간 처리하거나 접수받은 업무들을 캡쳐한 것이다. 한주간 80개가 넘는 이슈가 생겼었다.6

cs issue board

젠킨스

젠킨스란 소프트웨어 개발 시에 지속적 통합 서비스를 제공해주는 툴로 이전부터 알고는 있었지만 여기에서 처음 사용해 보는 툴이다. CS당번의 업무 중 2번째 업무가 매일 개발자들이 작업한 커밋들을 젠킨스를 이용해 배포하는 업무이다. 사실 이전 회사에서는 에저 데브옵스를 이용하여 마스터 브런치에 병합 시 자동으로 지속적으로 배포가 되는 파이프라인을 구축하여 배포에 대한 리소스 낭비는 거의 없었다. 그렇다 보니 하루에 작업한 커밋들을 모아서 이상없는지 확인하고 운영에 배포하는 프로세스가 비효율적이게 느껴지기도 한다. 하지만 이런 프로세스가 생긴 이유가 분명 있을 것이고 이런 불편한점들은 차차 개선해 나가면 될 것이기 때문에 큰 문제는 아니라 생각한다.

Spring Transaction

참 알다가도 모르겟고 모르겠다가도 알것 같은 느낌을 주는 기능이 Spring의 Transaction이다. 사실 이전 회사에서도 이놈 때문에 많은 고생을 했고 그때 나름 공부를 해서 잘 알고 있다고 생각했었는데, 여기에서 또 에상치 못하게 동작하는 것을 보고 내가 잘 알고 사용하는게 아니구나 라는 생각을 하게 되었다.

Spring에서 제공하는 @Transactional 어노테이션은 쉽게 말해 함수에 @Transactional 어노테이션을 선언해 놓으면 Transaction 기능을 사용할 수 있는 어노테이션이다. 주로 DB Transaction을 다룰 때 사용을 한다.

이번주에 동료 중 한분이 분명 서비스 빈에서 @Transactional(readOnly=true)를 설정했는데 DB에 데이터를 저장하는 로직이 동작한다고 원인에 대해 알려줄 수 있는지 물어보셨었다. 분명 public 함수에 @Transactional 어노테이션을 선언하였었고 내부에서 사용하는 함수중에 @Transactional이 선언된 함수는 보이지 않아 데이터 저장 로직이 실행되지 않아야 하는데 실행하는 것을 볼 수 있었다.

당시에는 깊이 볼 여력이 되지 않아 그냥 지나쳤는데 원인을 알면 좋은 경험이 될 것 같아서 다음 주에 다시한번 물어봐야겠다. (혹시 AOP 설정이 영향을 미치지 않았을까?)

Click UP Github Integration

개발 챕터 리더분께서 Click Up 관리자 권한을 부여해주셔서 Github Integration을 사용해 보았다. Click Up은 Space라는 공간을 나누어 프로젝트나 팀별 업무를 구분하는데 각 Space 별로 Github Integration을 별도로 설정해 주어야 했다.

설정 방법 및 사용방법은 링크를 참고하자.

기왕에 협업관리 툴을 사용하니까 칸반보드에서 작업한 Github 이력을 추적할 수 있으면 좋을 것 같아서 앞으로 다들 활용하면 좋을 것 같다. 다른 동료들도 적응 하고 사용하면 좋을 것 같은데 이 부분은 시간이 좀 필요하지 않을까 생각된다.

Spring @Retryable

특정 예외 발생 시 재시도하는 기능을 개발해야 하는 상황이 생겨서 이것 저것 찾아보다가 spring-retry라는 프로젝트를 찾게 되었다. 기존에는 직접 구현했었는데, @Retryable은 Spring Bean에서 @Retryable 선언만하면 재시도 기능을 다양한 방식으로 구현할 수 있어서 좋은 기능 같아 보인다. 앞으로 자주 활용해야 겠다.

JPA ManyToOne 이슈

JPA에서 ManyToOne 관계를 가지고 있는 Entity에서 query method를 실행하는 경우 만약 FetchType을 LAZY로 설정하는 경우 오류가 발생한다. 이러한 문제는 FetchType을 EAGER로 변경해 주면 해결 할 수는 있는데 쿼리 성능이 아주 최악이다. 이러한 문제점을 해결하기 위한 여러 방법이 있지만 크게 매력적이진 않았다. 근본적으로 ManyToOne에서 쿼리를 하지 않도록 하는게 제일 좋긴하지만 이미 그렇게 구현이 되어있는 것을 어떻게 하겠는가. 그래서 결국 QueryDSL로 해결하였다.

QueryDSL

위에서 적은 문제를 해결하기 위해 QueryDSL을 처음 사용해 보았다. 이전에도 QueryDSL의 존재를 알고 있었는데 실제로 사용해보기는 처음이다. (나의 나태함을 욕하자 ㅠㅠ) 이번에 회사에서 인프런에 QueryDSL 강의를 구입해 주었는데 제대로 한번 공부해보면 큰 도움이 될 것같다.

포괄임금제 폐지

저번 주 타운홀 미팅에서 가장 큰 이슈는 아무래도 포괄임금제 폐지였다고 생각한다. 우리나라에서 많은 회사들이 도입하고 있는 포괄임금제를 폐지하고 추가근무 수당을 별도로 제공해준다고 하니 기쁘지 아니할 수 없다. 어차피 야근하는거 돈을 더 받을 수 있다면 좀더 열심히 하지 않겠는가! 아무튼 기분 좋은 일이다.

feature flag

특정서버의 엔드포인트가 변경될 때 해당 서버를 바라보는 서버들의 코드를 수정하지 않아서 이슈가 생긴적이 있었다고 이번 주 개발 챕터 회고에서 발표하였다. 이러한 문제가 발생하지 않게 조심하자와 근본적으로 발생하지 않도록 하기 위해서 어떻게 하면 좋을 지 논의하면서 feature flag를 활용하면 좋을 것 같다는 의견이 나왔었다. 처음 들어보는 단어이고 어떻게 동작하는 건지는 모르겠지만 데브옵스에서는 이미 유명한 방식인 것 처럼 보인다. 기회가 되면 어떤건지 동료분들께 물어봐야겠다.

terraform

테라폼은 인프라스트럭처 관리 도구로 코드로 인프라환경을 구성할 수 있게 해준다는 점에서 큰 장점을 누릴 수 있다. 백엔드 개발 챕터 회의에서 동료분 한분이 소개해 줬는데 인프라를 코드로 관리할 수 있다는 점이 크게 매력으로 다가왔다. 솔직히 콘솔에서 사람의 손으로 인프라를 관리하는 것은 물리적으로 한계도 있고 실수의 가능성이나 로그 추적이 쉽지 않기 때문에 코드로 관리할 수 있는 도구가 있으면 좋을 것 같다는 생각은 했었는데, 이미 존재하고 있었다니 놀라웠다.

시간을 내서 내가 운영중인 개인프로젝트의 인프라환경을 테라폼으로 구성해보면 좋을것 같다. 1년마다 인프라환경을 옮기기도 쉬울테니 말이다.


다음주에는 정산 대사 작업을 마무리하고 우선순위에 밀려 진행하지 못했던 같은 셀 동료와 PP를 해서 요구사항 하나를 마무리하는 것을 목표로 하고 있다.

아 그리고 요즘 살이 많이 찐 것 같아서 다시 운동을 시작해야 할 것 같다. 적응 핑계로 미루고 있었는데, 우선 업무 루틴이 잡히면 운동 계획을 세워서 해야겠다. 먹는것도 좀 줄이고 ㅠ 군것질도 좀 줄이고 ㅠ