본문 바로가기

Project/싹틔움13

[싹틔움] 11/08 개발일지 회원가입시 이메일 인증 받기 3 : 비동기 처리를 통한 성능개선 💡 목표 기존에 이메일 검증 과정에서 인증번호 요청을 보내면 위 이미지와 같이 평균 4.18 초의 요청시간이 걸렸다. 1. 실제 서비스를 운영하는 입장에서는 사용자가 회원가입 절차까지 들어왔다면 빠르게 회원가입 절차를 갖도록 하는 것이 중요하다. 만약 이메일 인증 버튼을 눌렀는데 4.2 초나 서버의 응답을 기다리고 있다면 사용자가 회원가입을 시도한 것을 후회해버릴 지도 모른다. 2. 이메일 발송은 상대적으로 시간이 오래 걸리는 작업이기 때문에, 이를 비동기로 처리하면 이메일 발송 대기 중에도 다른 요청을 처리할 수 있어서 서버 리소스를 효율적으로 사용할 수 있어 요청 대기시간이 많이 줄 것으로 예상된다. 3. 이메일 발송 작업 중 네트워크 지연이나 이메일 서버의 응답 지연이 발생하더라도, 서버의 회원가.. 2024. 11. 11.
[싹틔움] 11/07 개발일지 회원가입시 이메일 인증 받기 2 : 이메일 인증코드 검증 💡 목표이메일 인증번호를 받으면 회원가입을 하고자 하는 유저는 10분안에 인증번호를 입력해야한다.데이터베이스까지 접근을 할 필요가 없기 때문에 redis 를 활용해서 TTL 기능을 넣어 시간 제한을 걸었다.이메일 인증을 받지 않은 상태에서 가입하기를 누르면 인증번호를 받도록 설정도 필요했다. EmailCertificationController@PostMapping("/v2/auth/verify-certification")@Operation(summary = "인증번호 확인", description = "받은 인증번호를 확인하는 API")@ApiResponse(responseCode = "200", description = "요청이 성공적으로 처리되었습니다.")public ResponseEntity> v.. 2024. 11. 10.
[싹틔움] 11/07 개발일지 회원가입시 이메일 인증 받기 1 : 이메일 인증코드 전송 💡 목표회원가입시에 이메일 인증을 추가로 받아 중복방지 및 보안성 강화를 목적으로 두었다. build.gradle// Google Emailimplementation 'org.springframework.boot:spring-boot-starter-mail' 의존성 주입을 해준다.EmailConfig@Slf4j@Configuration@RequiredArgsConstructorpublic class EmailConfig { private final JavaMailSender javaMailSender; private final String SUBJECT = "[싹틔움] 인증메일 입니다."; public boolean sendCertificationMain(String email, Str.. 2024. 11. 10.
[싹틔움] 11/06 개발일지 Dev 환경에 맞게 코드 수정 🌱 배경기존에 localhost:8080 으로 코드를 짜던 방식에서 배포를 하게 되면서 기존 localhost:8080 을 window.location.origin 으로 두던 코드에서 모두 에러가 발생했다. 🌱 해결책 우선 dev 버전과 local 버전의 yml 파일을 나눴고, application-local.ymlapp: domainUri: http://localhost:8080 redirectUri: "http://localhost:8080/ssaktium/signin/"application-dev.ymlapp: domainUri: http://13.124.138.199:8080 redirectUri: "http://13.124.138.199:8080/ssaktium/signin/" Cus.. 2024. 11. 10.
[싹틔움] 11/05 개발일지 배포 : Github Actions 를 활용한 CI/CD 자동화 WorkFlow 🌱 CI/CD WorkflowCICD.ymlname: CI/CDon: pull_request: branches: ["main"]jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Install JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' - name: Build with Gradle run: | chmod +x ./gradlew .. 2024. 11. 10.
[싹틔움] 11/2 개발일지 배포 : 인스턴스 생성 / SSH 에 Docker, Docker Compose, NGINX 설치 🌱 IP 와 PORT 의 개념IP 는 아파트 주소, PORT 는 호수로 비유할 수 있다.A 라는 아파트의 101호, 102호  라고 하면 동일한 아파트여도 다른 공간이다.아파트 주소를 알아야 우리가 찾아갈 수 있기 때문에EC2 인스턴스 PC 에 접속을 하기 위해 우리가 알아야하는 주소가 IP 이다.🌱 퍼블릭 IP 주소, 프라이빗 IP 주소 IP 주소는 퍼블릭 주소, 프라이빗 주소 , DNS 라고 있는데외부에서 컴퓨터로 찾아 들어갈 땐 퍼블릭 IP 주소로만 찾아서 들어갈 수 있다. 예를 들어서 한 회사에 a, b 라는 사람이 있다.회사 안에서는 서로 a, b 를 알고있지만 외부에서는 이 사람의 a 라는 이름, b 라는 이름을 몰라야한다.외부에서 누구나 알 수 있는 이름을 a-1, b-1 이렇게 지어 놓.. 2024. 11. 2.
[싹틔움] 10/31 개발일지 싹틔움 프로젝트 Oauth2.0 적용 ( Kakao, Google, NAVER ) 📚 배경 기존에 위처럼 application.yml 파일에 kakao 소셜 로그인 설정을 해놨었는데, google 소셜로그인도 구현하기 위해서  //oauth2implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' build.gradle 에 위와 같이 추가를 해준 후에 다시 돌리니까 각 종 에러들이 발생했다. Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration'Error creating bean with name 'org.springframework.securi.. 2024. 11. 2.
[싹틔움] 10/30 개발일지 싹틔움 프로젝트 회원 중복 오류 고민 1 📚 배경A 라는 사람이 bigstarhan33@naver.com 이메일로 기존 우리의 로컬 회원가입을 통해 회원가입을 진행했다.그럼 이와 같이 User 데이터베이스에 데이터가 들어와 저장된다. 하지만 B 라는 사람의 카카오 이메일이 bigstarhan33@naver.com 로 기존 A 가 가입한 이메일과 중복된다면, 현재 로직대로면 A 의 데이터에 B 의 로그인 정보가 덮여지게 된다.  이처럼 기존 A 의 User Table 의 kakao Id 칼럼에 B 의 정보가 입혀진 것을 확인할 수 있다.🌱 social_email 칼럼 추가위 같은 문제가 발생한 이유는 kakao 로그인 시 기존에 kakao 회원가입이 되어있으면 이메일 중복 여부를 찾아서 로그인으로 진행하기 때문이다. 그럼 카카오로 로그인하는 .. 2024. 11. 2.
[싹틔움] 10/29 개발일지 회원 검증 로직을 매 요청에 추가를 해야하는지에 대한 고민 : 블랙리스트와 리프레시토큰 📚 [배경] userService.findUser(userId); 한 사용자가 로그인에 성공한 후에 토큰을 발급받은 상태에서 회원탈퇴를 한 후 해당 토큰을 가지고 남은 유효기간동안 다른 서비스에 접근하는 것을 방지하기 위해서는 매 서비스 시작 부분에 userService.findUser(userId) 코드를 추가해서 데이터베이스에 접근해 회원을 확인을 하는 과정이 필요했습니다.  하지만 해당 로직이 userId 를 통해서 user 객체를 가져와서 그 user 데이터를 다루는 로직이 아니라 단순히 조회만을 위함이라면, 메서드의 주요 목적과는 다른 코드이고, 항상 데이터 베이스 접근을 요구하기 때문에 이를 고민해볼 필요가 있었습니다.🌱 [요구사항] 회원 탈퇴 후에도 기존에 발급된 토큰이 남아 있을 경우,.. 2024. 11. 2.
[싹틔움] 10/28 개발일지 Service 순환참조 해결 고민 : Repository 직접 의존 / 패서드 패턴 ☘️ [문제 인식]favoriteDictionaryService와 userService 간에 상호 의존 관계가 발생했습니다.   favoriteDictionaryService는 사용자가 특정 식물도감을 관심등록 했는지 확인하고 필요시 해제하는 기능을 제공하며, 이 과정에서 유저 조회가 필요합니다.  반면 userService는 사용자가 관심등록한 식물도감 리스트를 조회하여 사용자 정보와 함께 출력하는 기능을 담당하고 있습니다.User 테이블에서 직접 FavoriteDictionary 와 연관관계를 지어서 양방향 관계를 설정하기 보다는 User 객체를 생성할 때 FavoriteDictionary 로 부터 List 를 받아서 출력시키기를 바랬습니다.이로 인해 두 서비스가 서로의 기능에 의존하게 되어 순환 참.. 2024. 11. 2.
[싹틔움] 10/25 개발일지 이미지 업데이트 구현 방식 고민 📚 [배경]  회원정보 수정 페이지에서 프로필 이미지 변경이 필요했습니다. 기존에는 회원정보 수정 시, 프로필 이미지, 사용자 이름, 비밀번호 등이 동시에 업데이트되어서 데이터베이스에 저장되었습니다. 하지만, 사용자 경험을 개선하고자, 프로필 이미지 변경 작업을 다른 요청으로 나누고, 데이터베이스 저장을 최종 수정 단계에서 한 번에 처리하는 방식으로 개선하려 합니다.  🌱 [요구사항]  프로필 이미지 변경 요청 시, 즉시 데이터베이스에 반영하지 않고, 회원정보 수정 페이지에 이미지 URL 을 반환해 사용자에게 변경 사항을 시각적으로 확인할 수 있도록 했습니다. 이후 회원정보 수정 페이지의 저장 버튼을 눌러야만 사용자가 변경한 데이터인 이름, 이미지 등이 데이터베이스에 반영됩니다. 회원정보 수정 중 프.. 2024. 11. 2.
[싹틔움] 소셜 로그인 버튼 2024. 10. 24.
[싹틔움] 10/21 개발일지 싹틔움 프로젝트 SA 작성 및 회의, 초기 작업 진행 사항 🌱 개요식물 키우기 가이드 및 정보공유 서비스초보자부터 숙련자까지 누구나 쉽게 반려식물을 키우고 관리할 수 있도록 돕는 정보 제공 및 커뮤니티 플랫폼. 📚 배경코로나 이후 증가하는 홈가드닝코로나19 팬데믹은 많은 사람들이 집에서 보내는 시간을 늘리면서 홈 가드닝의 인기를 높였습니다. 식물은 심리적 안정과 치유 효과를 제공하며, 허브와 다육식물 등의 수요가 급증하고 있습니다. 우리 커뮤니티는 서로의 경험과 정보를 나누며, 홈 가드닝을 즐기는 공간을 만들어 나가고자 합니다.식물키우기 입문자 지원식물에 대한 지식이 부족한 초보자들이 보다 쉽게 반려식물을 관리할 수 있도록 다양한 정보와 가이드를 제공하는 것이 목표입니다.식물 정보 공유이미 식물을 키우고 있는 사용자들끼리 커뮤니케이션할 수 있는 장소를 제공하.. 2024. 10. 22.