
서버 개발 중 스프링 부트가 실행 될 때, 반드시 한번 실행 시키고 싶은 코드가 생겼다. 코드 상 서비스로직에 추가해야할 것 같고, 굳이 빈일 필요가 없다. 예를 들어, 변수에 어떤 값을 초기화 한다던가, 객체를 초기화 한다던가 여러가지 예가 있을 것 같다. 여러가지 방법이 있다. 하나씩 정리해보자.1. @PostConstruct @Serviceclass DataService { private val dataList = mutableListOf() @PostConstruct fun loadData() { // 애플리케이션 시작 시 데이터 초기화 dataList.addAll(listOf("Data1", "Data2", "Data3")) println(..

개요이직 후 거의 바로 QueryDSL을 도입했었다.스프링부트에 QueryDSL 적용기 - 1 (Mybatis vs JPA vs JOOQ vs QueryDSL 비교)스프링부트에 QueryDSL 적용기 - 2 (설치 및 사용법, Spring Data JPA와 함께 사용하기) QueryDSL 도입에는 여러가지 이유가 있는데 대표적인 이유로는 담당하게된 프로젝트가 MyBatis와 JPA가 혼재되어 있었다는게 첫번째 이유였다. JPA를 완전히 덜어내기 어려운 상황이었고, 두번째는 이직 전 회사에서부터 엄청난 길이의 MyBatis 동적쿼리에 고통받고 있던 나는 Native Query를 백엔드 코드에서 더 이상 보고싶지 않았기 때문이었다. QueryDSL 도입 초기에는 컴파일 단계에서 쿼리 오류를 잡아주는 게 너무..

개요기존 서비스에서는 EKS + ArgoCD를 이용한 GitOps를 구축해놨었다. 그런데, 새로운 프로젝트에서는 ECS를 쓰면서 CI/CD를 아예 갈아치워야 하는 상황이 됐다. ECS 환경에서도 ArgoCD를 할 수 있다고는 하는데... 하는 방법이 구체적으로 나와있지 않았다. ArgoCD 메인테이너가 해준 설명 : https://github.com/argoproj/argo-cd/discussions/17843 어떻게해야하나 찾아보니까... GitHub Actions에서 ECS용 워크플로우를 만들어놔서 ArgoCD보다 더 쉽게 CI/CD를 구축할 수 있었다. 원리는 Task Definition에 명시해둔 이미지 이름을 변경하고 Task를 재실행시켜서 재배포하는 방식이다. 준비물은 Task Definit..

개요AWS ECS 기초부터 파악해보기에서도 이야기했지만, 이번 프로젝트는 ECS로 구축했다. 그런데, 작업을 시작할 당시에 아직 상용 서버용 AWS 계정을 전달 받지 못 했고, 개발 서버를 운영해야한다는 문제가 있었다. 이럴 경우 계정을 옮겨가야 하는데 인프라 구성을 AWS 콘솔로 작업할 경우, 개발 서버의 인프라를 상용 서버와 동일하게 구성하기 어려울 수 있다. 워낙 작업이 많아서 뭔가 놓칠 가능성이 크고, 특히 IAM과 보안 그룹이 싱크가 안맞아서 예상치 못한 문제가 생길 여지가 있다. 그래서 개발 서버에서의 모든 인프라를 Terraform으로 구성해 상용 서버용 계정을 전달 받았을 때 바로 옮길 수 있게 작업 했고, 이 글은 이 내용을 정리했다. 들어가기전에 1. Terraform 리소스는 S3에..

개요고유한 객체의 ID를 생성할 일이 생겼다. 그동안 ID를 만들 때, UUID나 랜덤 값으로 ID를 만들었으나 이번에는 제대로 설계를 해보려고 한다. 대부분의 경우에는 UUID로 id를 만들어도 고유성 측면에서는 큰 문제는 없지만, 그냥 사용하기엔 조금 아쉽다. 그래서 가장 많이 레퍼런스로 사용되는 트위터에서 사용되는 id 생성 기법인 스노우플레이크다. 스노우플레이크는 id가 정수로만 표현되서 다루기 쉽고 인덱스 효율성을 보장하지만, id만 가지고 무언가를 식별하긴 어렵다. 이리저리 고민하다가 새로 설계해서 만들어보기로 했다. 이번 포스팅은 설계 과정에서의 의사결정 과정을 정리해봤다. ID 생성에서 고려할 점들토스페이먼츠에서 거의 그대로 긁어옴 고유성 : 동일한 시스템 또는 전체 네트워크 내에서 두 ..

개요기존 프로젝트에선 EKS를 사용 중이었다. EKS를 사용하다보니 계속해서 생겨나는 무언가 + 빠른 주기의 업데이트 + 가격 등으로 인해 지속적으로 관리가 어려웠다. 그렇지만 자동관리해주는 부분을 포기할 수는 없어서 타협을 본게 ECS였다. 아직까지는 좋은 선택이었다 생각이 들지만, ECS도 진입하는데 있어서 약간의 장벽이 있었다. 용어나 사용법, CI/CD 구성 방법 등이 기존과 조금 달라서 애먹었다. 일단 이 포스팅에서는 용어와 구성 요소에 대해 정리해보려고 한다. ECS의 주요 개념과 구성 요소 1. 클러스터 (Cluster) ECS 클러스터는 컨테이너 작업(Task)을 실행하기 위한 논리적인 리소스 그룹이다. 논리적인 말은 가상이라는 뜻이다. 그냥 어디에 배포할지 분리하는 용도로 사용된다. ..

개요새로운 서비스가 시작하면서 AWS관리부터 devOps, BE 개발을 전반적으로 다 관리하고 있다. 그러다보니 서버 설정을 만질때가 많은데, 그중에서 관리가 특히 필요한 것들이 외부 API 키나 DB 커넥션 관련 정보다. 1. 누출되면 데이터를 싹 털릴 수도 있고, 무분별한 사용으로 비용이 치솟을 수 있는 것들.2. 기간 만료/갱신 등으로 인해 수시로 변경되고, 서버 프로필 별로 따로 관리가 필요한 것들. 이런 것들을 한번에 관리할 수 있도록 서비스를 지원하는게 AWS Parameter Store다. 이번 포스팅에는 아래와 같이 사용법을 정리해보려고 한다. 1. Terraform으로 db관련 간단한 파라미터를 등록2. ECS Task의 IAM 정책에 ssm 작업 추가3. SpringBoot 3.0에서..

매년 연례행사처럼 하는 새해 목표를 올해도 세워보려고 한다. 작년엔 정말 할 수 있을까? 했던 목표를 많이 세웠었고 생각보다 많이 성공했다.2024.12.30 - [일상] - 24년 목표 결산과 회고 1. 이직올해는 이직의 순위를 첫번째로 올렸다. 현재 회사에서도 나름대로 인정을 받고 있고, 리스펙을 해주고 있어서 감사하긴하다. 회사가 안정적이고 워라밸도 나름대로 보장해주고 있지만, 내가 나이가 나이인지라 나에게 그렇게 주어진 시간이 많지 않다는 걸 느낀다. 그래서 조금 더 빠른 성장을 하길 원하고, 그러기 위해서 컴포트존에서 빠져나오려면 이직이 최우선이 될 것 같다. 그리고 혼자서 공부하는데 한계를 느끼고 있다. 함께 성장하는 동료들과 일하고 싶은 욕심이 가장 크다. 2. 연애이번엔 순위를 높였지..
- Total
- Today
- Yesterday
- Kotlin
- springboot
- OpenAI
- serverless
- 람다
- AWS
- CORS
- Redis
- JWT
- CloudFront
- Spring
- elasticsearch
- terraform
- ecs
- 후쿠오카
- cache
- AWS EC2
- docker
- AOP
- lambda
- EKS
- S3
- 스프링부트
- 인프런
- ChatGPT
- 오블완
- java
- GIT
- 티스토리챌린지
- Log
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |