채용공고 올리기

윤영운님을 응원해보세요!

지금 만족하고 있어요
유연함
자기 주도적
문제 해결사
신뢰
긍정적

미리보기

기본 정보

이름
윤영운
직업
백엔드 개발자
간단 소개

"왜?"라는 자체 질문을 통해 성장하는 개발자 윤영운입니다. - 소프트웨어 공학에 “Silver Bullet”은 존재하지 않기에 “왜?”라는 자세는 중요하다고 생각합니다. - 나의 코드 설계 의도를 동료들에게 설명할 수 있는 개발자입니다. - "왜?"라는 의문을 통해 깊이 있는 학습을 하고자 노력하고 있습니다. - 항상 내가 틀릴 수 있음을 인지하고, 상대방의 의견을 귀담아듣는 자세를 지향합니다.

기술 스택

기술 스택

Java, Spring Boot, JPA, querydsl, MySQL, JavaScript, HTML/CSS, Git

경력

회사명

주식회사 마이즈

직급 | 부서 | 근무 유형

팀원 | 개발팀 | 재직 중

근무 기간

2024.05. ~ 재직 중 (10개월)

담당 업무

SIP 인터폰 관제 시스템 개발

  • 인터폰 헬스체크 개발

    • 동기 방식으로 인해 인터폰의 네트워크 문제 발생 시 다른 인터폰들의 헬스체크가 지연되었던 문제를 비동기를 통한 병렬 처리로 해결

  • 인터폰 상태 조회 API 개발

  • 관리자 전화기 및 인터폰 제어 API 개발

  • 인터폰 안내 방송 API 개발

  • 구현한 API를 사용하는 화면 개발

가스감지기 모니터링 애플리케이션 개발

  • 구역별 실시간 가스 농도 및 경보상태 수집 애플리케이션 개발

  • 수집된 가스감지기 데이터 조회 API 개발

  • 가스감지기 모니터링 대시보드 화면 개발

사용기술: Java, SpringBoot, Jpa, QueryDSL, MySQL, JavaScript, JQuery, HTML/CSS

프로젝트

프로젝트명

LinkHub

소속/기관명

프로그래머스 백엔드 데브코스 [팀 프로젝트]

프로젝트 기간

2023.10. ~ 2023.12.

프로젝트 내용

링크 아카이빙 및 공유 서비스
GitHub: https://github.com/Team-TenTen/LinkHub-BE/tree/develop
사용 기술: Java17, SpringBoot3.1.5, SpringDataJPA, QueryDSL, MySQL, Redis, Junit5, AWS, Docker, Prometheus, Grafana, Loki
역할: 백엔드 팀장, 프로덕트 오너


구현내용

링크 저장소 CRUD 개발

  • 효율적인 DB커넥션 사용을 위해 Facade 패턴을 이용하여 이미지 업로드 로직 트랜잭션 외부로 분리

  • 링크 저장소 검색 시 문자열 앞뒤 와일드 카드로 인해 발생하는 Table Full Scan 해결 (데이터 100만 건 상황 1,634ms -> 235ms)

  • OneToMany 관계 Fetch Join과 페이징 동시 진행 시 발생하는 데이터 중복 문제 해결

  • API 특성에 따른 적절한 offset-based, cursor-based pagination 적용

링크 저장소 즐겨찾기 기능 개발

  • 링크 저장소 페이지네이션 시 즐겨찾기 개수와 가져오기 개수 정보를 함께 줘야 했기에 해당 집계 정보 반정규화 진행

  • 반정규화로 인해 발생했던 동시성 이슈(Lost Update)를 낙관적 락, 분산 락, 비관적 락 중 비관적 락(Locking Reads)을 통해 해결

링크 저장소 가져오기 기능 개발

  • 가져오기 기능은 저장소 내의 모든 링크와 태그들을 복사 하여 새로 생성하는 기능으로 3N 건의 insert 쿼리 발생

  • 이를 해결하기 위해 Bulk insert 처리

  • 링크와 태그는 N:M 관계, 따라서 관계 테이블이 존재하며 HashMap 자료구조를 이용하여 관계 테이블 Bulk insert 구현 (insert 쿼리 3N 건 -> 3 건)

댓글 생성 및 조회 개발

  • 대댓글의 depth제한을 언제든지 변경 가능하도록 확장성 높은 도메인 모델 설계

API 서버 모니터링 환경 구축 (Prometheus, Grafana, Loki)

  • 운영 서버 장애 발생 시 빠른 파악을 위해 Prometheus와 Loki를 이용하여 metric과 log정보(warn, error level) 수집 및 Grafana를 이용하여 시각화

테스트 코드

  • 다양한 케이스의 테스트 코드 작성

  • MockBean으로 인한 Application Context 중복 초기화 문제 해결 (Application Context 초기화 2번 -> 1번)

프로젝트명

당근마켓 API 서버 클론 프로젝트

소속/기관명

프로그래머스 백엔드 데브코스 [백엔드 클론 프로젝트]

프로젝트 기간

2023.09. ~ 2023.09.

프로젝트 내용

당근마켓 중고거래 서비스를 직접 분석하여 구현한 클론 프로젝트
GitHub: https://github.com/prgrms-be-devcourse/BE-04-DangunMarket
사용 기술: Java17, SpringBoot3.1.0, SpringDataJPA, QueryDSL, MySQL, MongoDB, Redis, Junit5
역할: 백엔드 개발자, 스크럼 마스터


구현내용

게시글 도메인 개발

  • 게시글을 최상단에 끌어올리는 기능 개발 중, 스태틱 메서드 LocalDateTime.now()로 인해 “3일에 한 번만 가능하다”는 비즈니스 제약조건 테스트 어려움 발생

  • LocalDateTime을 다루는 객체를 만든 후 해당 객체를 외부에서 주입받아 사용하는 방식으로 구조를 수정하여 테스트 코드에서 Stub을 통해 해결
    (예시 코드: https://daffodil-afternoon-364.notion.site/504fd343b48a4764878a44025b588f38?pvs=4)

  • 추후 구현 기술 변경 가능성이 존재한다고 판단하여 인터페이스로 추상화

채팅 도메인 개발

  • 실시간 읽음처리를 위해 글로벌 캐시 Redis를 이용하여 유저의 실시간 접속 정보 관리

  • 비구조화된 데이터이며 실시간으로 쌓이는 대량의 채팅 메시지를 관리하기 위해 document기반이며 스케일 아웃에 유리한 MongoDB 도입

지역 정보 데이터 세팅

  • GeoJSON 형태의 행정동 정보를 서버에서 이용할 수 있는 형태로 파싱하고 MySQL의 Geometry types인 MultiPolygon type을 이용하여 데이터 세팅

프로젝트명

DrawingDuo

소속/기관명

SW 사관학교 정글 [팀 프로젝트]

프로젝트 기간

2022.12. ~ 2023.01.

프로젝트 내용

대화하며 같이 그림의 섹션을 색칠하는 ‘온라인 PIPO Painting’ 서비스
GitHub: https://github.com/Miracle-Midnight/Drawing-Duo/tree/develop
사용 기술: TypeScript, NestJS, TypeORM, PostgreSQL, Docker, AWS(EC2, S3, RDS, ELB)
역할: 백엔드 개발자


구현내용

로그인, 회원가입 구현

  • Stateless가 장점인 JWT 토큰 방식을 통해 로그인 구현

  • 비밀번호 단방향 해시 암호화 저장

서버 배포 및 AWS 인프라 구축 EC2, RDS, S3, ELB

  • 클라이언트와의 통신 데이터 암호화를 위해 로드밸런서이자 리버스 프록시 역할을 하는 AWS ELB(Elastic Load Balancer)에 SSL 인증서 적용

유저 도메인 개발

룸(게임 방) 도메인 개발

이미지 파일 S3 업로드

포트폴리오

URL

link

GitHub

깃허브
link

프로그래머스 데브코스 피어리뷰

노션

자격증

자격증명

정보처리기사

점수 | 발급기관

기사 | 한국산업인력공단

취득연월

2024.06.

자격증명

SQL개발자 (SQLD)

점수 | 발급기관

. | 한국데이터산업진흥원

취득연월

2024.04.

자격증명

일반기계기사

점수 | 발급기관

기사 | 한국산업인력공단

취득연월

2022.12.

교육

소속/기관명

프로그래머스 백엔드 데브코스

종류 | 전공

사설 교육 | 자바 스프링 백엔드 개발자 교육 과정

재학 기간 | 재학 상태

2023.06. ~ 2023.12. | 졸업

소속/기관명

KAIST SW Jungle

종류 | 전공

사설 교육 | 자료구조, 알고리즘, 컴퓨터구조, 운영체제 등 전산학 기초 지식 교육 과정

재학 기간 | 재학 상태

2022.09. ~ 2023.02. | 졸업

소속/기관명

강원대학교

종류 | 전공

대학교(학사) | 기계공학과

재학 기간 | 재학 상태

2016.03. ~ 2022.02. | 졸업

자기소개

자기소개

저는 이러한 이유로 개발자가 되고 싶어요

코인 투자가 한창 유행하던 시기, 저는 파이썬을 이용하여 비트코인 자동 트레이딩 봇을 만들어본 경험이 있습니다. 자동으로 매수 매도를 진행하는 완성된 프로그램을 보며 저는 프로그래밍의 유용함을 느꼈으며 이때 처음으로 프로그래밍에 흥미와 관심을 갖게 되었습니다.

이후 유튜브 알고리즘을 통해 EO라는 유튜브 채널을 알게 되었으며, 해당 채널에서 소프트웨어 엔지니어들의 인터뷰 영상들을 보며, 저는 유저들과 보다 가까이에서 유저들의 니즈와 문제점을 파악하며, 장소와 장비에 구애받지 않고 노트북 한 대로 해결해나가는 모습에 감명을 받았습니다. 당시 저는 제조업 회사에서 공정 관리 및 개선 업무를 담당하며 생산 공정의 효율성을 증가시키는 흥미롭고 의미있는 업무를 하고 있었지만, 회사 외에서는 제품을 탐구하거나 만들어볼 기회가 없다는 점과 이로 인해 직접 설계부터 제품 제작까지의 경험을 갖기 어렵다는 점이 아쉬웠습니다. 하지만 프로그래밍이라는 분야는 장소와 장비에 구애받지 않기 때문에 언제 어디서든 내가 원하는 서비스를 만들며 나의 업무능력을 갈고닦을 수 있다는 점이 큰 매력으로 느껴졌습니다.

무엇보다 프로그래밍이라는 분야가 끊임없이 발전하고 있으며, 내가 만든 서비스가 사회의 많은 사람들에게 도움을 주면서도 나 자신의 성장을 이룰 수 있는 분야라는 것에 큰 매력을 느껴 개발자가 되기로 결심하였습니다.

객체지향적인 코드와 가독성 높은 코드를 고민하는 개발자

저는 객체지향적인 코드와 가독성 높은 코드에 대해 항상 고민합니다. 첫 팀 프로젝트 당시에는 오로지 동작하기만 하는 코드를 생산해내며, 프로젝트 중반에 요구사항이 변경될 때 수많은 코드들을 수정해야 하는 어려움을 겪었습니다. 이를 통해 유지보수와 확장성이 높은 코드의 중요성을 몸소 체험하게 되었으며, 이후 “객체지향”이란 키워드를 알게 되어 객체지향 프로그래밍에 대해 공부하게 되었습니다.

이후 객체지향 개발을 깊게 이해하고자 “프로그래머스 백엔드 데브코스”란 교육코스에 참여하여 멘토링과 코드 리뷰를 통해 코드를 개선하는 경험을 하며 객체지향적인 코드개발 능력을 기를 수 있었습니다.

또한, 팀원들과 팀 프로젝트에서 코드 리뷰를 도입하여 서로의 코드를 읽게 되며 가독성 높은 코드의 중요성을 느낄 수 있었습니다. 내 코드를 읽을 팀원들을 위해, 그리고 미래에 코드를 다시 읽게 될 나 자신을 위해 “내 코드가 그렇게 이상한가요?”라는 책의 스터디 등을 통해 가독성 높은 코드에 대한 공부를 하였습니다.

이러한 노력들을 통해 이전의 프로젝트 때와는 달리 요구사항 변화에 좀 더 유연하게 대처할 수 있었으며, 프로젝트에서 협업하는 팀원들로부터 “코드가 깔끔하다” 라는 평을 들을 수 있었고, 이를 통해 소소한 성취감을 느낄 수 있었습니다.

“왜“ 라는 질문에 대답할 수 있는 개발자

저는 항상 “왜“ 라는 질문을 스스로에게 던져가며 기술을 도입하고 코드를 작성하기 위해 노력합니다. 이는 면접뿐만 아니라 같이 협업하는 팀원들에게 신뢰를 줄 수 있는 듬직한 동료가 되고 싶어서이기 때문입니다. 이는 팀 프로젝트에서 팀장 역할을 맡게 되며 느꼈던 점 중 하나입니다. 자신이 작성한 코드를 왜 이렇게 작성했는지, 어떠한 의도를 가지고 있는지 등을 잘 설명할 줄 아는 팀원에게는 계속해서 신뢰가 증가했으며, 그렇지 못한 팀원에게는 신뢰도가 떨어짐을 느낄 수 있었습니다.

또한, “왜”라는 질문을 통한 고민은 더 나은 서비스와 성능 향상을 위한 중요한 단계라고 생각합니다. 구글에는 다양한 Best Practice들이 공유되고 있지만, 이는 개발 환경에 따라 달라집니다. 따라서 항상 그대로 따라가기보다는 “왜”라는 의문을 가지고 접근하며, 그중 나의 환경에 알맞은 것을 선택해야 합니다.

저는 이러한 이유들로 인해 항상 스스로 “왜”라는 질문을 하며 “왜”라는 답변에 언제든지 답변할 수 있도록 노력하고 있으며 이러한 자세는 저의 성장에도 큰 도움이 될 것이라고 믿고 있습니다.

팀의 공동 성장을 지향하는 개발자

저는 혼자 성장하는 것이 아닌 팀의 공동 성장을 지향합니다. 이를 위해 테스트하기 어려운 코드를 테스트 가능한 코드로 바꾸는 방법, 낙관적 락 사용 시 데드락이 발생하는 경우, Integration 테스트에서 테스트 케이스 간 격리를 위해 @Transactional을 이용한 롤백 전략 사용 시 달라지는 동작 등 제가 겪은 경험 혹은 지식들을 팀원들에게 적극 공유하였습니다.

또한 팀원들의 트러블슈팅을 적극적으로 도왔으며, 프론트의 Next 서버 문제로 도움 요청을 받았을 때도 적극적으로 나서 PM2의 로그 분석을 통해 원인을 파악하며 로그 보는 법, 해당 부분을 원인으로 생각하는 근거 등을 설명하며 프론트엔드 팀원들에게도 유용한 지식 및 경험을 공유하고자 노력했습니다.

이러한 노력을 통해 공유하고 돕는 분위기를 만든 덕분에 저 또한 팀원들로부터 유용한 지식을 공유받으며 성장할 수 있었으며, 팀원들로부터 든든한 팀장이었다는 이야기를 들어 뿌듯함을 느낄 수 있었습니다.

댓글