목록Spring Project/Webtooniverse (20)
DevKim
[ 현재 프로젝트 배포과정의 문제점 ] - 팀 프로젝트 이다보니 한명이 인스턴스를 생성한 후, 기능이 수정되거니 추가될 때마다 Filezilla를 이용해서 수동으로 Build & Deploy를 수행하고 있다. 이러한 비효율적인 일을 줄이기 위해 배포 브랜치로 push가 일어나는 순간, 빌드&배포가 이루어지도록 자동화해보자. 실제 프로젝트에 적용하기 전, test 해본 상황을 정리해보려고한다. [ 환경 ] - Amazon Linux - worker instance : aws ec2 t2.micro - Jenkins instance : t2.medium Ps. 이 전에 Docker+Jenkins로 실습했을 때, 프리티어 쓰겠다고 t2.micro로 어찌저찌 해보다가 빌드 몇 번하니까 Jenkins가 돌아가지를..
프로젝트에 CI/CD를 적용해보고 싶다는 생각을 계속 해왔었다. 하지만 어떤 기술을 도입할 땐, why에 대한 대답을 할 수 있어야한다고 생각한다. 현재 프로젝트의 개발 프로세스의 문제점에 대해서 생각해보고, CI/CD를 도입함으로써 얻을 수 있는 이점에 대해 생각해보자. 1. CI란 무엇일까? - CI는 Continuous Integration 즉, 지속적인 통합을 의미한다. 어플리케이션의 새로운 코드 변경 사항이 자동으로 테스트 및 빌드되어 공유 레포지토리에 통합할 수 있다. 2. 현재 개발 프로세스의 문제점 CI가 적용되지 않은 현재 프로젝트에서 많은 불편함을 느꼈다. 현재, 팀원들은 기능별 feature에서 개발한 후 develop 브랜치에 push하고 pull하고 각자의 test 코드를 돌려서 ..
🏃 Webtooniverse 의 핵심인 웹툰 데이터를 수집해보자 🏃 드디어 기다리고 기다리던 카카오 웹툰이 출시됐다! 기존의 다음웹툰 데이터를 가져오려고했으나, 카카오 웹툰과 합쳐진다는 기사를 보고 출시될 때까지 기다리기로 했다. 사이트를 보자마자 든 생각은, 아..크롤링 하기 쉽지 않겠구나였다. [ 수집할 데이터 ] 크롤링해야 할 웹툰 카테고리는 다음과 같다. 1. 웹툰 원작 - 요일별 작품들의 정보들 2. 소설 원작 - 요일별 작품들의 정보들 3. 완결 웹툰 - 웹툰 원작 50개 + 소설 원작 50개 [ 사이트 분석 이슈 ] "네이버 웹툰 사이트와 달리 카카오 웹툰은 사이트 전체를 selenium으로 자동화하기엔 어려움이 있었다." 1. 사이트만 봐도 알겠지만, 중간중간 영상 썸네일이 있고 영상 썸네..
[ 정적 팩토리란? ] : 정적 팩토리 메서드란 객체 생성의 역할을 하는 클래스 메서드라는 의미로 요약해볼 수 있다. [ 정적 팩토리 메서드는 왜 사용할까? ] : 내가 코드를 짜면서 느낀 장점은 다음과 같다. 1. 이름을 가질 수 있다. - 이건 과거에 김영한님의 JPA 강의를 들을 때의 실습 코드이다. new로 Order를 생성하면 정확한 의미를 알 수 없다. 반대로 다음과 같이 createOrder이라는 이름을 가지면, 주문을 생성하는 메서드구나! 를 명시적으로 알 수 있다. /** * 주문 생성 메서드 * todo : 주문 회원, 배송 정보, 상품명을 입력하여 주문 생성 */ public static Order createOrder (Member member, Delivery delivery, O..
[ 요구 사항 분석 ] - 현재 페이지의 웹툰과 비슷한 장르의 웹툰들의 정보를 랜덤으로 뿌려준다. [Querydsl 세팅 ] 매번 2개의 Repository를 의존성으로 받지 않기 위해서, Data Jpa에서는 Custom Repository를 JpaRepository 상속 클래스에서 사용할 수 있게끔 지원한다. 사실 기본 CRUD도 Querydsl만을 사용하여, 상속/구현 없는 Repository를 만들어 사용할 수 있지만 빠르게 개발하기 위해 기본 CRUD는 JpaRepository의 도움을 받아서 코드를 작성하였다. 리팩토링 단계에서 Querydsl만을 가져가는 것에 대해 고려해보기로하자. 1. 어느 곳에서나 JPAQueryFactory를 주입받아 Querydsl을 사용할 수 있게끔 Config 파..
[ 요구 사항 분석 ] API Method request response 웹툰에 별점주기 클릭 PUT /api/v1/reviews/star { "webtoonId": 웹툰 id "userPointNumber": 4.5 } { "reviewId": 리뷰 Id } [ 비즈니스 로직 ] 1. 유저가 해당 웹툰에 별점을 준적이 있는지 체크한다. - 해당 유저의 FK와 해당 웹툰 FK를 가진 리뷰의 존재 유무를 확인한다. Webtoon findWebtoon = webtoonRepository.findById(reviewStarDto.getWebtoonId()).orElseThrow( () -> new IllegalArgumentException("해당 웹툰이 존재하지 않습니다") ); Review findRevi..
[ 설계 ] ※ 현재 설계의 문제 - 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..