분류 전체보기

    [TIL] 23/07/05 장바구니, 주문 테이블 수정: 연결 테이블 생성, 사용 예시

    현재 장바구니, 주문 테이블은 한개의 옵션만 선택할 수 있다는 가정하에 만들어졌다. 하지만 메뉴와 옵션이 추가되어 여러개의 옵션을 고를 수 있는 메뉴가 생겨났다. 그에 따라 메뉴와 옵션의 다대다 설정이 필요해졌다. 다대다 옵션 설정을 위해 cart_option과 order_item_option 테이블을 생성했다. 두 테이블의 각 컬럼은 다른 테이블의 기본 키를 참조하는 외래 키로만 구성이 되어 있다. 이런 종류의 테이블을 연결 테이블 (결합 테이블, 다대다 관계 테이블)이라고 부른다. 이 테이블들의 각 행은 각각 cart, order와 option 간의 특정 관계를 나타낸다. cart_id, option_id / order_item_id, option_id의 조합이 고유해야 하므로, 데이터 무결성을 위해..

    [TIL] 23/07/04 InnoDB VS MyISAM (엔진 확인하기, 변경하기)

    외래키를 생성하려 했으나 실패하고 index만 생성됐다. 외래키 생성이 제대로 되지 않는다면 여러 이유가 있을 수 있다. 1. 데이터 유형 불일치 2. 참조 무결성 제약 조건 위반 3. 테이블 잠김: MySQL의 경우, MyISAM 엔진은 외래키 지원을 하지 않는다. 확인해 보니, FK 생성이 되지 않는 테이블만 엔진이 MyISAM으로 되어 있었다. InnoDB는 외래키 지원, 트랜잭션 지원, ACID 등의 특징이 있다. 반면, MyISAM은 외래 키 및 트랜잭션 지원을 하지 않는다. 인덱스 테이블을 디스크에 저장하고 테이블 단위의 잠금을 제공하는 특징이 있어서 읽기 전용 (select) 작업이 많은 경우에는 더 빠른 성능을 제공한다. 테이블의 스토리지 엔진을 확인하는 방법: 'SHOW TABLE STA..

    [TIL] 23/07/03 Primary Key의 데이터 타입 INT VS BIGINT

    오늘 한 것 + 오늘 배운 것 int (4바이트, 32비트) : 부호가 있는 경우에는 -2,147,483,648에서 2,147,483,647 사이의 값 (약 21억), 부호가 없는 경우에는 0에서 4,294,967,295 (약 43억)사이의 값을 저장할 수 있다. bigint (8바이트, 64비트) : 부호가 있는 경우에는 -9,223,372,036,854,775,808에서 9,223,372,036,854,775,807 (약 922경) 사이의 값, 부호가 없는 경우에는 0에서 18,446,744,073,709,551,615 사이의 값을 저장할 수 있다. PK의 데이터 타입을 설정할 때는 저장하려는 데이터의 크기와 범위를 고려하여 선택해야 한다. 현재 테이블의 PK는 통일 되어 있지 않고, int, big..

    [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는 핸드폰..

    "피앤피시큐어 "안면인증으로 패스워드 시장 공략…올해 610억 매출 목표"

    피앤피시큐어 "안면인증으로 패스워드 시장 공략…올해 610억 매출 목표" 피앤피시큐어가 올해 안면인식 보안 솔루션으로 패스워드 시장을 공략한다.피앤피시큐어는 17일 서울 강서구 마곡동 신사옥 '피앤피스테이션'에서 올해 첫 기자간... zdnet.co.kr