Hi yoahn 개발블로그

[42GG] 3기 개발일지 2 본문

프로젝트 개발 일지

[42GG] 3기 개발일지 2

hi._.0seon 2023. 5. 13. 21:33
반응형

이번주에 두번째 스프린트가 종료된다.

사실 그동안 개발을 할때 일단 빨리 하고 코드는 나중에 개선하면 된다는 생각을 가지고 있었는데, 잘못된 생각이었던것 같다.

시스템 자체 복잡도가 낮지 않은 프로젝트인데, 좀만 복잡한 api 를 구현할 때가 되면 머리로만 생각해서 짜는게 쉽지 않다. DB join 쿼리부터 복잡할때도 있고 이것저것 고려해야 할 요소가 많은데 어디 페이지에서 어떤 용도로 쓰는거라는 설명 한줄 가지고는 부족하다.

 

api 하나를 예시로 들면, 게임 종료되면 랭크게임의 경우 같은 게임을 한 두명에게 동시에 입력받아서 그 점수가 같을 때에야 ELO 시스템을 통해 탁구력을 계산한다.

그런데 42gg 서비스는 랭킹 조회 성능 개선을 위해 Redis 를 사용하고 있다. 그래서 탁구력을 계산하면, 그 계산된 점수를 mysql Rank 테이블에도 반영해야 하고, Redis에 저장된 user 의 탁구력을 업데이트해주어야 한다.

또 Redis에는 key: [{탁구력,userid}, {ppp, userid} ,{},] 외에도 랭킹 조회 시 user 조회를 빠르게 하기 위해 Rank 테이블 정보도 저장되어있다. 거기에 있는 win, losses 횟수도 바꿔줘야 한다.

아직 하나가 더 남았다. pChange 라는 테이블이 있는데, 이 테이블은 탁구력의 history 를 조회할 수 있게 하기 위한 테이블이다. 그래서 이 테이블에도 변경된 탁구력을 추가해주어야 한다.

 

하다보니 코드가 길어져서 함수로 빼기도 하는데, 이것에 대해서도 팀 내에서 토론중인 주제이다.

먼저 Controller 와 Service 단, 한 컨트롤러에서 여러개의 서비스 메소드를 가져오는 것.

이건 트랜잭션 문제로 하지 않기로 했다. service 클래스 메소드에 트랜잭션을 달아두는데, 여러 서비스의 메소드들을 가져와서 호출해버리면 트랜잭션이 실패할 경우 전체 롤백이 안되기 때문이다.

문제는 하나의 Service에서 다른 Service 코드를 불러오는 것이 괜찮은가? 라는 것이다. 나는 괜찮다고 생각한다. 해당 서비스와 관련있는 repository 만 사용하는 함수가 있다면, 그것은 해당 서비스에 존재하는 것이 맞다고 생각한다. 그래야 해당 함수를 쉽게 찾을 수 있고 중복또한 발생하지 않을 수 있다고 생각한다.

그런데 팀 내에 하나의 서비스에서 다른 서비스 코드를 불러오는 것은 계층이 꼬이는 것 같아서 별로라고 생각하는 의견도 있다. 또 하나의 서비스에서 다른 서비스 함수들을 불러오면 코드를 읽기 어렵다고 한다. 사실 이 부분은 함수 이름을 잘 작성하면, 함수 구현부분을 보지 않아도 어떤 계산을 하는지 알 수 있어야 하는 부분이라고 생각한다.

계층이 꼬인다고 생각하는 사람들도 있어서, 그 부분에서는 여러 서비스 클래스들을 사용하는 클래스를 또 만들자는 의견도 있다. 이게 괜찮을지는 잘 모르겠다.

 

사실 3기는 리팩토링을 하려다가 서버가 한 문제를 여러 곳에서 막는 식으로 짠 코드다 보니 애초에 코드를 읽는 것도 어렵고, 이해하는 것도 어려웠다. 그래서 새로 레포를 파고 처음부터 진행하고 있다. 시간이 오래 걸릴거라고 생각했는데 생각보다 금방 진행하고 있다. 하지만 서비스 자체 복잡도가 있는 편이다 보니 내가 빨리 개발하려고 했던 것들이 완성도가 높아보이지 않고 코드도 길어져서 다음 스프린트를 전체 코드 리뷰로 가려고 생각중이다. 스프린트를 진행하면서 깃헙 레포 설정을 머지할 때 두명이 리뷰를 완료해야 main 에 머지가 가능하게 해두었는데, 자기 일이 바빠서 제대로 안보는 경우도 있고, 대충 보고 넘기는 경우가 있었는데 나는 의문이 생기면 물어보고 이해가 안되면 변경요청을 했다. 내가 먼저 이렇게 하니까 요즘 팀원들도 코드 리뷰를 꼼꼼히 해주는 것 같다.

 

요즘 의사소통에 그림을 그리거나 실제 사례를 가져와서 보여주면서 이야기하는 것이 효과적이라는 것을 느낀다. 말로만 하면 조금만 복잡해지면 말하는 사람 외의 다른 사람들은 다 이해하기 어려워한다. 그래야 소통에 오류가 줄어든다.

 

요즘 꾸준히 공부해서 깔끔한 코드를 짜야겠다고 생각한다. spring 강의도 듣고싶은데 취준하랴 플젝하랴 바빠서 언제 할지 모르겠고 청년수당도 일주일에 5일을 나가서 밥을 먹으니까 금방 없어진다. 지원금으로 spring 강의 결제하려고 했는데,,

반응형

'프로젝트 개발 일지' 카테고리의 다른 글

Builder 패턴에 대한 이야기  (0) 2024.02.22
42GG 3기 개발 회고  (0) 2023.08.10
[42GG] 3기 개발일지 1  (0) 2023.04.21
SpringBoot OAuth + JWT  (0) 2022.05.31
[spring boot] json web token 에러  (0) 2022.05.31
Comments