Server/서버 부트캠프

[Server] 서버 부트캠프 4주차 과제(1) - API 리스트업 /Springboot 환경 구축

Haena 2022. 6. 30. 23:22

3주차 과제

API 구현 및 명세서 작성

 

1. 쿠팡이츠의 REST API 모두 리스트업후 spring boot 환경 구축하기

2. 위에서 리스트업한 API 구현하기 (with 템플릿) / 최소 20~30개

3. 2에서 구현한 API 명세서 작성하기 (구글스프레드시트)

 

 


1. 쿠팡이츠의 REST API 모두 리스트업 하고 구현하기

쿠팡이츠 Rest API 리스트업

 

 Springboot 환경 구축하기

(1) Springboot 환경구축

  • update, upgrade를 해준다
$sudo apt update
$sudo apt upgrade

 

  • jdk 설치
    - spring boot는 언어가 java로 되어있기 때문에 jdk 필요
    - y옵션을 주어 설치할거냐는 것을 물어보지 않고 한 번에 다운로드
$sudo su
$apt install default-jdk -y

 

    • spring boot 템플릿 가져오기
      - 위치는 기존 ngnix폴더가 있는 곳
      - www에 넣어줌
      - 템플릿을 옮기는 방법에는 git clone을 해서 git에 올려놓은 코드를 바로 가져오는 방법과 Cyberduck, WinSCP를 이용하여 바로 서버에 드랍앤드롭으로 폴더를 옮기는 방법이 있는데, 오늘은 git clone으로 진행하겠다
$git clone https://github.com/hyuns226/springboot_template.git

 

 

    •  ngnix 서버블록 설정으로 가서 설정파일을 열어주고 root를 template을 받았던 경로로 설정해준 후 재시작 해준다.
$cd /etc/nginx/sites-available
$vim default
$systemctl restart nginx

 

  • 이제 해당 템플릿을 원격으로 가져와보자
  • vim으로 여기서 편집할 수도 있지만 불편하기 때문에 intelliJ를 사용할 것이다. 이외에 visual studio code, vs code 등을 사용할 수 도 있다
  • 아래 링크에서 intelliJ를 다운받고 springboot 프로젝트 설정을 해준다
 

다운로드 IntelliJ IDEA: 우수성과 인체 공학이 담긴 JetBrains Java IDE

 

www.jetbrains.com

 

 

  • IntelliJ 프로젝트에서 Tools - Deployment - Configuration - +버튼 - SFTP 를 선택해준다

 

  • 이름을 원하는대로 설정해주고 아래 ... 버튼을 눌러서 configuration을 연결을 하나  만들어줘야 한다

 

  • + 버튼을 눌러서 아래 창이 뜨면
  • host - AWS 인스턴스의 퍼블릭 IPv4 주소, Username  - ubuntu,  keypair- 예전에 다운받은 keypar을 넣어주고 Apply한다

 

  • Root path에는 템플릿을 넣어놓은 폴더, Web server URL은 ip주소 또는 도메인을 넣어준다

  • 필요없는 깃 파일을 지워준다
$rm -rf .git

 

 

  • intelliJ에서도 폴더 수정이 가능하게 권한을 준다
  • R옵션 : 해당 폴더부터 하위 폴더까지 권한 동일하게 설정
$chmod -R 777 springboot_template/

 

  • 이후 템플릿에서 데이터베이스 설정을 해준 후 upload한다

 

  • 아래 명령어를 통해 빌드해준 후
  • demo-0.0.1-SNAPSHOT.jar 파일을 실행한다
$sudo ./gradlew clean build
$java -jar build/libs/demo-0.0.1-SNAPSHOT.jar

 

  • 이제 포스트맨으로 포트 9000번으로 통신이 되는 것을 확인할 수 있다

※종료하려면 control + c 를 눌러준다

 

 

(2) Proxy Pass사용한 SSL인증

 

※ 이렇게 되면 예전에 SLL인증을 하고 사용했던 부분을 이용할 수 없다. 원래는 가장 앞단에서 서버프로그램을 만나서 80번 포트를 통해서 백엔드 랭귀지로 들어가거나 443 포트를 이용해서 들어갔었는데, 지금은 바로 9000번 포트를 통해서 벡엔드 랭귀지에 바로 접근을 하는 형식이기 때문에 보안상에서도 취약하다. 그렇기 때문에 SLL인증을 하려면 Proxy Pass를 사용해야 한다.

 

  • 서버 블록으로 이동해서 default파일을 열어준다
  • location부분에서 try_files~ 를 주석처리 해주고 proxy_pass http://127.0.0.1:9000;를 작성후 nginx를 재시작해준다
$cd /etc/nginx/sites-available
$vim defaults
$systemctl restart nginx

  • 이후 빌드 해주고 다시 jar 파일을 실행한다
$./gradlew clean build
$java -jar build/libs/demo-0.0.1-SNAPSHOT.jar

 

  • postman에서 9000번포트를 지우고(80번 포트) 진행하면 연결이 된다. proxy 설정이 된 것이다. 기본 포트로 들어오는 연결을 9000번 포트로 돌려주는 것이다. 이제 spring boot를 사용하기 위한 서버 구축은 끝났다! 추가적으로 SSL인증을 해줘야 한다.


ISSUE

1. gradle파일 빌드 오류 

-> sudo 권한으로 작업시 해결

 

 

2. jar 파일 실행시 아래 화면까지만 나오고 멈춤

-> AWS 프리티어 사용시 메모리 부족으로 인한 멈춤현상

-> swap으로 메모리 증설

-> https://okky.kr/article/884329 참고

 

swapping 과정

 

3.unknown database ~ 

-> application.yml파일에서 데이터베이스 url 잘못 설정한 것이 원인

 

-> 아래 사진에서 왼쪽걸로 적으면 안되고 오른쪽걸로 작성(데이터베이스 스키마명!)

틀린예/ 올바른예

 

4. 위에서 잘못 작성함을 인지하고 데이터스키마 명을 coupangeats로 변경하였으나 계속해서 coupangEats로 인식하고 3과 똑같은 오류를 뱉음 (이 오류때매 하루 날림..)

-> git clone한 폴더 삭제하고 intelliJ 프로젝트도 삭제한 후 git clone부터 intelliJ연동까지 새로 해준후 gradlew 빌드해서 성공

+++  

-> build 폴더에 있는 파일들은 수정용이 아니고 빌드할때 같이 저장되는거라 build폴더 말고 다른 곳에 있는 application.yml을 찾아서 수정해야 한다!