2024년 9월부터 2025년 2월까지 백엔드 인턴을 진행하면서 경험했던 것을 되새기며, 6개월 동안 진행했던 인턴을 마무리하고자 한다.
이번 회고록에서는 인턴을 진행하면서 기술적인 요소보다 Soft Skill 적으로 느낀 점을 작성하고자 한다.
Q1. 협업과 개발 문화를 경험하면서 어땠는지,
Slack, Notion, Jira를 사용했는데 Slack이 기록과 커뮤니케이션하기에 너무나 편리한 도구임을 느꼈다. (이전에는 슬랙을 슬랙답지 못하게 썼던 것 같다)
Slack을 통해 전달 사항이나 프로젝트 진행 상황을 공유하는 데 있어, 다른 사람들에게 간편하게 공유되고 나중에 다시 확인할 수 있는 점이 너무 좋았다. 그래서 Slack을 사용할 때는 개인적인 이야기가 아니라면 주로 채널을 통해서 이야기를 공유하는 것이 좋은 방향임을 느꼈다.
Notion을 통해서 맡은 업무의 설계서나 부가적인 기능을 개발할 때 테크 문서를 작성하여 개발을 진행했었다.
진행 과정, 문제 상황, 문제 해결 과정을 팀원들에게 공유하여 업무를 진행하면서 작업에 대한 공유와 피드백을 받기 좋았다.
이전부터 문서화를 열심히 작성해왔어서, 인턴을 진행하면서도 가독성 좋고 핵심 포인트만 전달하는 식으로 문서화를 잘하여 동료, 사수, 팀장분께 칭찬을 받기도 했다.!
Q2. 새롭게 학습한 기술 및 개념은 무엇인지,
Domain Model이 무엇인지 배우며 각 클래스의 역할을 명확히 하는 게 중요하다는 것을 배웠다.
예를 들면 모든 계층에서 동일한 DTO 클래스를 사용하는 것보다 각 계층의 DTO 클래스를 나누어서 역할을 분리하는 것이 유지보수 측면에서 더 효율적임을 알게 됐다.
하나의 클래스를 모든 계층에서 공유하는 경우 변경이 발생할 때 모든 곳에서 Side Effect가 발생하고, 도메인 모델에 영향이 갈 수 있다.!
Spring의 MessageSource, Multi Module을 사용해보며 스프링이 지원해 주는 다국어 처리와 모듈화 기술 등을 익혔다.
사이드 프로젝트를 진행하면서, 모듈화를 진행하여 java, kotlin을 활용해서 스프링 프로젝트를 진행해보려고 한다. (기회가 된다면 다국어 처리도 진행하고자 한다)
Q3. 문제 해결 능력 향상
시설문의 목록 조회 시 Cursor 페이징을 구현하면서, 여러 정렬 조건을 만족시키기 위해 2개의 Key를 조합해서 문제를 해결했다.
또한, 현재 시간을 기준으로 예약된 데이터와 과거 히스토리 데이터의 특성이 달라서 페이지 크기에 따라 추가 데이터를 조회해야 하는 상황을 고려해야 했다.
예약된 데이터는 예약된 상태 + 다가오는 날짜 순으로 정렬하고 / 과거 히스토리는 현재 시간 이후로 데이터를 최신순으로 보여줘야 했다.
이미지 업로드 시 용량을 초과하는 경우 로깅 필터에서 생기는 문제를 디버깅 찍어보면서, MultiPart 데이터를 읽을 때 MultiPartResolver가 동작하여 파일 데이터가 처리되는 것을 배웠다.
문제의 원인은 Filter단에서 Servlet의 본문을 읽을 때 MultipartResolver가 실행되는데, 파일 용량 초과 시 Stream Closed 되어
이후에 본문을 복사하거나 읽으려고 할 때 IOException이 발생하는 문제였다.
Q4. 코드 리뷰 및 피드백을 통한 개선점
사수분한테 코드 리뷰를 받으면서 피드백 받은피드백받은 내용이 이해가 되지 않으면 질문을 드리면서 피드백 내용을 온전히 이해하려고 노력했었다. 그리고 피드백받은 내용에 대해 같은 실수를 하지 않기 위해서 작업을 진행할 때 같은 오류를 범하고 있지는 않은지, 최적의 코드인지 스스로 되물으며 개발하는 습관을 길렀다.
이러한 과정 덕분에, 같은 코드를 짜면서도 더 효율적인 코드를 작성할 수 있었고 변수 네이밍, 함수 네이밍을 신경씀으로써 클린 코드를 작성할 수 있었다. 실수를 줄이려고 열심히 노력했는데, 사수분께서 습득력이 빠른 것 같다고 칭찬해주셨을 때 속으로 너무 기분이 좋고 뿌듯했다.!
Q5. 개발도 중요하지만 무엇보다 Soft Skill이 중요한 듯 싶다.
개발을 잘하는 것도 중요하지만, 무엇보다 소프트 스킬이 중요하다는 것을 느꼈다.
혼자서 진행하는 1인 개발이 아니므로, 다른 팀원들과 협업하는 과정이 매우 중요하다.
더더욱, 경험이 부족한 신입, 주니어 단계인 경우에는 경험이 많은 팀원들의 이야기에 귀 기울이고, 모르는 내용을 그냥 넘어가는 것이 아니라, (공손하게) “왜 그렇게 생각하시는지?” 또는 “이해가 안 되는 부분에 대해 재설명을 부탁하기” 등 커뮤니케이션 기술이 중요함을 느꼈다.
더불어, 진행상황을 공유하거나 모르는 것을 질문할 때 이해하기 쉽고 두괄식으로 의사표현을 하는 것이 중요하다고 느꼈다.
인턴 초반에 긴장 + 말을 잘 못해서 내 생각을 온전하게 전달하지 못했는데, 계속해서 내 생각을 명확하게 표현하려고 노력했다.
나는 이를 보완하기 위해 문서화 작업을 꼼꼼히 하면서 내 생각을 정리하고 사고했던 흔적을 기록했다. 덕분에 다른 팀원에게 질문이나 공유 상황을 전달할 때 매끄럽게 설명할 수 있었다. (소통 기술이 정말 중요한 것 같다.)
Q6. 배웠지만 더 깊이 공부하고 싶은 주제
기회가 된다면 DevOps 쪽에도 기여하고, 도메인 기능을 하나 더 개발해보고 싶었다.
시설문의 도메인을 개발하면서 배운 것을 바탕으로 다음 프로젝트를 진행했을 때 더 나아진 내 모습과 같은 실수를 반복하는지 확인해보고 싶었다. 또한, 새로운 프로젝트를 진행하면서 또 다른 문제를 겪으면서 많은 경험치를 쌓고 싶었다.
Q7. 부족했던 부분
뭔가 인턴을 진행하면서 개발 역량 증진도 중요하지만, 커뮤니케이션 기술과 영어 실력을 키워야겠다고 너무 크게 느꼈다.
내 생각을 명확하게 전달하기 위해서 두괄식으로 말하는 연습을 하거나, 애매하게 이해하고 넘어가지 않아야겠다고 다짐했다.
항상 말하면서 스스로 느낀 게, 알긴 아는데 입 밖으로 설명이 나오지 않는 것들은 내가 빠르게 훑고 넘어가서 문제의 핵심을 잘 모르는것 같다고 생각이 들었다. 그래서 앞으로는 학습을 하면서 완전하게 이해한 상태로 다음 스텝으로 넘어가고, 이를 내가 다른 사람에게 설명할 수 있는 단계인지 확인해 보며 학습해 나아갈 것이다. (스터디를 진행하면서 연습하고자 한다.)
Q8. 이후 공부하고 싶은 기술 및 방향
가장 생각나는 건 MongoDB와 GraphQL을 사용해 보는 것이다. NoSQL을 사용해 보며 RDB와 비교했을 때 어떠한 상황에서 더 효율적인지 알고 싶고, MongoDB를 사용했을 때의 장점을 몸으로 느껴보고 싶다. (No Shema, 데이터 조회 빠름)
백엔드 멘토님께서 말씀해 주신 내용 중 "도메인 중심적 사고"를 진행하고 설계와 개발에 녹여내보고 싶다.
기존에는 데이터 중심적 사고로 ERD를 먼저 설계하고 클래스를 만들고 개발을 진행했는데, 객체 지향적, 도메인 중심적 사고를 하기 위해서는 데이터 중심적이기보다는 객체의 행위, 도메인의 이벤트에 집중해야 하는 게 중요하다고 느꼈다. (본질은 데이터 관리가 아니라 비즈니스 처리이다.)
아마도 혼자서 진행하면 데이터 중심적으로 사고할 가능성이 높지만, 최대한 도메인을 위에서 보는 느낌으로 생각하며, 해당 도메인에서 발생하는 행위에 집중해서 개발을 진행하고자 한다.
Q9. 인턴 경험을 바탕으로 목표 설정
개발자에게 영어는 필수,
개발자는 모르는 것을 확인할 때 제일 먼저, 공식 문서 or StackOverFlow를 확인한다. 거의 모든 문서는 영어로 되어 있기에 올바르게 이해하기 위해서 영어 공부를 꾸준히 하는 게 좋다고 느꼈다.
또한 해외 취업을 꿈꾸고 있으니 영어 공부를 계속 미루지 않고 제대로 진행해보고자 한다.
자바와 스프링의 기본 개념을 다시 확실하게 이해하고자 한다. (설명이 가능한 레벨로)
늘 해왔던 거여서 무의식적으로 코드를 작성하고 라이브러리를 사용했었는데, 성능 최적화나 다양한 문제 해결을 위해 CS 개념과 스프링 개념들을 더 확실하게 알고 있어야겠다고 생각했다.
'트러블슈팅' 카테고리의 다른 글
GitHub Actions CI/CD 자동 배포 시 @Value 값 주입 문제 해결하기 (0) | 2025.01.05 |
---|---|
Spring @Value, static 정적 바인딩 오류 해결하기 (0) | 2025.01.05 |
JavaBeans Convention - boolean 필드에서 발생하는 변수명 변경 문제 해결 (0) | 2024.12.22 |
[트러블슈팅] Spring DateTimeFormatter 생성 비용 최적화 (0) | 2024.11.07 |
H2 Database TINYINT(1) 설정 오류 해결: CommandAcceptanceException 및 JdbcSQLSyntaxErrorException 해결 방법 (1) | 2024.10.05 |
2024년 9월부터 2025년 2월까지 백엔드 인턴을 진행하면서 경험했던 것을 되새기며, 6개월 동안 진행했던 인턴을 마무리하고자 한다.
이번 회고록에서는 인턴을 진행하면서 기술적인 요소보다 Soft Skill 적으로 느낀 점을 작성하고자 한다.
Q1. 협업과 개발 문화를 경험하면서 어땠는지,
Slack, Notion, Jira를 사용했는데 Slack이 기록과 커뮤니케이션하기에 너무나 편리한 도구임을 느꼈다. (이전에는 슬랙을 슬랙답지 못하게 썼던 것 같다)
Slack을 통해 전달 사항이나 프로젝트 진행 상황을 공유하는 데 있어, 다른 사람들에게 간편하게 공유되고 나중에 다시 확인할 수 있는 점이 너무 좋았다. 그래서 Slack을 사용할 때는 개인적인 이야기가 아니라면 주로 채널을 통해서 이야기를 공유하는 것이 좋은 방향임을 느꼈다.
Notion을 통해서 맡은 업무의 설계서나 부가적인 기능을 개발할 때 테크 문서를 작성하여 개발을 진행했었다.
진행 과정, 문제 상황, 문제 해결 과정을 팀원들에게 공유하여 업무를 진행하면서 작업에 대한 공유와 피드백을 받기 좋았다.
이전부터 문서화를 열심히 작성해왔어서, 인턴을 진행하면서도 가독성 좋고 핵심 포인트만 전달하는 식으로 문서화를 잘하여 동료, 사수, 팀장분께 칭찬을 받기도 했다.!
Q2. 새롭게 학습한 기술 및 개념은 무엇인지,
Domain Model이 무엇인지 배우며 각 클래스의 역할을 명확히 하는 게 중요하다는 것을 배웠다.
예를 들면 모든 계층에서 동일한 DTO 클래스를 사용하는 것보다 각 계층의 DTO 클래스를 나누어서 역할을 분리하는 것이 유지보수 측면에서 더 효율적임을 알게 됐다.
하나의 클래스를 모든 계층에서 공유하는 경우 변경이 발생할 때 모든 곳에서 Side Effect가 발생하고, 도메인 모델에 영향이 갈 수 있다.!
Spring의 MessageSource, Multi Module을 사용해보며 스프링이 지원해 주는 다국어 처리와 모듈화 기술 등을 익혔다.
사이드 프로젝트를 진행하면서, 모듈화를 진행하여 java, kotlin을 활용해서 스프링 프로젝트를 진행해보려고 한다. (기회가 된다면 다국어 처리도 진행하고자 한다)
Q3. 문제 해결 능력 향상
시설문의 목록 조회 시 Cursor 페이징을 구현하면서, 여러 정렬 조건을 만족시키기 위해 2개의 Key를 조합해서 문제를 해결했다.
또한, 현재 시간을 기준으로 예약된 데이터와 과거 히스토리 데이터의 특성이 달라서 페이지 크기에 따라 추가 데이터를 조회해야 하는 상황을 고려해야 했다.
예약된 데이터는 예약된 상태 + 다가오는 날짜 순으로 정렬하고 / 과거 히스토리는 현재 시간 이후로 데이터를 최신순으로 보여줘야 했다.
이미지 업로드 시 용량을 초과하는 경우 로깅 필터에서 생기는 문제를 디버깅 찍어보면서, MultiPart 데이터를 읽을 때 MultiPartResolver가 동작하여 파일 데이터가 처리되는 것을 배웠다.
문제의 원인은 Filter단에서 Servlet의 본문을 읽을 때 MultipartResolver가 실행되는데, 파일 용량 초과 시 Stream Closed 되어
이후에 본문을 복사하거나 읽으려고 할 때 IOException이 발생하는 문제였다.
Q4. 코드 리뷰 및 피드백을 통한 개선점
사수분한테 코드 리뷰를 받으면서 피드백 받은피드백받은 내용이 이해가 되지 않으면 질문을 드리면서 피드백 내용을 온전히 이해하려고 노력했었다. 그리고 피드백받은 내용에 대해 같은 실수를 하지 않기 위해서 작업을 진행할 때 같은 오류를 범하고 있지는 않은지, 최적의 코드인지 스스로 되물으며 개발하는 습관을 길렀다.
이러한 과정 덕분에, 같은 코드를 짜면서도 더 효율적인 코드를 작성할 수 있었고 변수 네이밍, 함수 네이밍을 신경씀으로써 클린 코드를 작성할 수 있었다. 실수를 줄이려고 열심히 노력했는데, 사수분께서 습득력이 빠른 것 같다고 칭찬해주셨을 때 속으로 너무 기분이 좋고 뿌듯했다.!
Q5. 개발도 중요하지만 무엇보다 Soft Skill이 중요한 듯 싶다.
개발을 잘하는 것도 중요하지만, 무엇보다 소프트 스킬이 중요하다는 것을 느꼈다.
혼자서 진행하는 1인 개발이 아니므로, 다른 팀원들과 협업하는 과정이 매우 중요하다.
더더욱, 경험이 부족한 신입, 주니어 단계인 경우에는 경험이 많은 팀원들의 이야기에 귀 기울이고, 모르는 내용을 그냥 넘어가는 것이 아니라, (공손하게) “왜 그렇게 생각하시는지?” 또는 “이해가 안 되는 부분에 대해 재설명을 부탁하기” 등 커뮤니케이션 기술이 중요함을 느꼈다.
더불어, 진행상황을 공유하거나 모르는 것을 질문할 때 이해하기 쉽고 두괄식으로 의사표현을 하는 것이 중요하다고 느꼈다.
인턴 초반에 긴장 + 말을 잘 못해서 내 생각을 온전하게 전달하지 못했는데, 계속해서 내 생각을 명확하게 표현하려고 노력했다.
나는 이를 보완하기 위해 문서화 작업을 꼼꼼히 하면서 내 생각을 정리하고 사고했던 흔적을 기록했다. 덕분에 다른 팀원에게 질문이나 공유 상황을 전달할 때 매끄럽게 설명할 수 있었다. (소통 기술이 정말 중요한 것 같다.)
Q6. 배웠지만 더 깊이 공부하고 싶은 주제
기회가 된다면 DevOps 쪽에도 기여하고, 도메인 기능을 하나 더 개발해보고 싶었다.
시설문의 도메인을 개발하면서 배운 것을 바탕으로 다음 프로젝트를 진행했을 때 더 나아진 내 모습과 같은 실수를 반복하는지 확인해보고 싶었다. 또한, 새로운 프로젝트를 진행하면서 또 다른 문제를 겪으면서 많은 경험치를 쌓고 싶었다.
Q7. 부족했던 부분
뭔가 인턴을 진행하면서 개발 역량 증진도 중요하지만, 커뮤니케이션 기술과 영어 실력을 키워야겠다고 너무 크게 느꼈다.
내 생각을 명확하게 전달하기 위해서 두괄식으로 말하는 연습을 하거나, 애매하게 이해하고 넘어가지 않아야겠다고 다짐했다.
항상 말하면서 스스로 느낀 게, 알긴 아는데 입 밖으로 설명이 나오지 않는 것들은 내가 빠르게 훑고 넘어가서 문제의 핵심을 잘 모르는것 같다고 생각이 들었다. 그래서 앞으로는 학습을 하면서 완전하게 이해한 상태로 다음 스텝으로 넘어가고, 이를 내가 다른 사람에게 설명할 수 있는 단계인지 확인해 보며 학습해 나아갈 것이다. (스터디를 진행하면서 연습하고자 한다.)
Q8. 이후 공부하고 싶은 기술 및 방향
가장 생각나는 건 MongoDB와 GraphQL을 사용해 보는 것이다. NoSQL을 사용해 보며 RDB와 비교했을 때 어떠한 상황에서 더 효율적인지 알고 싶고, MongoDB를 사용했을 때의 장점을 몸으로 느껴보고 싶다. (No Shema, 데이터 조회 빠름)
백엔드 멘토님께서 말씀해 주신 내용 중 "도메인 중심적 사고"를 진행하고 설계와 개발에 녹여내보고 싶다.
기존에는 데이터 중심적 사고로 ERD를 먼저 설계하고 클래스를 만들고 개발을 진행했는데, 객체 지향적, 도메인 중심적 사고를 하기 위해서는 데이터 중심적이기보다는 객체의 행위, 도메인의 이벤트에 집중해야 하는 게 중요하다고 느꼈다. (본질은 데이터 관리가 아니라 비즈니스 처리이다.)
아마도 혼자서 진행하면 데이터 중심적으로 사고할 가능성이 높지만, 최대한 도메인을 위에서 보는 느낌으로 생각하며, 해당 도메인에서 발생하는 행위에 집중해서 개발을 진행하고자 한다.
Q9. 인턴 경험을 바탕으로 목표 설정
개발자에게 영어는 필수,
개발자는 모르는 것을 확인할 때 제일 먼저, 공식 문서 or StackOverFlow를 확인한다. 거의 모든 문서는 영어로 되어 있기에 올바르게 이해하기 위해서 영어 공부를 꾸준히 하는 게 좋다고 느꼈다.
또한 해외 취업을 꿈꾸고 있으니 영어 공부를 계속 미루지 않고 제대로 진행해보고자 한다.
자바와 스프링의 기본 개념을 다시 확실하게 이해하고자 한다. (설명이 가능한 레벨로)
늘 해왔던 거여서 무의식적으로 코드를 작성하고 라이브러리를 사용했었는데, 성능 최적화나 다양한 문제 해결을 위해 CS 개념과 스프링 개념들을 더 확실하게 알고 있어야겠다고 생각했다.
'트러블슈팅' 카테고리의 다른 글
GitHub Actions CI/CD 자동 배포 시 @Value 값 주입 문제 해결하기 (0) | 2025.01.05 |
---|---|
Spring @Value, static 정적 바인딩 오류 해결하기 (0) | 2025.01.05 |
JavaBeans Convention - boolean 필드에서 발생하는 변수명 변경 문제 해결 (0) | 2024.12.22 |
[트러블슈팅] Spring DateTimeFormatter 생성 비용 최적화 (0) | 2024.11.07 |
H2 Database TINYINT(1) 설정 오류 해결: CommandAcceptanceException 및 JdbcSQLSyntaxErrorException 해결 방법 (1) | 2024.10.05 |