전체 글

기록과 정리의 공간
반응형
· 클린코드
깨끗한 코드와 오류 처리는 확실한 연관성이 있으므로 오류 처리는 상당히 중요합니다.하지만 오류 처리 코드로 인해 프로그램 논리를 이해하지 어려워진다면 깨끗한 코드라 부르기 어렵습니다.이 장에서는 오류를 처리하는 기법과 고려 사항 몇 가지를 소개합니다. 오류 코드보다 예외를 사용하라예외를 지원하지 않는 프로그래밍 언어에서는 오류 플래그를 설정하거나 호출자에게 오류 코드를 반환하는 방법이 전부였기 때문에 호출자의 코드가 복잡해지고 이 단계를 잊어버리기 쉽습니다.예외 처리를 사용한다면 오류 프로그램 논리와 오류 처리 코드가 섞이지 않아 코드가 더 깔끔해집니다.// 예외 처리 미사용public void orderProduct(long productId, int orderCount) { Product pro..
· 클린코드
저는 코드를 구현할 때 할 때 단순함과 체크 포인트를 가장 중요하게 생각합니다.체크 포인트란 신경 써야 하는 부분을 말하는데 체크 포인트를 없앨수록 단순함은 올라갈 것입니다. 그럼 어떻게 체크 포인트를 줄이고 단순함을 올릴 것이냐?여러 가지 방법이 있겠지만 가장 기본적인 객체 지향 프로그래밍과 도메인 로직, 비즈니스 로직을 구분 지어 코드를 작성하는 것이라고 생각합니다.(이제부터는 제 아주 주관적인 생각을 정리한 글입니다. 반박 시 여러분들 말씀이 다 맞습니다!) 그럼 객체 지향 프로그래밍이란 무엇일까요?객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고, 객체들 간의 상호작용을 통해 로직을 구성하..
· Redis
이전 글(Redis를 사용해 API Response 캐시화하기(with. Spring Boot) - 1)을 보시면 개요와 구현된 클래스를 확인하실 수 있습니다. Redis를 사용해 API Response 캐시화하기(with. Spring Boot) - 1개요실무를 진행하며 개발환경에서 나타나지 않았던 문제들이 실제 운영에서는 많이 발생합니다.특히 개발환경에서 트래픽이 몰리거나 스트레스 테스트를 진행하기에는 많은 어려움들이 있었devbksheen.tistory.com이번 글에는 구현한 코드를 가지고 API에 적용하는 예제를 정리해 보겠습니다.예제 코드CacheAop전 글에서 구현한 어노테이션의 Aop를 구현한 곳입니다.@Aspect@Component@RequiredArgsConstructorpublic c..
· Redis
개요실무를 진행하며 개발환경에서 나타나지 않았던 문제들이 실제 운영에서는 많이 발생합니다.특히 개발환경에서 트래픽이 몰리거나 스트레스 테스트를 진행하기에는 많은 어려움들이 있었습니다.실제 운영 중에 트래픽이 몰렸을 때 DB connection 문제로 API의 레이턴시가 늘어나는 현상이 나타났었습니다... 이를 방지하고자 DB 환경이나 서버 환경을 스케일 업, 스케일 아웃할 수 있겠지만 백엔드로써 서버에 의존하지 말고 줄일 수 있는 부분은 모두 줄여보자 하는 생각이었습니다.그래서 ElasticCache Redis를 통해 데이터를 캐시 화하기로 마음을 먹었습니다.1. 데이터 캐시화첫 번째로 생각한 것이 대용량의 데이터 자체를 캐시화 하기였습니다.데이터 자체를 캐시화 한다면 연결된 데이터들도 구조에 맞게 설계..
· JPA
개요실무 중 Querydsl을 사용할 때 조금 더 편하게 사용할 방법이 없을까 생각하다가 모듈화(?)라고 하긴 그렇지만 사용하기 쉽고 가독성이 좋도록 구현해 보았습니다. 파일 구조구현한 파일은 4가지입니다. QuerydslConfig.java@Configurationpublic class QuerydslConfig { @PersistenceContext private EntityManager entityManager; @Bean public JPAQueryFactory jpaQueryFactory() { return new JPAQueryFactory(JPQLTemplates.DEFAULT, entityManager); }}해당 클래스는 아시다시피 JPAQueryF..
· Java
※ 테스트 코드는 왜 작성할까?서비스를 만들 때 개발 후 테스트를 한 번에 하면 되는데 왜 중간중간에 테스트 코드를 작성해야 할까?요즘은 이런 생각을 하시는 개발자분들은 없으실 거라 생각하지만..대부분에 작은 회사에선 2~3배에 리소스가 발생하기 때문에 테스트 코드를 작성하지 않는 곳이 많거나 개발자가 귀찮아하고 본인의 일을 줄이기 위해 작성하지 않는 분들도 많이 보았습니다... 하지만 테스트 코드는 개발한 코드를 추후에 수정하게 될 때 발생하는 사이드 이펙트를 줄일 수 있고 서비스에 안정성뿐만 아니라 개발자 간의 협업을 원활하게 하기도 합니다. 코드를 작성하는 것이 개발자의 능력이 아니라,가독성 좋고 안정성 있게 코드를 작성하고 효율적으로 관리할 수 있는 방법을 공부하고 이해하며 실제 구현을 하는 것이..
· AWS
개요 이번 실무에 투입할 Redis를 공부해 보며 AWS 상에 구축하려고 하다가 ElasticCache를 경험해보고 싶다는 생각이 문득 들어 구축을 진행해 보았습니다. 로컬에서는 Docker를 활용하여 쉽게 Redis를 구축해서 개발할 수 있지만 운영환경에서는 복제나 고가용성까지 신경 써서 구축하고 관리해야 하므로... 다들 아시듯이 실무에서는 러닝커브를 뛰어넘을만한 시간을 주지 안.... 핑계입니다. 어쨌든 그래서 ElasticCache를 사용할 것이라고 생각은 하고 있었기 때문에 이번에 구축을 간단하게라도 해보았습니다. Amazon ElasticCache란? Amazon ElastiCache는 클라우드에서 인 메모리 데이터 스토어 또는 캐시를 손쉽게 배포, 운영 및 확장할 수 있게 해주는 웹 서비스입..
· Redis
개요 Spring 프로젝트 같은 멀티 쓰레드 환경에서는 동시성 처리가 필요한 상황이 발생합니다. 서버가 1대라면 쓰레드 동기화를 통해 처리가 가능하지만, 서버가 여러대로 늘어난다면 요청이 분산되기 때문에 무용지물이 됩니다. 만약 쇼핑몰에서 재고가 1개인 상품을 2명의 회원의 동시에 주문한 경우 2번에 요청에서 상품을 조회 당시에는 재고가 1개이므로 2명의 회원 모두 주문에 성공하는 경우가 발생할 수 있습니다. ZooKeeper나 MySQL 분산락을 사용할 수 있지만 Redis를 도입하고있고, 예정이라면 Redis를 통해 분산락으로 동시성 처리가 가능합니다. 라이브러리 선택 Redis를 이용해 분산락을 사용하기 전에 고려해야 할 것이 있는데 어떠한 라이브러리를 사용할 것인가 입니다. Spring에서 제공하..
· Redis
HA(High availability)와 Sentinel Redis 서버를 한 대로만 서비스할 경우 단순히 캐시 용도로만 사용하거나 클라이언트에서 해싱해서 사용한다면 장비에 이상이 발생해 데이터 일부가 사라진다고 하더라도 문제가 없지만 유실되어서는 안 되는 데이터에 경우에는 큰 문제가 발생할 수 있습니다. 이러한 문제들을 방지하지 위해 Redis 서비스를 운영할 때는 기본적으로 마스터/슬레이브 형태로 서비스하는데, Redis 2.6 버전부터 슬레이브의 slave-read-only가 yes로 설정되어 있어서 쓰기 요청은 모두 실패하므로 슬레이브의 전환 기능은 꼭 필필요합니다. 또한 장애가 발생하더라도 제대로 운영하려면 마스터의 장애를 정확히 판별하고 슬레이브를 마스터로 승격해야 시켜야 합니다. 그다음 해당..
· Redis
Redis 복제 Redis 주요 특징 중 하나가 DBMS에서 제공하는 유사한 복제 기능이 있다는 것입니다. 복제 기능은 장애 발생 시 빠른 서버 교체나 장비 교체 등에 사용할 수 있습니다. Redis 복제 모델 Redis는 마스터/슬레이브 형태의 복제 모델을 제공합니다. 이를 통해서 마스터의 변경이 슬레이브로 전파됩니다. 한 대의 슬레이브는 오직 한 대에 마스터만 가질 수 있고 슬레이브는 다른 장비의 마스터로도 동작할 수 있습니다. Docker Compose를 이용한 Redis 마스터 슬레이브 구성하기 1. 네트워크 생성 $ docker network create redis-network --driver bridge $ docker network ls NETWORK ID NAME DRIVER SCOPE ..
반응형
Beekei
Bonglog - 기록과 정리의 공간