대학교를 다니면서 가장 빠르게 지나간 7학기였다.
3월 처음 입사할 당시에는 약간의 긴장과 빨리 업무에 적응하고 싶어서 열심히 하다 보니 빨리 갔고, 중간엔 지속적으로 서버 장애가 나서 대응하느라 정신없이 지나갔고, 마지막엔 회사 사람들과 지낸 정 때문인지 출근하는 게 재밌어서 금방 지나갔다.
결론부터 말하자면 나쁘지 않았다. 신입으로서 개발하기에 좋은 환경은 아니었지만, 그 나름대로 장점이 있었다. 자유로운 분위기에서 스스로 결정권을 갖고 그 결정에 책임을 져야하니 신뢰있는 근거를 찾는 방법을 배웠다. 그리고 또 작은 스타트업은 어떤 분위기에서 어떤 방식으로 일하는지 알게 되었다.
퇴사를 한지 약 한달만에 작성하는 후기인데, 퇴사를 한 직후에 바로 소프티어 부트캠프를 하느라 또다시 바쁘고 정신없었다. 그래서 잘 느껴지지 않았지만 후기를 작성하기 위해서 회사에 다녔던 올해 상반기, 그 때를 떠올리니까 일하던 때가 조금은 그립기도 하고, 사람들이 보고싶기도 하다. 모두 행복하셨으면 좋겠다.
입사 직후 퇴사한 사수..
현장실습 시작하고 (약간의?) 인수인계를 받은 뒤에 사수가 퇴사했다. 원래는 나와 사수 분, 2명에서 백엔드 개발을 했는데 절망스러웠다…………
나는 많이 성장하고 싶어서 현장실습에 지원한건데, 이 때 사수 분이 퇴사하는 바람에 의미가 퇴색되었다고 생각해서 우울한 나날들을 보냈다.
그래도 서론에 적었지만 사수 분이 없더라도 그 나름대로 장점이 있었다고 생각한다.
지속적인 서버 장애
사수 분이 퇴사하시고, 그래도 지금까지 개발 공부를 하고 스프링을 해온 가닥이 있으니 여차저차 문제없이 회사 생활을 했다. 하지만 어느 순간부터 지속적으로 식사 시간에 트래픽 과부하가 발생했다. (서버 장애에 대한 회고는 이전 게시글에서 다루었다.)
한 번도 겪어보지 못한 일이기 때문에 어떻게 해결해야 하는지 갈피를 잡지 못하는 상황에서 나름의 추론을 통해 slow query를 찾아 병목 현상을 해결했다.
시키는 일만 하는게 아니라, 능동적으로 해야하는 일을 찾아서 하고 열심히 하려는 나의 모습을 보신 PM님이 인턴임에도 많이 의지한다고 해주셨다 ㅋㅋ. 직접 말을 전해 들은 건 아니고 다른 분 통해서 들었는데, 덤덤한 척 “아 그렇습니까?” 했지만 속으론 기분이 좋아서 입이 귀에 걸렸었다.
결제 API의 Service Layer에서 함수 분리
어느정도의 신뢰를 받아 코드 수정을 허락 받았다.
기존의 결제 기능을 수행하는 코드가 너~무 마음에 안들었다. 마침 당시에 출퇴근 하면서 clean code 책을 읽었던 시기였는데, 함수는 4줄 이상 넘기지 말라는 말이 참 인상깊어서 리팩토링을 해야겠다고 결심했다!
대충 설명하자면 분명 함수의 이름은 checkBarcodeV2()
인데 바코드의 유효성을 검사하면서 결제까지.. 모두 이루어진다. 따라서 실제로 바코드의 유효성을 검사하는 로직과 실제 결제하는 로직을 분리해서 메소드로 나눴다. 또한 남발되는 try catch 문을 줄이고자 최대한 상위 함수에서 한 번에 처리할 수 있게 만들어 가독성을 높였다.
전보다 예쁘게 코드를 수정하고 결제 기능은 매우매우매우 중요해서 불안한 마음에 개발 서버에서 테스트 하는 데에 더 많이 시간을 쏟은 것 같다~
쿠폰 발행 오류
모종의 이유로 쿠폰 관련해서 매달 정산이 맞지 않아, 관련 테이블을 직접 보면서 정산 데이터를 하나하나 확인했다. 이러한 불필요한 리소스를 낭비하는 게 아깝다는 생각이 들어 근본적인 원인을 찾고 이를 해결하고자 했다.. (한 번 칭찬 들으니 또 듣고싶었다👀)
조금 오래 전에 일이라 따로 기록해두지 않아서 세세하게는 기억이 나지 않지만 원인은 다음과 같았다.
프랜차이즈 쿠폰을 발행할 때 외부 API를 실행한다. api 호출에 실패하는 경우가 간간히 발생하는데, 이 때 결제한 금액이 취소가 되지 않아서 정산이 맞지 않았다. (금액이 빠져나가는 지 확인이 어려워서 지금까지 cs가 들어오지 않는 것으로 추정한다)
결제한 금액이 취소가 되지 않았던 것은 transaction 처리가 되지 않았기 때문이었고, 그 이유는 예외를 checked exception으로 만들었기 때문이었다.
이렇게 경험적으로 스프링에서 @Transaction을 붙일 때 unchecked exception에 대해서만 transaction 처리를 해준다는 것을 알게 되니 앞으로 절대 까먹지 않을 것 같다..
해결해서 칭찬++
~