오늘은 목요일이고 월요일부터 하나씩 과제를 받았다!
월요일 과제는 EC2,RDS와 프로젝트 연결하기
사실 프로젝트를 그냥 STS로만 구현할 예정이었는데 아예 AWS 연결해서 올려보라고 하셔서 요즘 좀 루즈해지던 참에 또 한참을 몰두했다.
DB를 아예 옮기고 동작까지 확인하는데 애를 많이 먹었다.
일단 AWS에 대해 너무 많이 까먹었구...ㅋㅋㅋㅋㅋ 그래도 늘 그렇듯 구글의 힘을 빌려 해결했다.
화요일 과제는 S3로 파일 업로드 부분을 바꾸는 거였고 수요일 과제는 EC2로 서버 굴려서 아예 프로젝트를 올리는 거였는데...수요일 저녁에 약을 먹고 잠들었다가 새벽에 일어나서 아침까지 했다.
가장 처음엔 메이븐을 추가해줘야한다. 나는 그냥 적당한 거 넣었음...ㅎ
<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.12.420</version>
</dependency>
그리고 나서 AWSConfiguration.java 추가! 패키지를 새로 만들어줌
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
@Configuration
@EnableWebMvc
public class AWSConfiguration implements WebMvcConfigurer {
@Bean
public AmazonS3 AwsS3Client() {
AmazonS3 s3Builder = AmazonS3ClientBuilder.standard()
.withRegion(Regions.AP_NORTHEAST_2)
//원래 여기 보안키도 넣는데 일단은 제외시켰다.
.build();
return s3Builder;
}
}
그리고 AWSS3Service.java
import java.io.IOException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.PutObjectRequest;
@Service
public class AWSS3Service {
@Autowired
private AmazonS3 s3Client;
@Value("####")
private String bucketName;
public String uploadObject(MultipartFile multipartFile, String storedFileName) throws IOException {
String filePath = "/"+storedFileName;
s3Client.putObject(new PutObjectRequest(bucketName, filePath, multipartFile.getInputStream(),null));
return s3Client.getUrl(bucketName, filePath).toString();
}
}
그리고 원래 쓰던 Controller에
@Autowired
private AWSS3Service s3Service;
//경로를 지우고 파일 업로드 부분에 적어주면 된다
s3Service.uploadObject(MultipartFile, filename);
그리고 버킷에 저장된 파일을 가지고 오고 싶으면
https://버킷이름.s3.ap-northeast-2.amazonaws.com//파일이름
EC2를 마지막에 만들 것! 원래 있던 기능인지는 모르겠는데 EC2를 만들자마자 RDS랑 연결할거냐고 뜨는데 그 때 미리 만들어준 RDS를 연결해주면 아주 쉽다 ㅎㅎ
EC2를 만들 때는 서브넷이랑 보안그룹도 꽤 애를 먹어서 조금 더 일찍 정리를 했으면 좋았을텐데...ㅎ
일단 서브넷을 만들 땐 서울에 해당하는 a,b,c,d를 모두 서브넷에 등록해야 오류가 나지 않았다.
처음 EC2 접속하고 뭐 다운 받고 하려면 아예 보안을 0.0.0.0으로 열어두는게 편하긴 한데 프로젝트를 올리고 도메인이 생기게 되면 이 부분은 수정하는 게 좋을 것 같다!
그리고 오늘은 EC2에 톰캣이랑 자바 깔아서 프로젝트를 처음으로 돌려봤는데...! 결과는 처참했다.
계에에속 404 오류가 떠서 내내 끙끙 고민했는데 어이없게 프로젝트랑 EC2 자바 버전이 안 맞아서 그랬다. 로그 확인을 꼼꼼하게 합시다...
아 그리고 프로젝트를 ROOT.war 파일로 만들라는 분들이 많아서 그렇게 하고 ROOT 폴더 지웠다가... 이게 내꺼가 안 돌아가는건지 톰캣이 문제인지 알 수가 없어서 불편했다. 결국 톰캣 지우고 다시 깔았음...
사실 이번 과제는 완벽히 해내지 못했다 뜨긴 떴는데 css가 하나도 적용이 되지 않아서.........
저거 해서 다음 글은 css 적용 내용 써야지!!!
훌륭하십니다