SOOHYUN BAE'S PORTFOLIO
제 포트폴리오 페이지를 방문해주셔서 감사합니다.
제 포트폴리오 페이지를 방문해주셔서 감사합니다.
예약 구매 기능이 있는 사이트
■ 개발 환경
Java 21(JDK 21.0.3), Spring boot(3.2.5), JPA,Gradle(8.7), MySQL(8.0), Redis
■ 설명
이메일 인증을 통한 회원 가입, JWT 로그인 및 로그아웃, Redis를 사용한 재고 관리와 결제
■ 자세히 보기
■ 코드 보기포트폴리오를 설명하는 포트폴리오 페이지
■ 개발 환경
HTML, CSS, Java Script
■ 설명
탭, 모달, 마우스 호버 효과 적용
■ 기록 자세히 보기
■ 코드 보기커피 원두와 용품 관련 쇼핑몰 사이트
■ 개발 환경
Java 11(JDK 11.0.19), Spring boot(2.7.17), JPA, Maven(1.1.3), MySQL(8.0), Oauth2.0
■ 맡은 부분
로그인(+SNS로그인), 회원 가입 회원 정보 수정, 회원 탈퇴
■ 기록 자세히 보기
■ 코드 보기- 개발 기간: 2024년 4월 17일 - 5월 18일 (4주)
- 개발 인원: 1명 (개인)
- 언어: Java 21(JDK 21.0.3)
- 서버: Eureka server
- 프레임워크: Spring boot(3.2.5), JPA
- 빌드 도구: Gradle(8.7)
- DB: MySQL(8.0), Redis
- 라이브러리: API Gateway, Spring cloud, Spring Security
- 기타: Docker, MSA
- Google SMTP와 Redis를 이용한 이메일 인증과 JWT 인증을 통한 로그인 및 로그아웃
- Docker를 이용한 환경 구축 및 MSA 모듈화(API Gateway, Eureka Server, Feign Client 사용)
- Redis를 활용한 재고 관리, 예약 구매 및 결제 기능
- Docker를 처음 배우고 사용하다 보니 환경 설정하는 데 어려움이 있었습니다.
- 기존 모놀리스 구조에서 MSA 구조로 바꾸어 작업하면서 의존성을 최소화하고 각 모듈의 통신에 대해 어떻게 구현할 것인지 고민했습니다. 생소한 개념이라 학습하여 적용하는 데 시간이 필요했습니다.
- User Service 모듈과 Order Service 모듈이 서로를 참조하게 되는 순환 의존성 문제가 발생했습니다.
- User Service에서 회원 정보를 가져와야 하는데 모듈의 전체 코드를 가져오다 보니 문제가 발생한다고 생각했습니다.
- Order Service 모듈에서 꼭 필요로 하는 로직만 User Service에서 가져올 수 있도록 수정하여 의존성을 최소화하였습니다.
- MSA를 위해 모듈화하여 작업했습니다. 그렇지만 시간이 부족하여 각 모듈별로 DB를 따로 두지 못했습니다. MSA의 목적에 맞게 각 모듈별로 DB를 독립적으로 갖도록 개선해야 합니다. 이를 통해 서비스 간 결합도를 낮추고, 독립적인 확장과 유지보수가 용이하도록 합니다.
- 클라이언트 요청에 대한 효율적인 리소스 활용과 높은 동시성 처리를 지원하기 위해 API Gateway를 Spring WebFlux와 같은 Non Blocking 서비스 형태로 전환해보고 싶습니다.
- 백엔드 프로젝트로 프론트엔드 작업을 하지 않았습니다. 각 기능이 제대로 작동하는지 쉽게 알 수 있도록 간단한 페이지를 만들어 사용자에게 더 나은 경험을 제공하고, 테스트를 쉽게 할 수 있도록 추가하고 싶습니다.
- 개발 기간: 2024년 1월 3일 - 10일 (1주)
- 개발 인원: 1명 (개인)
- 언어: HTML, CSS, JavaScript
- 풀 페이지 CSS 기능을 활용하여 스크롤 시 페이지를 이동하고 싶었는데 그렇게 구현하니 헤더와 푸터 안에 있는 페이지에 적용되어 스크롤이 여러 개 생겼습니다. 보기에 좋지 않고 복잡하여 구현하지 못했습니다.
- 미디어쿼리를 적용하여 반응형 페이지를 만들었습니다. 모바일일 때 내비게이션바가 간소화되도록 구현하는 데에 익숙지 않아 시간이 좀 걸렸습니다.
- 모달 팝업 창을 열면 Contact의 배경이 살짝 이동합니다. 스크롤이 없어져서 그렇다고 생각하는데 body와 관련 부분에 margin과 padding을 주어도 해결이 되지 않았습니다.
- 백엔드 부분이 없는 프로젝트라 백엔드 부분을 추가하고 싶습니다. 특히 사용자가 제목과 내용을 적어 전송 버튼을 누르면 DB에 저장되어 볼 수 있도록 기능을 추가하고 싶습니다.
- 개발 기간: 2023년 12월 11일 - 26일 (3주)
- 개발 인원: 4명
- 담당 역할: 로그인, 회원가입(SNS로그인 포함), 회원 정보 수정 및 탈퇴 (프론트엔드 포함)
- 언어: Java(JDK 11.0.19), HTML/CSS, JavaScript
- 서버: AWS EC2
- 프레임워크: Spring boot(2.7.17), JPA
- 빌드 도구: Maven(1.1.3)
- DB: MySQL(8.0)
- API: Google/Naver/Kakao Login API, Daum 주소 검색
- 라이브러리: lombok, thymeleaf(3.1.0), Spring Security, OAuth2
- Spring Security와 O Auth 2.0을 이용한 로그인과 회원가입을 합니다.
- 구글, 네이버, 카카오톡의 로그인 api를 사용하여 로그인이 가능합니다.
- 회원의 유형별로 이용할 수 있는 기능이 달라서 권한을 설정하여 차이를 두었습니다.
- 다음 주소 검색을 사용한 회원 주소 입력할 수 있습니다.
- 회원 정보 수정 및 탈퇴(CRUD)를 할 수 있습니다.
- 스프링 시큐리티에서 회원 구분을 아이디로 하는데 사용자가 설정한 아이디로 구현했습니다. 그런데 멤버 아이디를 외래키로 받는 다른 기능 구현들에서 기능을 하지 못해 결국 다시 이메일로 설정했습니다.
- OAuth에 대해 처음 알고 구현하다 보니 각 사이트에서 받아오는 회원 고유의 값과 속성이 달라서 그것을 아는 데에 시간이 걸렸습니다.
- SNS API(구글, 네이버, 카카오톡) 로그인 사용자들의 정보가 DB에 저장 되지 않아 기능을 이용할 수 없었습니다.
- SNS별로 회원 정보를 받아오는 값이 다르고 정보를 받는 객체가 없는 것이 원인이라고 생각했습니다.
- SNS별로 다른 값을 변수로 받았고, SNS 로그인 시 받아온 정보를 처리할 수 있는 별도의 클래스를 만들었습니다.
- 회원 탈퇴의 경우 Spring Security를 통하여 가입한 회원은 탈퇴가 가능하나, OAuth2를 통하여 SNS 로그인으로 가입한 회원은 탈퇴 시 API를 통하여 연결을 끊어야 합니다. 프로젝트 마감 시간이 임박하여 구현하지 못했습니다.
팀 프로젝트 기간이 짧아서 프로젝트에서 결제 기능을 구현하지 못했는데 맡은 부분과 상관없이 결제 부분을 구현해보고 싶습니다.
저에게 하시고 싶은 이야기가 있다면
언제든 연락주세요 😄