legacy/Spring
-
[Spring] AWS SES를 사용하여 메일을 보내기legacy/Spring 2024. 4. 13. 16:32
진행 중인 프로젝트에서 사용자가 관리자에게 문의 메시지를 보낼 수 있는 기능이 있습니다. 문의를 전송하게 되면 서버에 등록된 관리자 메일로 사용자의 문의 사항이 전송됩니다. 단순하게 사용자 -> 관리자로 메일 전송 기능이 필요로 했고, AWS SES를 사용하여 관리할 수 있도록 하였습니다.AWS SESAWS SES(Simple Email Service)를 사용하면 SMTP(Simple Mail Transfer Protocol) 이메일 서버를 온프레미스에 유지하지 않고도 고객과 메일을 전달받을 수 있습니다. 즉, 사용자의 이메일 주소와 도메인을 사용하여 이메일을 주고 받기 위해 사용됩니다. 스프링 부트에서 AWS SES를 사용하는 방법에 대해서 알아보겠습니다.1. 자격 증명 생성이메일을 관리..
-
[Spring] Profile 적용 방법 및 우선 순위legacy/Spring 2024. 4. 11. 14:24
환경변수 분리애플리케이션을 배포하게 되면 환경변수를 분리하게 됩니다. 왜 분리를 해야 할까요? 다양한 이유가 있겠지만 가장 와닿는 이유로는 DB 연결정보가 다르기 때문입니다. 로컬에서 작업을 하는 것과 서버로 배포된 application이 사용하는 DB 정보가 다르기 때문입니다. 예를 들어, local에서는 docker로 띄운 DB를 사용하지만, prod 환경에서는 AWS RDS에 띄운 DB를 사용해야하므로 연결 정보를 다르게 해야 합니다. 현재 진행하고 있는 프로젝트의 경우 2개의 profile을 사용하고 있습니다.local(로컬)prod(운영)기존에는 application.yml 1개에 설정 정보를 모두 넣고 사용하였습니다. 그러나 개발이 완료된 서버를 배포하게 되면서 작업 환경을 분리..
-
[Spring] GitHub Actions의 CI 문제, 그리고 AWS Secrets Managerlegacy/Spring 2024. 4. 3. 14:22
AWS Secrets Manager를 사용하게 된 계기 현재 진행 중인 프로젝트에서 커밋 한 코드를 깃헙에 PR 올렸을 때 발생하는 CI(Continuous Integration) 문제 해결법에 대해서 알아보겠다. 우리 프로젝트의 경우 PR에 올라간 커밋한 내용들에 빌드가 정상적으로 수행되는지 GitHub Actions에서 검사한다. 분명 로컬에서 작업했을 때 빌드에 문제도 없었고, 테스트 코드 또한 정상적으로 모두 수행되었다. 그래서 당연히 PR 올렸을 때도 문제가 없을 줄 알았다. 그러나 아래를 보면 X 표시가 보일 것이다. X의 의미는 내가 올린 코드가 빌드에 문제가 생겼다는 의미이다. 왜 문제가 발생했을까? 이유는 간단하다. .gitignore에 추가된 파일이 깃헙에 올라가지 않기 때문이다. Gi..
-
[Spring] @Valid 검증 실패 시에 default message 출력하기legacy/Spring 2024. 3. 26. 23:11
@Valid Controller로 넘어오는 데이터를 검증하는 데 사용할 수 있다. 예를 들어, API를 호출할 때 user의 id를 반드시 전달해야 할 경우 @NotNull(message = "사용자의 id는 필수 정보입니다.")와 같이 검증 조건을 추가할 수 있다. @Getter public class FindSectionCountRequestDto { @NotNull(message = "회고 보드 ID는 필수 입력 값입니다.") private Long retrospectiveId; @NotNull(message = "템플릿 섹션 ID는 필수 입력 값입니다.") private Long templateSectionId; } Controller에서 API를 호출할 때 위에서 정의한 dto를 받는다. 위에서..
-
[Spring] Http 상태 코드 204(No Content)legacy/Spring 2024. 3. 17. 00:15
Http 상태 코드 204 - No Content 클라이언트가 요청한 정보를 전달받고, 이를 정상적으로 처리한다. 보통이라면 요청 내용을 처리한 응답 값을 클라이언트에 반환한다. 그러나 Http Method로 Delete를 사용한 경우에는 그렇지 않다. 예를 들어, 사용자가 1번 게시물을 삭제 요청을 하면 서버는 해당 게시물을 삭제한다. 서버는 게시물을 삭제하고 어떤 값을 반환해야할까? 아무리 생각해도 반환할 정보가 없다.(= Http Response Body가 없다) 왜냐하면 요청 자원을 삭제했기 때문에 서버에 저장된 자원이 존재하지 않기 때문이다. 따라서 이러한 경우에는 응답 상태 코드 204를 사용하는 것이 맞다고 생각한다. 이에 맞춰 코드를 개선해보겠다. Service 기존 코드 기존 코드의 경..
-
[Spring] 엔티티 설계에 대한 고민, @Builder와 Validation 그리고 @Auditing 등legacy/Spring 2024. 2. 29. 01:22
빌더 클래스를 별도로 생성하지 않아도 빌더 패턴이 적용된다. 빌더 패턴을 사용하기 위해서는 반드시 생성자가 필요하다. 내가 처음에 설계했던 엔티티는 다음과 같다. 진짜 아무 생각 없이 @AllArgsConstructor, @NoArgsConstructor 그리고 @Builder 애너테이션을 사용했다. 그 결과 바로 피드백이 들어오게 되었다. @Entity @Getter @AllArgsConstructor @NoArgsConstructor @Builder public class Comment { @Id @Column(name = "comment_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotEmpty private..