소개 / About Me

기회를 만드는 개발자 이은경입니다.

대학 입학 후, 코로나 19로 인해 사람들과 교류하기 어려운 환경에서도 어플 개발 동아리에 임원진으로 지원해 2년간 활동을 했습니다. 그 과정에서 대전 경찰서와 협력하여 비대면 고지서 발급 어플 개발 백엔드에 참여하여, 백엔드 역량을 쌓아왔습니다. 앞으로도 이러한 적극적인 태도를 바탕으로 업무를 수행하는 과정에서 꾸준히 성장하기 위해 노력하겠습니다.

Birthday 2002.07.04
Email [email protected]
Mobile 010-8401-2510
Address 서울특별시 영등포구 영등포동
블로그 https://p-kyung.tistory.com
깃허브 https://github.com/pkyung

기술 스택

구분 Skill
Programing Languages java, python, java script
Framework/ Library Spring, SpringBoot, Jpa
Server Linux
Tooling/ DevOps gcp, ncp, aws, docker
Database mysql, oracle
ETC Git, Github

프로젝트 경험

hirehigher : 외국인 노동자 매칭 서비스 (백엔드 개발)

작업 기간 2024.09 ~ 2024.11
인력 구성 프론트엔드 4인, 백엔드 4인
프로젝트 개요 한국에서 일하는 외국인 노동자는, 근로의 전 과정에서 불리함을 느끼기 쉽습니다. 그리고 외국인 노동자를 고용하려는 사업주는 외국인 노동자를 쉽게 고용할 수 없습니다.
이러한 페인포인트를 분석하여, 외국인 근로자와 한국 고용주 사이의 신뢰를 구축할 수 있는 구인구직 및 근로계약서 작성 서비스를 기획하였습니다.
주요업무
상세역할 요청 시, 요청 정보와 함께 근로계약서 pdf 작성 기능 구현 (서명 이미지 추가)
사용언어
및 개발환경 java 21, spring JPA, mysql, nginx, docker
기여한 점
성과 기여: 근로계약서를 PDF 파일로 생성하고 서명 후, 이를 구글 클라우드 스토리지에 저장하는 기능을 구현했습니다.
문제 정의: 근로계약서 작성 시 계약서의 표준 양식을 유지하며 정확한 정보가 반영되어야 했습니다.
문제 해결: 스프링 라이브러리 중 pdf를 다루는 라이브러리는 iText와 Apache PDFBox가 있습니다. 그 중 iText를 활용하여 근로계약서의 양식을 유지하며 요청된 정보를 텍스트로 입력하는 기능을 구현했습니다. iText를 선택한 이유는 Apache PDFBox에 비하여 iText가 서식과 스타일을 세밀하게 제어하고 이미지를 삽입 시 직관적인 메서드를 제공하여 코드가 간결하고 효율적이기 때문입니다.
itext : scaleAbsolute(width, height), scaleToFit(width, height)
apache pdfbox : drawImage(image, x, y, width, height)

기여: 파일 구조 관리를 도메인 주도 설계 방식으로 도입하여 도메인 별로 책임을 명확히 분리하여 협업 효율성을 극대화했습니다. 문제 정의: 기존 계층형 아키텍처에서는 계약서 관리, 지원 관리, 인증 처리 등의 서비스가 같은 패키지에 있어 코드 복잡도가 증가하고, 협엽 시 충돌이 빈번하게 발생했습니다. 문제 해결: 협업 과정에서 명확한 도메인 경계를 설정하기 위해 DDD를 도입하여 프로젝트 구조를 재설계했습니다. | | github | Code : https://github.com/kakao-tech-campus-2nd-step3/Team18_BE |

학수고대 : 온라인 롤링페이퍼 서비스 (백엔드 개발)

작업 기간 2023.12 ~ 2024.06
인력 구성 디자인 1인, 프론트엔드 1인, 백엔드 1인
프로젝트 개요 온라인 롤링페이퍼 서비스 ‘학수고대’는 서로의 성장을 편지로 응원하는 플랫폼입니다.
사용자가 자신의 목표를 담아 ‘유리병’을 생성하고, 해당 링크를 공유하면 익명의 사람들이 유리병 속에 응원이 메시지를 담은 종이학 편지를 작성할 수 있는 서비스입니다.
주요업무
상세역할 Kakao 소셜 로그인 기능 구현
사용자 별 유리병 생성 및 삭제, 조회 API 설계 및 구현
유리병 내 종이학 편지 생성 API, 본인만 조회할 수 있는 조회 API 설계 및 구현
사용언어
및 개발환경 java 8, spring, spring JPA, mysql, centos
기여한 점
성과 기여: 종이학 편지 데이터를 효율적으로 조회하기 위해 Hibernate의 로딩 전략을 학습하고 적용해보았습니다.
문제 정의: 초기 설계에서는 종이학 데이터를 조회할 때마다 연관된 유리병 데이터를 즉시 로딩(EAGER) 방식으로 가져오도록 설정했습니다. 유리병 데이터는 종이학 데이터를 사용할 때 항상 필요한 정보가 아니었으나, 조회 성능에 미치는 영향을 분석하거나 최적화 방안을 검토하지 않은 상태였습니다.
문제 해결: Hibernate의 로딩 전략 중 LAZY 로딩 방식을 학습하고, 필요할 때만 연관 데이터를 조회하도록 코드를 개선했습니다. 이를 통해 유리병 데이터가 실제로 필요한 경우에만 로드되도록 변경했습니다.
결과: EAGER 로딩은 쿼리 수가 적지만 데이터 양이 많아질수록 초기 로드 시간이 오래 결렸으나, LAZY 로딩은 초기 조회는 빠르지만 연관 데이터를 호출할 때마다 추가 쿼리가 발생하여 트랜잭션 관리가 중요했습니다.
github Readme : https://github.com/HakSuGoDae
Code : https://github.com/HakSuGoDae/BekSuGoDae

비대면 시위 소음 고지서 발급 어플 (백엔드 개발)

작업 기간 2023.02 ~ 2023.07
인력 구성 모바일 2인, 백엔드 2인
프로젝트 목적 시위 고지 어플
주요업무
상세역할 백엔드 총괄
pdf 파일 글자 추가 후 이미지 변환하는 기능 구현
사용언어
및 개발환경 java 8, spring boot, ncp
기여한 점
성과 기여: 서버 배포 과정에서 ssh 포트를 잘못 설정하여 보안 사고가 발생했지만, 이 문제를 해결하고 보안 강화를 위한 조치를 주도했습니다.
문제 정의: 클라우드 서버를 배포하는 과정에서 ssh 포트에 모든 IP에서 접근 가능하도록 설정했습니다. 이로 인해 외부 공격자가 서버에 침입할 수 있는 취약점이 생겼고, 결국 서버가 해킹 당하는 사고가 발생했습니다.
문제 해결: 해킹 사건 발생 후, 즉시 서버를 내리고 클라우드 서비스의 관리자 비밀번호를 재설정했습니다. 또한, ssh 설정을 수정하여 접근을 특정 ip (my ip)로 제한했습니다.
결과: ssh 포트 접근을 제한함으로써 서버의 보안을 강화했고, 서버의 무단 접근이 차단되었습니다. 이 경험을 통해 보안 설정의 중요성을 깨달았고, 향후의 ssh 포트 설정에 신중하게 되었습니다.
github readme.md : https://github.com/JungWooGeon/DemonstrationService
code : https://github.com/pkyung/motion_backend

공공데이터 활용한 아카이브 서비스 (백엔드 개발)

작업 기간 2023.04 ~ 2023.06
인력 구성 프론트엔드 1인, 백엔드 2인 (본인 포함), 디자이너 1인
프로젝트 목적 충남대학교 공공데이터를 활용한 공모전, 인턴, 세미나 정보 모음 웹사이트
주요업무
상세역할 백엔드 총괄
공공데이터를 검색어에 따라 크롤링하여 반환하는 기능 구현
관심 공모전 저장 기능 구현
사용언어
및 개발환경 java 8, spring boot, spring boot jpa, gcp(최초 배포), aws(최후 배포)
기여한 점
성과 기여: http로 배포한 웹 서비스에서 프론트엔드가 https로 배포되면서 프로토콜 오류가 발생했습니다.
문제 정의: 초기 배포 시, 백엔드 서버는 http 프로토콜을 사용했으나, 프론트엔드는 https로 배포되어 서로 다른 프로토콜 간의 통신이 이뤄지면서 CORS 오류 및 보안 경고가 발생했습니다. 이로 인해 사용자는 서비스에 접근할 수 없게 되었습니다.
문제 해결: 도메인을 구매하고 SSL 인증서를 추가하여 백엔드 서버도 https 프로토콜로 재배포를 진행했습니다.
결과:  ssl 인증서 추가 및 https 프로토콜의 전환 이후, 프로토콜 오류 해결 뿐 아니라 보안이 강화된 서비스를 제공함으로써 사용자 경험이 개선되었습니다.70
github readme.md : https://github.com/cnu-data-contest
code : https://github.com/cnu-data-contest/cnu-data-contest-backend