
미리보기
- 직업
- 개발자
- 이름
- 김동학
- 간단소개
- 세상을 조금 더 여유롭게 만드는, 노는 개발자 김동학입니다.

자기소개
- 자기소개
아키텍쳐와 함께 하는 개발자 김동학입니다. 많은 패러다임과 서비스들을 접하면서 역량을 키우고 있습니다.
처음으로 프로그래밍을 배우기 시작하면서 스프링으로 입문하여 필요에 따라 QueryDSL, Spring Batch 등의 기술을 추가적으로 익혔으며, 그 후 타입스크립트 공부를 시작, 토이 프로젝트에서 Nest.js + Next.js 풀스택 개발을 하였습니다.
광주소프트웨어마이스터고등학교에서 동아리 맛소금의 부장으로 참여하여, 후배들과의 커뮤니케이션을 위해서 노력하고, 문서화를 통해 진행중인 프로젝트를 쉽게 인수인계할 수 있도록 하였습니다. 또한 링크 행사에 참여해서 다른 마이스터고 동아리와의 커뮤니케이션을 진행했습니다.
소프트웨어마이스터고 4개교 연합 해커톤에 참가해서 포토이즘을 주제로, ChatGPT를 이용한 오디오 분석과 같은 기능들을 개발해서 인기상을 수상하였습니다.
기술 스택
- 기술 스택
- NestJS
- TypeScript
- AWS
- Spring Boot
- MySQL
- Kotlin
프로젝트
- 프로젝트명
- SMS
- 소속/기관명
- 광주소프트웨어마이스터고 동아리 MSG
- 프로젝트 기간
- 2023.04. - 진행 중
- (1년 11개월)
- 프로젝트 설명
AWS S3, Redis, Spring Boot, Hexagonal Architecture
백엔드 개발자로 참여한 프로젝트로, 학교 내부에서 기업에 제출할 목적으로 사용하던 기존의 종이책자를 브라우저와 앱으로 사용할 수 있게 하는 것을 목적으로 개발되었습니다.
출시 과정에서 생긴 문제
출시 전에 테스트를 하는 과정에서 JPA Entity에서는 이미 삭제된 필드임에도 불구하고, 프로덕션 데이터베이스에서는 계속 필드가 남아있어 Nullable 관련 오류가 발생하였고, 코드와 비교해서 사용되지 않는 필드를 제거하는 작업을 진행하였습니다.
또한 학교 선생님들과 요구사항 타협 도중 변경된 사항이 있어, 학생이 제출한 인증제 혹은 보고서 목록을 확인하고 승인할 수 있는 것은 모든 선생님에서 각 반의 담임선생님으로 수정하였습니다.
[제출된 인증제 목록을 각 담임 선생님 반의 인증제만 반환하도록 함]
데이터베이스 해킹 이슈
데이터베이스를 해킹당해서 학생 정보, 포트폴리오 등의 개인정보가 탈취당하는 일이 발생하였습니다. 예전에 성능과 보안 대신 비용 최적화를 위해 많은 것들을 축소했었고, 그 과정에서 너무 광범위한 보안 그룹 포트 노출, 취약한 비밀번호 등의 문제가 드러나게 되었습니다.
예정했던 출시일에 정상적으로 진행할 수 없게 되었고, 기존에 EC2에서 컨테이너로 실행되던 MySQL을 주기적인 백업을 위해서 RDS로 마이그레이션하고, 보안 그룹의 포트를 수정해서 이번 사건을 재번복하지 않기 위해 노력하였습니다.
신기능 개발
기업에서 포트폴리오에 아무 제한없이 접근할 수 있도록 허용하면 개인정보 침해가 발생할 수 있기 때문에, 디스코드와 유사하게 만료기간이 있는 링크를 생성하고, 해당 기간에만 특정 학생의 포트폴리오를 확인할 수 있도록 하는 기능을 Redis TTL을 이용해서 개발하였습니다.
포트폴리오 파일 업로드 기능을 개발하기 위해서 AWS S3를 사용하였고, 확장자를 PDF로 제한하는 함수를 추가하였습니다.
프로젝트를 이끔
PO가 되고 나서부터 방학 기간에는 온라인으로, 등교 시에는 오프라인으로 스프린트를 진행하여 변경사항과 진행률에 대해 꾸준히 확인하였으며, 선생님의 요구사항이 변경될 때마다 프로젝트 참여 인원에게 알리고, 서로 조율하는 과정을 통해서 더욱 유연하게 개발할 수 있도록 일정을 계획하였습니다.
- 프로젝트명
- GOGO
- 소속/기관명
- 광주소프트웨어마이스터고등학교 GOGO TF
- 프로젝트 기간
- 2024.03. - 2024.08.
- (6개월)
- 프로젝트 설명
Docker, Github Actions, AWS EC2, Spring Batch, Multi Module
체육대회를 재밌게 즐기기 위해서 미니게임, 경기 알림 등의 기능이 포함된 프로젝트를 개발했습니다.
배치 작업
해당 프로젝트에서는 응원할 팀을 하나씩 정할 수 있습니다. 자신이 응원하는 팀의 경기가 있다면 10분 전에 미리 메시지로 공지해주는 기능으로, Spring Batch와 CoolSMS를 이용해서 구현했습니다.
전화번호 인증을 구현하기 위해서 사용한 CoolSMS는 메시지 1건당 요금이 발생하기 때문에 비용 절감을 위해서, 인증 횟수를 저장해야만 했습니다. 이러한 인증 횟수를 자정마다 초기화하는 기능을 구현하기 위해서 Spring Batch와 Schedule을 사용했습니다.
멀티 모듈
API, Entity, Batch 중요한 도메인 3개로 구분해서 멀티 모듈을 구성하였습니다. 이를 통해 유지보수가 더 쉽고, 느슨한 결합을 만들 수 있었습니다.
아쉬웠던 점이 있다면 Batch 모듈을 나누는 과정에서 API 서버와 Batch 서버가 둘 다 노출되면서, Security 설정 파일도 2개가 되었고, 보안 상의 관점으로도 안전하지 않아보였습니다.
다음에 이와 같은 프로젝트를 진행한다면 API 서버만 노출시켜서, Batch 서버로의 직접적인 요청 대신, API 서버를 통해서만 Batch 서버로 요청을 보낼 수 있도록 수정해볼 것 같습니다.
포트폴리오
- 타입
- URL
교육
- 소속/기관
- 광주소프트웨어마이스터고등학교
- 종류 | 전공명/전공계열
- 고등학교 | 스마트IoT과
- 재학 기간 (재학 상태)
- 2023.03. - 재학 중