AWS 22

[aws] RDS DB이름 확인하기

🏕️상황 RDS 연결정보를 입력하기 위해서 중간에 DB이름을 적어야 해서 확인하려 들어갔더니 빈 값이 있는 것이다? 그래서 검색을 해보았는데 가장 많이 나오는 DB이름을 생성하는 방법은 데이터 베이스 생성 시에 만드는 것이다. 하지만 나의 경우에는 이미 만들어져 있는 데이터 베이스가 존재했기 때문에 위의 방법을 사용할 순 없었다. 그래서 지난번에 빌드에 성공했을 때 이미 만들어져 있을 것으로 예상이 되어서 mysql 쉘을 통해서 확인해 보기로 하였다. 🗝️해결 mysql -h your-rds-endpoint -P your-rds-port -u your-username -p 위의 명령어를 내 정보에 맞게 입력하니 바로 mysql 쉘이 등장하였다. 즉, 인스턴스를 통해 RDS에 접근한 것이다. show da..

[spring boot] aws 백엔드 배포하기(3. 서버 빌드 오류잡기)

🏕️상황 오류 메시지들을 다 검색해 보니 결국은 다 하나였다. DB연결이 안 된다는 것!! 이것 때문에 거의 1주일 안 되게 소모를 해버렸다... 원래 우리는 ENC() 방식을 사용해서 DB정보를 암호화했었는데 복호화를 aws에서도 진행하려면 KMS를 사용하거나 좀 더 복잡한 방식을 사용해야 해서 정보 자체를 환경변수에 저장하는 방식으로 가기로 했다. 🛣️과정 여기에 우리가 로컬에서 사용했던 db정보를 넣고 "왜 안 되냐ㅠㅠ"를 외쳤다..ㅋㅋㅋㅋㅋㅋㅋㅋ ec2에서 빌드하려면 rds 연결정보를 넣어야 했는데 바보 같은 짓을 하고서는 고통스러워했다. 인터넷에 있는 것들을 보면 대부분은 '퍼블릭 액세스 허용'을 하여 접근하는 방식이 많이 나와 있지만 그렇게 하면 보안상의 취약점이 생기기 때문에 최대한 저 방식..

[spring boot] aws 백엔드 배포하기(2. 서버에서 빌드)

🏕️상황 우리 프로젝트는 JAR 파일을 사용하여 Java 코드 빌드 방식을 활용했다. 현재 서버에 public ip가 없어서 스프링 코드를 scp 등의 명령어를 이용해 업로드할 수 있는 구조가 아니다 보니 NAT gateway를 설정했다. (NAT gateway가 있으면 private subnet에 있는 서버라고 하더라도 외부 인터넷에 outbound 요청은 가능) private subnet에 있지만 NAT gateway를 설정했기에 직접적인 inbound 요청은 모두 차단하는 상태이다. (대신 서버에서 outbound 요청은 가능하다.) 그래서 직접적으로 파일을 업로드하는 것은 안 되고, git clone, git pull은 가능한 형태이다. 🗝️해결 1. Session Manager로 인스턴스로 접근..

[spring boot] 게시판(이미지 처리) Create, Read 기능 구현

🏕️상황 원래 게시판 쪽은 내 담당이 아니었지만 사성으로 인하여 게시판도 내가 맡게 되었다. 이번에 내가 맡으면서 글 작성만 가능했던 게시판에 이미지 기능도 추가하였다. 🗝️개발 코드 게시글 작성 코드 // BoardService public ResponseDTO create(final Board entity, final List imageList) { try { validate(entity); boardRepository.save(entity); //이미지를 뺀 나머지 컬럼 저장 imageService.upload(imageList, entity.getId()); //이미지 저장 코드 return ResponseDTO.success(boardRepository.findById(entity.getId()..

[spring boot] aws 백엔드 배포하기(1. jar파일로 빌드)

🏕️상황 원래는 7월에는 배포를 진행할 예정이었는데, 여차저차 미뤄지게 되었다. 그래서 한이음 팀장님이 더 이상 미뤄지면 안 될 거 같다고 얘기하기도 했고, 나의 경험 측면에서도 하루빨리 서버 배포를 해보는 것이 도움이 될 거 같다는 생각에 당장 배포를 제1의 목표로 가지게 되었다. 하지만 맨날 로컬 환경에서 기능 개발이나 해봤지.. 이쪽 aws, 서버 세계는 이번이 완전 처음이라 두려움이 앞섰다. 멘토분과 멘토링을 통해 서버 배포 진행 : - 장점 1. 내가 편하다. 2. 몰라서 헤매는 과정 없이 빠르게 배포를 할 수 있다. -단점 1. 내 실력 향상엔 내가 직접 하는 것보단 좋지 않다. 2. 그 과정을 내가 직접 하지 않았기 때문에 추후 유지/보수에 오히려 어려움이 생길 수 있다. 3. 멘토님과 진행..

🚨ERROR - com.amazonaws.SdkClientException: Failed to connect to service endpoint:

🏕️상황 2023-07-25 10:31:09.949 WARN 156 --- [ main] com.amazonaws.util.EC2MetadataUtils : Unable to retrieve the requested metadata (/latest/meta-data/instance-id). Failed to connect to service endpoint: com.amazonaws.SdkClientException: Failed to connect to service endpoint: at com.amazonaws.internal.EC2ResourceFetcher.doReadResource(EC2ResourceFetcher.java:100) ~[aws-java-sdk-core-1.11.792.jar:n..

[Spring boot] s3 이미지 업로드 구현(초안)

🏕️기존 상황 이미 S3 버킷은 만들어져 있는 상황이었고 모든 권한을 가진 iam 유저도 1명 있는 상태였다. 그 상황에서 더 추가적으로 필요한 것들을 추가해서 개발하였다. 🔺S3연동을 위해 해당 권한만 별도로 가진 유저를 생성 노란색 박스처럼 S3 권한을 가진 전용 iam 유저를 [highWay_S3_user]라는 이름으로 생성. 핑크색 박스의 권한을 부여하여 유저를 생성. (S3에 대한 전체 권한을 허용하는 것이기 때문에 추후 더 보안에 신경 쓸 수 있는 권한을 도입예정) 🔺build.gradle //aws implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' 🔺application.properties # S..

[개발] S3_accessKey, secretKey 발급받기기(문제/해결)

🏕️상황 S3에 이미지를 업로드하는 코드를 만들기 위해서 밑작업으로 application/properties에 accessKey, secretKey 값을 입력해야 하는데 그 값이 어디에 있는지 몰랐다. 그래서 검색해 보니 'aws access key 재발급'라고 검색해도 하나같이 새로운 유저를 생성하면서 그 과정 속에서 위의 값들을 얻는 구조였다. 하지만 우리 프로젝트 계정에는 이미 iam 유저가 1개 존재했다. aws 왕초보이다 보니 이것저것 막 건들이기가 무서웠고, 이미 유저가 1개 있는 상태에서 또 유저를 생성해도 되는지 고민이 되었다. 그래서 한이음 멘토님께 연락을 드려 여쭤보았다. ⛅과정 아래의 사진처럼 이 부분을 선택해서 iam 유저를 생성해야 하는데 이게 안 보이더라!! 이 페이지 (1페이지..

[궁금증] S3에서 객체 업로드 시 비용이 발생하지 않도록 하려면 어떻게 해야하나?

각 버전은 별개의 객체로 보존되기 때문에 추가 요금이 발생한다. 객체 갱신 시(put)에는 기존 객체와 다른 새로운 버전 ID가 부여된다. 라고 책에 나와있었다. 그런데 의문이 들었다. ❓최대한 한 번에 객체를 업로드하려고 해도 계속해서 추가로 객체를 업로드할 일이 생길 텐데 그럴 때마다 비용이 발생한다는 것이 께름칙(?)해서 비용이 발생하지 않게 하도록 하는 방법이 없는지 의문이 들었다. 버전 관리 비활성화: 이미지를 업로드할 때 버전 관리를 비활성화합니다. 버전 관리를 비활성화하면 새로운 객체 업로드 시 이전 버전은 보존되지 않으므로 스토리지 요금을 최소화할 수 있습니다. Overwrite 사용: 이미지를 업로드할 때 동일한 객체 키(Object Key)를 사용하여 Overwrite(덮어쓰기) 옵션을..