[Spring] aws / S3 서비스하기

yed·2021년 12월 6일
0

aws 시작은 mysql대신 oracle을 사용한것빼곤 cocobi님의 포스팅 그대로 따라했습니다.


상단 블로그가 복사가 안돼 옮기기 번거롭다
그래서 그대로 따라한거빼고 내가 찾아본것 위주로 포스팅하겠음

인스턴스 생성

우분투 18.04 로 시작함
인스턴스 만들면 키페어파일을 다운받을 수 있는데 해당 파일로
puttygen(putty 다운받으면 해당파일에 같이 있는 프로그램)에서 키페어 ppk 생성

키페어는 ssh 터미널로 인스턴스에 접근할때 사용하는 파일


그후 putty에서 내 인스턴스에 접근하기 위해
host name에 ubuntu@내 퍼블릭 ipv4주소
포트번호 22

save session 등록하면 나중에 사용하기 편합니다

SSH->Auth에서 생성한 ppk 키페어 열고 시작하기

키페어 파일의 경우 위치를 바꾸면 바꾼위치로 설정도 다시해야하기때문에 아예 위치를 지정해두는게 좋다.

자바11 설치

putty에 접속해서 자바 11과 톰캣 9를 설치해줄 것!

상단블로그는 자바8버전을 설치하고 있고 나는 이클립스 프로젝트 환경과 똑같이 해주기위해 자바11을 설치했다.

(기존에 cafe24에서 호스팅하기위해 jsp호스팅을 구입했다가 cafe24는 tomcat8버전을 제공하고있어 우리 프로젝트가 아예 돌아가지 않아서 바로 해지했음. 버전의 중요성...)
  • 자바 설치하기
    $ sudo apt-get install openjdk-11-jdk

  • 자바 설치확인
    # java -version, # javac -version

  • 환경변수 설정은 블로그와 동일
    단, export JAVA_HOME 입력 시 그대로 따라하면 안되고
    /usr/lib/jvm/java-11-openjdk-amd64/bin/javac를 입력해줘야함!!

톰캣9 설치

톰캣 9 버전 설치는 블로그 그대로임

톰캣 재부팅하기
sudo su 입력
중단 - service tomcat9 stop
재시작 - service tomcat9 start

여기까지 완료하고 ipv4:8080 주소창에 쳐서 제대로 되는지 확인하기
it works! 뜨면 성공~

Oracle 설치

해당 블로그는 mysql을 설명하고있음. 그러나 우리 개발환경은 oracle을 사용하고 있었기때문에 처음에는 블로그 그대로 안하면오류날까봐 mysql 그대로 따라하고 테이블구조만 가져가서 사용하려고했으나 mysql이랑 oracle이 약간 차이가 있더라 그래서 그냥 독자적으로 oracle을 깔아봤다

구구절절..

aws RDS에서 oracle DB 인스턴스 설치

근데 최신버전은 프리티어가 없음
돈내고싶지않으면 12버전을 설치해야함 주의!

  • 기억할 것
  1. 만들때 입력한 마스터 이름과 암호
  2. 생성된 db 인스턴스 엔드포인트

만들면 sql-developer에서 db에 접속할 수 있다

호스트이름에 db 엔드포인트를 적어준다.
포트는 오라클은 1521
SID는 아무설정 안했으면 xe나 orcl

상태: 실패 -테스트 실패: Listener refused the connection with the following error:ORA-12505 에러 발생
SID를 기본설정된 xe가 아닌 aws 구성->DB 이름에 설정한 이름을 적었더니 연결성공!

따라한 블로그들 보면 다들 기본설정인 xe나 orcl이던데 내가 DB생성하면서 뭘 잘못 적었나봄.. ^^

보안그룹 설정

어디에서든 접근하기 위해 DB와 인스턴스의 보안그룹을 설정해준다

DB

인스턴스


이후 파일질라를 통한 프로젝트 배포는 블로그와 동일함.

배포파일은 꼭 /var/lib/tomcat9/webapps에 올려야한다. 올리고나서 잠시후 새로고침한번 하면 자동으로 업로드한 배포파일의 폴더가 생성되어있음.


S3

aws에서 제공하는 이미지 저장 클라우드임! 모든 사용자에게 이미지를 제공해야하는데 s3를 사용했음

S3 버킷만들기는 해당블로그에서 참고했다. 해당 블로그는 springboot를 기준으로 만들어서 버킷생성까지만 참고하고 코드는 참고할 수 없었음ㅠ

블로그를 따라 버킷을 만들고 기억해야할 것

  • 액세스키와 비밀 액세스키

이미지가 정상적으로 올라가고 삭제되는지 테스트하기 위한 코드는 이 블로그를 참고했다.

여기에 없는 것을 추가하자면 위 코드대로만 이미지를 업로드하면 S3에 저장된 이미지의 객체 URL에 접근하면 이미지가 다운로드됨

그래서 util에서 metadata의 contentType을 이미지로 지정해주어야 url접근 시 이미지 보기가 가능하다
metaData.setContentType("image/jpeg");

그리고 이미지삭제할 때 폴더는 버킷 내부 전체폴더경로가 필요함! 예를 들어 A라는 버킷안에 a라는 폴더가 있고 그안에 날짜별폴더로 이미지가 저장된다면 이미지 삭제 시 입력해야할 url은 a/*로 시작되어야 한다.

spring 프로젝트 환경설정

  • pom.xml
<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.1001</version>
</dependency>
  • root-context.xml
<bean id="ds" class="oracle.jdbc.pool.OracleDataSource"	destroy-method="close">
	<property name="dataSourceName" value="ds"></property>
	<property name="URL" value="jdbc:oracle:thin:@DB엔드포인트적어주세요:1521:SID적어주세요"></property>
	<property name="user" value="마스터이름"></property>
	<property name="password" value="마스터암호"></property>
</bean>

파일질라에 올린 war배포파일의 폴더명을 http://ipv4주소:8080/폴더명으로 입력하면 성공적으로 프로젝트가 배포됨을 볼 수 있음!

테스트를 위해 파일을 업로드했다 지웠다하니까 과부하가 걸렸는지 aws상의 연결상태는 정상이라고 뜨지만 서버가 안들어가짐.
그때마다 인스턴스 중지->시작으로 ipv4초기화해주면 새로운 퍼블릭 ipv4주소로 접속할 수 있다.

이렇게 계속 ip가 변경되는 문제를 탄력 ip를 연결했더니 ip가 고정되어 사용하기 편해짐

profile
6개월 국비과정 기록하기

0개의 댓글