[회고] 2022-2023 동계 인턴을 마무리하며
# 정보
- 인스피언 서비스 사업부
- 기간 : 2022.12.22 - 2023.02.20
- 업무 : 기업과제 수행
# 인턴을 지원하게 된 계기
3학년까지 마치면서 여러가지 생각이 들었다. 나의 개발 연대기(거창해보이지만 볼품없는)를 잠깐 정리해보면, 아래와 같다.
- 리액트 -> 프로트앤드
- 장고 -> 백엔드
- 안드로이드 네이티브 -> 프론트(클라이언트)
이렇게 웹 프론트앤드와 백앤드, 앱 클라이언트를 엄청난 수준은 아니지만 프로젝트를 하나씩은 만들어보면서 경험을 해보았었다. 개발을 해보면서 내가 백엔드에 흥미가 있다는 사실을 알게 됐고, 객체지향언어에 대한 흥미를 가지고 있음을 깨닫게 되었다. 안드로이드를 개발하기 위해서는 자바 또는 코틀린으로 개발을 해야했다. 안드로이드는 SDK를 기반으로 개발해야하고, 웬만한 큰 틀에 대한 API가 존재하고 이 기능들을 활용하여 개발을하는 방식이었다. 그렇기 때문에 여러 인터페이스가 제공됐고 이를 기반으로 개발을 해야하는데, 객체지향에 대한 이해가 없으면, 내가 뭐를 어떤식으로 개발하는지에 대한 이해를 할 수 없었다. 그래서 천천히 디자인패턴이나, 객체지향을 위한 개발방법들에 대해서 찾아보고 공부할 수 밖에 없었다.
그렇게 찾아볼 수록, 뭔가 딱딱 정리가 되는거와 같은 느낌이 들면서 객체들이 유기적인 연결관계를 가지며 마치 톱니바퀴와 같이 돌아가는 것에 대한 흥미를 느꼈고, 자바를 사용하는 백엔드 프레임워크를 공부해보자고 마음 먹었었다. 그렇게 선택된 것이 스프링이었고, 요즘은 스프링 부트를 이용해서 쉽게 진입할 수 있기 때문에 조금씩 공부하고 있었다.
## 어떤 회사를 가고 싶었나?
동계 현장실습(인터쉽) 프로그램이 공지됨에 따라서 나는 두가지의 조건을 가지고 지원회사를 간추리려고 했다.
- 스프링, 스프링 부트를 사용하는 회사
- 애자일한 개발문화를 경험해볼 수 있는 회사
스프링과 스프링 부트를 사용하여 내가 하고싶었던것을 재밌게 공부하면서 개발할 수 있었으면 했고, 자유롭게 소통하면서 스타트업 분위기가 나면서 애자일하게 개발을 하고 있는 회사를 선택하고 싶었다.
## 그런데
그러나 스프링을 사용하는 회사들은 대부분 자리를 잡은 회사들같았고, 기업목록에서는 스프링 부트를 사용하는 회사가 단 한곳 밖에 없었다. 그래서 두가지 요소에 대해서 고민해보다가, 스프링을 사용하는 회사를 가기로 마음먹고 한곳만 지원해서 합격했다.
결론부터 말하자면 회사에서(회사를 통해서 배운점)은 진짜 거의 없었다. 출근날 과제 부여 받고, 2달동안 별다른 피드백 없이 과제만 수행했고, 끝까지 이런 느낌으로 진행될거 같아서, 스스로 공부할거 찾아서 공부하고 만들어 봤다. 돈 받고 하고싶었던거 혼자서 공부해볼 수 있었다는 점에서는 좋았지만, 현업에 개발문화나 프로세스에 참여해볼 수 없었다는 것은 무척이나 아쉬웠다. 특히나 난 회의하는거 좋아하고 의견 개진하는거 좋아하는 아이디어 뱅크였는데.. 날 활용하지 못한것 회사에서는 손해일 거다라고 생각했다. ㅎㅎ
# 무엇을 했나?
우리 사업부에는 3명의 팀원이 있었다. 3개의 과제 주제 중에서 하고싶은거 고르는거였는데, 나는 뭔가 제일 어려워 보이는거 하기로 했다.
인증서 만료일 체크 및 메일 자동화 솔루션 |
구현해야하는 필수 기능은 아래와 같았다.
- 인증서 CRUD( 파일은 디스크, 정보는 DB )
- 이메일 템플릿
- 만료기간 기준 설정 ( 만료 며칠전 부터 통지할 것인지 )
- 통지 주기 설정( 기준일부터 몇회, 주기는 얼마나 할지 )
그리고 간단한 인증서 샘플파일을 던져 주셨다.
처음에는 구체적인 요구사항들이 아니기 떄문에 당황스러웠지만, 실제 요구사항을 고객들이 요구할때는 이런식으로 요구를 하신다면서 요구사항을 던져주셨고, 나는 요구사항들을 구체화하고 플로우를 그리고 기획을 하는 시간을 꽤 길게 가졌다.
백은 스프링부트로 구현해야했지만, 프론트앤드의 구현사항에는 제약조건이 없었기 때문에 가장 간단하게 타임리프를 활용해서 개발하기로 마음먹었다.
# 과제를 수행하기 위한 과정
## 과제 분석
4가지의 요구사항들을 구체화 하기 위해서, 해당 요구사항을 구현하기 위해서는 어떠한 세세한 기능들이 있을지 고민하고 기획하는 시간을 가졌다. 각 요구사항의 확실한 기능을 정의했다.
## 설계
결국 어떤 기능들이 있어야 하는지 결정하기 위해서 어떤 유저 플로우가 결정되야하는지를 알아야 하기 때문에 간단한 유저 플로우를 만들었다. 그리고 각 기능들에 들어가야하는 세세한 기능들을 결정했다. 가령 파일은 디스크에 저장된다고 할때, 디스크에 다른 사용자들이 같은이름파일명으로 업로드 했을 시 생기는 문제점들도 고려해야 했다.
이후 주어졌던 예시 DB를 수정하여 재설계하는 시간을 가졌다. 이부분에서 데이터베이스 설계가 정말 어렵구나라고 느꼈었고, 내가 이번 프로젝트에서 사용됐던 Spring-data-jpa에서 생기는 객체와 DB와의 패러다임 불일치를 이해하는데 꽤 많은 고민을 할 수 있었다.
최종적으로 위와 같은 형태로 구성을하고 개발을 시작했다.
## 개발 환경
내가 이제껏 배포 경험이 없어서 이번에는 꼭 프로젝트를 완성시켜서 배포를 할 생각을 했었고, 결과적으로는 성공적으로 했다. 원래는 젠킨슨을 이용해서 CI/CD를 해보고 싶었지만, 그것까지 공부하기 위해서는 너무 적은 시간이었기 때문에, 클라우드에 배포스크립트를 만들어 스크립트를 실행하면, 깃허브에서 클론받아와 배포하여 JAR을 실행시키도록 했다.
# 프로젝트 정리
프로젝트 전반적인 내용들이 담긴 발표자료를 아래 첨부하겠다. 발표자료 나름 잘 만들었다~!
# 소스코드
GitHub - ho-jun99/KMU22-23-WinterIntership-inspien: 22/23 국민대학교 동계 현장실습, 인스피언
22/23 국민대학교 동계 현장실습, 인스피언. Contribute to ho-jun99/KMU22-23-WinterIntership-inspien development by creating an account on GitHub.
github.com
# 마치며
회사 초반 며칠을 출근하면서, 회사에서의 프로세스를 배울수는 없겠다고 빨리 판단했고 아쉽지만 그 판단이 맞았다. 딱히 사수도 없었고 우리를 관리해주시는 분들도 없어서 방치(?) 되는 느낌을 받았다. 그래서 우리 인턴 셋끼리 똘똘 뭉치며 다녔다. 그래서 위에서 언급했던거처럼 협업의 기회도 없었고, 현업 경험에 대한 기회도 받을 수 없었고, 단지 과제를 수행하는데 초점을 두었다.
난 스프링 부트에 대한 지식이 적었기 때문에, 김영한강사님의 강의도 보고 책들도 여러개 읽으면서 공부할 수 있었다. 아침 9시부터 저녁 6시까지 의무적으로 있어야 하기 때문에 시간은 충분했고 나름 의무감이 생기기 때문에 난 좋았다. 특히 스프링 부트 핵심가이드라는 책을 보면서 기본 개념을 잡을 수 있었다. JPA를 사용해야 했기에 JPA도 공부했어야 했고 두꺼운 책에서 필요한 부분만 골라 읽었었다.
요즘 개발 공부를 하는데 가장 좋은 방법은 일단 부딪혀서 뭐라도 만들어보면서 생기는 문제점들을 해결하고, 프로젝트가 끝난뒤 내가 부족했던 기초개념들을 다시 쌓아 올리는 것이라고 생각하는데 이번 인턴에서 딱 그런 느낌을 가질 수 있었다. 어찌저찌 책보면서 구현을 완료시켰지만, 스프링부트가 뒤에서 어떤 일을 해주고 있는지에 대한 이해는 전무 했기 때문에 인턴이 끝난 지금은 그러한 것들을 공부하고 있다.
요즘 AI가 판치는 세상에서, 정말 어디서든 필요한 개발자가 될 수 있도록 기초를 단단히 하는 사람이 되어야 겠다는 필요성을 느꼈다.
되돌아보면 좋은 기회였고, 기초를 쌓을수 있어서는 좋았지만, 또 같은 경험은 하고 싶지는 않다.. 한번이면 족했다..
'•회고' 카테고리의 다른 글
[회고] 현대백화점 미래전략팀에서 개발자로의 인턴생활을 마치며 (0) | 2023.08.23 |
---|---|
[회고] 졸업 프로젝트를 성공리에 마무리하며(Feat. 인공지능 복지사 복실이) (0) | 2023.08.13 |
[회고] SW중심대학 공동 해커톤 그리고 수상 (0) | 2022.10.03 |
[회고] 알파프로젝트 - 추억을 담는 캡슐 (0) | 2022.10.03 |
[회고] 멋쟁이사자처럼 보조강사 (0) | 2022.10.03 |