미리보기
기본 정보
어떤 문제를 마주하더라도 포기하지 않고 끝까지 물고 늘어져서 반드시 해결하는 백엔드 개발자 권지환입니다! 이런 성향으로 공모전에서 수상하였고 성능 개선 및 업무 효율성 개선 경험이 있습니다. 코드 리뷰 및 팀원들의 피드백을 적극 수용하고 새로운 기술 습득을 좋아합니다.
자기소개
저는 이런 사람입니다!
'근본적 원인'을 탐구하는 열정적인 백엔드 개발자 권지환입니다.
구름 풀스택 개발 성장 과정을 최우수 팀으로 완수하며 탁월한 역량을 입증하였습니다.
한국정보방송통신대연합 주관 공모전에서 동상을 받았습니다.
이미지 등록 프로세스의 처리 시간을 15초 단축, 시스템 성능을 획기적으로 개선하였습니다.
Git Action을 사용하여 배포 자동화를 구현하여 업무 효율성을 극대화한 경험이 있습니다.
기술 스택
Java, python3, Kotlin, AWS, MySQL, MongoDB, GitHub, spring-framework
경력
소셜라우더
사원 | 개발 부서
2022.12. ~ 2023.09. (10개월)
DB 설계 및 관리
백엔드 개발
배포 자동화 및 AWS 서버 구축
프로젝트
무비보드
소셜라우더
2023.04. ~ 2023.07.
프로젝트 소개
영화 관람 후 반응을 수집하여 감정 분석 API를 통해 긍, 부정 수치로 수치화
프로젝트 필요성과 목표
영화 개봉 후 수집한 데이터의 긍, 부정 수치를 통해 영화의 전체적인 후기 확인 가능
영화 홍보에 고용하는 인플루언서 명단 확인 수월
인플루언서 고용 시 지출하는 비용 견적을 확인 가능
영화 제목과 날짜를 입력하면 기간에 맞는 영화에 대한 긍, 부정 수치를 도표화 하여PDF로 저장 가능
구현한 내용
프로젝트 기획 및 DB 설계
AWS 환경 구축
검색 필터 구현
인플루언서 시스템 적용
배포 자동화로 인한 업무 효율성 증가
웹 크롤링
프로젝트 진행 중 발생한 이슈 이슈 페이지로 이동
MongoDB 동적 필터링 구현 중 발생한 이슈
유지보수의 수월함을 위해 ORM을 Querydsl과 JPA로 결정
프로젝트 진행 과정에서 MongoDB에서 데이터를 필터를 거쳐 Find 하는 기능을 구현하고자 함
MongoDB로 select 쿼리 전송 오류 발생으로 Criteria를 사용하여 기능 구현
프로젝트 퀄리티 향상을 위한 나의 고민과 노력
ORM 변경
MongoDB 검색 필터 구현 중 오류로 인해 Querydsl이 아닌 Criteria를 사용하여 구현
Criteria는 좋지 않은 가독성과 불안전한 기술로 실무에서 사용을 꺼려한다는 내용 습득
이 후 MongoDB에 있는 데이터를 Querydsl로 find하는 기능 구현
MongoDB 백업
크롤링한 데이터들은 EC2에 구축한 MongoDB에 저장
데이터 손실 및 빠른 복구를 위해 데이터 백업
매일 자정에 데이터를 백업하여 AWS S3에 파일 저장
러닝 플래닛
사이드 팀 프로젝트
2024.05. ~ 진행 중
프로젝트 소개 소스코드로 이동
산책 및 러닝으로 소모한 칼로리 측
크루 또는 개인 미션을 수행 시 부여된 황폐화된 행성을 살리는 게이미피케이션 도입
프로젝트 필요성과 목표
러닝 목표 거리를 성취했을 때 수치가 아닌 이미지를 통해 시각적으로 성취도를 확인 가능
러닝 거리에 따라변화하는이미지를 통해 시각적인 즐거움 및 100% 진행 되었을 때 이미지 변화에 대한 기대감으로 러닝 빈도 증가
구현한 내용
프로젝트 기획 및 DB 설계
게시글 작성 및 수정 기능 구현
BulkInsert로 구현하여 시간 단축 (73초 -> 58초)
댓글 기능, 좋아요 기능
AWS S3 환경 구축
게시글 작성 시 업로드한 이미지를 S3에 저장 및 삭제 기능 구현
행성 진행도 구현
사용자가 이동한 거리 및 경험치에 따라 행성 이미지 변경 구현
랭킹 시스템 구현
요청에 대해 동적으로 처리 하기 위해 Querydsl을 사용하여 크루 및 개인 랭킹 조회 구현
예외 처리
Controller Exception Advice를 사용하여 예외처리 형식을 통일
테스트 코드 환경 구성
테스트 시 S3에 접근을 줄이기 위해 interface를 활용하여 mock 이미지 URL 반환
프로젝트 진행 중 발생한 이슈 이슈 페이지로 이동
Soft Delete 기능 구현 후 테스트 실패
Delete시 DB에서 데이터 삭제가 아닌 deleted_at의 값을 null에서 현재 시간으로 update하는 soft delete로 구현
Entity 클래스에서 @SQLDelete와 @SQLRestriction을 사용
@SQLRestriction 조건에 "deleted_at is null" 넣음
게시글 삭제 테스트 작성 시 tearDown 메서드에 deleteAllInBatch에서 Repository가 정리 되지 않아 오류 발생
JPA가 아닌 JdbcTemplate을 사용하여 tearDown 메서드 구현
@SQLRestriction 조건에 걸리지 않고 delete가 되어 테스트 통과
프로젝트 퀄리티 향상을 위한 나의 고민과 노력
이미지 저장 로직 변경
게시글 작성 시 이미지 등록을 할 경우 한 개의 이미지가 아닌 여러 이미지 등록이 가능
JPA를 사용하여 이미지 저장 로직 구현 시 이미지의 개수 만큼 Insert 쿼리 전송
트래픽이 많을 경우 성능 저하 우려
Jmeter를 사용하여 100명의 사용자가 10장의 사진을 등록을 가정하여 부하 테스트 진행
JPA: 73초 소모
JdbcTemplate을 사용하여 BulkInsert를 구현하여 InsertAll로 로직 변경
같은 조건으로 부하 테스트 진행
JdbcTemplate: 58초 소모
15초 시간 단축
성능 개선을 확인 후 JPA에서 JdbcTemplate BulkInsert로 로직 변경
CodeyThon
사이드 팀 프로젝트
2024.03. ~ 2024.05.
프로젝트 소개 소스코드로 이동
코딩 테스트 및 알고리즘 공부를 위해 WebIDE 사용
같이 공부할 수 있는 환경 제공 및 게임화를 도입하여 흥미 유도
프로젝트 필요성과 목표
기존 알고리즘 공부 사이트 이용 중 같이 공부할 수 있고 채팅을 통해 아이디어를 제안할 수 있는 기능이 필요함
게이미피케이션을 도입하여 알고리즘 해결 속도 및 정답률에 따라 순위 결정을 하여 흥미 유도
순위에 따라 경험치를 차등 지급하고 메인 페이지에 전체 순위를 보여주어 경쟁심 유도
구현한 내용
프로젝트 기획 및 DB 설계
회원 가입 및 로그인 구현
회원 가입 시 비밀 번호는 bcrypt로 암호화 하여 DB에 저장
STOMP를 활용한 게임 환경 구현
문서 관리
서브 모듈을 활용하여 application.yml 파일 관리
예외 처리
Controller Exception Advice를 사용하여 예외처리 형식 통일
프로젝트 진행 중 발생한 이슈 이슈 페이지로 이동
Spring Security 적용 후 모든 error 상태 값 403 문제 해결
Spring Security를 적용 후에 모든 에러의 상태값이 403으로 통일 되는 현상 발생
보안상 기본적으로 모든 요청을 차단하는 특성을 파악하여 http 접근 제어 설정에 "/error" 추가
테스트 환경 정보가 없어서 빌드 시 테스트 실패 문제 해결
배포 클라우드 특성 상 원격 저장소에 있는 프로젝트 파일을 clone후 build하여 실행
build시 실행되는 테스트 과정에서 DB 정보가 없어 테스트 실패 및 build 실패
private인 서브 모듈을 추가하여 build시 DB 정보를 찾을 수 있도록 하여 문제 해결
소켓 연결 시 connect 후 바로 disconnect 현상 발생
프론트에서 소켓 연결을 요청을 보낸 후 바로 disconnect 됨
JWT 토큰 검증 하는 인터셉터가 없어 발생하는 오류로 판단
StompHandler에 인터셉터를 추가하여 JWT 검증 로직 추가
http 접근 제어 설정에 "/ws/**" 추가하여 문제 해결
프로젝트 퀄리티 향상을 위한 나의 고민과 노력
랭킹 시스템 Batch 시스템 사용제안
현재 사용자가 로그인 할 때 GET 요청을 보내 모든 사용자의 경험치를 계산 후 정렬하여 순위 전달
Batch 시스템을 사용하여 설정한 주기마다 사용자의 경험치를 계산
수치만 저장하는 테이블을 새로 생성 후 계산한 경험치 수치를 저장
계산된 값을 정렬만 하여 값을 보여주기 때문에 대폭적인 시간 감소
신뢰성 있는 기능을 위해 테스트 코드 작성
Junit5를 사용하여 단위 테스트를 작성하여 신뢰성 있는 기능 구현
테스트 코드 작성으로 인해 예외 처리 및 버그를 쉽게 발견할 수 있었음
ToDaDiary
사이드 팀 프로젝트
2024.02. ~ 진행 중
프로젝트 소개
GPT API를 사용하여 키워드 및 주제를 작성 시 자동으로 요청에 맞게 일기 작성
사용자는 이미지 및 일기 내용을 직접 작성 가능
일기의 내용을 감정 분석을 통하여 평균 감정 파악
프로젝트 필요성과 목표
GPT API를 사용하여 키워드 및 주제를 작성하면 자동으로 요청에 맞게 일기 작성 기능
AI의 기술을 이용하여 한 주의 감정 분석
AI를 사용한 일기 작성으로 재미 부여
구현한 내용
일기 CRUD 기능 구현
일기 작성 후 내용, 이모지, 이미지 저장 기능 구현
AWS 환경 구성
S3에 이미지 저장을 위해 AWS S3 환경 구축
테스트 코드 환경 구축
Controller 테스트 통과 후 RestDocs 생성 및 Swagger에 자동 API 문서 추가
interface를 활용하여 테스트 시 S3 접근을 피하고 Mock url 반환
프로젝트 진행 중 발생한 이슈 이슈 페이지로 이동
API 명세서 자동화 오류
일기 작성 시 내용 및 이미지를 등록하기 위해 @RequestPart로 DTO 및 MultiparFile 타입의 이미지 파일 동시 요청
Controller 테스트 성공 시 RestDocs + Swagger로 API 명세서 자동 생성 목표
@RequestPart로 구현한 DTO 및 이미지 파일이 Swagger에 누락되는 현상 발생
조사 결과 RestDocs와 Swagger 단독으로 사용할 경우는 누락이 되지 않지만 아직 RestDocs + Swagger에서는 @RequestPart 미지원
팀원들과 회의 후 프로젝트 구현 완료 후 Swagger에 직접 반영하기로 결정
포트폴리오
URL
교육
전북대학교
대학교(학사) | IT정보공학과
2017.03. ~ 2022.02. | 졸업
구름
사설 교육 | 풀스택 개발 과정
2023.12. ~ 2024.06. | 졸업
대외활동
전북대학교 IT 정보공학과 시각 지능 연구실 학부 연구생
전북대학교
Image Detection 기술을 사용하여 폭력 감지 CCTV 개발
학과 학부 연구생으로 들어가 이미지 화질 개선 및 이미지 감지 학습에 관한 논문을 읽고 세미나를 진행하였습니다.
또한 팀원 1명과 함께 사회적 약자를 위한 폭력 감지 CCTV를 Image Detection 기술을 이용하여 AI 학습을 시킨 후 폭력 상황이 발생 시 보호자와 경찰서에 신고를 할 수 있는 기능을 개발하였습니다.
이 후 교내 공모전에서 프로젝트 완성도 및 기획에 높은 평가를 받아 우수상을 받았습니다.
프로보노 공모전 수상
팀 프로젝트
Unity + Blender를 활용한 장애인 화재 대피 프로그램 제작
Blender를 사용하여 가상 현실을 모델링 하였고 Unity를 사용하여 프로그램을 제작하였습니다.
이로 인해 장애인 분들이 더욱 현실감 있는 상황에서 화재 대피 훈련을 할 수 있었고 실제 착용 후 프로그램을 진행하였습니다.
이러한 기획력과 완성도를 인정 받아 한국정보방송통신대연합 주관 공모전에서 동상을 받았습니다.
외국어
영어
일상 회화 가능