본문 바로가기

전체 글

(67)
Global Exception Handler 만들기 1. 왜 필요한가?서비스 규모가 커질수록 예외(Exception)가 발생하는 지점이 많아짐매번 try-catch를 넣으면 코드가 지저분해지고 유지보수가 힘들어짐Global Exception Handler를 쓰면, 모든 예외를 한 곳에서 모아서 처리 가능 → 일관성 있는 에러 응답 제공2. 구현 방법(1) @RestControllerAdvice + @ExceptionHandler 사용 @RestControllerAdvicepublic class GlobalExceptionHandler { // 사용자 정의 예외 처리 @ExceptionHandler(CustomException.class) public ResponseEntity handleCustomException(CustomExcepti..
Master/Slave → Primary/Replica ✅ 최신 용어 변화Master → Primary (또는 Leader)Slave → Replica (또는 Follower)👉 의미는 동일하지만, 좀 더 중립적이고 협업 친화적인 용어로 바뀐 것👉 특히 MySQL 8.0, PostgreSQL, MongoDB 공식 문서도 Replica Set 또는 Primary/Replica 용어를 사용
Master/Slave DB 분리 : 장점과 한계 ✅ 장점1. 성능 최적화 (읽기/쓰기 분리)Master → INSERT, UPDATE, DELETE (쓰기 전담)Slave → SELECT (읽기 전담)👉 읽기 트래픽이 많은 서비스에서 부하 분산 효과가 큼👉 응답 속도가 빨라지고, 단일 DB 병목을 줄일 수 있음2. 안정성 & 가용성Master 장애 발생 시 Slave를 승격(Promotion) 해서 서비스 연속성 확보 가능데이터 복제 덕분에 백업, 통계 작업, 운영 배치를 Slave에서 실행 가능 → Master 안정성 유지3. 확장성 (Scalability)Slave DB는 수평 확장(Scale-out) 가능 → 읽기 요청이 늘어날수록 Slave를 추가글로벌 서비스라면 지역별 Slave 배치로 네트워크 레이턴시 최소화⚠️ 한계 및 고려사항1. 데..
Master/Slave DB 분리하는 이유 1. 성능 향상 (읽기/쓰기 분리)Master DB: INSERT, UPDATE, DELETE 같은 쓰기 연산 전담Slave DB SELECT 같은 읽기 연산 전담👉 읽기 요청이 훨씬 많은 서비스(예: 쇼핑몰, 예약 시스템)에서 트래픽 분산 효과가 큼👉 단일 DB 부하를 줄이고 응답 속도 개선2. 안정성 & 가용성Master에 장애가 발생해도, Slave를 승격(Promotion)시켜 서비스 연속성 확보 가능데이터가 여러 DB에 복제되어 있으므로 백업/복구 전략 수립에도 유리Slave를 활용하면 Master DB에서 운영 배치, 통계 쿼리를 분리할 수 있어 안정성 ↑3. 확장성 (Scalability)트래픽 증가 시 Slave 서버만 수평 확장(Scale-out) 가능읽기 요청은 Slave 풀(Poo..
MyBatis → JPA 전환 이유 1. 생산성 향상MyBatis SQL을 직접 작성해야 해서 세밀한 제어는 가능하지만, CRUD 코드도 전부 만들어야 함 → 반복되는 코드가 많음JPA save(), findById() 같은 기본 CRUD를 제공 → 개발자는 비즈니스 로직에 집중 가능2. 유지보수성 & 가독성MyBatis는 SQL과 매핑 XML 관리가 필수 → 규모가 커지면 XML 관리가 복잡JPA는 객체 중심 접근 → 도메인 모델이 코드로 명확하게 표현되므로, 엔티티 관계 파악이 쉬움도메인 변경 시 XML 수정보다는 엔티티 필드 변경으로 대응 가능3. 표준 기술 & 호환성JPA는 자바 표준 (JSR 338) 이라서 Spring Data JPA, Hibernate 등 다양한 구현체와 호환벤더 종속성을 줄이고, 추후 기술 교체/확장 용이다른..
API 개념 이해하기 오늘은 API에 대해 정리를 해보려고 한다. API란? application programming interface의 약자로, 굳이 풀이한다면 애플리케이션 프로그래밍 인터페이스, 응용 프로그램 프로그래밍 인터페이스라고 풀면 되겠다. 다른 블로그를 찾아보니 자판기에 비유해서 표현하니 이해가 쉬웠다.우리가 자판기를 사용할때 어떤 원리로 작동하는지는 모르지만 사용하기 편하게 직관적일수록 사용하기 더 좋은 기계라고 볼 수 있는것처럼 인터페이스를 통해 쉽고 편하게 만들어진 규격이라고 생각하면 된다. API의 종류?지금 내가 사용하는 API는 가장 대표적인 두가지 방식인 SOAP와 REST인데, 찾아보니 두 방식은 비슷하지만 본질적으로 다른 기술이라고 한다. 그래서 비교를 해보려고 한다. 차이SOAPREST유형Pr..
JWT vs OAuth JWT이란 무엇인가? Json Web Token의 약자로, 모바일이나 웹의 사용자 인증을 위해 사용하는 암호화된 토큰을 의미한다. 즉 Token의 종류이다. OAuth란 무엇인가? Token을 발급하고 인증하는 오픈 스탠다드 프로토콜이다. HTTP 서비스에 대한 제한된 액세스를 얻기 위한 애플리케이션 승인 상호 작용을 조정하여 리소스 소유자를 대신하여 리소스 소유자와 HTTP 서비스 간에 또는 타사 응용 프로그램이 자체적으로 액세스 권한을 얻을 수 있다. 즉, 고객이 자신의 네이버 아이디/비밀번호를 알려주지 않아도, 네이버에 있는 고객정보를 우리 서비스에서 안전하게 사용하기 위한 방법이다. 이때 Token이 JWT 유형의 Token이 될 수도 있다고 한다. JWT vs OAuth OAuth Token 명..
[SPRING]스프링 입문을 위한 자바 객체 지향의 원리와 이해(1) 책을 시작하자마자 작가가 의문을 던진다. 스프링을 이해하려면 이전의 어떤 기술을 이해하고 있어야 하는가? 나는 당연하게 OOP라고 생각했다. 하지만 작가는 다양한 답변을 내놓았고 그중 물론 OOP라는 답변이 있었다. 작가가 원했던 답변은 아래와 같다. SOA CBE OOP 절차적/구조적 프로그래밍 기계어/어셈블리어 5 로 갈수록 작가의 만점과 가까워지는 것 같은데 나는 아쉽게도 OOP만 생각해냈다. 그다음 장으로 넘어가서 작가는 T 메모리 구조를 보여주면서 static, stack, heap 영역들의 역할과 구조 등을 알려 주었는데 정리를 하자면 아래와 같다. 스태틱 영역 스택 영역(메서드들의 놀이터) 힙 영역 스레드 스레트 스태틱 = 클래스의 놀이터 스택 = 메스드의 놀이터 힙 = 객체의 놀이터 위의 ..