미리보기
기본 정보
- 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 를 사용해 비동기 방식 사용
@Slf4j 와 System.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}
포트폴리오
교육
중앙HTA
사설 교육 | Java 웹개발자 Backend 과정
2023.10. ~ 2024.05. | 졸업
남궁성의 정석코딩
사설 교육 | Backend 웹 개발자 과정
2023.03. ~ 2023.08. | 졸업
서정대학교
대학교(학사) | 식품조리_전공심화
2017.03. ~ 2019.02. | 졸업
서정대학교
대학교(전문학사) | 호텔조리
2012.03. ~ 2017.02. | 졸업
자격증
정보처리 기사 , 산업기사 - 필기
2024.03.