개요
총 4개월(+ 2개월 예정) 간 학점 연계 ICT 인턴십 업무를 수행하였고 이에 대한 회고를 작성하는 포스팅입니다.
회고는 배운 것을 중심으로 총 5가지 사항으로 나누어보았습니다.
- 회사의 운영과 협업 경험
- 사용자가 있는 서버 운영 및 개선 경험
- 사내 세미나를 통한 프로그래밍 역량 강화 및 소통 능력 향상
- 데이터 기반 사용자 경험 개선
- 백오피스 개발
회사의 전반적인 운영과 협업 프로세스 파악
스타트업 생태계의 성장 경험
인턴십 동안 빠르게 변화하는 스타트업 환경에서의 경험을 통해 깨달은 점은 능동적이고 유연한 태도의 중요성입니다. 초기 스타트업의 특성 상 예측 불가능하고 변화가 빠르기 때문에, 꼼꼼한 계획보다는 유연하게 대처하고 적응하는 능력이 중요하다는 것을 체감했습니다.
MBTI 극한의 J를 달고있는 저로서는 항상 계획적이고 꼼꼼하지만 융통성이 없는 것이 나름의 고민이었습니다.
하지만 새로운 환경에 처해서 제게 기회를 준 회사에 기여를 하고싶다는 적극적인 마음 하나로, 기존의 엄격한 기준과 태도에 많은 유연성을 첨가할 수 있었습니다.
계획이 변경되더라도 업무에 어려움이 발생하더라도, 긍정적인 마인드로 능동적으로 정보 수집과 학습을 진행하며, 새로운 도전에 적극 참여하는 것이 성장과 발전의 핵심이라는 것을 깨달았습니다. 이러한 태도로 업무를 해 나가면서 개인의 성장 뿐만 아니라 팀 전반의 효율성과 협업력에도 긍정적인 결과를 도출하기 위해 노력하는 시간이었습니다.
애자일 개발 방법론을 통한 원활한 소통
인턴십을 수행한 회사에는 daily-standup이라는 문화가 있었습니다. 개발팀이 매일 오전 10시에 짧게 업무 진행 상황을 공유하고, 업무 진행 성과 및 어려움을 공유하는 짧은 회의입니다. 사실 초기에는 진행 상황을 매일 공유하는 것이 부담스러웠습니다. 하지만 이 회의를 매일 진행하면서 제가 맡은 업무를 충실히 잘 수행하고 있는지, 올바른 방향성으로 따라가고 있는지에 대한 점검을 할 수 있는 것이 시간 자원을 잘 활용하는 것에 도움이 된다는 것을 깨달았습니다.
이를 통해 부담감을 극복하고 시간이 흐름에 따른 소통의 중요성을 이해할 수 있었습니다. 맡은 일과 성과에 대해 지속적으로 상사분들과 커뮤니케이션하며 질문하고, 방향성에 대한 피드백을 받아 효율적이고 정확한 업무를 수행하는 방향으로 지속적인 노력을 할 수 있었습니다.
커뮤니케이션 강화를 통한 소속감 증진 및 성장
daily standup에 참여하면서 어떤 것들을 메모하고 정리할지, 보고는 어떤 식으로 해야 효율적인지에 대한 고민을 많이 했습니다. 이러한 고민과 함께 매일의 회의를 통해 발표와 토론의 기회를 늘려가며, 명확하고 효과적인 발표 및 의사 전달 능력이 향상되었습니다.
또한 회의 중 일상적인 소소한 대화와 근황 공유를 하면서 좀 더 빠르게 회사에서의 소속감을 느낄 수 있어, 회사와 개인의 성장에 대해 진지하게 고민하고 발전하기 위한 개선 방안을 모색하는 값진 경험을 할 수 있었습니다.
여담을 붙이자면 PM님과 교수님, 저 셋 면담을 할 때, PM님께서 제가 회사에 대해 소개하는 점이 감명깊으셨다고 합니다. 🤣
서비스와 탄생역사를 정확히 이해하고있어서 놀라셨다고.....🤣🤣🤣그만큼 진심이었습니다ㅠㅠ
2) DevOps - linux OS 서버 운영 경험
외부 API 사용을 위한 공인 IP Gateway 구축
서비스 개편 당시 새로 도입한 API를 사용하기 위해 하나의 VM 인스턴스 IP 주소를 화이트 리스트에 작성해야 했습니다.
무중단 배포를 위해 사용했던 방식은 인스턴스명과 IP 주소가 변경되었고, 이러한 배포 방식을 유지하기 위해서 새로운 솔루션 도입이 필요했습니다. 이 문제를 해결하기 위해 Cloud NAT을 도입하여 아웃바운드를 컨트롤하는 솔루션을 고안 및 구축하였습니다.
이 과정에서 GCP의 다양한 기술을 직접 사용해볼 수 있었습니다. 기존 서버를 모두 삭제하고 새롭게 생성했어야 했기에... 배포 과정을 스스로 직접 하는 좋은 경험이었습니다.
빌드 및 배포 자동화 POC를 통한 서비스 개선과 결과 보고
현재 수동으로 빌드 및 배포를 진행하는 상황에서 발생하는 문제점인 실수와 시간 소모를 해결하기 위해, 빌드 및 배포 자동화 POC를 시작하게 되었습니다. 이를 통해 서비스의 안정성과 효율성을 향상시키고자 하였습니다. 초기 단계에서는 CI/CD 도구에 대한 리서치를 통해 Jenkins, Cloud Build, Bitbucket Piplines 등 다양한 옵션을 검토하였습니다.
세미나를 통해 현재 사용 가능한 도구와 각 도구의 특징, 장단점에 대한 리서치를 공유하고, GCP의 Cloud Build를 활용하여 빌드 및 배포 자동화 POC를 수행하기로 결정하였습니다. 회사의 상황, 자원, 투입 가능한 시간, 요구사항 등을 고려하여, GCP와의 통합성과 편의성, 사용 편의성 등에서 최적의 선택으로 판단되어 Google Cloud Platform(GCP)의 Cloud Build를 선정하였습니다.
이후 개발팀의 CI/CD 이해도를 높이기 위해 세미나를 개최하였습니다. 세미나에서는 현재 사용 가능한 도구와 각 도구의 특징, 장단점에 대한 리서치를 공유하고 GCP의 Cloud Build를 활용하여 빌드 및 배포 자동화 POC를 수행하기로 결정하였습니다.
POC를 통해 빌드 및 배포 자동화의 효과를 확인하고 개발팀에 공유하였습니다. 실수로 발생하는 문제와 시간 소모를 크게 감소하면서 안정적인 배포를 실현할 수 있었습니다. 또한 서비스의 안정성 향상 및 효율적인 빌드와 관리를 위해 Docker와 Artifact Registry를 활용하였는데, 빌드 파일을 직접 요구사항에 맞게 작성함으로써 롤백 및 관리 등을 용이하게 하였습니다.
실제 사용자가 존재하는 애플리케이션을 운영하면서 배포에서 발생하는 실수, 시간을 줄이는 것이 중요하다는 걸 몸소 깨달은 경험이었습니다. 또한 직접 리서치한 내용을 바탕으로 서비스의 안정성과 개발 생산성을 향상시키며 조직 전체의 효율성을 향상한 결과물에 대해 뿌듯함이 있었습니다
어쩌다 DevOps
처음에는 실제 사용자가 있는 서버를 운영하고 조작한다는 것이 큰 부담이었습니다. 하지만 학부 생활을 하면서 겪을 수 없는 소중한 기회였기에 더욱더 집중하려고 노력했고, 개인적으로 흥미롭기도 했습니다. 이러한 태도를 인정 받아 회사에서 DevOps 담당자가 되어 서버 관리 장부도 작성해보고 장부를 작성하고 분석하면서 실제로 오버스펙으로 측정된 인스턴스 또한 발견하였습니다. 기술이사님께 근거를 제시하여 오버스펙이된 서버를 다운그레이드하고, 서버 비용을 46%를 절감하는 성과를 내기도 했습니다. (지금까지 다행히 서버는 잘 돌아갑니다....ㅎㅎ)
이 업무를 하던 중 질문이 굉장히 많이 생겼었는데, ICT 측에서 열어주신 오프라인 행사에 참여하여 네카라 현직자 분들께 질문하고 답변을 받을 수 있어 기뻤습니다. 특히 좋은 질문이라고 K8S에 대한 의견을 주신 멘토님께 진심으로 감사했습니다.
소중한 기회를 주시고 적극적으로 도와주신 개발팀이 있어서 값진 경험을 할 수 있었습니다.특히 애정을 가지고 수행했던 업무이기에 TMI 남발해봤어요
백오피스 API 개발
특정 사용자 트래픽 알림 시스템 개발 및 적용 | Factory Method 패턴 도입
회사 서비스의 특성상, 특정 사용자의 트래픽이 중요한 이슈를 발생시킬 수 있었습니다. 이에 대응하여 항상 관리자 페이지에서 수동으로 확인하던 작업을 개선하기 위해, 특정 트래픽이 발생하면 회사 공식 계정으로 메일이 발송되어 모든 팀원이 해당 트래픽에 대해 신속하게 인지할 수 있도록 시스템을 구축하였습니다.
이때, 기존의 메일 발송 코드는 특정 메일 한정 하에 작동하도록 구현되어서, 새로운 기능을 추가할 때 마다 개별적인 메소드와 호출을 매번 개발자가 작성을 해야했습니다. 이는 중복된 코드를 계속 생산하게되고 불필요한 호출을 시도한다는 치명적인 단점이 있었습니다. 이러한 점을 개선하기 위해 Factory Method 패턴을 도입하고, 이후 새로운 메일 발송 기능을 개발할 때 매우 편리하다는 것을 몸소 느꼈습니다. 똑같은 기능을 만들더라도 장황하지 않고 컴팩트한 코드를 구현하는 것에 관심이 높아진 계기가 되었습니다.
코드 회고와 성장
메일 전송을 위한 message 프로퍼티를 사용하기 위해 문자열을 조작할 때 StringBuilder의 사용법을 실전에서 기술이사님께서 알려주신 점이 인상깊었습니다. Java 언어를 공부하면서 StringBuilder의 성능에 대해 배울 수 있었지만, 실전에서 어떤 접근방식을 가지고 적용하는지 배우고 적용하는 것은 또 다른 문제였기 때문에 인상깊은 배움으로 남았습니다.
뿐만 아니라 3학년 때 가장 열심히 공부한 과목이 OS였는데, 이때 배운 Async/Sync의 개념을 통해 spring의 @Async를 메일을 발송하는 sendMail에 적용을 해보았습니다. 구체적인 내용은 여기서 확인할 수 있습니다.
🤓 처음부터 제가 이러한 논리를 통해 코드를 작성했으면 100점이었겠지만...
코드회고를 통해 @Async를 어떤 상황에서 어떻게 사용하는지 알게되었습니다. 이 또한 개념적인 접근이 아닌 실무적으로 접근하는 방법을 채득하여, 능력을 키우는 면에서 소중한 시간이었습니다.
팀 내 코드의 일관성을 유지하는 것 또한 원활한 협업에 중요한 것을 깨달았습니다.
또한 개발팀 회고 회의에 참여하여 과도한 싱글톤은 오히려 좋지 않은 이유, JPA의 핸들링, 싱글톤과 컴포넌트를 판단하는 기준 등 실무자의 관점과 혜안을 배울 수 있었고, 이러한 기회와 성장을 이끌어주신 기술이사님께도 감사하다는 생각을 많이 하게되었습니다.
사내 세미나를 통한 프로그래밍 역량 강화 및 소통 능력 향상
개발자 인턴의 프로그래밍 역량을 강화하고 팀 내에서의 원활한 지식 공유 ∙ 코드 품질 향상을 목표로 두고 이펙티브 자바 도서를 활용한 세미나를 진행하였습니다. 백오피스를 개발할 때 남발했던 Stream 코드의 문제점을 시작삼아 세미나를 통해 직접 구현한 코드에 대한 기술이사님의 실무적 접근과 개선점에 대해 배울 수 있었습니다.
코드를 작성할 때는 어떤 자료구조/라이브러리가 있다는 것에서 멈추는 것이 아니라, 내부 구조나 설계, 내부 값, 메모리에 어떻게 적재되는지 등에 대해 구체적으로 알아야 함을 깨달을 수 있었습니다. 내부 구현 원리나 동작을 잘 알고 있는 것은 상황에 따라서 적절한 자료구조를 선택하고 도입함으로써 효율적인 기술 구현이 가능하도록 하기 때문입니다. 세미나를 통해 배운 JAVA 언어의 특성과 작성법을 주의하며 앞으로도 실무에 적극적으로 사용해야하고, 또 지속적인 학습만이 이러한 것을 가능하게 해준다는 것도 잘 알 수 있었던 경험이었습니다.
세미나를 진행할 때마다 자료와 함께 구두로 발표를 했어야 했는데, 회사의 실무자들 앞에서 발표를 진행하는 것은 정말 또 다른 떨림이라 처음엔 많이 힘들었습니다...(밤새 대본도 쓰고 계속 ppt도 수정하고 했던 😥)
그러나 매차례 거듭할 수록 더 효율적인 말하기에 대해서도 배울 수 있었습니다.
피드백을 받아 수용하고, 스스로 문제점도 고칠 수 있는 계기였어서 기술적인 면 이외에서도 성장을 거듭해 나갈 수 있었습니다.
데이터 기반 사용자 경험 개선
(작성 예정)
마지막으로 내 자리와 일상사진들 🫶
인턴십하면서 스스로의 부족함을 많이 느끼고
회사에 피해가 가지않게
나름 1시간씩 일찍 출근해서 개인공부하고,,,,
체력을 기르기위해서 운동도 하고!
사회생활하는 방법 유튜브도 많이 찾아보고
특히 백엔드 지식을 함양하기 위해서
부단히 노력했습니다
그러다보니 산책 중에 낙엽이 팔에 떨어지는 것조차 즐거웠던ㅋㅋㅋ 많이 힘들었지만 크고작게 회사에 기여해서 뿌듯하고 감사했던 2023 인턴십을 잘 마무리하게되었습니다
ICT 인턴십 지원을 위해 찾아오신 분들께 많은 도움이 되었길 바라며, 궁금한 점이나 피드백은 언제든 댓글 남겨주시면 감사하겠습니다. 💕
'회고 & 후기 > 회고 & 후기' 카테고리의 다른 글
[Archive] 2024 정보처리기사 필기 합격 후기 (0) | 2024.02.22 |
---|---|
[인턴십] 2023 ICT 학점연계 인턴십 최종 합격 후기 (7) | 2023.08.24 |
[공모전] 2023 IT 창업 개발 동아리 멋쟁이 사자처럼 11기 해커톤 후기 (2) | 2023.08.24 |
[공모전] 2021 슬기로운 코딩생활 최우수상 후기 (1) | 2023.08.02 |
[Archive] 개발을 잘한다는 건 어쩌면.. 소프트웨어 공학 유심히 좀 들을걸 | 산학 프로젝트 중간 발표 후기 (2) | 2023.05.13 |