토이프로젝트/리뷰어(영화 리뷰 사이트) (15) 썸네일형 리스트형 application.yml 환경변수 분리 1. 실행 환경에 따른 yml 파일 분리 api 구현에만 집중한 채 진행했기 때문에 application.yml의 요소들이 외부에 노출되어있는 문제점이 있었다. 이 항목들을 local, prod로 분리해서 사용할 것이다. 이렇게 3가지 파일로 분리하고, 테스트를 위해서 local은 포트번호 8081, prod는 포트번호 8082로 둔 후 application.yml에서 프로퍼티를 지정해주었다. #application.yml server: port: 8080 spring: profiles: active: local #application-test.yml spring: config: activate: on-profile: test server: port: 8081 #application-prod.yml sp.. 백엔드 cicd 구축하기3 jenkins를 이용해서 cicd를 모두 구현했다. 처음 계획과 달라진 점이 있다면 처음에는 한 서버에서 jenkins를 통해 ci를 진행하고, 동시에 실행까지 하는게 목표였는데, 진행하다보니 몇가지 문제점이 있어서 jenkins 서버와 spring boot 서버를 나누기로 한 점이다. 일단 첫번째 이유로, 프리티어로 진행하다보니 jenkins와 spring boot를 동시에 실행하는게 불가능했다. 간단한 build에만 5분 넘는 시간이 소모되었고, 만약에 cicd가 진행되는 동안 api 요청까지 실행한다면 상당한 딜레이가 발생할 것이라 판단했다. 두번째 이유는 크롤링이다. 아직 서버에 올리는 단계는 아니지만, 나중에 스케줄링을 통해 실행할 계획을 가지고있기 때문에 한 서버에서 jenkins, sprin.. 백엔드 cicd 구축하기2 이전에 문제가 됐던 부분은 로컬 환경에서는 jar 파일이 정상적으로 실행되지만 원격 환경에서는 실행되지 않는 문제였다. 검색을 해봐도 같은 문제를 겪었던 사람이 없었기 때문에 한참을 헤맸는데 걸린 시간에 비해 해결은 굉장히 간단했다.... 지금 구축중인 cicd 구조를 간단하게 설명해보면 aws 원격 서버를 띄우고, 해당 서버에서 docker를 연결한 후, jenkins 이미지를 받아서 실행한다. 이렇게 띄운 jenkins 서버에서 cicd를 구축하기 위해서 일단 ci부분을 구현중이었고, github에서 커밋이 될 경우 jenkins에서 이를 인식해 spring boot 프로젝트를 build 후 실행 하는 부분까지 진행중이었다. 문제점은... jenkins가 어떻게 동작중인지 정확하게 인지하지 못한 채로.. 백엔드 cicd 구축하기 프론트엔드에서 api를 호출하는 부분을 구현하기 전에 백엔드 api를 실행시켜서 그 상태로 프론트엔드에서 활용하고 싶어 백엔드를 서버에 올리는 작업을 먼저 했다. 서버 aws에서 제공하는 프리티어 서버를 사용했다. 프로그램 설치 docker를 이용해서 젠킨스를 설치했다. 우선 자바와 docker, docker-compose를 설치한다. 그 후, 실행하는 위치에 docker 실행을 위한 yml파일을 만들었다. version: "3" services: jenkins: image: jenkins/jenkins:lts user: root volumes: - ./jenkins:/var/jenkins_home ports: - 8080:8080 파일을 만든 위치에서 `sudo docker-compose up -d' .. 영화 정보 크롤링 Api 구현 이전에 크롤링 하는 법을 정리해놨는데, 이걸 통해서 크롤링 할 수 있는 api를 구현했다. 영화 정보 크롤링 @Service @RequiredArgsConstructor public class MovieCrawlingService { private static final String weekRankingUrl = "http://www.cine21.com/rank/boxoffice/domestic"; private static String WEB_DRIVER_ID = "webdriver.chrome.driver"; private static String WEB_DRIVER_PATH = "./chromedriver.exe"; private final MovieRepository movieRepository;.. 영화 정보 크롤링 하기 api 구현이 대략 끝났으니 이제는 영화 정보를 불러오기 위해서 open api를 활용할 차례다. 일단 받아오기 전에 정보를 어떻게 활용할지 먼저 생각해야 한다. 1. 영화진흥위원회 페이지에서 제공하는 api 인터페이스 구조 확인해보기 영화 목록 api에서 사용할 예정일 정보 대부분을 영화목록 조회 API 서비스에서 제공하기 때문에 해당 api 사용법을 알아보기로 했다. 기본 요청 URL : http://www.kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieList.xml (또는 .json) 요청 인터페이스 요청 변수 값 설명 key 문자열(필수) 발급받은키 값을 입력합니다. curPage 문자열 현재 페이지를 지정합니다.(default : “1”.. 16일차 - JPA N+1 문제 JPA N+1문제 리뷰 댓글 조회 api 구현 중 N+1 문제가 발생했다. jpa 문제는 크게 2가지 경우일 때 발생한다. 첫번째는 fetch전략을 EAGER로 했을경우이다. 특정 엔티티가 연관관계를 가지고 있을 때, 하위 엔티티의 정보를 모두 받아오도록 하는 설정이기 때문에 조회 쿼리가 엔티티 수만큼 실행되기 때문에 발생한다. 그래서 보통 LAZY로 설정하고 사용하게된다. 두번째는 LAZY로 설정했지만 하위 엔티티를 다시 조회할 경우이다. 나의 경우가 2번째에 해당한다. 리뷰의 댓글 목록을 조회하면서 작성자의 정보도 같이 받아오면서 User 테이블 조회 쿼리가 한번씩 더 실행되기 때문에 N+1 문제가 발생했다. ReviewComment.java @Entity @Getter @Table(name = "r.. 14일차 - 영화 상세정보 조회 api 구현 jpql문 주의사항 jpql문에서 예상하지 못한 에러가 발생했다. @Query("SELECT " + "new org.movie.reviewer.domain.movie.dto.response.ActorInfo " + "(a.id, a.name, a.role) FROM Actor a " + "WHERE a.movie.id = :movieId " ) List findActorsByMovieId(@Param("id") Long movieId); Using named parameters for method public abstract java.util.List org.movie.reviewer.domain.movie.repository.MovieRepository.findActorsByMovieId(java.la.. 이전 1 2 다음