본문 바로가기
Memo/우테코 4기

[우테코/줍줍] 4차 스프린트 회고

by 연로그 2022. 8. 24.
반응형
  1. 개발 일지
    • 리마인드 기능 개발
    • LocalDateTime.now() 테스트하기
    • Exception 패키지 구조 변경
    • ssh 명령어 편하게 쓰기
  2. 있었던 이야기
    • 김범준님의 특강
    • 마광휘님의 특강
    • 써머, 브라운과 식사 타임
  3. 레벨3 마무리
    • 외부 서비스에 종속적인 프로젝트
    • 방학 계획
    • 레벨4 계획

 

 


1. 개발 일지 🎉

 

💛 리마인드 기능 개발

 나중에 고치자, 일단은 돌아가게 하자! 라는 마인드로 리마인드 기능을 개발했다. 10분마다 DB에서 리마인더 데이터를 조회하고, 데이터가 존재한다면 슬랙 메시지를 전송해주는 기능이다. 이때 10분마다 로직을 실행하도록 만들기 위해 Spring의 @Scheduled를 활용했다. (현재 Spring을 사용하고 있기 때문에 어노테이션으로 간단하게 만들었지만 Java의 Timer, TimerTask을 이용해도 구현할 수 있다. Spring의 스케쥴링 관련 기능도 Java의 Timer나 Quartz를 이용해 만들었다. ㅡ참고 링크) 코드는 아래와 같다.

 

@EnableScheduling
@Component
@Transactional
public class ReminderSender {

    ...
    
    @Scheduled(cron = "0 */10 * * * *")
    public void sendRemindMessage() {
        // 현재 시간
        LocalDateTime now = LocalDateTime.now()
                .withSecond(0)
                .withNano(0);
        
        // 현재 시간으로 DB에 저장된 리마인더 목록 조회
        List<Reminder> foundReminders = reminders.findAllByRemindDate(now);

        // 모든 리마인더에 대해 알림 전송
        for (Reminder reminder : foundReminders) {
            sendMessage(reminder);
        }
    }

    // slack API를 호출해 메시지 전송하는 메서드
    private void sendMessage(final Reminder reminder) {
		...
    }
}

 

 주기적으로 실행될 로직의 메서드에 @Async붙이는 것을 권장하기도 한다. 만약 10초마다 로직이 수행된다고 가정할 때, 이전 작업이 10초 안에 끝나지 않는 경우 다음 작업을 실행할 때 문제가 될 수 있기 때문이다. 현재 줍줍에서는 10분마다 메시지를 전송해주고 있고 가능하면 모든 로직을 1분 내에 전송해야할 뿐더러 5분이 넘어가면 내가 설정한 시간보다 훨씬 넘어서 알림이 도착하는거니까 이슈 상황이라고 판단했기에 굳이 해당 어노테이션을 붙이지는 않았다.

 

 

💛 LocalDateTime.now() 테스트하기

LocalDateTime.now()가 로직에 들어가면서 테스트가 곤란한 상황이 발생했다. 테스트 코드에서 어떻게 모킹 처리했는지에 대해 다뤘다.

 

👉 https://yeonyeon.tistory.com/258

 

[Mockito] LocalDateTime.now() 테스트하기

목차 서론 static method 조롱하지 않기 테스트 코드 작성 현재 시간을 구하는 클래스 LocalDateTime.now() 모킹 테스트 데이터 변경 Clock 이용하기 최종 선택 1. 서론 😄 `줍줍` 프로젝트에서는 내가 원하

yeonyeon.tistory.com

 

💛 Exception 패키지 구조 변경

지난 레벨 때 단순할거라고 생각했던 도메인이 점점 커지면서 패키지 구조 변경이 일어났다. 모두가 공통적으로 발담고 있는 Exception 패키지는 섣불리 건드리지 못하다가 드디어! 변경을 했다.

 

변경된 exception 패키지 구조

 

우리 팀은 Custom Exception을 적극적으로 사용하는 편이었기 때문에 exception이 정말 많은 편이었다. 가장 많이 고민했던 부분은 어떻게 해야 원하는 exception 클래스를 빨리 찾기 쉬울까? 였다. 그 결과 exception 폴더는 공통적으로 사용하니 바깥에 두고 그 안에서 도메인에 따라 Exception을 분리하게 되었다.

 

 BadRequestException과 같은 클래스는 Exception을 처리하기 위한 ControllerAdvice에서 쉽게 활용하기 위해 Exception을 계층형으로 분리하다보니 생겨난 클래스이다. 이 부분에 대해서는 장바구니 미션의 4-2. 커스텀 예외 클래스를 참고하길 바란다.

 

 

💛 ssh 명령어 편하게 쓰기

 같은 팀원인 봄이 가르쳐준 방법이다. ssh 명령어를 치는게 너무 귀찮아서 메모장에 복붙해서 썼는데 훨씬 더 간편하게 쓰는 방법을 가르쳐주었다. 😆

 

👉 https://yeonyeon.tistory.com/259

 

ssh 명령어 편하게 쓰기

🤗 서론  나는 ssh 명령어 치는게 너무 귀찮다! 현재 진행하는 프로젝트에서는 백엔드 개발서버, 백엔드 운영서버, Jenkins 서버, SonarQube 서버 등등등 여러 인스턴스를 접속할 일이 많다. `ssh -i 키.

yeonyeon.tistory.com

 

 


2. 있었던 이야기 💌

 

💖 김범준님 특강

우형 CEO이신 김범준님의 특강을 들을 기회가 되었다. 인상 깊게 들었던 이야기들이 있어 메모해둔 것 중 일부를 기록해둔다🙂 단순하게 메모해둔 것을 풀어서 옮기다보니 범준님의 의도와는 맞지 않은 이야기가 있을 수 있다.

 

🔻 메모

더보기

❓ 경제 상황 때문에 취업 시장이 좁아지고 있는데 우형의 채용 계획? 우테코에서 전환율
👉 오히려 이럴 때 좋은 개발자를 많이 확보해야겠다는 생각. 개발자 인원 축소 계획은 없음.
우테코의 전환 비율은 정해지지 않음. 회사와 잘 맞는 사람이 정말 많다면 8~90퍼까지도 뽑을 의향이 있음.

❓ 배민이 타사에 비해 어느 포인트에서 기술적 우위가 있다고 생각하시는지?
👉 트래픽. 많은 사람들과의 협업. 우형만의 문화.

시스템이 얼마나 병렬적으로 잘 진행되었는가. 확장 가능성. 커다란 시스템에서 새로운 요구조건을 받았을때 얼마나 빠르게 대응할 수 있는가. 등등

❓ 팀원들간의 갈등을 해결하는 노하우?
👉 관계에서의 갈등은 `관계`보다는 내가 무엇을 해야하지? `내 목표`에 초점을 맞춰보아라. 개개인마다 스타일의 차이보다 목표 달성에 집중할 수 있게 된다. 목표 목록을 정리해보고 우선순위를 나열해서 의견을 나누다보면 어떤 시야를 갖고 어떤 시도를 했던건지 서로를 이해할 수 있음.

좋은 회사란? 
👉 사람마다 기준이 다르니까 어느 회사가 좋다라고 단정짓기는 어렵다.

신입이 들어가기 좋은 회사란?

-> 신입을 소중히 생각하는 회사 아닐까?
-> 신입을 소중히 한다는건?

-> 시간, 돈을 어디에 쓰는가. 말만 하는 사람 X

리더가 되려면 어떤 역량이 필요할까요?
👉 (본인은) 리더가 되고싶다는 생각을 하며 리더가 되진 않았다. 권위는 주어지는 것이 아니라 획득하는 것이다. (권한 != 권위). 권위는 팀장이 되었다고 자동으로 생성되는 것이 아니라 스스로 획득해야 한다. 리더가 아닌 팀원도 권위가 있을 수 있다. 어느 자리에 있던 리더 역할을 하다보면 실제로 리더라는 자리가 따라오게 된다.

 

💖 마광휘님 특강

우형의 프론트 개발자이시자 리뷰어로도 활동해주셨던 마광휘님의 특강을 들었다. 마찬가지로 메모 중 일부를 기록해둔다🙂 단순하게 메모해둔 것을 풀어서 옮기다보니 광휘님의 의도와는 맞지 않은 이야기가 있을 수 있다.

더보기

성장의 목적이란?

  • ex1: 시장에 뒤쳐지지 않기 위해
  • ex2: 원하는 회사에 취직하려고
  • ex3: 어떤 도메인이든 상관없이 서비스를 개발하기 위해

나는 왜 성장해야하는가? 왜 성장하고 싶을까? 막연하게 생각하지 말고 구체적이고 명확하게 생각해보자.

❗ 기록과 함께 성장하기

  • 공부한 내용
  • 논의/논쟁한 내용
  • 도메인 지식
  • 짧은 아이디어, 오늘 한 일, 회고글, ...

👉 모든 영감, 생각, 공부한 내용들

 

기록을 통해 생각들을 검증하는 절차 거쳐야한다.

👉 정리 능력 및 문장 표현 성장

 

❗ 왜? 라고 생각하기

  • 이해를 넓게 한다 != 깊게 한다
  • 이해 넓게 하기
    • 내가 알고 있는 깊이에 맞는 주변 지식을 익힌다
    • 지식 설명을 할 때 주변 지식을 통해 더 쉬운 설명이 가능
  • 이해 깊게 하기
    • 넓이는 확장이 쉽지만 깊이는 공부가 어려움
    • 더 잘하고, 더 유니크하려면 깊어야 함

👉 왜라는 질문을 통해 수평적 / 수직적 이해 확장하기

 

💖 써머, 브라운과의 식사 타임

바스버거 냠ㅎㅎ

 우테코 크루 써머가 코치와의 식사 쿠폰을 갖고 있어서 코치 브라운과 식사 타임을 갖게 되었다. 고맙게도 나를 동행인으로 데려가 주어서 바스 버거를 맛나게 얻어먹었다. 😋

 

 가벼운 농담과 장난을 치다가 요즘 프로젝트 근황이나 겪고 있는 문제에 대해 이야기하기도 했다. 그러다 취업에 대한 고민이 나왔다. 요즘 면접이나 코테 준비를 하는 사람들도 많고 CS 스터디도 정말 많은데 나만 아무것도 안하고 있는 것 같아서 불안하다는 이야기를 했다. (취준에 대한 막연한 두려움..😰) 브라운이 CS 지식을 둘둘 외우기 보다는 현재 프로젝트에서 어떤 것을 겪고 어떤 어려움이 있었는지 그리고 이를 해결하는 과정이나 생각했던 것들에 대해 집중하는 것을 제안해주셨다. 또 프로젝트를 진행하면서 궁금했던 지식들을 깊게 파는 사람이 더 매력있게 느껴진다고도 말씀해주셨다. 프로젝트와 면접 준비 사이에서 갈팡질팡하고 있었던 마음이 이제서야 내려놓아진 기분이다. 

 

 이제와 생각해보자니 전에 비슷한 이야기를 들었던 것 같다. '공부는 목적이 아니라 수단이다.' 나는 여태 공부를 하기 위해 CS 공부 해야할 것 같은데.. 면접 공부 해야할 것 같은데..? 이런 식으로 갈팡질팡했던게 아닐까? 목표를 분명히 다잡고 목표를 달성하기 위해 어떤 수단(ex:공부)을 동원할 수 있을지 생각해보아야겠다.

 

 


3. 레벨3 마무리 🌊

 

 

💙 외부 서비스에 종속적인 프로젝트

 줍줍은 Slack의 불편함에서 비롯된 주제이다보니 대부분의 기능이 Slack에 의존적일 수 밖에 없다. 데이터의 접근 권한이나 사용 규칙 등등... 처음에 주제를 잡을때는 외부에 종속적인 서비스이니 다양한 경험을 할 수 있을 것 같아 오히려 좋아! 라고 생각했다. 개발이 진행될수록 이런 멋진 팀플을 겪을 일은 많이 없을텐데 기술적으로 한계가 있는 것에 대해 아쉬움이 생겼다.

 

 어떤 트친분께서 올린 글이 하나 기억에 남는다. '기술 집착보다 서비스 구현에 초점'을 맞추라는 말이었다. 우리 팀에서 정말 많은 주제들이 나왔을 때 그 중 줍줍이 선택된 이유는 '우테코 생활을 하면서 느낀 가장 큰 불편함을 우리가 직접 해결하고 싶다.'였다. 초심으로 돌아와 서비스 구현에 집중하자고 생각하니 줍줍을 개발하는게 다시 즐거워졌다.🙂

 

 

💙 방학 계획

불꽃놀이 ㅎㅎ

방학 5일차에야 올라오는 회고글에서 추측할 수 있다시피... 끝내주는 방학을 보내고있다. 방학이 시작되자마자 서핑하러 양양을 다녀왔다. 양양을 다녀오고 나서는 전주에 가서 한복도 입고 맛난거 많이 먹고왔다. 오늘 내일은 집에서 공부 좀 하면서 쉬다가 목금에는 글또콘, 인프콘을 다녀올 예정이다. 그렇게 이번 주가 다 지나가면 주말에는 대전에서 열린다는 와인 페스티벌을 다녀올 예정이다. 그리고 방학 마지막 날에는 모각코😏 7일 중 6일을 우테코-집을 왔다갔다 하다가 다른 곳도 갈 수 있다 생각하다보니... 일정을 너무 꽉 잡기는 했다😅💦 거의 하루도 빠짐없이 일정을 잡았지만 그래도 즐겁다.😆 

 

 

💙 레벨4 계획

레벨 4 미션이 뭔지 몰라서 구체적인 계획은 잡지 못하겠지만... 일단 스터디를 하고 싶다. 레벨3 기간이 정말정말 바빴지만 스터디를 거의 참가하지 못한 것이 너무 아쉽다. 프로젝트에 집중하자는 취지에서 스터디를 안했었지만... 역시 난 다른 사람들과 함께 하는 것이 의욕도 생기고 즐겁다.😂 기능 개발에 급급해 공부하지 못했던 키워드들이나 프로젝트 리팩토링, 성능 개선과 관련해서도 찾아보고 싶다. API 하나 호출할 때마다 몇 번의 쿼리문이 나가는지, 쿼리문 호출되는 개수에 따라 성능 이슈가 정말 클지.. 스케쥴을 사용한 부분은 성능적 이슈가 없을지.. 내가 짰던 코드들 방학 지나고 나서 봐도 과연 이해할 수 있을지 이런 것들🙃

 

+

데모 영상 바로가기 👉 https://youtu.be/VmXdJLkfBVE

 

반응형