상용 DB를 막 만져봤던 뉴비 시절에 "우리 서비스의 데이터베이스는 HA 구조야" 라는 말을 들었었다. 그 당시에는 아무것도 몰라서 "오 상용서비스에서는 이렇게 구성하는구나"하고 넘어갔었다. 몇 년이 지난 지금, 그 기억을 곰곰이 떠올려보니 HA는 구조가 아니라 High Availability, 고가용성을 말하는 것이었다. 고가용성은 구조를 의미하는게 아니라, 예상치 못한 중단 없이 지속적으로 운영될 수 있는 능력을 의미하는 개념이다. 데이터베이스의 고가용성을 보장하기 위해 여러 가지 이중화 전략이 사용된다. 이중화는 단순히 하나의 시스템이 고장나더라도 다른 시스템이 그 기능을 대신할 수 있도록 구성하는 것이다. 전회사에서는 DB 고가용성을 제공하기위해서 Active/StandBy 구조를 사용하고 있..
작년 말에 Aurora MySQL 5.7 버전의 지원 종료와 연장 지원 안내를 받았었다.https://aws.amazon.com/ko/blogs/korea/your-mysql-5-7-and-postgresql-11-databases-will-be-automatically-enrolled-into-amazon-rds-extended-support/ 요약하면 권장 사항인 MySQL 8.0 대신 MySQL 5.7 버전을 계속 사용할 경우 돈을 더 내라는 내용이었다. 올해 전반기 내내 다사다난해서 지금껏 미뤘다가 이제서야 업데이트를 시작할 여유가 생겼다. 버전 업데이트에 앞서 문제 상황을 확인해보자. 1. 연장 지원 비용비용이 저렴하다면 그냥 둬도 될 것 같다. 그런데 연장 지원 비용을 계산해보면 다음과 같다...
테스트를 하다보면 key로 사용하고 있는 Auto Increment 값이 아래와 같이 계속 증가하다 못해 차이가 나서 보기 싫은 경우가 있다. 이러다보면 FE 팀원에게 이게 맞는 상태냐고 연락을 자주 받게 된다. 어... 네 맞는상태긴한데, 내가 보기에도 이상하다. 이런 문제는 간단한 쿼리문 하나로 해결이 가능하긴하다. ALTER TABLE your_table_name AUTO_INCREMENT = 6; 매번 수동으로 해줘야해서 불편하긴 하지만 비정상적으로 큰 간격을 보지 싫으면 테스트 후에는 정리하는 겸 해서 한번 입력하는게 좋은 것 같다.
이전 글에서는 QueryDSL을 왜 도입하려했는지, 왜 선택했는지 다른 툴과 비교 분석을 해봤다. 이번 글은 스프링부트에 어떻게 설치하고 사용할지 작성해보려 한다. build.gradle plugins { id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' ... } dependencies { implementation "com.querydsl:querydsl-jpa:5.0.0" implementation "com.querydsl:querydsl-apt:5.0.0" ... } def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa = true querydslSourcesDir = querydslDi..
SI 회사에서 일할 무렵엔 항상 MyBatis만 사용했었다.(생각해보니 현재 기준으로 반년도 안지났다.) JPA를 사용하자고, 사용해보자고 자주 이야기했지만 결국 도입에 실패했던 기억이 있다. ㅠ 그런데 이직한 곳도 막 서비스가 런칭한지 얼마 안됐음에도 MyBatis를 쓰고 있었다. 하지만 여긴 JPA 도입을 권장해줘서 JPA를 사용해볼 수 있었는데, 사용하면서 마음에 들지 않는 부분들이 보이기 시작했다. 가장 큰 문제점이라 생각하는건 쿼리가 복잡해지면 JPQL이란걸 사용해야 했다. 아래는 JPQL의 예시다.public interface HistoryRepository extends JpaRepository { @Query("SELECT h FROM UserActivity h WHERE h.tim..
JPA를 사용해 DB insert를 하던 중 뜬금없이 아래와 같은 에러가 났다. java.sql.SQLException: The MySQL server is running with the --read-only option so it cannot execute this statement 흠 DB가 어떤 이유에서인지 read-only 설정이 되어 있군. 인프라 개발자에게 연락해야지. 라고 끝났으면 좋았겠지만, 인프라는 DB 설정을 변경한게 없다고 한다. 웃긴건, 같은 프로젝트의 다른 서비스 내에서의 DB insert는 정상적으로 수행되고 있다는 점이다. 다른 서비스와 차이점을 뜯어보던 중 @Transactional 이 빠져 있는걸 확인했다. @Transactional 어노테이션을 붙이니까 정상 동작했다. 그..
데이터 분산? 데이터를 한 곳에 보관하면 정보 관리 측면에선 좋을 수 있지만, 여러 가지 문제가 발생할 수 있다. 데이터가 늘어나면 데이터 베이스의 용량 이슈도 생기고, 느려지는 CRUD는 자연스레 서비스 성능에 영향을 주게 된다. 때문에 전략적으로 데이터를 분산화해서 관리해야한다. 데이터베이스 분산 전략은 몇 가지 있다. 복제(Replication) : 전체 데이터베이스 또는 그 하위 집합을 여러 서버에 복사하여 각 서버가 읽기 요청을 독립적으로 처리할 수 있도록 분산. 한 서버의 데이터에 대한 모든 변경 사항은 다른 서버로 전파하여 처리한다. 페더레이션(Federation) : 사용자 기반의 서로 다른 부분을 제공하는 여러 개의 작은 데이터베이스로 구성된 데이터베이스 생성 파티셔닝(Partitioni..
최근 CI/CD와 인프라적인 부분에 집중하고 있어서, 개발과 DB에 관련된 내용을 볼 겨를이 없었다. 특히 DB 부분이 부족한 것 같아, 계속해서 작성하려고 한다. 물론 DB 관련 내용은 엄청나게 방대하지만 JPA를 가장 써보고 싶어서, 첫 목적지는 JPA와 querydsl이 될 것 같다. 이 내용들을 써가는 과정에서 인프라적인 부분도 있을 것이기 때문에, 그 부분도 보완해 나가면서 쓰면 좋을 것 같다.(DB는 oracle로 시작하겠지만 웬만하면 redis까지 써볼 것이고, dbcp에 관한 내용도 정리하면 좋을 것 같다) 우선, JPA를 바로 들어가기에 앞서 일단 현재 회사에서 쓰고 있는 SQL Mapper인 MyBatis부터 정리해보고자 한다. (jdbc부터 이야기하기엔 너무 재미가 없다..) ORM인..
- Total
- Today
- Yesterday
- AWS EC2
- 스프링부트
- java
- EKS
- OpenFeign
- ChatGPT
- cache
- OpenAI
- serverless
- elasticsearch
- Kotlin
- terraform
- Spring
- AOP
- 티스토리챌린지
- 람다
- MySQL
- 오블완
- openAI API
- 후쿠오카
- AWS
- CloudFront
- Log
- S3
- Elastic cloud
- lambda
- GIT
- JWT
- docker
- springboot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |