ㅇ
목차
· 첫 인턴의 시작
· 긴 대학 생활의 끝
· Spring boot 오픈소스 기여
· 2025년 앞둔 나
첫 인턴의 시작
2024년 4월, 첫 인턴의 문을 열었다. 작년 한 해 동안 멋쟁이사자처럼, SW마에스트로 14기 연수생, 그리고 여러 공모전을 통해 다양한 사람들을 만나고 많은 경험을 쌓을 수 있었다. 그 모든 순간이 정말 소중했다. 특히 개발자뿐만 아니라 다양한 분야의 사람들과 소통하고 대화하는 방법을 배우면서, 나 자신을 한층 더 성장시킬 수 있었다.
이러한 경험들이 바탕이 되어, "실무에서는 어떤 방식으로 일할까?", "어떤 프로세스로 일들이 진행될까?"라는 궁금증이 생겼고, 그 답을 찾기 위해 첫 인턴을 시작하게 되었다.
인턴을 시작한 회사는 SI 외주를 주로 담당하는 곳이었다. 본격적인 외주 작업에 앞서 인턴들끼리 2~3주 동안 파일럿 프로젝트를 진행했다. 디자이너, 기획자, 백엔드, 프론트엔드가 협력하여 하나의 프로젝트를 만들어가는 과정은 정말 즐거웠다. "왜 이 방식으로 해야 할까?"라는 질문을 끊임없이 던지며 서로의 생각을 공유했고, 그 과정에서 정말 많은 것을 배울 수 있었다.
인턴 생활을 통해 "틀린 것은 없어, 다를 뿐이야"라는 마인드를 갖게 되었다. 문제를 정의하고 요구사항을 분석하여 상황에 맞는 기술과 아키텍처를 선택하는 것이 개발자로서의 역할이라는 것을 깨달았다.
긴 대학 생활의 끝을 마치며
2024년 12월, 이제 졸업을 두 달 앞두고 있다. 4년이라는 대학 생활은 길고도 짧았다. 다양한 사람들을 만나고, 함께 대화하며 사람들과 어울리는 법을 배웠다. 공과대학 학술제, 대외활동, 공모전, 멋쟁이사자처럼 연합 동아리, SW마에스트로 연수생, 캡스톤 디자인 등 정말 많은 것에 도전했다. 뭐든지 할 수 있을 때 해보자는 마음으로 최선을 다했고, 그 모든 순간이 나를 성장시켰다.
그중에서도 SW마에스트로는 가장 기억에 남는 활동이었다. 네임밸류 있는 대외활동으로 매달 지원금을 받으며 프로젝트를 진행했다. 팀원들과 함께 "왜?"라는 질문을 던지고, 하나하나 알아가는 과정을 통해 진정한 협업의 즐거움을 느꼈다. 서로의 의견을 공유하며 만들어낸 결과물은 그 자체로 큰 자부심이었다.
대학 생활의 끝자락에서 진행한 캡스톤 디자인 프로젝트도 뜻깊었다. 백엔드 개발에 집중하며 안드로이드 개발자와 협업해 어플리케이션을 완성했고, 수상까지 할 수 있었다. Figma로 직접 디자인하며 사용자의 니즈를 고민하고, 진짜 필요했던 서비스를 만들어냈던 그 순간이 아직도 생생하다.
Spring boot 첫 오픈소스기여
저는 주로 Spring 기반의 Java를 활용해 백엔드 개발을 해왔습니다. 그러던 중, Spring Boot 오픈소스에 한번 기여해보면 어떨까 하는 생각이 들었고, 프로젝트를 Fork한 뒤 가장 기본적인 통신의 기반이 되는 직렬화와 역직렬화 관련 코드를 깊이 탐구해보기로 했습니다
탐구 과정에서 nullSafeValue라는 헬퍼 메서드를 발견했는데, 이 메서드가 지정된 타입만 반환하도록 구현되어 있다는 점이 조금 아쉽게 느껴졌습니다. 특히, 많은 개발자가 자주 사용하는 Date 타입이나 UUID와 같은 값조차 지원되지 않는 점에서 한계를 느꼈습니다 “이 메서드를 더 동적으로 사용할 수 있도록 개선할 수는 없을까?”라는 고민 끝에, 기존 구조를 확장할 수 있는 방안을 고심했습니다. 그리고 이런 개선 방향이 직렬화/역직렬화 과정에서 더 유연하고 효율적인 데이터 처리로 이어질 수 있을 것이라는 생각에, 제안을 정리해 이슈를 제기했습니다
제가 제안한 개선안은 단순히 특정 타입의 지원을 추가하는 데 그치지 않고, 다양한 데이터 타입을 다룰 수 있는 방향으로 기능을 확장하자는 아이디어였습니다. 이는 개발자들에게 더 편리한 사용성을 제공할 뿐만 아니라, Spring Boot의 직렬화/역직렬화 프로세스를 한층 더 강력하고 유연하게 만들 가능성을 열어준다고 생각합니다.
AS IS
protected final <D> D nullSafeValue(JsonNode jsonNode, Class<D> type) {
Assert.notNull(type, "Type must not be null");
if (jsonNode == null) {
return null;
}
if (type == String.class) {
return (D) jsonNode.textValue();
}
if (type == Boolean.class) {
return (D) Boolean.valueOf(jsonNode.booleanValue());
}
if (type == Long.class) {
return (D) Long.valueOf(jsonNode.longValue());
}
if (type == Integer.class) {
return (D) Integer.valueOf(jsonNode.intValue());
}
if (type == Short.class) {
return (D) Short.valueOf(jsonNode.shortValue());
}
if (type == Double.class) {
return (D) Double.valueOf(jsonNode.doubleValue());
}
if (type == Float.class) {
return (D) Float.valueOf(jsonNode.floatValue());
}
if (type == BigDecimal.class) {
return (D) jsonNode.decimalValue();
}
if (type == BigInteger.class) {
return (D) jsonNode.bigIntegerValue();
}
throw new IllegalArgumentException("Unsupported value type " + type.getName());
}
추가된 메소드
protected final <D, R> R nullSafeValue(JsonNode jsonNode, Class<D> type, Function<D, R> mapper) {
D value = nullSafeValue(jsonNode, type);
return (value != null) ? mapper.apply(value) : null;
}
이렇게 변경된 코드에 대해 Test Code도 꼼꼼하게 찾아서 코드를 작성한 후 PR을 작성했고 결국에는 Spring boot 오픈소스 생태계에 첫 기여를 하게 되었습니다.
2025년을 앞둔 나
졸업이 가까워지면서 가장 큰 고민은 단연 "취업"이다. "소프트웨어학과를 졸업하면 취업은 문제없겠지?"라고 생각했지만, 현실은 녹록지 않았다. 서류 합격률은 아직 기대에 못 미치지만, 한 걸음 한 걸음 꾸준히 도전 중이다.
이제는 정말 취업에 올인할 시간이다. 코딩 테스트, 면접 준비, CS 공부 등 백엔드 개발자로 성장하기 위해 필요한 것들을 차근차근 준비하고 있다. 치열한 경쟁 속에서 나만의 무기를 갖추기 위해 이력서를 계속 다듬고 있다.
내가 개발하며 진심으로 즐길 수 있는 회사, 동료와 복지가 함께 좋은 회사, 그리고 함께 성장하며 기여할 수 있는 회사. 그런 곳에서 나만의 가치를 증명하며 개발하고 싶다.
2025년, 나는 그 꿈에 한 걸음 더 가까이 다가갈 것이다.
어느곳에서도 적응할 수 있는 개발자가 되고 싶다