[회고] Dev-Camp 회고록

손시연·2022년 12월 3일
1

회고

목록 보기
2/3
post-thumbnail
프로젝트 깃허브

🏫Soongsil-Developers

🚗Dev-Camp

Soongil-Developers는 숭실대학교 출신 개발자들의 커뮤니티이다. Soongsil-Developers Slack 채널에서 다음과 같은 이야기가 나왔고, 현직자 선배님들의 선한 영향력으로 Dev-Camp가 시작되었다.


🌍확장성을 가진 채팅 서버 구축

🚕주제 선택 계기

Dev-Camp에 다양한 주제가 있었지만, 확장성을 가진 채팅 서버 구축 에 신청서를 냈고, 운이 좋게 합격하게 되었다.

주제 선택의 계기는 크게 두 가지인데, 첫번째는 동일한 프레임워크로 개발하는 사람들을 만나보고 싶었던 것이고, 두번째는 기존의 CRUD를 벗어나 WebSocket을 경험해 보고 싶었다.

주변 동기들을 돌아보면 spring 프레임워크를 사용하는 백엔드 개발자가 없었다. 관심사가 백엔드인 사람들이 필요했고, 그들과 백엔드 이야기를 나누고 싶었다. 확장성을 가진 채팅 서버 구축 팀은 백엔드 개발자 4명으로 구성되고 RESTful하게 개발한다는 점에서 끌렸다.
또, 백엔드 비즈니스 로직을 짤 때 CRUD의 틀을 벗어나지 못하는 단조로운 느낌을 받았다. WebSocket, Stomp, Kafka, Redis, NoSQL 등 게시판 유형의 프로젝트와는 다른 색다른 경험이 필요했다.

🚓구조

프로젝트 목표는 확장성을 가진 채팅 서버를 구축하는 것이다.

트래픽 분산과 서버 부하 등을 이유로 여러 개의 채팅 서버를 구축해서, 로드밸런서가 트래픽에 따라 이를 분산하는 구조를 가진다. 사용자는 로드밸런서를 통해 채팅 서버에 입장하고, 채팅 서버는 메시지 처리와 관련된 웹 소켓 부분과, 방 생성, 삭제, 방 또는 메시지 목록을 반환하는 등의 API 부분으로 구성되어 있다. 메시지 큐를 통해 다른 채팅 서버에서 전송된 메시지도 서로 송수신 할 수 있게 되며, 메시지 정보, 채팅방 정보, 사용자 정보는 모두 DB에 저장된다.

🛺DataBase

DB로 SQL을 사용하였다.

채팅 메세지가 확장성을 중시하고 무결성은 강하게 보장하지 않아도 된다는 점에서 성능상으로 NoSQL이 더 적합하다.
그럼에도 불구하고 SQL을 사용한 이유는, 시간이 생각보다 촉박해 SQL보다는 상대적으로 학습 경험이 부족한 NoSQL을 선택하기에 부담이 있었다. 특히 테스트 서버 수준에서는 SQL을 사용하나, NoSQL을 사용하나 성능상 큰 차이가 나지 않을 것으로 예상했다. 차라리 SQL을 사용하여 Spring Data JPA에 관한 지식을 보완하고, 관계형 DB의 테이블을 설계하는 경험을 쌓는 취지에서 SQL을 선택했다.
대신에 프로젝트가 끝나고 NoSQL로 변경하기로 했다!


💻개발

☁️인프라

CICD와 배포를 담당했다. 소공전을 하며 어깨너머 배웠던 Github actions, AWS S3, CodeDeploy, AWS EC2, ELB를 사용했다. 블로그와 책을 보며 CICD를 했지만 여전히 궁금한 게 너무 많았다. IAM은 왜 지정하는지, S3와 EC2의 차이는 무엇인지, VPC가 무엇인지, CICD를 하지 않고 배포는 어떻게 진행하는지, 환경변수는 어떻게 삽입하는지 등 과정 중 생기는 의문점들을 모두 노션에 정리하고 해결하며 진행했다. 확실히 개발은 이해와 논리를 바탕으로 해결해야 재밌다.

🚀코드 리뷰

함께 나누고 성장하는 개발자가 되자!

백엔드 개발자가 4명이나 되다 보니 각자마다 개발 스타일, 코드 스타일이 달랐다. 나는 클린코드를 지향한다. 불필요한 로직은 과감히 삭제하고, 코드의 재사용성을 최대한 줄인다. 그래서 코드 리뷰에 오랜 시간을 부었다.
Xxx 엔티티에서 XxxResponseDTO로 변환할 때 from() 메서드를 사용하는 것을 예로 들어보자.

  • 기존 코드
 public RoomResponse getOne(Long id) {
        Room findRoom = repository.findById(id)
            .orElseThrow(() -> new IllegalArgumentException("없는 방입니다."));
        RoomResponse response = RoomResponse.builder()
                        .id(findRoom.getId())
                        .roomName(findRoom.getRoomName())
                        .build();
        return response;
}
  • 내가 작성한 코드 리뷰

처음에는 코드를 지적하는 것에 기분이 나쁘지 않을까 코드리뷰를 망설였다. 어쩌다보니 PR 1개에 comment를 20개씩 작성할 때도 있었고, 나의 코딩 스타일을 강하게 주장하는 느낌이 나지 않을까 걱정했다. 그런데 예상 외로 팀원들이 나의 꼼곰한 코드 리뷰에 깜짝 놀랐다며 칭찬을 해 주었다😮 내 코드 리뷰를 보면서 많이 배운다니 뿌듯하기도 했다! 지식의 나눔은 늘 즐겁다 :)


🐚커뮤니케이션

인프라, 코드 리뷰 보다 더 많이 배운 것이라면 커뮤니케이션을 잘하는 방법과 그것의 중요성이다.

🤝팀원들과 소통

정확한 정보를 바탕으로 최대한 빠르게 대답하자!

예전에는 정확하진 않더라도 즉각적인 커뮤니케이션을 지향했다.
개발에 관한 질문이든, 학교 수업에 관한 질문이든, 과제에 관한 질문이든, 내가 아는 선에서 최대한 빨리 답변을 해 주는 것이 예의라고 생각했다. 그러다보니 간혹 잘못된 정보를 전달할 때도 있었지만, 그저 실수라고 생각하고 가볍게 넘어갔었다.

그런데 Dev-Camp 팀원들에게 질문하면, 읽고선 몇 십분이 지난 후에 답장이 왔다. 처음에는 당황스러웠고 약간 답답했다. 그들의 답장만을 계속 기다릴 순 없었고, 빨리 해결하고 싶은 마음이 컸기 때문이다.

그런데 답장을 받아보면 늘 정확한 지식을 바탕으로 논리적인 해답을 건내주었고, 나의 방식이 어딘가 잘못되었음을 느겼다. 부정확하더라도 빠른 정보 전달의 문제점을 깨달았다. 문득 실수들이 쌓이고 쌓여 며칠을 삽질해야 해결하는 에러를 낳을 수 있겠다 생각이 들었다.

그때부터 나도 팀원들을 보며 정확한 정보를 바탕으로 답변해주는 연습을 했고, 최대한 빠르게 답변하려 노력했다. PR에 대한 코드 리뷰도 발견 즉시 꼼꼼하게 읽어보고, 아는 내용도 찾아보고 나서 최대한 자세하게 기술했다.

아래 코드 리뷰는 Delete에 대한 응답 메시지를 OK에서 NO_CONTENT 로 변경 요청하는 내용이다. 응답 메시지 지정을 모르는 팀원을 위해 최대한 자세하고 이해 가능하게 작성하려 노력했다👍

👩‍💻좋은 개발자란?

개발 능력과 커뮤니케이션 능력을 모두 챙긴 개발자가 되자!

휴학(5개월)+소공전(2개월) 간 개발 능력이 폭발적으로 성장했다. 그래서 그 당시에는 좋은 개발자는 개발 능력이 뛰어난 개발자라고 생각했다. 필요한 논점을 논리적으로 콕 집어서 얘기하고, 늘 깔끔한 로직에 대해서 고민하는 엔지니어를 지향했다. 그러다보니 나의 생각을 부드럽게 표현하는 방법을 잠시 잊었다. 책상에 앉아 컴퓨터와 대화하는 시간이 늘면서 딱딱한 사람이 되어 갔다.

그러다 팀원 중 한 명이 나에게 말했다. "너의 생각을 조금 부드럽게 말해줬으면 해"

팀원의 솔직한 조언이 내 삶 전반적인 곳에 많은 영향을 끼쳤다. 그때부터 부드러운 대화를 위해 이모지들(👍 😮 😀) 들을 적극적으로 사용했고, 상대방의 입장에서 다시 생각해보는 습관을 가지기 시작했다.

여담이지만, Dev-Camp가 시작될 쯤에 개발 동아리 면접을 봤었는데, 좋은 개발자가 무엇이라 생각하냐는 질문에, 프로젝트의 확장성을 고려해 객체지향적으로 개발하는 개발자라고 답변했다. 하하.. 지금 생각하면 당연히 커뮤니케이션을 유연하게 하는 개발자라고 답변할 것 같다.

개발 능력은 개발자의 내재적 요소일 뿐 장기적으로 성장시켜야 할 요소이고, 커뮤니케이션 능력은 개발 능력에 날개를 달아줄 핵심이자 외재적 요소이다. 커뮤니케이션 능력은 생각 그 이상으로 중요했다.


👜총평

  1. 욕심은 너무 크게 갖지 말자
    • 공모전이랑 겹쳐서 스트레스를 많이 받았다😿
  2. 좋은 개발자는 커뮤니케이션이 중요하다
    • 말 예쁘게 하는 습관⭐
profile
Server Engineer

2개의 댓글

comment-user-thumbnail
2023년 6월 25일

안녕하세요. SW중심대학 해커톤에 참가하는 사람 중 한명입니다!
자기소개에 올라온 velog 보다가 기술을 선택할 때 고민을 많이하시는게 좋아보여 댓글달아봅니다 👍
열공하십쇼~!!

1개의 답글