| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 |
| 30 | 31 |
- 시크릿 깃에 올리기
- 시크릿 암호화
- jpa bulk insert
- 스프링 환경변수 설정
- jpa 최적화
- 스프링 환경변수
- 스프링 시큐리티 없이
- 인증 제외
- 스프링 오어스
- 로또 등수 코드
- mysql multi-row insert
- java
- 안드로이드 스튜디오
- android studio
- 중간 테이블 엔티티 최적화
- sops age
- 로또 앱 만들기
- 로또 등수 알고리즘
- 쿠버네티스 #fabric8
- springboot
- 어노테이션 인증
- spring 채팅방
- sops 암호화
- 채팅방 구현
- 어노테이션 인증 제외
- jpa dto 매핑
- hibe
- 스프링 소셜 로그인
- oauth 로그인
- sops
- Today
- Total
목록전체 글 (53)
야미의 개발
생각보다 돈이 나간다서비스를 배포하고 며칠 후 AWS 청구서를 확인했는데,생각보다 비용이 많이 나오고 있었습니다. 프리티어만 사용했었어서 잘 몰랐는데 이제 프리티어도 아니고,환율이 날뛰는 중이라서 거의 서버비만 5만원이 넘게 생겻었습니다.🤯 AWS가 돈잡아먹는 귀신이라는 말이 이해가 갑니다.프리티어가 아닌 계정이라 첫날부터 바로 과금이 시작됐고, 하루에 약 $1.3씩 나가고 있었습니다. 당시 인프라 구성은 이랬습니다:리소스 스펙 일 비용EC2t3.micro (1GB)~$0.31RDSdb.t3.micro (1GB)~$0.72VPC-~$0.24기타 (S3, EIP 등)-~$0.06합계 ~$1.33 월로 따지면 약 $40. 단순 채팅 서비스에 월 5만원 넘게 쓰는 건 좋지않았습니다... 특히 RDS가 전..
Day 4~10: 배포 후 QAMVP를 빠르게 배포하고, 직접 서비스를 사용하면서 QA를 진행했습니다.서버랑 클라이언트는 생각보다 크게 문제가 없었는데, 사용하다 보니 여러 개선점이 보였습니다. 비고: 모든 코드 수정과 구현은 Claude Code를 사용해서 진행함타임존 문제채팅 메시지 시간을 보니 이상한 시간이 찍히고 있었습니다.DB가 UTC 기준으로 데이터를 저장하고 서버에서는 LocalDateTime을 사용해서 생긴 문제였습니다. (분명히 참고 레포가 ZonedDateTime을 사용하고 있었는데 클코가 왜 LocalDateTime으로 가져왔는지 의문) 서버에 기존 참고 레포처럼 ZonedDateTime으로 후딱 바꾸고,프론트엔드에서 사용자의 timezone으로 주면 잘 파싱이 되어서 수정하지 않았습..
Day 2: 빠르게 인프라 구성하기1편에서 MVP를 완성했으니, 이제 실제로 서비스를 띄워야 합니다.빠르게 구성하기 위해 Terraform을 사용했습니다. Terraform은 사용한적이 없긴 했지만, 배포하려는 서비스가 매우 간단해서이 정도는 처음 구축해도 괜찮을 것이라 생각했습니다.Terraform으로 한 번에 구성Terraform 파일 하나로 필요한 모든 인프라를 정의했습니다:리소스 용도VPC네트워크 격리EC2API 서버 (Spring Boot)RDSMySQL 데이터베이스S3프론트엔드 정적 호스팅 + 첨부파일 저장CloudFrontCDNterraform apply이 한 줄로 전체 인프라가 구성됩니다.EC2 구성EC2는 Amazon Linux 2023을 사용했고, user_data로 필요한 것들을 자동..
회사에서 채팅 좀 편하게 하고 싶다.친구가 회사에서 티 안 나게 채팅을 하고 싶다고 말을 했습니다.사실 네이버 톡톡, 디스코드(막혀버림) 기타 등등으로 연락을 하고 있었는데, 뭔가 점점 아쉬워서 간단하고 티안나게 채팅을 할 수 없을지 고민이 되었습니다. 다양한 채팅 사이트가 있지만,CLI로도 채팅하고 웹으로도 가능하게 해서 우리가 원하는 방식대로 연락할 수 없을까 고민해보았습다. CLI의 모티브가 된 서비스는 k9s입니다.코드 생성 툴이나 이런 저런 이유로 쉘에서 작업하는게 익숙해지니 이런 CLI 서비스가 더 편할 것이라 생각했습니다. (티도 안날거같고) 위가 k9s고 저런 느낌으로 아래처럼 vscode 같은 곳에서 터미널로 열면 좋겠다 생각했습니다. 마침 이전에 만들어둔 채팅 프로젝트가 있었고,그 ..
갑자기 테스트가 깨져서 로컬에서 테스트를 돌렷는데 테스트컨테이너에 연결 못하는 상황발생... Docker Desktop을 최신 버전(4.56.0 / Engine 29.1.3)으로 업데이트한 이후, Testcontainers 실행 시 아래 오류가 발생했다.BadRequestException (Status 400)Could not find a valid Docker environmentDocker 자체(docker info, docker version)는 정상 동작했지만, Testcontainers가 Docker 환경을 찾지 못하고 실패했다. it":{"ID":""},"SecurityOptions":null,"CDISpecDirs":null,"Warnings":null})As no valid configu..
개선 목표기존에는 Swagger와 Spring Security에서 공개 API를 따로 관리해야 했습니다.Swagger → @PublicApi 애노테이션으로만 자물쇠 제거Security → PUBLIC_WHITELIST 배열에 직접 경로 추가즉, 하나의 API를 공개하려면 애노테이션 + SecurityConfig 양쪽을 수정해야 했습니다.이에 기존의 어노테이션을 재활용하여,@PublicApi 애노테이션 하나로 Swagger와 Security를 동시에 제어 할 수 있도록 코드를 개선해보았습니다. 코드 설명@Componentclass PublicApiAuthorizationManager( @Qualifier("requestMappingHandlerMapping") private val handle..
개발하다 보면 자주 쓰는 작은 쉘 함수들을 만들어두고 싶은 경우가 많습니다.저는 특히 API 토큰을 발급받아 복사하고 설정하는게 너무 귀찮은데, 아시는 분이 좋은 방법을 알려주시더라구요.~/.zshrc에 간단한 설정만 추가하면, 함수들을 .zsh 파일로 분리해 디렉토리에서 관리하고 Zsh 시작할 때 자동 로드되도록 할 수 있습니다. 1. 함수 로더 만들기먼저 ~/.zshrc에 다음 함수를 추가합니다.다음의 명령어로 편집을 합니다.vi ~/.zshrc 이런 내용 추가!load_zsh_functions() { local func_dir="$HOME/.zsh/functions" # 디렉토리 생성 (없으면 자동 생성) [[ ! -d "$func_dir" ]] && mkdir -p "$func_d..
JPA에서 연관관계를 다룰 때 가장 흔히 발생하는 성능 문제 중 하나는 N+1 입니다.한편 N+1은 lazy 로딩으로 설정했을때 Fetch join을 사용해서 거의 다 해결이 되기때문에, 여태까지 잘 사용해왔습니다. 현재 개발하고 있는 서비스를 기준으로 한번 이 어노테이션이 있을 때와 없을 때의 차이를 비교해 보겠습니다. JOIN FETCH의 한계1. Cartesian Product 문제JOIN FETCH를 사용하면 일대다 관계에서 데이터 중복이 발생합니다.@Query(""" SELECT bp FROM BeanProductEntity bp JOIN FETCH bp.options""")fun findAllWithOptions(): List실행 결과:원두1 - 옵션1원두1 - 옵션2 // 원두1..