Spring Boot 6

[CI/CD] ECS에 Spring boot 서버 배포하기

ECS와 EC2현재 진행하고 있는 팀 프로젝트를 배포를 해야했다.배포하는 방법에는 EC2와 ECS를 선택지를 두고 있었고, ECS를 선택하게 되었다.EC2는 docker나 jdk와 같은 따로 설정을 해줘야 하는 번거러움이 있었고ECS는 컨테이너 서비스이기 떄문에 도커 이미지를 올리고 미리 정의된 Task를 사용하기 때문에 따로 설정이 필요없고 간편하는 점에서 사용하게 되었다.RDS와 ElastiCacheECS로 배포를 하면서 auto scaling을 적용해볼 계획을 가지고 있었다.기존에 localhost로 사용하는 방식으로 한다면 database와 cache가 각 서버에 생기기 때문에 데이터가 공유되지 않는다.그래서 RDS와 ElastiCache를 사용해 서버가 늘어나도 데이터가 공유될 수 있도록 하였다..

[Spring Boot] Redis로 캐싱 처리 적용하기

Redis 정의 이전에 Spring Boot에서 Redis를 사용하는 방법에 대해서 간단하게 포스팅했다. Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)이다. 데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소이다. Redis 장점 높은 성능 Redis는 인메모리 데이터 저장소로 작동하므로 빠른 속도로 데이터를 처리할 수 있다. 비동기 방식으로 데이터를 처리하므로 성능이 향상된다. 데이터 구조 다양성 Redis는 다양한 데이터 구조를 지원하므로, String, List, Hash, Set 등을 통해 데이터를 쉽게 처리할 수 있다. 데이터 복제 및 분산 Redis는 데이터 복제를 지원한다. 클..

기타/개발일기 2024.03.24

Spring Boot에서 Redis 사용하기

Redis를 공부하게 된 계기는 프로젝트를 진행하면서 Refresh Token을 처리를 해줘야 하는데 이를 보통 Redis로 사용을 많이 한다고 한다. 하지만 Redis를 따로 사용해 본 적이 없어서 Database를 사용하여 Refresh Token을 관리해줬다. Redis를 공부해놔야 할 것 같아 리팩토링을 통해 Redis를 사용하게 되었다. Redis 레디스는 Mysql와 같은 RDS도 아니고, MongoDB와 같은 NoSQL도 아니다. 인메모리 형식의 키-값 구조를 가진 데이터 저장소이다. 주요 Redis 사용 사례로는 캐싱, 세션 관리, pub/sub 및 순위표라고 한다. Spring Boot Redis 스프링 부트에서 공식적으로 레디스 기능을 제공해준다. Spring Boot Redis에는 J..

기타/개발일기 2024.03.15

Spring Boot S3에 이미지 업로드

Spring Boot 이미지 업로드 처음에 이미지 업로드는 서버에 임의로 지정해놓은 디렉터리에 저장되도록 구현했다. private PostImage getPostImage(MultipartFile file, Post post) throws IOException { if (file != null) { String originalFilename = file.getOriginalFilename(); String saveFileName = createSaveFileName(originalFilename); file.transferTo(new File(getFullPath(saveFileName))); // 여기서 임의의 위치로 이미지 저장 String filePath = uploadPath + saveFileN..

기타/개발일기 2024.03.13

Service 인터페이스와 구현체 분리

왜 분리해서 사용할까? 인터페이스와 구현체를 분리함으로써 구현체를 독립적으로 확장할 수 있으며, 구현체 클래스를 변경하거나 확장해도 이를 사용하는 클라이언트의 코드에 영향을 주지 않도록 하기 위함이기 때문이다. 이러한 구조로 프로젝트를 설계했을 때, interface에서 정의한 기능을 새로운 방식으로 구현해야 한다면 사용해야 하는 곳에서 구현체만 손쉽게 바꿀 수 있기 때문에 Service를 인터페이스로 만들고, 해당 기능을 ServiceImpl라는 클래스 로 구현하는 것이다. 사용 장점 확장 가능성과 유지보수성 현재는 인터페이스와 구현체 클래스가 일대일 관계를 맺고 있을지라도 언제 서비스가 커져서 구현체 클래스가 확장될지를 모른다. 그래서 이러한 구조로 확장 가능성을 열어둔다면 유지보수하기 편리하다. 협..

Language/Java 2024.03.06