이따 써야지..
이번에 새로 진행하는 프로젝트의 인프라는 k8s가 아니라 ECS로 선택했다. BE를 병행하는 입장에서 k8s의 계속해서 바뀌는 업데이트와 복잡성을 따라가기 어렵다 판단해서였다. 그래서 차근차근 Terraform으로 ECS를 구축하던 중 IAM을 설정하다 의외의 문제를 발견했다. aws_iam_policy_attachment와 관련된 문제여서 짚고가보려고한다. 현상부터 특이하다. 1. terraform init (-upgrade)2. terraform plan를 할때 매번 새로운 upgrade 요소가 나옴3. terraform apply에서 아래와 같은 에러가 발생4. 다시 1로 돌아가서 upgade를 해주면 plan에서 새로운 리소스가 잡힘. 2~3의 반복 분명 정책을 만들고 attachment를 실행했..
12월 초부터 dale님이 운영하는 코딩 테스트 스터디에 참석 중이다. 지금이 3주차인데, 블로그를 너무 버려두고 있는 것 같아서 조금씩 다시 써보려고한다. 1주차 문제는 다음과 같다. 1. Contains Duplicatehttps://leetcode.com/problems/contains-duplicate/class Solution { public boolean containsDuplicate(int[] nums) { Set numSet = new HashSet(); for (int num : nums) { if (numSet.contains(num)) { return true; } n..
문제 발생상용 배포 당일 정신없던 배포 준비를 마친 후, 상용서버 배포를 진행했다. 그리고 몇 번의 핫픽스를 내보낸 후 FE 개발자 분이 안보이는 부분에 문제가 있다고 연락이 왔다. FE에서 자기들이 쓰려고 FE의 서버로 보내는 API를 만들었는데 이 URL로 요청을 보내면 403 에러가 난다는 것. 403 Forbidden을 가장 많이 보는 경우는 CORS 문제다. 하지만 해당 요청이 들어온 CloudFront(이하 CF)의 옵션을 보면 CORS 문제가 아니다라는 걸 바로 알 수 있다. AWS에서도 403 에러 관련 문서를 제공하는데 나에겐 큰 도움이 되지 않았었다. 함정이 도사리고 있어서 매우 고통스러웠던, 문제 해결과정을 알아보자.. 문제 분석1. 정말 CORS 문제가 아닌가?이 도메인으로 접근하..
문제 상황FE에서는 그동안 CloudFront URL로 만들어진 이미지 URL을 BE로부터 전달 받아서 img 태그에 넣어주기만 했었다. 그런데 이번 개선으로 이미지를 다운로드를 받아서 사용할 일이 생겼다. 그런데 웬걸 CORS 에러가 발생하기 시작했다. FE에서는 fetch를 이용해 이미지를 blob형태로 받으려 했고, 이 과정에서 CORS가 발생했다고 한다. 이 문제의 원인을 찾아가는 과정이다. 문제 분석1. CloudFront에서 특정 HTTP Method를 막아놨나?- 이전에 CloudFront로 POST 요청이 필요한 경우가 있었는데, 이 Method가 막혀 있을 때 비슷한 에러가 났었다.그러나 fetch는 GET 방식이고, CloudFront에서 GET 방식은 무조건 열려있다. 2. S3의 ..
문제 상황 정리작년 9월쯤부터 비용절감을 위해 dev 서버를 spot 인스턴스로 변경했다. 약 30% 정도 비용절감이 효과가 있어서 당시에는 꽤 괜찮은 선택이었는데, 운영하면서 문제가 발생했다. dev 서버가 spot 인스턴스를 너무 자주 뺏기고, 다시 할당 받는데 시간이 오래 걸리는 현상이 반복됐다. 한두번이면 상관 없는데 하루에도 몇 번씩 뺏기고 다시뜨는데 10분씩 걸리니까, 개발에 차질이 생기는 경우가 생겼다. 이 문제를 해결하고 싶었다. 문제 정의spot instance란?스팟 인스턴스는 실행 중인 동안에는 온디맨드 인스턴스와 정확히 동일합니다. 그러나 스팟은 실행 중인 인스턴스를 워크로드를 완료할 수 있을 만큼 충분히 오래 유지할 수 있다고 보장하지 않습니다. 또한 스팟은 찾고 있는 인스턴스의 ..
2024.07.19 - [개발/SPRING] - Kotlin + SpringBoot 서버에 테스트 도입기. Kotest와 MockK 이전 포스팅에서 테스트는 왜 필요하고, 어떤 것들이 있는지에 대해 정리해봤다. 그리고 현재 프로젝트에서 어떻게 쓰면 좋을지도 결정했었다. 이 후 한동안 실제로 테스트를 구현하면서, 어떻게 테스트를 서비스에 잘 녹일 수 있을지 고민하면서 구현했다. 테스트가 있긴 있었지만, 레거시의 레거시를 테스트하는 용도라 싹 들어내고 다시 구현했다. 1. 테스트는 기능을 테스트하는 용도도 크지만 히스토리 용도도 크다테스트는 사이드 이펙트를 잡는 용도도 크지만 이 코드가 왜 만들어졌는가를 남기는 요소도 포함하고 있다. 주석도 서비스 로직에 남겨져 있는 것보다, 테스트에 남기는게 최신화 하기 ..
서버 to 서버로 데이터를 전송할 일이 생겼는데.... 문제가 생겼다. 문제 상황은 다음과 같다. 1. A 서버에서 B서버로 요청을 보낼 계획2. A 서버는 S3에서 파일정보를 가져와서 ByteArray 형태로 들고 있음3. B 서버에는 MultipartFile을 파라미터로 받는 API(ex. /api/file)가 존재함 - 수정 불가(FE에서 사용 중) 4. A 서버에서 B 서버로 /api/file을 요청해야 함 - 데이터만 삽입하고 끝내기엔 이력이나 업데이트해야할 정보가 많음5. A 서버에서는 FeginClient를 사용 중(HTTP 통신을 위해서 사용 중, 굳이 고집하지 않아도 됨) 요약하면, 요청을 보내기 위해서 스프링부트 서버에서 MultipartFile을 어떻게 만들 것인가? 와 Feign..
- Total
- Today
- Yesterday
- lambda
- GIT
- springboot
- docker
- Log
- AWS
- Elastic cloud
- Spring
- openAI API
- cache
- OpenFeign
- Kotlin
- terraform
- 람다
- 후쿠오카
- MySQL
- java
- ChatGPT
- serverless
- 오블완
- AOP
- JWT
- AWS EC2
- 티스토리챌린지
- OpenAI
- EKS
- CloudFront
- S3
- elasticsearch
- 스프링부트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |