내가 그린

자바 코드 리팩토링: 가독성과 유지보수성 향상 기법

코드 리뷰 연동 프로젝트를 시작한지 1달 정도가 지나고 있다. 그동안 혼자 프로젝트를 진행하다보니 설계, 기능 구현, 테스트에 집중하여 코드 품질을 미처 챙기지 못하였다. 이번에 동료 개발자분께서 프로젝트에 합류하게 되면서 구현했던 코드에 대해 리뷰 받을 기회가 있어서 변경 전과 변경 후 코드에 대해 비교하는 글을 써보고자 한다. 리팩토링한 실...

Spring 테스트 코드 작성 가이드: 단위 테스트부터 통합 테스트까지

스프링 테스트 코드를 작성하면서 테스트 관련 어노테이션이 너무 다양하고, 무엇을 위해 쓰는 지 몰라서 원하는 대로 테스트 코드를 작성하기가 어려웠다. 테스트 코드 관련 내용을 차근히 정리할 필요성을 절실히 느끼게 되었다. @SpringBootTest(통합 테스트) 애플리케이션 컨텍스트(빈, 설정, 구성 요소 )등을 로드하는 테스트 어노테이션...

Spring Local Cache 구현: 성능 최적화와 메모리 관리

캐시의 필요성 외부 시스템과 연동하는 프로젝트를 진행 중인데, 연동하는 데이터들은 수정이 적고 조회는 빈번하기 때문에 캐시에 연동 정보를 저장하면 DB 조회를 줄여 성능을 개선할 수 있기에 캐시 도입을 알아보게 되었다. 스프링 캐시 특징 스프링에서는 Bean의 메소드에 캐시를 적용할 수 있는 기능을 제공한다. 스프링의 캐시 추상화는 AOP를...

자바 기본 개념 정리: 객체지향, 상속, 다형성, 추상화 이해

김영한의 실전 자바 기본편에서 학습한 내용을 정리한 글입니다. 자바에서의 대입? 항상 변수의 값을 복사해서 대입한다. 기본형(Primitive Type)이면 변수에 들어있는 실제 사용하는 값을 복사하여 대입하고 참조형(Reference Type)이면 변수에 들어있는 참조값을 복사하여 대입한다. 참조형이란? 데이터에 접근하기 위한...

대규모 서비스를 위한 백엔드 확장 전략 (2): MSA와 데이터 샤딩

원티드 프리온보딩 백엔드 챌린지 아키텍쳐 설계을 정리한 내용입니다. 1.메시지 큐 1.1 메시지 큐란 생성자는 이벤트를 발행하여 메시지 큐에 보관하고, 메시지큐는 소비자가 꺼낼 때까지 안전하게 저장한다. 비동기 통신 매체이다. 1.2 장점 서비스 또는 서버 간 결합을 느슨하게 해주기 때문에 규모 확장성이 보장되어야 하는 어플리케이션을 안...

대규모 서비스를 위한 백엔드 확장 전략 (1): DB 다중화와 캐싱

원티드 프리온보딩 백엔드 챌린지 아키텍쳐 설계을 정리한 내용입니다. 1.데이터 베이스 다중화 1.1목적 대부분의 어플리케이션은 쓰기보다 읽기 연산이 많기 때문에 성능을 위해 데이터 변경은 주 DB로하고, 읽기 연산은 부 데이터베이스 서버들로 분산한다. 1.2개념 주 데이터베이스(Master) Insert, Update, Delete...

백엔드 아키텍처 설계 기초: 동시성 제어와 네트워크 프로토콜

원티드 프리온보딩 백엔드 챌린지 아키텍쳐 설계을 정리한 내용입니다. 사전과제 동시에 같은 DB Table row 를 업데이트 하는 상황을 방어하기 위해 어떻게 개발하실 건지 설명해주세요. MySQL을 사용한다고 가정하였을 때 동시에 같은 DB Table row를 업데이트를 방지하기 트랜잭션 또는 락을 사용합니다. 트랜잭션 SET TRANSA...