Spring Boot JPA/실습

박스오피스 OPEN API 실습과 배포

qoeka 2025. 1. 13. 12:44

 

 

https://www.data.go.kr/

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

 

데이타 검색해서 찾을 숭 ㅣㅆ다 api 방식에 맞춰 검색해주면된

 

 

확인해서 하면된다.

 

 

나는 영화관련해서 해보겠다

 

https://www.kobis.or.kr/kobisopenapi/homepg/user/agreeProvision.do

 

영화진흥위원회 오픈API

회원가입 회원가입 회원으로 가입하셔야 영화관입장권통합전산망 오픈API 서비스를 위한 키 발급이 가능합니다.

www.kobis.or.kr

영화박스오피스 API

 

 

 

 

 

 

 

 

 

 

 

 

 

위 사진중 요청인터페이스를 보고 선택하면된다.  

 

위 사진처럼 하면 작동됨을 확인 할 수 있다.

 

get http://localhost:0808/movies/rank

 

date : 20250112

 

이렇게 하기로 하겠다.

 

응답은  

{"date" "20250112(원하는 입력날짜)":

"movies": [{rank : "    ",

                rankInten  : "     " ,

                movieCd :  "    ",

                movueNm : "      ",

               opentDt : "      ",

              slaleAcc : "        ",

               audiAcc : "        "

},

]

}

우리 서버가 할거니깐 이름은 바꿔도 된다.

 

 

 

 

 

너무 많아... 두개만 불러서 복사해서 ai한테 가자

 

 

만들다 오타나고 그럴 수 있으니깐 에이아이 활용해서 만들달라고 하면된다 내 입맛대로

 

 

 

 

 

 

 

 

이것도 위 리스판스를 이용해서 만들었다.

 

타고 타고 들어가는 거여서 포문이 길어진것이다

 

이제 이걸 저장하려보니깐 무비정보에 이것들이 있어서 무비객체생성을 해줬다.

 

 

그리고 이걸 담을 리스트가 없으니깐 포문위에 어레이리스트를 만들겠다.

 

저장add는 리스트를 해야 저장할 수 있으니 짝꿍이라 생각하는게 편하다

 

 

 

 

지금 왼쪽에 포문을 보면 순서가바껴있다 이러면 저장이 되지 않아 널값으로 뜨기에 오른쪽 사진처럼 바꿔줘야한다.

 

 

 

@Service
public class MovieService {
    @Autowired
    MovieConfig movieConfig;
    @Autowired
    RestTemplate restTemplate;

   public MovieResponse getMovies(String date) {
       // 영화진흥원API 를 호출
       //URI 부터 만든다. 호출하기 위해서는 필요하니깐
       URI uri = UriComponentsBuilder.fromUriString(movieConfig.url)
               .queryParam("key", movieConfig.apikey)
               .queryParam("targetDt", date)
               .queryParam("multiMovieYn", "N")
               .build().encode().toUri();

       //헤더는 세팅없으니깐 세팅안한다
       HttpHeaders headers = new HttpHeaders(); // 기본형식 갖추기

       BoxOfficeResponse boxOfficeResponse =
               restTemplate.exchange(uri, HttpMethod.GET, new HttpEntity<>(headers),
                       BoxOfficeResponse.class).getBody();

       //영화진흥원으로부터 데이터 받아왔으니깐 우리 서버에 필요한 정보만 뽑아서 처리한다

       MovieResponse movieResponse = new MovieResponse();
       movieResponse.date = date;

       //남은건 박스오피스리스판스에 있다 따라서 이변수를 활용하면된다.
       List<Movie> movieList = new ArrayList<>();
       for (DailyBoxOffice boxOffice : boxOfficeResponse.boxOfficeResult.dailyBoxOfficeList) {
           Movie movie = new Movie();
           movie.rank = boxOffice.rank;
           movie.rankInten = boxOffice.rankInten;
           movie.movieCd = boxOffice.movieCd;
           movie.movieNm = boxOffice.movieNm;
           movie.openDt = boxOffice.openDt;
           movie.salesAcc = boxOffice.salesAcc;
           movie.audiAcc = boxOffice.audiAcc;
           movieList.add(movie);


       }
        movieResponse.movies = movieList;

       return movieResponse;
   }


}

 

 

 

처음에는 서버 자체가 안찾아졌다. 그런데 무비컨피그에 url를 써야하는 부분에 key값을 써둔것이었다. 그래서 안찾아진것이었다. 그리고 나왔는데 널삾이 나왔다 그건 위에 포문옆에 왜 그런지 써두었다.

 

이러한 실수들을 바로 잡으니 아래와 같이 정상 작동했다.

 

 

 

---------배포-------

 

만들어주고 이렇게 바꿔준다 디비하면 터널링해줘야하지만 지내꺼니깐ㄴ 해줄필요없다.

 

대신 프로드에 하나 써줄게있다 포트번호!80은 http: 를 의미한다.

 

 

정상작동 확인 후 메이븐의 수명주기 누르고 클린 누르고 패키지 눌러주면 jar생긴다

 

 

타겟이라는 폴더 생김을 알 수 있다.

 

이것만있으면 자바(JDK,JRE)가 있으면 어느컴터에서도 돌릴 수 있다. 

 

 

앱을 JAR 파일로 작성하는 경우가 많다.

파일질라를 이용해 파일을 전송하려면 먼저 서버와 연결되어야 한다. 이를 위해 도메인, IP 주소, 엔드포인트 등의 접속 정보를 알아야 한다. 그래야만 서버에 접속할 수 있다.

또한, 두 번째로 포트 번호를 지정해야 한다. 포트 번호를 설정해야 해당 서버에 접근할 수 있다.

서버가 AWS EC2 인스턴스인 경우, 접근을 위해 PPK 또는 PEM 파일이 필요하다. PEM 파일을 사용하여 서버에 접속한다.

파일질라에서도 이러한 정보를 기반으로 세부 설정을 해주어야 한다. 우선 AWS 콘솔에 접속하여 해당 정보를 확인해야 한다.

 

퍼블릭 아이피 주소가 필요하다이 주소를 사용하든 프블리 아이피4 디엔에스 를 쓰던지

 

 

 

더블클릭하면 들어간다

 

이제 파일을 보냈다. 파일질라는 파일만보내는 역활이다 이제 역활이 끝났다

 

이제 윈도우에서는 푸티 윈도우에서는 터널 을 이용해서 연결을 하겠다.

 

 

 

 

 

 

클린 한번하고

java 만 꺼거 확인

 

 

java --version 명령어를 사용하면 자바 버전을 확인할 수 있다.

java -jar -D 명령어는 특정 Java 애플리케이션을 실행할 때 사용하는 방식이다. 이 명령어를 이용하여 프로덕션 환경에서 애플리케이션을 실행하려면 다음과 같이 작성해야 한다.

 

bash

java -jar -Dspring.profiles.active=prod app.jar

 

 

여기서 -Dspring.profiles.active=prod는 스프링 프로파일을 prod(프로덕션)으로 설정하라는 의미이다. 그러나 이 명령어만으로는 실행이 제대로 되지 않을 수 있다.

서버의 루트 계정(슈퍼 계정) 권한이 필요할 수 있기 때문이다. 루트 계정으로 실행하려면 sudo 명령어를 붙여야 한다. sudo는 '슈퍼 유저로 실행하라'는 의미이다.

따라서, 최종적으로 다음과 같이 실행해야 한다.

 
sudo java -jar -Dspring.profiles.active=prod app.jar

 

이렇게 하면 슈퍼 유저 권한으로 Java 애플리케이션을 프로덕션 환경에서 실행할 수 있다.

여기에 두 가지를 더 추가할 수 있다. 애플리케이션이 백그라운드에서 실행되도록 nohup을 사용하고, & 기호를 추가하여 백그라운드에서 프로세스를 실행할 수 있다.

 

sudo nohup java -jar -Dspring.profiles.active=prod app.jar &

 

이렇게 하면 터미널 세션이 종료되어도 애플리케이션이 계속 실행된다.

 

 

 

 

 

 

꺼도 이렇게 잘 돌아간다 365일 돌아간다

 

 

대신 aws에서 중지만 안하면 계속도는 것이다.

 

 

 

ps -> 작업관리자

ps -ef 모든거 보여줘

한다음 kill -9 프로세스 아이디

 

ps -ef  | grep app.jar

ps 명령어는 리눅스에서 작업 관리자 역할을 수행하는 명령어이다.

ps -ef 명령어를 사용하면 현재 실행 중인 모든 프로세스를 확인할 수 있다.

특정 애플리케이션을 종료하려면 kill -9 [프로세스 ID] 명령어를 사용한다. 여기서 [프로세스 ID]는 종료하려는 프로세스의 고유 식별 번호이다.

특정 애플리케이션을 검색하려면 grep을 사용할 수 있다. 예를 들어, app.jar라는 애플리케이션을 검색하려면 다음과 같이 작성한다.

ps -ef | grep app.jar

 

이 명령어는 ps -ef로 모든 프로세스를 조회한 뒤, grep을 사용하여 app.jar만 필터링하여 보여준다.

 

 

sㄷㄷ

나는 여러번실행을 눌러서 여러개가 있는데 이걸 종료시키려니 안됬다 그러면 sudo kill -9 라고 쓰면 관리자 권행으로 강제 종료가 가능하다

 

 

강제 종료 성공