회고를 쓰기에 조금 이른듯 하지만 나는 항상 타이밍이 애매했다. 그러니 올해 것도 지금 써도 괜찮지 않을까?
2023년
내게 23년에 무엇을 했는가? 묻는다면 상반기는 산업기능요원을 얘기할 것이고, 하반기는 until을 얘기할 수 밖에 없을 것이다.
until
오리진
언틸은 몰댄민씨가 먼저 제안을 주어서 같이 하게 되었다.
산업기능요원으로 근무하던 시절, 21년도에 같은 회사에서 만났던게 연이었다.입사한 후 몇 개월 후에 퇴사하셨었던게 아쉽지만.
당시에 굉장히 인상깊게 보았었는데 몰댄민씨도 그러하였는지 그 후 2년이나 지나고서 제안을 받게 되었다.
그렇게 23년 5월 7일부터 첫 시작을 하게 되었다.
NestJS
처음은 Next.js + NestJS로 쌍 TypeScript 조합으로 가려고 했다. Typescript를 원래 관심있어 하기도 했었기도 해서 한번 해볼만 하다 생각했다.
이를 위해 난 NestJS도 공부하고, ORM인 TypeORM과 Prisma ORM에 대해서도 열심히 공부했다.
(당시 열심히 Prisma의 공식문서를 번역하던 시절)
최근에 작성한 이 글도 사실은 언틸을 개발하던 시절에 vercel을 이용해서 공짜로 배포하고 싶던 시절의 글이었다.
하지만 아쉽게도 오래 가지는 못했다. ORM 측이 너무 마음에 안 들었었다.
나는 기본적으로 원래 Java Spring을 기반으로 개발하던 사람이었는데.
class ArticleService {
public void editArticle(long articleId, String content) {
Article article = articleRepository.findById(articleId);
article.update(content);
articleRepository.save(article);
}
}
const updateArticle = await prisma.article.update({
where: { id: articleId },
data: { content: '내용' },
})
JPA에서는 객체를 읽어와서 수정한 후 객체를 저장하는 방식인데, Prisma에서는 repository레이어에 직접 뭐 뭐를 수정하라고 전달하는 방식이다.
prisma의 이런 방식은 비즈니스 로직이 도메인/서비스 레이어가 아니라 레포지토리 레이어로 가는 것 같은 느낌이었다.
TypeORM은 또 엔티티에 생성자에 로직을 못 넣는다는 점이 굉장히 거슬렸고.. (물론 정적 팩토리 메소드를 사용할 수는 있다)
무튼 등등 여러가지 문제가 있어 결국 익숙하던 Spring으로 넘어가게 되었다.
Spring
스프링으로 회귀하면서 빠르게 개발할 수 있었다. 아직도 가끔 NestJS가 생각나긴 하지만.. 😢
산업기능요원으로 근무하면서 스프링을 많이 써보긴 했지만, 내가 처음부터 개발한 것이 아니라 운영과 유지보수만 맡았었기 때문에 처음부터 프로덕트를 만들어보는 경험은 처음이었다.
Spring Security, JPA, JWT, oAuth 등의 설정을 직접 해보니 재미가 있었다.
oAuth.. 깃허브 로그인에 에러가 있는 점 인지하고 있습니다.. 😭 다만 너무 간헐적으로 특정 계정에서만 로그인이 안되는 이슈인지라 재현이 어려워 파악이 늦어지고 있네요
개발하다보니 Kotlin을 적용하면 너무 좋을 것 같아서 적용해보기도 했다.
Coroutine이라던가, 위임이라던가 코틀린의 문법을 100% 활용하고 있다고는 못하겠지만, elvis 연산자라던가 ?.
라던가 다양한 문법적 설탕 덕분에 코드가 훨씬 간결해져서 너무 좋다.
또한 Spring Event라는 것도 열심히 쓰고 있는데, 확실히 코드를 간결하게 만들어주고 도메인 간 결합도를 팍 낮춰주는 좋은 녀석이다.
비즈니스 로직을 한 눈에 '모두' 들여다보기에는 조금 어렵지만?
Oracle Cloud
얼마나 걸릴지도 모르는 개발 단계인데, AWS를 벌써 끊어서 프리티어의 소중한 12개월을 낭비하고 싶지 않았다. 그래서 시도했던 Vercel 서버리스 방식이었지만 여의치 않았고 다른 좋은 방법이 없을까 찾아보다 발견한 것이 오라클 클라우드였다.
오라클 클라우드는 AWS와 다르게, 평생 무료로 1코어 1기가짜리 인스턴스를 2개를 준다. 😲
거기다가 DB도 공짜로! 물론 서버리스 DB인데다가 접속 방법이 조금 많이 귀찮지만, 공짜 인스턴스와 공짜 DB인데 마다할 이유가 없었다. 오랜 기간동안 잘 썼다.
AWS
결국 언젠가는 넘어와야 했다.
이미지를 저장하기 위한 S3, 이메일 로그인을 하기 위한 SES 등의 기능이 필요했다. 오라클에서 이걸 하려면 돈을 내야 했는데, 기왕 낼거라면 AWS에서 내는게 맞다고 생각한다.
참 특이했던게, 오라클과 EC2 둘 다 1코어 1기가임에도 서버 켜지는 속도가 EC2가 2배나 빠르다. (오라클 1분, AWS 30초)
현재 언틸은 프리티어로 운영되고 있는데, 처음 AWS 계정을 만들면서, 프리티어가 지속되는 1년 동안 꼭 언틸에 가치를 만들어내자는 얘기를 한 기억이 난다.
복학
산업기능요원이 끝나고, 곧바로 복학을 했다. 3학년 2학기로 복학했는데, 애초에 늦게 산업기능요원으로 들어가기도 했고 2학기 복학이기도 해서 아는 친구가 거의 없었다. 사실 휴학 전에도 친구가 없었던 거 같기도..
GDSC
마침 GDSC 광운 1기가 열린다고 해서, 바로 지원했다. 또 몰댄민씨가 그 전년도에 GDSC에서 Core로 활동 중이라고 해서 기억하고 있었는데, 우리 학교도 열릴 줄이야.
나는 아쉽지만 멤버로 활동하게 되었다. Core 지원 기간을 놓친 탓이었다.
세미나
원체 세미나를 좋아하는 지라, 이 곳에서도 세미나를 참 다양하게 했다.
사이드 프로젝트 더 잘해보기 (localhost 벗어나기)
Java Stream 알아보기
Getter, Setter를 쓰면 안되는 이유;;
백엔드 더 잘 짜보기 (객체지향, 테스트, 아키텍처)
Typescript Phantom Type 사용해보기
등등
커뮤니티를 활성화시키기 위해 다양한 노력을 했는데, 생각만큼 잘 되진 않았다. 결국 맨날 보이던 사람 몇 명들만 매번 보게 되고, 결국 멤버는 50명 가까이로 시작했지만 한 5~6명의 친목회가 되어버렸다는 느낌이다.
우테코
우테코 프리코스도 지원을 했다. 백엔드 개발의 지식들을 많이 쌓고 싶었다. 언틸을 개발하다보니 더 그러하였다. 모르는게 참 많다는 생각을 했다.
하지만 그것보다 더 원했던건, 좀 열정이 넘치는 사람들과 함께하고 싶었다.
4주동안 열심히 활동하고 고민을 많이 하고 새벽까지 코드리뷰도 함께 했지만, 떨어지게 되었다. 사실 마지막 미션에서 요구사항을 완전 잘못 보고 코드를 잘못 짰다. 이 문제였던걸까? ㅠㅠ
참빛설계학기
참빛설계라고, 전공 수업을 듣는 대신에 자신이 프로젝트를 기획해서 그걸 수행할 수 있는 제도가 있다. GDSC에서 만난 친구 한명과 함께 웹 프로젝트를 기획했다. 하고 싶은 코딩하면서 6학점을 날먹할 수 있다고?
주제는 팀프로젝트 팀원을 쉽게 찾게 해주는 매칭 서비스였다. 여담이지만, 우리랑 똑같은 주제를 한 프로젝트가 주변에 동시에 꽤 있었다..
기술 스택은 정말 해보고 싶었던 걸 다 끼얹어봤다. 돈 되는 선에서;;
멀티모듈을 도입해서 도메인 객체와 엔티티 객체를 분리해보는 경험을 했다. 생각보다 어려웠고, 메리트가 잘 느껴지지 않았다. 이거에 대해서는 글을 하나 써보고 싶은데.
Kotlin도 여기서 또 사용했다. 역시 편해
AWS 프리티어를 또 끊기 귀찮아서, render를 사용해서 배포해보았다. 근데 ㅋㅋ 솔직히 좀 오바였다. 서버리스다보니 안 쓸 땐 꺼지는데, 한번 켜지는데 3분 가까이 걸렸다.
그래서 스웨거 켜놓고 프론트 작업을 하다가 다시 스웨거를 쓰려고 하면 또 3분 기다려야 하고.. 이런 경험이 잦았다. 결국 나중엔 언틸 켜져있는 서버에 몰래 같이 올려서 8081번 포트로 서버 켜서 썼다. 몰댄민씨는 이 사실을 모른다
2024년
졸업작품
4학년 1학기가 되었다. 졸업작품.. 해야겠지?
인공지능을 이용한 도로 포트홀 탐지 프로젝트를 하게 되었다. 인공지능..은 내가 잘 몰라서 하지 못했고, 백엔드를 담당했다.
기술적인 것들이 많이 들어가지는 않았지만, S3의 presigned url을 써본 경험이 생겼다.
여기서 본 경험이었다. 노마드 코더씨의 '인스타그램 백엔드가 20억 유저를 감당하는 방법!'
SW마에스트로
우테코에는 떨어졌지만, 멈춰있을 순 없지. SW마에스트로에도 지원했다.
서류, 1차 코테, 2차 코테, 면접 순서였는데 감사하게도 최종 합격하게 되었다. 물론 그냥 합격도 아니고 추가합격.. 8번이었는데, 겨우 겨우 들어갈 수 있었다. 나중에 확인해보니 순번은 17번 정도까지 돌았던 것 같다.
추합이라 좀 늦게 합류하게 됐는데, 그래서 그런지 팀을 짤 사람들이 별로 남아있지 않은 상태였다 ㅠㅠ
부랴부랴 팀을 짰는데 참 힘들었던 경험이었다.
여기서도 열정적인 사람들을 찾고 싶어 지원했는데, 정작 이 때는 내가 살짝 번아웃같은게 왔는지 좀 그렇게 열정적인 모습을 못 보여주고 있다. 벌써 12월이면 끝나는데, 시간을 너무 날린 것 같아 허무하다.. 😕
프로젝트
유튜버를 위한 쇼츠 자동 생성 서비스를 개발하고 있다. 숏츠를 만드는 과정들이 인공지능이 들어가는데, 이것 때문에 스프링은 커녕 자바 근처도 가지 못하고 있다.
Python을 이용해서 람다 함수 작성, ECS 이미지 생성, 컨수머 생성 등의 일들을 더 많이 하고 있다.
백엔드 코드적으로 더 성장했는지는 모르겠지만 코드 바깥의, 좀 더 넓은 관점에서 기술들을 바라보는 경험을 하고 있다. AWS 아키텍처, MSA, MessageQueue 등의 그런 것들...
until
23년 5월 7일부터 개발했던 언틸, 24년 5월 13일에 오픈하였다.
이제 프리티어가 2개월 정도 남았는데, 그럭저럭 잘 나아가고 있는 것 같은 느낌이 든다. 하지만 요새 더 드는 생각은, 개발적으로 뭔가 대단한 기능을 더 만드는 것이 중요하다기 보다 마케팅과 홍보가 더 중요한 것 같다.
일단.. 물론 많은 분들이 아직 개선 요청을 보내주고 계시긴 하지만 일단 지금도 허우대는 멀쩡하니깐. 좀 더 사람을 유치해서 피드백을 더 받아보고 싶다.
그래도 기능은 계속 개발 중에 있다. 아직도 해야 할게 너무 많다고 느껴진다. 가장 목전에 두고 있는 건 통계 기능. 네이버, 티스토리 블로그를 쓸 때엔 뭔가 당연하다 느낀 통계 기능이 지금은 완전 대단하게 느껴진다 😂
.
그리고 개발적으로는, 최근에 되어서야 무중단 배포 기능을 넣었다. 사실 원래부터 있어야 했는데, 이게 사실 내부적으로, PR 상태라 main에 머지도 안됐지만 배포하고 하는 일들이 잦았다. 그래서 자동 무중단 배포의 효용이 좀 낮았다고 볼 수도? 있었는데. 이젠 좀 안정됐다 판단이 들어 무중단배포 기능을 이제야 넣었다.
또한 현재는 프리티어라 무료지만 끝난다면 인프라 하나하나가 돈이다.
ALB? ElastiCache? 물론 지금은 맘 놓고 써도 되지만 나중엔 돈이다.. 그래서 애초에 필요한게 아니라면 손을 대지 않기로 했다. 나중에 뺄라면 힘들 것 같아서.
그래서 무중단 배포도 처음엔 ALB를 쓸까 하다가, nginx의 리버스프록시를 활용하는 쪽으로 가닥을 잡았다. main 브랜치에 머지되면 ECR에 푸시되고, EC2에서 이를 pull 받아 롤링 방식으로 무중단 배포를 실행한다. SW마에스트로를 하면서 얻은 지식이다.. 고마워요 소마
취준
인생 빅 이벤트다. 물론 나는 산업기능요원으로 이미 한번 취업한 적이 있지만, 그거는 소위 큰 기업이 아니었다. 그래서 이런 큰 기업들에 넣어보는건 처음이라 떨린다. 자소서도 쓰고, 포트폴리오도 정리하며 시간을 보내고 있다.
자소서
그런데 이게 왠걸. 생각보다 서류부터 떨어지는 것들이 너무 많다. 한 70% 정도는 떨어지는 듯. 눈물이 나는데, 또 변명을 해보자면 내가 했던 프로젝트들, 개선사항들을 적기에는 자소서의 양식이 너무 좋지 못하다.
슬로우 쿼리, 90%p 속도 개선!!
, 배포 자동화 구축!!
, 테스트 커버리지 100% 달성!!
같은 것들을 내세우고 싶은데.
자신의 성장과정을 적어주세요
나, 본인의 삶에서 중요한 ‘가치관'은 무엇인가요?
, 본인만의 '차별화된 강점' 및 '보완해야 할 약점'에 대해 작성해주세요
같은 질문으로는 자소서에 킥을 주기가 너무 어렵다.
덕분에 후두둑 떨어지는 중.. 어째저째 크게 낙담은 하고 있지 않지만, 이게 뭐랄까. 하나 떨어진다고 -100이 되지는 않는데 -5씩 계속 쌓이다보니 정신적 피해가 누적되는 느낌. 자존감이 좀 떨어지고 있는 느낌이다..
운영팀
산업기능요원으로 활동하던 시절, 처음에 운영팀에 소속해있었는데. 너무 탈출하고 싶었다. 모든 것들이 레거시였고, 고객사들이 계속해서 쪼아대고, 또 사람들이 다들 패배의식에 쩔어있었다.
계속해서 개선하고, 주도적으로 나서서 활동했었는데 결국 문화를 잘 바꾸진 못했다.
결국 절이 싫으면 중이 떠나야지. 당시 최고의? 문화와 자유로움을 갖고 있던 플랫폼개발 팀으로 이동을 요청해서 팀을 옮겼다. 그 곳에서는 맘편히 프론트엔드를 개발했고, 그렇게 7개월 일하다 퇴사했다.
그런데.. 자소서를 쓸라고 이 때의 회사의 기억을 되살려보면 쓸 것들이 이상하게 운영팀에서의 기억들만 떠오른다. 참.. 돌아가고 싶지 않은 기억인데 정작 내 장점과 업적을 내세울 것은 운영팀에 있다니. 참으로 아이러니 한듯.
면접
면접 때문에 정장을 샀다. 어색해.
SK에 갔다왔는데, 역시 회사 크다. 좋은 회사 다니고 싶다. 좋은 곳 다니면 회사의 코드를 볼 수 있겠지?
그러면 그걸로 다시 언틸을 굳건하게 만들어야지