일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- nestjs
- class-transformer
- Redis
- Database
- terraform cloud
- java
- terraform
- nodejs
- Mocha
- TypeScript
- mysql
- 리뷰
- 백엔드
- docker
- 블록체인
- corretto
- 이더리움
- typeorm
- ChatGPT
- chai
- 온라인강의
- gradle
- blockchain
- Nestia
- 유데미
- restdocs
- 글또
- 도서
- spring
- IAC
- Today
- Total
목록개발 (22)
끄적끄적

운영중인 서비스에서 Dead Lock 이 발생한다는 알람을 받은 적이 있었다. 트래픽이 없을 때는 문제 없었는데 최근 이벤트를 진행하면서 순간 트래픽이 몰리다보니 Gap Lock 에 의해 Dead Lock 이 발생하면서 예상치 못한 에러가 발생한 것이였다. 그래서 Lock 에 대해 다시 한번 공부하는 기회가 되어서 이에 대한 간단한 이야기와 회사에서 실제로 Dead Lock 을 어떤 방법을 활용해서 해결했는지 예시와 함께 정리해볼까 한다. 포스팅은 MySQL(InnoDB) 기준으로 작성하였고 PostgreSQL 의 경우 Lock 방식이 다르므로 적용되지 않는 다는 점은 기억하면 좋겠다. 들어가기 전에 포스팅에서 예시를 들기 위해 아래 ERD 의 구조를 사용하려 한다. 채팅방과 유저가 존재하며, 채팅방 참..

웹 백앤드 어플리케이션 개발을 할 때 대부분의 서비스에서 여러 테이블의 join 은 필수적으로 일어난다. 그런데 많은 테이블들을 join 하면서 성능이 떨어지는 경우가 많이 생긴다. 이를 해결하기 위해 join 되는 컬럼에 인덱스를 건 뒤, 그 인덱스를 타게 하기 위한 수많은 쿼리 튜닝 작업을 진행하곤 한다. 하지만 쿼리 튜닝 작업 전에 가장 기본적으로 성능 향상을 시킬 수 있는 방법이 있는데 db side 에서 join 을 사용하는 것이 아닌 application side 에서 join 을 진행하는 것이다. 이번 포스팅에서는 실제로 db side join 을 application side join 으로 변경하면서 성능 향상을 한 경험에 대해서 이야기할 생각이다. 들어가기 전에 본문으로 들어가기 전에 포..

요즘 ChatGPT 에 대해서 시끌벅적하다. 특히나 최근에 Micorsoft 에서 copilot 을 단순한 개발이 아닌 ms office 에 적용하기도 하면서 업무에 직접적으로 영향을 주기 시작하고 있고 ChatGPT Api 대신 ChatGPT 플러그인이 나오면서 일반인도 충분히 사용 가능하도록 출시되었다. 즉, 이제는 실생활에 밀접하게 적용되고 있다고 생각해 볼 수 있다. 이렇게 AI 와 대화하고 여러 의견 및 정답을 얻어가는 과정을 프롬프트 엔지니어링이라고 하는데 개인적인 생각에 앞으로 프롬프트 엔지니어링이라는 말은 사라지고 업무를 할 때 자연스럽게 써야하는 미래가 올 것 같다. 비유해보자면 과거에 펜과 종이를 통해 업무를 보다가 지금에 와서는 워드 및 한글 등을 통해 모든 업무를 컴퓨터화해서 보고 ..

필자는 보통 Nestjs 로 개발하는데 대부분 아래와 같은 형식으로 로거를 주입시켜 개발한다. export class WithdrawCommandHandler { constructor( private readonly assetRepository: IAssetRepository, private readonly logger: ILogger, ) {}}그런데 최근에 사이드 프로젝트를 spring 으로 개발하고 있는데 대부분의 로거를 아래와 같인 Slfj 의 어노테이션을 활용한다. 그리고 컴파일하면 static logger 를 사용하도록 코드가 쓰여져 있음을 확인할 수 있다.@Service@Slf4jpublic class WithdrawCommandHandler { pr..

백엔드에서 다른 팀에게 API 문서를 전달하는 방법에는 여러가지가 있다. Swagger 를 사용해서 문서를 전달할 수도 있고 Postman 을 이용해서 API 문서화를 시킬 수도 있다. 자바(스프링) 진영에서는 Rest Docs 와 같이 테스트 코드를 강제화 해서 문서를 만들어내는 방식이 유행하는 것 같다. 하지만 어떻게 문서를 넘기던지간에 프런트 입장에서는 백엔드가 만들어진 문서를 보고 API DTO 들을 다시 만들어 내는 과정이 필수적이며 여간 귀찮은 작업이 아니다. 그런데 우리 회사는 백엔드는 node.js(Nest.js), 프런트는 react-native & react 로 모든 개발 언어를 Typescript 로 맞춰서 개발중에 있다. 그래서 작년 초에 프런트 개발자가 이런 요구를 해왔다. 어차피..

필자는 회사에서 테라폼을 이용해서 AWS 관리를 하는데 backend 는 여러가지 이유 때문에 S3 + dynamodb 를 활용한다. 그런데 테라폼 클라우드를 활용하면 백앤드 관리를 더 편하게 할 수 있다는 이야기가 있어 이번에 사이드 프로젝트를 하면서 한번 써보고자 했다. 시작하기 테라폼 클라우드를 사용하는 방법은 오히려 S3 를 활용하는 것보다 쉽다. 우선 테라폼 클라우드 홈페이지로 가서 계정을 생성하자. 그러면 organization 을 만들라고 할 것이다. 사용할 프로젝트의 organization 을 만들어주자 이제 필요한 workspace 를 만들라고 한다. 이 workspace 가 테라폼에서 작성할 각각의 인프라가 될 것이다. 예시로 vpc 하나를 만드는 테라폼 workspace 를 만들어보자..

서론 백앤드를 하다보면 가장 중요한 작업 중 하나가 API 문서 작성이다. 필자의 경우 다른 플랫폼에서는 대부분 Swagger 를 이용해 왔는데 Spring 에서는 테스트코드를 바탕으로 api docs 를 만들어 주는 프레임워크이다. 특히나 테스트 코드를 강제할 수 있다는 부분에서 매력적으로 다가왔다. 그래서 이번에 간단한 사용법에 대해서 적어볼까 한다. 시작하기 우선 이전 포스팅에서 구성한 멀티모듈 프로젝트를 바탕으로 만들어볼까 한다. 우리의 멀티모듈 프로젝트에서 restdocs 를 사용할 부분은 api 모듈 부분이다. 이 모듈의 build.gradle 에 rest docs 에 필요한 설정들을 정의해준다. 또한 포스팅에서는 WebTesetClient 를 사용해서 작성할 예정이므로 이에대한 부분또한 추가..

서론필자는 회사에서 주로 node.js(nest.js) 기반으로 개발을 하는데 최근에 어느 신입 개발자 친구와 이야기를 나누다가 이상한 소리를 들었다. 신입: node 는 터미널을 사용해서 만들어야 해서 더 어려운것 같아요.나: Spring 쓰면 터미널 사용 안해도 되나요?? 앱을 실행시키고 싶으면 어떻게 하나요?신입: IntelliJ 에서 다 개발 가능해요. 그냥 안에서 스타트 누르면 다 가능해요.나: 터미널에서 따로 빌드는 안하나요?? CI 는요?? 배포할 때는 필요하잖아요.신입: 굳이 할 필요 없어요. CI/CD 는 제가 만들지 않아서 잘 모르겠네요. docker 쓰면 굳이 필요 없지 않아요?나: ????????? 무슨 소리인가 싶었는데 인텔리제이에서 많은 기능을 제공해주다보니 터미널이 필요 없다는..

서론 도메인 주도 개발을 했다면 도메인별로 격리 시켜서 개발하면 편할때가 많다. 그래서 이번에 Srping Boot 를 멀티모듈을 사용해서 모노레포를 구성해보고자 한다. 우선 기본 spring boot 프로젝트를 만들어주자. 필자는 IntlliJ 유료버전을 사용하므로 이를 이용해서 구성하고자 한다. 또한 이전 포스팅 에서 corretto 를 이용해서 자바 17 을 설치했으므로 이를 이용해보자. 예제로 도메인 영역인 identity, order 모듈, 그리고 이 도메인들을 이용해서 스프링 앱을 띄우는 api 모듈까지 총 세개의 모듈을 생성할 예정이다. Spring 프로젝트 생성 이때 어차피 멀티모듈로 루트폴더는 별 의미 없으므로 dependency 는 설정하지 않고 넘어갈 것이다. 또한 이번 프로젝트는 S..

오라클 JDK 가 유료화가 되면서 OpenJDK 를 활용하거나 다른 무료 JDK 를 활용해야 하는 일이 생겼다. 그 중에서 주변에 추천받은 JDK 가 Amazon 의 corretto 여서 설치 방법을 공유해보고자 한다. 사실 설치 방법은 아래 AWS 공식 홈페이지에 자세히 나와 있으므로 원하는 버전에 맞게 설치하면 된다. https://docs.aws.amazon.com/corretto/index.html docs.aws.amazon.com 이번 포스팅에서는 포스팅 할 시 현재 최신버전인 17 버전을 받아볼까 한다. Mac 환경 설치페이지를 들어가서 본인의 mac 환경에 맞는 pkg 를 다운로드 한다. 다운로드 후 설치를 진행한다. 설치가 완료되면 /Library/Java/JavaVirtualMachin..