- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- container
- Project
- 캐싱전략
- 브랜치전략
- redis
- docker
- EntityTransaction
- Spring Security
- SPRING JWT
- 책
- 후기
- spring
- 프로젝트
- SpringBoot
- Java
- 리뷰
- 팀네이버
- 만들면서 배우는 클린 아키텍처
- JPA
- jenkins
- chrome80
- LazyInitialization
- 젠킨스
- JWT
- 팀네이버 공채
- websocket
- Kotlin
- 스프링
- infra
- network
PPAK
2022년 톺아보기 본문
그 어느 때보다 짧았던 2022년 한 해가 끝나간다.
오늘 졸프 최종 성과발표회가 끝나 찐종강을 하기도 했고, 올해 무엇을 했나 정리도 할 겸 어찌보면 고리타분할 수 있는 한 해 마무리를 주제로 글을 한번 작성해보려고 한다.
올해의 키워드를 세 가지 꼽아보라고 누군가 물어본다면 나는 주저없이 배움, 성장, 도전 이라고 말하고 싶다.
복학 이후 내가 생각하는 가장 운이 좋은 일은 개발이 내 생각보다 더 적성에 잘 맞다는 것이다. 물론 아직 진정한 의미의 개발은 안했을지 모른다. 아니 안했다. 하지만 적어도 지금까지 내가 바라보는 미래 개발자로서의 나의 모습은 굉장히 긍정적이다. 이것은 내가 단순히 재미만 있어서가 아니라 현실적인 어려움등을 같이 고려해봤을 때 내린 결론이다.
내가 생각하는 여러가지 현실적인 어려움 중 하나는 배움이다. 어느 일이던 배우지 않으면 안되는 것은 같지만 개발자로서의 배움은 굉장히 적응력을 필요로 하는 것이라고 생각한다. 이 말은 우리가 흔히들 이야기하는 다변화 하는 IT 트렌드 속에서 어떻게 살아남을 수(?) 있을지를 고민하는 것과, 새로운 기술에 대한 관심 그리고 배움의 자세를 이야기 하는 것이다.
(2022.01.01 ~ 2022.12.31)
나는 올해 짧은 기간 동안 CS 전반적인 전공 학습을 했었고, 항상 궁금했던 왜? 라는 궁금증의 매듭을 하나하나씩 풀어나가는 과정을 경험했다. 모든 분야를 순탄하게 학습했지만 특히 네트워크나 운영체제에서 내 주변 디바이스가 동작하는 방식들을 배울 때 특히 재밌었다. (대학원 안갑니다).
결과적으로 모든 학기에서 만족스러운 결과를 낼 수 있었고 나 스스로 큰 동기부여를 받았던 것 같다.
내가 배움을 지속할 수 있는 또 하나의 이유는 내가 배우고 느낀 것이 더 나은 서비스를 만드는데 도움이 될 것이라는 것을 확신하기 때문이다. 기존에 배운 전공 지식이 새로운 기술을 이해하는데 도움이 된다는 것을 작은 프로젝트를 몇 개 완성하면서 느꼈고 특히나 시스템 설계 측면에서 고려할 수 있는 부분이 더 다양해 진다는 것을 느꼈다. 분명 나는 이것이 더 나은 시스템 즉 서비스를 구축하는데 도움이 될 것이라 믿는다.
올해의 나는 개발자로서 그리고 누군가의 팀원으로서의 성장에 집중했다.
예전부터 내 손으로 어떤 효용을 내는 무언가를 만드는 것이 늘 내 관심사에 자리잡고 있었다. 전역 후에는 참여하던 회와 모임 관리를 해보겠다고 처음 접해본 웹 프로그래밍(그 땐 클라이언트고 서버고 뭐 아무것도 알지 못했다. 누구나 한번쯤은 거치는 HTML, CSS, JS 입문 단계 정도..?, 이것도 많이 쳐준거다) 을 맨땅에 헤딩하듯 Django 로 개발했던 기억이 난다. 조금 부끄럽지만 웃기게도 그 경험이 내가 좋은 개발자가 되겠다고 다짐했던 계기가 되었다. 그 후 일년의 짧은 기간 동안 전공 학습과 더불어 서버 개발자로서 학습을 이어나갔다.
시스템 인프라를 설계 하면서 여러가지 애플리케이션을 사용해 봤지만 올 한해 가장 내 성장에 가장 큰 기여를 해준 GOAT 는 단연 스프링이다. 특별할 건 없지만 그래도 나름 꼼꼼하게 분석하며 사용하고 있다고 생각한다. 스프링을 사용하면서 느낀 것은 잘 만들어진 프레임워크를 가지고 개발하는 것 만으로도 굉장히 많은 것을 배울 수 있다는 점이다. 하나의 사족으로 여기서 배우는 것은 프레임워크에 종속적인 기술이라기 보다는 개발 철학과 설계 구조를 의미한다.
그 중 단연 크게 공감하고 느낀 것은 관심사(역할, 책임) 의 분리다. 사실 역할과 책임의 분리는 필연적인 것이라고 생각한다. 모든 일이던 분할 혹은 병렬로 작업하고 서로 간의 불필요한 의존성을 줄이는 것이 장기적인 관점에서 좋은 것이다. 하지만 그 구조를 설계하고 실행에 옮기는 것이 어려워 하나의 방법론으로 자리잡고 있다고 생각한다. 이 관점에서 스프링의 MVC 아키텍처가 굉장히 흥미로웠고 Spring Security, WebSocket, Kafka 와 같은 기술들을 사용하면서 시스템의 구조에 대한 고민을 굉장히 많이 했던 것 같다.
개발 간 역할과 책임의 분리는 비단 애플리케이션 레벨에서만 존재하지 않는 것 같다. 올 한 해 여러 프로젝트를 진행하면서 내가 팀원으로서 그리고 팀장으로서의 했던 고민 중 하나는 어떻게 하면 가장 잘 협업할 수 있을까에 대한 것이다. 나에게 잘 협업한다는 것의 의미는 팀원 각자가 만족할 만한 역할을 맡아 공통된 목표를 정해진 기한 내에 완수하는 것이다. 그 과정에서 팀원들의 관심사를 파악하고 목표를 단계적으로 분할한 후 단기적 목표를 세워 달성해간 것이 올해는 가장 큰 도움이 됐던 것 같다.
하나의 프로젝트에 임하는 이유와 목표는 저마다 조금씩 다를 수 있다. 그 중에서도 이 맘 때 쯤에는 개개인의 성장에 집중할 시기인데 프로젝트의 목표를 달성하려다 보면 모든 만족을 충족하지 못하는 경우가 있다. 나 역시 개인의 성장이 중요했지만 올해는 주어진 프로젝트를 잘 마무리 하는데 초점을 두고 팀원 각자의 역량을 고려했을 때 어느 포지션에서 업무를 진행해야 하는지 결정하는데 고민을 많이 했던 것 같다. 결론적으로 이번 하반기에는 클라이언트, 서버 할 것 없이 개발을 맡았고 부족하지만 개인적으로는 만족스러운 결과물을 얻었다. 그 과정에서 큰 마찰 없이 나의 결정을 따라준 팀원들에게 감사한 마음을 느끼고 있다.
(2022.07.04 ~ 2022.11.09, 리팩토링 중)
시간이 지나서도 잊을 수 없는 소중한 프로젝트 중 하나이다. 하계 방학 기간 중 Open Up 에서 진행한 공개 SW 개발자대회에 참여했다. Django 로 웹을 개발한 이후 기간으로 따지면 8개월 간 학업과 스프링 프레임워크에 대한 학습을 병행하면서 기본적인 통신과 인프라에 대한 지식을 습득한 후 시작한 첫 스프링 프로젝트다.
본 프로젝트에서는 팀장으로 서버 개발을 맡아 7~11월 까지 약 5달 간 팀원들과 함께 대회를 진행했다. 여러 분야에서 온라인 인프라가 형성되고 있는데 반해 주거단지 내에서는 이렇다할 IT 인프라가 구축되지 않고 있었고, 그 원인이 초기 개발 단계의 복잡성 때문에 발생하는 비용문제 때문이라고 생각했다. 따라서 다양한 형태의 주거단지에 적용가능한 관리 모델을 주제로 초기 관리 시스템의 기반이 되는 오픈소스를 개발하는데 목표를 두고 개발을 진행했다. 올해 첫 프로젝트로 이웃사이를 진행한 것은 굉장히 큰 행운으로 생각한다. 오픈소스화를 목적으로 확장성과 관련된 여러가지 고려사항을 수집했고, 그것이 프로젝트를 설계하는데 큰 도움이 되었다. 또한 팀원 모두 프로젝트에 적극적으로 참여했고 명확한 공통 목표가 있어서 수월하게 진행할 수 있었던 것 같다.
외적으로는 전체 일정 관리와 발표를 맡았고, 개발 간에는 기본 모델 설계 및 스프링을 통한 기본적인 REST API Server 구축(Spring MVC, Spring Security, Spring Data JPA, WebSocket, Redis, Server Logging 등의 기술 사용) 했고 인프라 구축(GCP SaaS, Jenkins, NginX) 을 담당했다.
결과적으로 다섯 달의 기간 동안 (1차 종합 평가 - 멘토링 - 기능 테스트 - 라이센스 검증 - 최종 발표 - 2차 종합 평가) 과정을 거쳐서 학생 부분 약 230개 참여 팀 중 5등(동상) 이라는 좋은 결과를 얻을 수 있었다. 시상식은 코엑스에서 진행됐는데 생각보다 큰 규모로 진행돼서 깜짝 놀랐던 기억이 있다(군 복역 중 봤던 군 장병 오픈소스 개발 대회(?) 또한 오픈업에서 진행한다는 것을 처음 알았다) 당일 여러 기업에서 특별 세션을 진행했는데 마지막 노코드에 대한 전문가분(+ 유튜버 조코딩님)들의 의견을 들을 수 있는 좋은 기회도 있었다.
마지막으로 이 글을 쓰고 있는 지금도 이웃사이에 대한 리팩토링을 고민하고 있다. 과업 중 하나인 무중단 배포를 수행하고, 메세지큐 서버를 도입해 메인 서버의 트래픽 부하를 분산하여 비동기적으로 작업을 수행하도록 성능을 개선해 나가는 것이 1차 목표다.
(2022.09.23 ~ 2022.09.25)
본 프로젝트는 객관적인 내 위치를 알 수 있었던 프로젝트다. 학부에서 개최한 행사로 약 5일간의 기간동안 기획부터 개발까지 모두 수행하는 일종의 해커톤이다. 내가 과연 5일 동안 어느 정도의 서비스를 만들 수 있을까 궁금하기도 했고, 마침 운이 좋게 협업을 제안한 디자인학과 친구가 바쁜 와중에 수락을 해서 프로젝트를 진행하게 됐다.
기존 민원 관리 서비스는 전통적인 게시판 형식으로 운영됐기 때문에 민원에 대한 시각적인 정보를 효과적으로 나타내지 못했다. 반면 지역 내에서 발생하는 민원은 위치 정보를 포함해야하는 경우가 많고 이런 형태의 민원을 주민, 지자체와 공유할 수 있는 서비스를 개발했다. 이를 위해 지도 뷰를 기반으로 핀을 꽂아 민원을 작성하는 서비스를 기획했고 5일 간 기획부터 개발까지 모두 완료했다.
본 프로젝트에서는 팀장으로 서버 개발을 맡았고 5일 간의 기간동안 모델 설계, 기본 배포 환경 구축, Spring 기반의 REST API Server(개발 스택은 이웃사이 프로젝트와 유사) 를 구축했다. 해커톤 형식의 프로젝트의 개발 부분에서는 얼마나 기술의 원리를 잘 이해하고 있는가를 간접적으로 평가할 수 있다고 생각한다. 왜냐하면 굉장히 촉박한 시간 내에 애플리케이션을 하나씩 추가하는 것이 쉬운일이 아니기 때문이다. 그래서 내가 무엇을 할 수 있는지 없는지를 분류하는 것이 중요했었다.
결과적으로 5일 간의 기간 동안 인프라는 Jenkins 를 통한 자동 배포 환경 구축, 클라우드 원격 배포, 서버 로깅 정도로 마무리 했다. 시스템의 경우 민원, 게시글, 유저, 핀의 정보를 저장할 수 있는 모델을 설계하고 대표적인 기능으로 인증 인가, 게시글 관리, 핀 관리, 좋아요, 이미지 원격 저장 정도로 마무리 했다.
결과적으로 주변의 많은 학부생으로부터 많은 박수를 받은 프로젝트지만 이상하게도 심사위원분들은 그렇게 생각하지 않은 듯 했다. 우리팀은 완성도, 아이디어, 활용도 측면에서 학부 1등을 노리던 출품작인 만큼 자신 있었고 근거 없는 자만 보다는 노력에 대한 확신에 가까웠다. 우리 팀원들은 충분히 작품에 대한 자신이 있었고, 다른 작품들을 우리가 감히 평가할 수 없기에 수상조차 하지 못한 이유를 애써 찾으려 하진 않았다.
본 프로젝트 역시 나에겐 그 의미가 크다. 처음으로 디자이너와 협업을 했고, 농담이 아니라 왜 전문가가 존재하는지 생생하게 느낄 수 있었던 기회였다 역시 관심사의 분리 . 우리가 만든 시스템의 꽃을 피워준 곽나에게 정말 고맙다는 말을 다시 전하고싶다. 그 때 내 눈에는 충분히 멋있던 팀원들이 상심하고 본인을 의심하는 모습을 보는 것이 참 마음 아팠지만 얼마 뒤에 더 큰 대회에서 수상하고 다 잊은 듯 해보여 다행이다 푸하하~~ 너네가 최고야
(2022.09.10 ~ 2022.12.15)
학기 중에 진행한 종합설계 프로젝트다. 대구 지역에 위치한 IT 중소기업과 협업(?)해서 프로젝트를 진행하는데, 운이 좋게도 웹 프로젝트로 배정이 되어 한 학기동안 중소기업 맞춤형 창고관리 시스템을 개발할 수 있었다.
특정 도메인의 시장을 이렇게 면밀하게 살펴볼 기회가 잘 없었는데, 해당 프로젝트를 진행하면서 물류 중소기업 답사 결과를 들었을 때 확실히 IT 인프라를 구축하는 것이 어려워 보였다. 특히 여전히 수기 장부로 재고(창고) 관리를 진행하는 기업들이 많았고 해당 기업들을 대상으로 재고관리 자동화를 목표로 시스템을 구축을 목표로 프로젝트를 진행했다. 유사한 경쟁 서비스가 있었지만 사업 규모가 작은 중소기업에서는 다양한 기능을 가진 시중의 서비스가 오히려 복잡하기만 하고, 시스템 사용에 익숙해지기 위해 들어가는 시간 자체가 부담이 되는 경우가 있어 재고 관리에 필요한 컴팩트한 기능과 오픈마켓 연동에 집중한 시스템을 구축하기로 계획했다.
본 프로젝트에서는 팀장으로 프론트, 백엔드 개발 리드를 했다. 팀원 간 역할 분담을 하다보니 웹 프론트 개발이 가능한 인력이 부족했기 때문에 프론트를 같이 맡아 진행을 했다. 물류 관리에서 필요한 발주, 입고, 수주, 출하의 프로세스에 대한 도메인지식이 부족하기도 했고, 나를 제외한 나머지 팀원들은 대부분 첫 프로젝트라 시스템과 프레임워크에 익숙해지기 위한 학습 과정이 선행되었다. 다들 적극적으로 참여해서 빠른 기간 내에 샘플 코드를 작성할 수 있는 단계로 넘어갔고 순조롭게 개발을 진행할 수 있었다.
클라이언트 개발은 기존 코드 사용을 이유로 바닐라JS 와 JQuery, 상용 그리드 를 이용해 개발을 진행했다. 프론트 개발을 맡았다고는 하지만 나 역시 기초적인 지식을 가진채로 시작해 초기 코드를 작성하는데 까지 학습을 진행했다. 사측에서도 기존 코드라는 것이 직접 작성한 것이 아니고 어디서 가져왔는 것이라 아쉽게 코드에 대한 정보를 얻지 못해 직접 분석하는 시간이 정말 고됐던 것 같다. 그래도 본 프로젝트 덕분에 미약하게나마 클라이언트가 서버로 어떤 것을 요구할 수 있을지, 무엇이 제공되면 더 개발하기 수월할지에 대한 고민을 할 수 있었다. 그 중 특히 REST API 문서, 그리고 API 요청에 대한 응답 정보의 디테일한 구성이 정말 중요하구나 라는 것을 느꼈다.
사측 서버 개발에서는 기본적인 비즈니스 로직을 구현하고, 오픈마켓의 데이터를 시스템 내에서 사용할 수 있는 데이터로 바꾸는 작업을 수행했다. 또한 기존 코드에서 비효율적으로 발생하는 쿼리 숫자를 줄이고, race condition 이 발생할 수 있는 코드 영역의 코드를 수정하는 등 피드백 위주의 작업을 수행했다.
클라이언트 개발자들에게 다시 한번 고생한다는 말을 전해주고 싶은 프로젝트다. 학기 중에 진행해서 아쉬움이 많은 프로젝트지만 그래도 논문도 제출하고, 마무리 발표까지 잘 마무리한 것 같아서 다행이라는 생각이 든다.
(2022.09.10 ~ 2022.12.15)
학기 중에 진행한 안드로이드 프로젝트다. 안드로이드는 이번 학기에 궁금해서 수강신청 했는데 기대 이상으로 재밌게 진행한 것 같다.
무엇보다 코틀린 자체가 굉장히 호감이다. 자바와 100% 호환이 되는 언어지만 코드를 작성하는 방식은 확실히 다르다는 것을 느꼈다. 일단 지금 수준으로는 이것이 독이될지 득이될지 모르지만 서로 연관된 코드를 물리적으로 가까운 스코프에 작성할 수 있다는 것이 진짜 좋은 것 같다. 특히 data class 를 키워드를 통해 짧은 코드로 VO, DTO 등을 작성할 수 있는 것이 너무 좋았다. 또 기본적으로 보수적(?)이게 모든 클래스, 필드 등을 외부로부터 닫아두기 때문에 확실히 안정적으로 코드를 작성하고 있다는 것을 느낄 수 있었다. 여전히 맛보기 수준의 코틀린 사용자이지만 꼭 가까이 두고 조금조금씩 써봐야겠다는 생각이 들었다.
이 프로젝트는 저비용 고효율 여행 일정을 어떻게 짤 수 있을까에 대한 생각을 바탕으로 나온 아이디어를 구체화 한 것이다. 기본적인 시스템 구조는 사용자가 정한 목적지 정보를 바탕으로 목적지 간 비용 정보(소요 요금, 소요 시간) 을 바탕으로 Fully Connected Network 를 구성하고, TSP 알고리즘을 바탕으로 최적의 일정을 제시하는 방식이다. 조금 더 자세하게는 Naver 키워드 검색 정보를 바탕으로 Kakao Map에 마커를 표시하고, 사용자가 선택한 좌표간의 경로 정보를 Naver Direction5 를 통해 얻어온 뒤 TSP 알고리즘을 수행하는 방식이다.
본 프로젝트에서 팀장으로 안드로이드, 서버 개발 리드를 맡았다. 안드로이드의 경우 아키텍처 패턴을 학기 중에 관련 학습을 할 시간이 부족한 탓에 잘 사용하지 못했다. 그래도 일단 팀원들이 공유할 수 있는 패키지 구조를 만들고 코드를 작성하려고 노력을 했다. 현 시점에서 코드를 작성하면서 어려웠던 부분은 뷰에 종속되는 코드와 그렇지 않은 코드를 분리하는 것이였고, 최대한 노력했으나 중간중간 내가 정한 일련의 규칙이 깨지는 경우도 있었다. 그래도 가능한 레이어를 분리하고 팀원 간 독립적으로 개발할 수 있는 환경을 만들어 잘 마무리할 수 있었다.
결과적으로 결과물에 대해서 교수님을 포함해 주변에서 좋은 평가를 받을 수 있었다. 또한 덕분에 코틀린 언어와 안드로이드 개발에 대한 기본적인 응용 경험을 쌓은 것 같다.
이번 한 해는 여러가지 학습과 도전을 했다. 우선 3학년이 되면서 본격적으로 전반적인 CS 전공지식을 배울 수 있었다. 거기서 운영체제와 데이터통신과 같은 내 궁금증을 속시원하게 해결해준 과목들을 수강할 수 있어 특히 재밌었던 것 같다.
개발자 대회에 도전해 약 5개월 간의 기간 동안 하나의 완성된 오픈소스를 개발해볼 수 있는 경험도 했다. 첫 스프링 프로젝트이기도 했고 경험이 부족해 거시적으로 프로젝트를 바라보는 능력이 부족했는데 다행히도 주변에서 좋은 조언을 해준 분들이 있어 큰 문제없이 수상까지 이어질 수 있었던 것 같다.
올해 진행한 프로젝트 4개에서 모두 팀장 역할을 맡았다. 내가 뭔갈 잘해서라기 보다는 워낙에 나서는 걸 좋아하는 탓에 주변 친구들이 배려해준 것 같아 고맙다는 생각이 든다. 그래서 나도 더 책임감을 가지고 팀원들에게 최고의 결과를 주기 위해서 부단히 노력했던 것 같다.
마지막으로 반성의 의미로 나에게 과유불급이라는 말을 전하고 싶다. 하반기에 들어서는 왜인지 모르겠지만 욕심이 자꾸나서 이것 저것 일을 벌였던 적이 있다. 다행히 큰 일은 없었지만 심적으로 부담감이 컸던 시기가 있었는 건 부정할 수 없다. 그래서 이제는 현실적인 제약들을 고려해서 내가 가장 좋은 퍼포먼스를 보일 수 있는 계획을 세우도록 노력해야겠다는 생각이 들었다. 운동도 하자 !
말고도 하고싶은 말은 많지만 주저리주저리 될 수 있어서 다른 포스팅을 하며 글을 써야겠다. 이제 밀렸던 포스팅도 조금씩하고 겨울방학 퀘스트도 하나씩 뿌셔야겠다 우하하~
겨울 방학 퀘스트
+ 이웃사이 리팩토링 (무중단 배포, 프로세스 스케줄링, 메세지큐 서버 도입)
+ 알고리즘 학습
+ 현장 실습
+ 사이드 프로젝트
과유불급이라며
'후기' 카테고리의 다른 글
[책 리뷰] 객체지향의 사실과 오해, 오브젝트 (0) | 2023.09.10 |
---|---|
[책 리뷰] 만들면서 배우는 클린 아키텍처 (2) | 2023.08.16 |
2023 상반기 팀네이버 공채 합격 후기 (feat. 백엔드) (50) | 2023.07.20 |
우아한테크캠프 6기 합격 후기 (26) | 2023.07.10 |
[책 리뷰] 자바 웹 프로그래밍 Next Step (Feat. 책 스터디) (5) | 2023.03.08 |