지난 정렬/페이징에 이어서 이번엔 검색 기능을 구현해 보기로 했다. [SpringBoot/JPA] Spring Data JPA 페이징 구현하기쇼핑몰은 홈에서 상품 리스트를 보여준다. 새 상품별, 인기순 등 조건에 따라 리스트를 보여주려고 생각하니 페이징을 해야겠다는 생각을 하게 됐다. Spring Data JPA는 데이터베이스에서 데이터를chaeyami.tistory.com하다보니 필터링 기준도 많아지고, 카테고리 별 필터링이나 정렬/검색은 특정 상황에서만 적용되면 안 된다. 모든 결과에서 정렬/필터링이 적용되어야 하는 것. 그래서 이는 QueryDSL 을 사용해 구현하기로 했다.굳이 JPA로 조건별 상품 가져와 놓고 또 새로운 라이브러리를 쓰는 이유는... 더보기더보기결론부터 말하자면 상당히 비효율적이..
결제 api인 아임포트(iamport)가 포트원으로 이름을 바꿨다! 아무튼 나는 이걸 사용해서 결제를 구현했다.결제 기능을 구현하기 전에, 당연히 장바구니/주문 기능부터 구현해야 한다. 주문 -> 결제가 이루어지기까지 전체 과정을 먼저 설계했다. 엔티티 엔티티 설계 아래는 우리 프로젝트 전" data-og-host="chaeyami.tistory.com" data-og-source-url="https://chaeyami.tistory.com/252" data-og-url="https://chaeyami.tistory.com/252" data-og-image="https://scrap.kakaocdn.net/dn/bIIzI7/hyVSZiOV2D/xi2bv8TYM2nf3lWWBDkcjk/img.png?wid..
주문, 결제 구현 전 장바구니 기능을 구현하면서, 사용자가 상품을 장바구니에 넣고 -> 주문 -> 결제가 이루어지기까지 전체 과정을 먼저 설계했다.엔티티엔티티 설계아래는 우리 프로젝트 전체 ERD이다.이 많은 테이블이 주문/결제를 위해 존재한다고 봐도 무방... 그러나 카테고리나 상품 색상, 썸네일등 필수적이지 않은 테이블을 제외하고 살펴보면, 1. 상품 테이블(Product) : 상품 정보를 담은 엔티티. 이는 상품 이름과 가격, 썸네일 등을 담고 있다.상품 관리 테이블(ProductManagement) : 상품을 참조해 사이즈/색상 등의 세부 옵션별로 상품 저장실제로 사용자가 보는 상품 리스트, 장바구니/주문에 사용되는 객체2. 따라서 상품을 장바구니에 담으면 ProductManagement 테이블을..
쇼핑몰 페이지는 기본적으로 로그인 여부와 상관 없이 이용 가능하지만, 특정 기능에는 로그인한 사용자의 정보가 필요하다. 문의 기능은 로그인 여부에 따라 정보 요청이 달라지고(비로그인시 이름,이메일을 입력), 문의 답변과 리뷰 작성은 로그인한 사용자만 가능하게 했다. 클라이언트에서 이를 가져오는 것은 보안에 취약하므로 내부에서 현재 로그인한 사용자 정보를 사용하는 것이 안전하다고 판단했다. 로그인 중인 사용자의 정보를 가져오는 방법에는 두 가지가 있다. SecurityContextHolder 클래스를 이용하는 방법, 그리고 우리는 로그인에 jwt를 사용하고 있으므로, 클라이언트에서 요청을 보낼 때 Header에서 보내는 accesstoken을 사용할 수 있다. Spring Security - 인증과 인가 ..
쇼핑몰은 홈에서 상품 리스트를 보여준다. 새 상품별, 인기순 등 조건에 따라 리스트를 보여주려고 생각하니 페이징을 해야겠다는 생각을 하게 됐다. Spring Data JPA는 데이터베이스에서 데이터를 페이징하는 기능을 지원하기 때문에 이를 이용하기로 함! React와 함께 REST API로 구현 중이기 때문에, 클라이언트에서 URL 파라미터로 번호, 크기를 보내 페이징을 하도록 설계했다. 따라서 컨트롤러에서 URL 파라미터로 페이지 번호와 크기를 받고, 서비스 클래스에서 직접 Pageable(번호, 크기 담은 객체)을 생성해 서비스 메서드에서 URL 파라미터를 메서드로 받도록 구현했다. 페이지 번호 : 말 그대로 페이지 번호이다. 0부터 시작 크기 : 한 페이지 안에 보여줄 요소의 개수 기존 서비스 & ..
MySQL과 Workbench 설치MySQL 설치하기 [MySQL] MySQL, MySQL Workbench 설치하기2024.04.19 글 업데이트! 업데이트 내용 : MySQL 버전. 끝. 다운로드 링크 : https://dev.mysql.com/downloads/windows/installer/8.0.html MySQL :: Download MySQL Installer Note: MySQL 8.0 is the final series with MySQL Installer. As of MySQL 8chaeyami.tistory.comConnections 생성워크벤치를 실행하고, + 버튼을 눌러 커넥션을 생성한다.원하는 커넥션 이름으로 설정해 Test ConnectionMySQL 설치시에 설정했던 root..
관리자 페이지에서 판매할 상품을 등록한다. 엔티티와 함께 등록 로직도 다 구현했으니 이제 사진을 업로드 해야 한다. 우선 구조를 생각해보자. 사진은 서버에 저장되어야 하며, 경로를 DB에 저장해야 한다. -> MultipartFile 사용 : Spring의 파일 업로드 인터페이스 한 상품 객체에 여러 사진 경로가 저장될 수 있어야 한다. -> 상품 엔티티에 사진 경로 리스트 필드 리스트 필드는 OneToMany로 구현해야 한다. -> 썸네일 엔티티가 별개로 필요하다. 정리하면 이미지 업로드는 사진을 저장할 엔티티(테이블)을 만든다. MultipartFile 인터페이스로 구현한다. 상품과 썸네일은 일대다 (1:N) 관계 엔티티 설정 ProductThumbnail 엔티티 생성 사진을 저장할 엔티티를 생성한다..
General - 일반적인 단축키 Window Mac 설명 Alt + #[0-9] ⌘0...⌘9 각 단축키에 해당하는 도구창 열기 Ctrl + S ⌘S 모두 저장 Ctrl + Alt + Y ⌘⌥Y IntelliJ가 파일 시스템에서 최신 변경 사항을 처리하도록 강제 일반적으로 변경 내용은 자동으로 처리되므로 작업은 아무 작업도 수행하지 않음 Ctrl + Shift + F12 ⌘⇧F12 편집기(Editor) 영역을 최대로 크기로 토글 Alt + Shift + I ⌥⇧I 현재 프로필 기준으로 현재 파일 검사 Ctrl + ` ⌃` 인텔리제이 테마 변경 Ctrl + Alt + S ⌘ , 설정창(Settings) 열기 Ctrl + Alt + Shift + S ⌘ ; 프로젝트 구조창(프로젝트 구조 확인 및 변경) 열..
이게 사실 그냥 편집기 사용법 익히려고 하는 거지... 굉장히 비효율적이고 귀찮고 의미없다는 걸 미리 말합니다... 당연히 나는 이런 방법 귀찮아서 그냥 터미널 쓴다. 빠르고 편하고 잘 되니까...... 하지만 IntelliJ를 처음 사용해보기도 하니까 이런 저런 사용법, 어디에 뭐가 있는지 알아둬서 나쁠 건 없어서 정리해보기로 했다. GitHub Repository 생성 우선 새 레포지토리를 만들고 HTTPS 주소를 복사해둔다. IntelliJ에서 GitHub계정 연결하기 나는 한국어 패키지를 다운받아 적용시켜놓아서 한국어로 뜨는데, 원래는 File > Settings Vesion Control > Git 이 때, Git이 설치되어 있어야 한다. Test를 누르면 버전 또는 설치되지 않았다는 문구가 뜨..
프로젝트 생성 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성 https://start.spring.io 프로젝트 선택 Project: Gradle - Groovy Project Spring Boot: 3.x.x Language: Java Packaging: Jar Java: 17 또는 21 Project Metadata groupId: hello artifactId: hello-spring Dependencies: Spring Web, Thymeleaf 스프링 부트 3.0 이상 사용시 주의점 1. Java 17 이상 2. javax 패키지 이름을 jakarta로 변경 3. H2 데이터베이스를 2.1.214 버전 이상 사용 동작 확인 기본 메인 클래스 실행 스프링 부트 메인 실행 후 에러페이지..
SNS 로그인 오류 문제 카카오, 네이버, 구글 세 개 중 하나로 소셜로그인을 하고, 다른 계정으로 로그인하려고 할 시에 500 에러가 발생 예를 들어 카카오 로그인 > 로그아웃 > 구글 로그인을 하면 카카오 로그인은 정상적으로 작동하나 구글 로그인 시 500 에러, 이후 카카오 외에 어떤 로그인도 안 됨 데이터베이스를 삭제하고 반대로 다시 시도하면(구글 로그인 > 로그아웃 > 카카오 로그인) 구글 로그인만 됨 원인 에러코드 분석하기 HTTP GET /user/login/kakao/ 200 [0.01, 127.0.0.1:54412] Internal Server Error: /user/login/kakao/ Traceback (most recent call last): File "C:\Users\SCY\D..
친구추가 기능 구현하기 이번에 구현하고 싶었던 것은 친구추가 기능이다. 기존 팔로우, 팔로워랑은 다르게 관계가 언제나 쌍방이라는 차이점이 있고,신청 후 수락하는 과정이 필요하다. 일단 팔로우 할 때 했던 대로 ManyToMany필드를 만들었는데 friends = models.ManyToManyField("self", related_name='friends', blank=True) 이러면 일방이고 쌍방이고를 정하기도 전에 신청 > 수락이 되질 않는다. 실행되면 바로 DB가 업데이트 되어버리기 때문 그래서 기존 팔로우에 한 단계(신청)가 더 있는 만큼, 중간 테이블을 하나 추가하기로 했다. ManyToMany필드 때문에 생기는 테이블이 친구상태(누구와 누가 친구인지) 테이블이므로 친구신청상태 모델을 새로 만..
2024.04.19 글 업데이트! 업데이트 내용 : MySQL 버전. 끝. 다운로드 링크 : https://dev.mysql.com/downloads/windows/installer/8.0.html MySQL :: Download MySQL Installer Note: MySQL 8.0 is the final series with MySQL Installer. As of MySQL 8.1, use a MySQL product's MSI or Zip archive for installation. MySQL Server 8.1 and higher also bundle MySQL Configurator, a tool that helps configure MySQL Server. dev.mysql.com 아래에..
DRF 프로젝트 - 이메일 인증 구현하기 이번 프로젝트에서 구현해야 하는 기능중에 꽤 생소한 이메일 인증 1,2 일차에 기본적인 백엔드 코드를 완성시켜뒀기 때문에 오늘 다 같이 이메일 인증에 도전하기로 했다. 5명이서 각자 해보고, 괜찮은 것을 고르거나 합쳐서 보완해 사용하기로 결정 이것저것 찾아보다가 장고에서 제공하는 EmailMessage 모듈이 있다는 것을 알았다. 이 모듈을 쓰면 SMTP를 이용해 이메일을 보낼 수 있당. 👇참고한 블로그👇 https://ssungkang.tistory.com/entry/entry/Django-회원가입-시-이메일-인증-SMTP [Django] 회원가입 시 이메일 인증, SMTP SMTP SMTP 는 Simple ..
장고 실무 심화 3주차 : 회원기능 drf에서 jwt사용하기 (simplejwt) https://django-rest-framework-simplejwt.readthedocs.io/en/latest/ Simple JWT — Simple JWT 5.2.2.post16+gf298efa documentation Simple JWT provides a JSON Web Token authentication backend for the Django REST Framework. It aims to cover the most common use cases of JWTs by offering a conservative set of default features. It also aims to be easily extens..