채용공고 올리기

한기선님을 응원해보세요!

이직/구직 중이에요
책임감
협업 지향
커뮤니케이션
적응력
참을성

미리보기

기본 정보

이름
한기선
직업
Java Back_end 개발자
간단 소개

- Java,Spring,SpringBoot,JSP 등을 배우고 웹프로젝트를 구현했으며 개발자로서 직무능력을 준비했습니다. - 배운것을 블로그에 기술하고 정리하면서 기초를 다지고 이것을 다른 사람들과 지식을 나눕니다. - 서비스직 경험을 통해 비즈니스 매너를 배웠고, 팀원들과의 원활한 소통능력과 협력하는 자세는 업무의 성과를 높이는 저의 강점입니다.

기술 스택

기술 스택

Java, Spring, Spring Boot, MySQL, Oracle, JavaScript, GitHub, github-actions, aws-ec2, aws-rds, mybatis

자기소개

자기소개
  • 적극적으로 커뮤니케이션을 시도합니다.

    • 기능 개발에 집중하는 것 뿐만 아니라 팀원들과 매일 진행하는 데일리스크럼을 주도해 각자 의견 및 에러사항을 나누며 협업했습니다

  • 새로운 환경에 대한 적응력이 강점입니다.

    • 4년동안 오픈 호텔 2곳에서 근무한 경험으로 인해 새로운 환경에 적응력이 뛰어납니다

  • 공부한 것을 실제 프로젝트 및 업무에 적용 시키기 위해 고민하고 노력합니다.

  • 지속적인 자기계발을 하고 있습니다.

    • 부족함을 알기에 부족한것을 찾아 노력하고 성장하는 인재가 되고자 노력합니다

프로젝트

프로젝트명

도서 쇼핑몰 [ BookHub ]

소속/기관명

중앙 HTA (팀 프로젝트)

프로젝트 기간

프로젝트 내용

https://github.com/gi-dor/BookHub_AWS

[ 사용 기술 ]

Java , SpringBoot , MySQL , RDS

[ 담당 개발 및 기능 ]

  • 회원

    • 로그인 , 로그아웃

    • 회원가입 , 회원가입 완료 페이지 회원가입 완료 이메일 전송

    • 회원탈퇴

  • 마이페이지

    • 주문 내역조회 주문상세 조회

    • 찜 목록

    • 회원정보 , 회원정보 변경

    • 비밀번호 변경

  • 1:1 문의 조회

[ 기술적 경험 ]

  • 프로젝트 당시 배포를 해보지 못해 AWS EC2와 RDS 를 활용한 CI/CD

    • AWS CodeDeploy를 이용하여 배포를 자동화

    • GitHub Actions를 설정하여, 프로젝트를 푸시하면 자동으로 배포되도록 구성

  • AWS EC2 포트포워딩

    • 프로젝트 배포 후 URL에서 :8080 포트제거

      • EC2 보안그룹 설정 , 포트 리다이렉트 설정

      • 설정 전 : 15.165.134.135/:8080

      • 설정 후 : 15.165.134.135

  • 로컬 MySQL -> AWS RDS MySQL8.0

    • 기존 로컬 MySQL 에서 AWS RDS MySQL로 이전

  • 반복되는 코드에 대해 가독성 , 유지보수 하기 좋도록 개발

    • 동일 구조를 가지는 vpdlPageListDTO 클래스를 제네릭을 활용하여 리팩토링 진행

  • 커스텀 Exception 클래스 생성

    • 회원 가입 기능에 ID 중복검사에 대한 Exception 클래스 생성

  • 회원정보 관리

    • Email API를 사용해 랜덤한 값의 임시 비밀번호 전송

    • Ajax 비동기 방식으로 화면 새로고침 없이 암호화된 비밀번호 변경

  • 회원가입

    • 정규표현식과 @Valid 을 사용한 입력 데이터 유효성 검증

    • 아이디 중복체크 Ajax

    • Email API를 이용해 회원가입 완료시 확인 이메일 전송

    • kakao 우편번호 API

  • 로그인

    • 로그인 시 미리 지정한 정규표현식 외의 값을 입력시 자동으로 지워지도록 JavaScript 코드

    • Spring Security의 UserDetailsService 사용

[ 트러블 슈팅 및 개선 사항 ]

중요 정보 암호화 처리

  • 최근 프로젝트에서 DB 연결정보를 GitHub에 push 되어 데이터베이스를 해킹 되었습니다

    • Java 라이브러리인 jasypt 를 사용해 DB 연결 정보와 EmailAPI 접속 정보를 암호화 했습니다

회원가입시 회원가입 알림 이메일 발송을 비동기 방식을 활용하여 처리

  • 기존 동기 방식에서는 이메일을 보내는 작업으로인해 회원가입 이후 3 ~ 4초간 사용자에게 응답을 못내려주고 있는 상황 발생

    • java8 completefutre 와 @Async 를 사용해 비동기 방식 사용

    • @Slf4jSystem.currentTimeMillis() 사용해 시간 측정

    • 기존의 동기 방식에 비해  약 2800% 상승 ( 3231ms → 110ms )

RDS MySQL DB 이중화

  • 실제 서비스 운영시 DB 과부하를 염두해 AWS RDS 읽기 전용 replica 생성

    • @Transactional의 readOnly 속성을 이용한 쿼리분산

Caffeine Cache 를 사용한 성능 개선

  • 공지사항은 데이터 변화가 적고 해당 페이지에 유일 될때 마다 DB에서 조회를 하기 때문에 캐싱을 적용

    • @Bean으로 CacheManager의 EhCacheCacheManager가 더이상 지원을 하지않고 프로젝트가 중반부를 넘어간 상황이기에 빠르게 적용하기 쉬운 Local cache caffeine을 선택

    • @Cachable 옵션에 condition을 사용해 일정 페이지 이하인 경우에만 캐싱처리

    • 5000건 가상사용자 10명 기준

      • 평균 TPS : { 865 } → { 2100 } 약 2배 개선

1대1 문의사항 페이지 Index 를 활용하여 조회 성능 개선

  • 서비스를 운영하면서 계속해서 데이터가 쌓이므로 조회 속도가 떨어질 수 밖에 없기 때문 Index 설정에 대한 필요성을 느낌.

    • 카디널리티 수치가 높은 컬럼에 단일 인덱스를 생성

      • 복합 인덱스 설정시 인덱스 생성 순서에 따라 결과가 다를수 있기에 단일 인덱스 선택

  • Ngrinder 부하테스트 툴을 통해 인덱스 활용 전과 후에 대한 성능 확인

    • Vuser(가상 사용자) : 10

    • 수치 변화

      • 평균 TPS : { 8.8 } → { 62.5 } (약 610% 개선)

      • Peek TPS : { 10.0 } → { 87.0 }

      • Mean Test Time : { 1541.43 } ms → { 161.19}ms

      • Exected Tests : { 478 } → { 3520}

포트폴리오

URL

link

프로젝트

깃허브
link

개발 블로그

티스토리

교육

소속/기관명

중앙HTA

종류 | 전공

사설 교육 | Java 웹개발자 Backend 과정

재학 기간 | 재학 상태

2023.10. ~ 2024.05. | 졸업

소속/기관명

남궁성의 정석코딩

종류 | 전공

사설 교육 | Backend 웹 개발자 과정

재학 기간 | 재학 상태

2023.03. ~ 2023.08. | 졸업

소속/기관명

서정대학교

종류 | 전공

대학교(학사) | 식품조리_전공심화

재학 기간 | 재학 상태

2017.03. ~ 2019.02. | 졸업

소속/기관명

서정대학교

종류 | 전공

대학교(전문학사) | 호텔조리

재학 기간 | 재학 상태

2012.03. ~ 2017.02. | 졸업

자격증

자격증명

정보처리 기사 , 산업기사 - 필기

점수 | 발급기관

취득연월

2024.03.

댓글