Today I Learned

    [TIL] 23/06/29 중복 값 접근 방식: DB 조회 후 처리 vs 예외 처리 후 처리

    오늘 한 것 + 오늘 배운 것 1. 중복 값 접근 방식에 대해서 조금 더 생각해 봤다. DB 조회 후 처리: 값을 넣기 전에 미리 중복 체크를 해서 중복값이 없을 때에만 값을 넣기 예외 처리 후 처리: 사용자 번호를 DB에 넣으려고 먼저 시도한 다음에 DataIntegrityViolationException 에러 발생하면 예외 처리 1번은 중복된 번호가 적고 DB의 조회의 성능이 빠를 때, 2번은 DB에 값이 많고 쿼리 성능이 느릴 때 사용하기 좋은 방법 같다는 생각이 들었다. 프로젝트에서는 AWS RDS (MySQL)을 사용하고 있기 때문에 조회 성능이 빠르다. 그리고 핸드폰 번호도 다양한 국가의 번호가 입력되기 때문에 중복 값이 적을 거다. 이 말인즉, 예외 처리 후 처리를 하기보다는 DB 조회 후 ..

    [TIL] 23/06/27 인증번호 유효성 검사, @Cacheable 어노테이션 수정, Unique 제약 조건 위배 시 에러 처리

    오늘 한 것 & 배운 것 1. 인증 번호 유효성 검사 👉 twilio 인증 번호는 여섯 자리. 고객이 입력한 인증번호가 6자 미만이거나 초과하는 경우 요청을 보내지 않고 인증 번호를 확인하라는 안내 메세지를 출력하도록 했다. 2. 전화번호 send 버튼을 누르기 전에는 인증 번호 입력칸이 비활성화되도록 하기 👉 disabled 요소 추가. 포스트 요청을 보낸 후 .then(data => { verificationCodeInput.disabled = false; verifyCodeButton.disabled = false; }) disabled = false로 되도록 코드 추가 3. 인증이 완료되면 인증 완료 문구 띄우고 모달 창 닫기 alert('Verification successful!'); wind..

    [TIL] 2023/06/23 Spring Cache 캐시 + RedisCacheManager 역직렬화 + serialVersionUID

    오늘 한 것 + 오늘 배운 것 1. 스프링 캐시 추가 기존 코드: 사용자가 /accounts 엔드 포인트에 접근할때마다 사용자 정보를 조회하는 select 쿼리문이 날아갔다. 정보를 따로 저장해놓지 않았기 때문이다. 불필요한 select문이 반복되는걸 해결하기 위해서 스프링 캐시 기능을 추가했다. @ModelAttribute("userDTO") @Cacheable(value = "userDTO", key = "#session.getAttribute('user').email") public UserDTO getUserDTO(HttpSession session) { SessionUser user = (SessionUser) session.getAttribute("user"); return userServic..

    [TIL] 2023/06/22 Twilio 전화번호 인증 완료!!!!!!!! + JPA 영속성 콘텍스트

    오늘 한 것 1. 전화번호 인증 완료 후 DB에 전화번호 저장, is_phone_verified true로 변경하는 코드 완성!!!! 오늘 배운 것 1. 번호 인증이 완료되면 DB에 전화번호를 저장하고, 인증 여부를 true로 마크하는 과정에서 UPDATE 쿼리 dsl을 그대로 날리면 되는 줄 알았다. 하지만! JPA에서 직접적으로 업데이트 쿼리를 작성하는 것은 권장되지 않는다고 한다. 아직은 공부가 모자라 완전히 이해가 되지 않는다. 아래 문구는 지피티를 통해 알게 된 것. 바탕으로 실습과 공부를 통해 익혀나가자. JPA(Java Persistence API)는 데이터의 영구 저장을 추상화한 인터페이스로, 복잡한 SQL 코드를 직접 작성하지 않고도 객체를 데이터베이스에 저장하고 조회하는 기능을 제공합니..

    [TIL] 2023/06/21 Twilio Verify: 전화 번호 유효성 검사, check verification code

    1. 전화번호의 유효성 검사 코드 추가 2. 인증 번호 확인하는 메서드 구현 JS 부분이 마음처럼 잘 안된다. Verify Phone Number를 누르면 아래와 같은 모달 창이 뜨도록 했다. 여기서 전화번호를 입력하고 Verify를 누르면 전화번호가 UserController로 넘어가서 인증 번호를 보내는 메서드를 호출하게 된다. 문제는 고객이 인증 번호를 입력하는 폼을 띄우는 거다.. 세가지 방법을 생각해봤다. 1. 인증 번호 입력 칸이 처음부터 전화 번호 입력 칸 밑에 나오도록 구성하기. 인증 번호를 받지 않은 상태에서 인증 번호 검증을 하려고 한다면 먼저 인증 번호를 받으라고 안내 문구 띄워주기. (어떻게???) 2. 전화 번호로 인증 번호를 보내고 나면 인증 번호 입력 칸이 밑에 뜨도록 하기. ..

    [TIL] 2023/06/20 S3 이미지 이전, Twilio SMS -> Verify 서비스 변경

    1. 이미지를 S3에 저장하고, URL을 DB image_path에 저장하여 이전시켰다. S3 버킷 생성 후 권한 설정 AWS S3 적용하기 - 버킷 생성 AWS S3 - 버킷 생성 velog.io squoosh로 이미지 최적화 (비율 700x563, 확장자) 2. Twilio SMS -> Verify 서비스로 변경 변경 이유: 1. 인증 번호 발송을 제외하면 고객에게 문자를 보낼 일이 없음. 2. Twilio에서 대한민국 번호는 현재 서비스하고 있지 않기 때문에 미국 번호로 구매해서 이용해야 함. 3. 이 경우 A2P 10DLC 메시징 등록을 해야 한다. 4. 미국 번호에서 한국 번호로 국제 SMS를 보내는게 돼서 복잡해짐. 상기 이유로 SMS에서 Verify로 서비스를 변경했다. Verify는 핸드폰..

    [TIL] 2023/06/16 브랜치 합병, aws s3, twilio sms 인증

    1. Redis 접속에 문제가 생겼다. 어제 보안 그룹 인바운드 규칙 Redis 설정에 소스를 내 IP -> EC2 탄력적 IP로 변경했더니 로컬에서 접속이 안됨. 내 IP를 추가해줬다. 2. login implementaion 브랜치를 합병했다. 이제는 핸드폰 번호 인증 기능을 구현하자 SMS 인증 서비스는 twilio를 사용 Programmable Messaging Java Quickstart - Send & Receive SMS Learn how to send and receive SMS text messages with Twilio's API and Twilio Java helper library, and Flask. We show example code to get started with tex..

    [TIL] 2023/06/15 Redis -> EC2 보안 그룹 규칙 수정

    1. Redis 프로덕션 환경에서 host 설정을 못 가져와서 에러가 발생. EC2 보안 그룹 인바운드 규칙 설정을 수정했다. 기존에는 내 IP로 설정되어 있었는데 EC2 탄력적 IP로 변경해 줌. 2. 메뉴 사진 추가. 현재는 이미지 파일을 관리하는 방법이 매우 비효율적이니 얼른 AWS S3로 옮겨가자. 3. Menu Detail 페이지 수정. 생각 중인 것 장바구니에 담을 때 옵션을 고르게 하지 말고, 주문하면서 옵션을 선택할 수 있도록 하면 어떨까?? 핸드폰 번호 인증 -> 회원 장바구니, 비회원 장바구니 -> 주문 현재 체크아웃된 login-implementation 브랜치를 메인 브랜치로 merge 하자

    [TIL]2023/06/13 NOAUTH HELLO 에러 + 스프링,EC2 Redis 세부 설정, Redis Test

    오늘 배운 것 EC2 서버를 통해 레디스를 이용하려면 보안 그룹에서 Redis 포트를 열어줘야 한다. 사용 중인 보안 그룹을 찾아서 선택하고 인바운드 규칙을 추가한다. Type: "사용자 TCP" 포트 : 6379 개발 환경용 소스, 프로덕션용 소스 고려하여 내 IP(개발 환경용), 해당 EC2 인스턴스의 탄력적 IP (프로덕션용) 각각 넣어준다. 스프링 애플리케이션에서 Redis 설정 수정 spring.redis.host 에 localhost를 넣는 게 아니다. EC2의 탄력적 IP를 넣어주자. NOAUTH HELLO 에러 NOAUTH HELLO must be called with the client already authenticated, otherwise the HELLO AUTH option ca..

    [TIL] 2023/06/12 Redis 이용을 위한 초기 세팅 및 Spring 설정

    오늘 한 것 세션과 장바구니 이용을 위한 레디스 설정 오늘 배운 것 1. 레디스 아키텍처 2. 레디스 자료구조 3. 우분투 레디스 설치 및 초기 설정 방법 4. 스프링 레디스 설정 (application.properties & RedisConfig) 오늘의 문제 Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379 접속이 안된다.. ping은 제대로 되는데 뭐가 문제일까! 조금 더 알아봐야겠다.