목록전체 글 (229)
DevKim
[ 설계 ] ※ 현재 설계의 문제 - Review를 삭제하는 경우, 해당 웹툰에 대한 별점 정보도 삭제가된다. 이렇게 되면 webtoon의 전체 별점 수도 하나 감소해야하는 로직도 추가되어야하는 상황이다. → Review 내용 컬럼만 Null로 바꿀 것인지? 유저(user)의 별점 정보를 별도의 테이블로 관리해야하는지 논의 필요 ( 08.02 수정 ) - Review 삭제시, 별도의 메소드를 추가하여 내용(content)만 null값으로 변경 [ 요구 사항 분석 ] - 웹툰에 별점을 주는 순간, Review 가 NULL로 생성되기 때문에 리뷰 작성 = 수정과 동일하다. - 리뷰를 삭제한다. - 리뷰에 좋아요 버튼을 누른다. API Method request response /api/v1/reviews/{..
[ 설계 ] 기본적으로 장르와 웹툰은 다:다 관계이기 때문에, WEBTOON_GENRE라는 중간 테이블을 생성하여 1:다 다:1 관계로 풀어서 설계하였다. 불필요한 쿼리문을 없애기위해, 아래와같이 최대한 연관관계는 모두 단방향 매핑으로 걸어주었다. [ 요구 사항 분석 ] - /api/v1/webtoon/{id} 로 GET 요청이 들어오면 다음과 같은 정보들을 DTO에 담아서 보내준다. 01. 웹툰 기본 정보 - 웹툰의 default 기본값으로, 변하지 않는 정보들이다. - 단순히 DB에서 id값을 이용하여 가져온다. [ { "toonImg" : "웹툰 썸네일 이미지", "toonTitle": "여신강림", "toonAuthor": "야옹이", "toonAge": "12세 이용가", "realUrl":"h..
[ pymysql을 이용하여 mariaDb와 연동 ] import pymysql conn = pymysql.connect(host='엔드포인트', user='', password='', charset='utf8', db='') cur = conn.cursor() [ 장르 테이블 생성] 네이버 웹툰의 장르는 다음과 같다. - 에피소드 옴니버스 스토리 일상 개그 판타지 액션 드라마 순정->(로맨스로 변경) 감성 스릴러 시대극 스포츠 네이버 장르에는 순정이라고 써져있지만, 실제로 웹툰에 들어가보면 로맨스라고 써져있으니 이 점에 유의해야한다. sql="CREATE TABLE GENRE(genreId BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,genreType VARCHAR(45..
🏃 Webtooniverse 의 핵심인 웹툰 데이터를 수집해보자 🏃 [ MySql 이 아닌, Maria DB를 선택한 이유 ] - 평소같았으면 편하고 익숙한 Mysql을 골랐을 테지만, 'Mysql에서 Maria DB로 마이그에리션 해야 할 10가지 이유'라는 글을 읽고 이번 기회에 MariaDB를 선택해서 프로젝트를 진행해보고 싶었다. 사실 Maria DB가 Mysql보다 더 나은 성능을 제공한다고는하지만, 이번 프로젝트 자체가 두개의 성능을 확연하게 비교할 수 있을 만큼의 큰 프로젝트는 아니기에 큰 차이가 없을 것 같긴하다. [ 필요한 데이터 ] 1. 요일별 웹툰 - 웹툰 관련 서비스에는 지금 연재되고 있는 웹툰이 필수적이기에, 가장 먼저 요일별 웹툰을 DB에 저장하기로했다. 요일별 웹툰만 400개가..
[ DB 설계 ] - 다대다 연관관계가 많아서 1:다 다:1로 풀어냈다. 실무에선 중간 테이블에 다른 정보들이 많이 들어갈 수도있고 복잡해져서 지양해야하지만, 현재 서비스에는 딱 조인 테이블의 역할만하는 각각의 FK만 들고 있어서 다대다 관계를 모두 1:다 다:1로 풀어내었다. (1차 수정) * 커뮤니티 게시판 추가 (2차 수정) * jpql 문법에 맞게 테이블 수정 ->Hibernate가 버전 5로 업글되면서 sql문 쿼리 날릴 때, 자동적으로 '대문자->소문자'로 바뀌고 '대문자 -> _소문자'로 치환되는 이슈가 있었음 [ Entity 설계 ] * 마이페이지와 커뮤니티를 제외한 테이블들의 엔티티 설계 (1차 수정) * 양방향 연관관계 모두 단방향으로 수정 * 양방향을 모두 단방향으로 변경한 이유 * ..
[ 프로젝트 개요 ] 네이버, 카카오 (전 다음) 웹툰 플랫폼을 이어주는, 개인화된 웹툰 추천 사이트 [ 프로젝트 설계 목적 ] 웹툰 시장이 어마어마하게 커지고 있는 만큼, 웹툰의 양도 쌓이고 있다. 영상 플랫폼 (넷플릭스,왓챠) 을 추천하고 평가하는 사이트는 있지만, 정작 웹툰을 추천해주고 평가할 수 있는 플랫폼은 없다. 또한, 다음과 같은 불편함을 해소하고 싶었다. 1. 기존의 웹툰 앱들 2~3개를 왔다갔다 번갈아가면서 보자니 너무 번거롭다. 2. 매일 보는 요일별 웹툰 외에 다른 재밌는 웹툰을 보고 싶은데, 찾다가 지쳐서 그냥 핸드폰을 덮어버리게된다. 3. 나만 알기 아까운 명작인데, 어디에 추천해야할지 모르겠다.. 웹툰 사이트 댓글에 추천하기엔 한계가 있다. 여러 사이트에 흩어져있는 웹툰 랭킹을 ..
[ 기본 검색 조건 ] 검색 조건은 .and() .or()를 매서드 체인으로 연결할 수 있다. queryFactory .selectFrom(member) .where(member.username.eq("member1") .and(member.age.eq(10))) .fetchOne(); where문의 경우 ','로 연결해도 모두 and로 인식해주기 때문에 아래와 같이 사용해된다고한다. queryFactory .selectFrom(member) .where(member.username.eq("member1"), member.age.eq(10)) .fetchOne(); JPQL이 제공하는 모든 검색 조건 제공한다. 1. == & null 여부 .eq("member1") .ne("member1") //== ...
QueryDSL이란? SQL, JPQL을 코드로 작성할 수 있도록 도와주는 빌더 API JPA 크리테이라에 비해서 편리하고 실용적이다 SQL, JPQL의 문제점 SQL, JPQL은 문자열이다. Type-check가 불가능하다. 잘 해봐야 애플리케이션 로딩 시점에 알 수 있다. 컴파일 시점에 알 수 있는 방법이 없다. 해당 로직 실행 전까지 작동여부 확인을 할 수 없다. 해당 쿼리 '실행 시점'에 오류를 발견한다. QueryDSL 장점 문자가 아닌 코드로 작성할 수 있다. 컴파일 시점에 문법 오류를 발견할 수 있다. 코드 자동완성(IDE 도움) 단순하고 쉽다. 코드 모양이 JPQL과 거의 비슷하다 동적 쿼리 QueryDSL - 동작원리 쿼리타입 생성 Member.java @Entity를 가지고, QMemb..