전체 글 70

[DB] Sharding

대용량 트래픽을 처리하는 개발자라면 고려해 볼 DB Sharding 에 대해 정리하고자 한다. 1. 개념- 데이터를 논리적으로 나누는 작업으로, 각 분할된 데이터는 독립적으로 관리됨 2. 장점- 성능 향상  > 읽기 및 쓰기 작업이 여러 샤드로 분산되어 병렬 처리 가능- 확장성  > 필요에 따라 샤드와 서버를 추가하여 수평적 확장 가능- 고가용성  > 특정 샤드에 장애가 발생해도 나머지 샤드가 동작 유지 가능 3. 단점- 운영 복잡성- 쿼리 복잡성  > 분산된 샤드에 걸친 데이터를 조회하기 위해 추가 로직(ex. 애플리케이션에서 집계 쿼리) 필요- 데이터 재분배 비용  > 샤드 키가 잘못 설계되었거나 데이터 불균형 시 샤드 간 데이터 재분배가 필요한데 이는 많은 자원과 시간 소모 4. 기타- 적절한 키 ..

IT/DB 2025.01.15

[Spring] AOP

Spring 이 제공하는 중요한 기능 중 하나인 AOP(Aspect-Oriented Programming) 에 대해 정리하고자 한다.AOP 는 애플리케이션의 핵심 비즈니스 로직과 이를 둘러싼 공통 기능(로깅, 보안, 트랜잭션 관리 등)을 분리하여 모듈화하는데 집중한다. AOP 관련 핵심 개념에는 다음과 같은 항목들이 있다.1. Aspect (관점)- 공통 기능(횡단 관심사)을 모듈화한 것2. Join Point (결합 지점)- Aspect 를 적용할 수 있는 지점  > Spring AOP 에서는 메서드 실행 지점만 Join Point 로 지원3. Advice (조언)- Join Point 에서 수행할 구체적인 작업 정의4. Pointcut (포인트컷)- Advice 가 적용될 Join Point 를 필터..

IT/Spring 2025.01.06

[Spring] JDK Proxy vs. CGLIB

Spring AOP 에서는 프록시 기술로 JDK Proxy 와 CGLIB 를 제공하고 있는데,  이 둘에 대한 비교 글을 작성하고자 한다. 1. JDK Proxy - 인터페이스 기반  > 프록시를 생성하려면 반드시 대상 객체가 구현한 인터페이스가 있어야 함- InvocationHandler.invoke() 메서드를 통해 인터페이스의 메서드 호출을 처리 2. CGLIB- 클래스 기반  > 대상 클래스의 상속을 통해 프록시를 생성하고, 메서드를 오버라이딩하여 동작 추가  > 인터페이스를 구현하지 않은 클래스도 프록시로 사용할 수 있음- 내부적으로 MethodInterceptor 를 구현하여 메서드 호출을 가로채고 처리- 대상 클래스나 메서드가 final 이면 프록시 생성 불가 3. 기타- JDK Proxy ..

IT/Spring 2025.01.05

[Java] StringBuffer vs. StringBuilder

Java 가 문자열을 처리할 때, String 외에도 StringBuffer 와 StringBuilder 클래스를 사용하는데 이들에 대해 정리하고자 한다. 1. 공통점- String 이 불변 클래스인 것에 반해, StringBuffer 와 StringBuilder 는 가변 클래스여서 한 번 생성된 객체의 내용을 변경할 수 있다. 2. 차이점- StringBuffer 는 동기화된 메서드를 제공하여 멀티 스레드 환경에서 안전하지만, 단일 스레드 환경에서는 느리다.- StringBuilder 는 동기화되지 않아 단일 스레드 환경에서 더 빠르다. 따라서, 경우에 맞춰 최적의 성능을 위한 클래스 선택이 달라진다.

IT/Java 2025.01.05

[Spring] Reflection

Reflection 개념에 대해 얕게 알고 자동으로 사용해 왔음을 알고 이참에 정리하고자 한다. 1. 정의- Java 에서 런타임 시 클래스, 메서드, 필드 등의 정보를 동적으로 탐색하고 조작할 수 있는 메커니즘 2. 사용 예시- 의존성 주입  > @Autowired 어노테이션이 붙은 필드가 메서드에 Reflection 을 사용해 적절한 빈을 주입- AOP (Aspect-Oriented Programming)  > Reflection 을 사용해 메서드 실행 전후에 추가 로직을 삽입하거나 메서드 호출을 가로챔- 커스텀 애너테이션 처리 3. 특징- 유연성 (런타임에 동적으로 객체를 다룰 수 있어 확장성 제공)- 코드 간소화- 성능 저하- 복잡성 증가 (코드가 동적으로 처리되기 때문) 4. 최적화- Proxy..

IT/Spring 2025.01.03

[Spring] Spring Batch 도입기

회사에서 주소 데이터를 카카오 API 를 호출하여 획득한 정보로 대용량 업데이트 해야 할 일이 생겼다.스케줄러를 활용해 주기적으로 업데이트를 하는데, 이 때 Spring Batch 개념을 활용하기로 결정하였다.그래서 이를 도입할 때의 내용을 정리하고자 한다. 1. 도입 배경- 대용량 데이터 일괄 처리에 필요한 시간이 커서 단순 API 호출로는 해결할 수 없어 대체 방안 필요  2. 환경 설정- build.gradle 에 의존성(dependency) 추가implementation 'org.springframework.boot:spring-boot-starter-batch' 3. Configuration 파일 추가 및 설정 3.1. BatchConfig.java  - ItemReader, ItemProces..

IT/Spring 2025.01.02

[대만] 가오슝 3박 4일 여행기

작년 가을에 대만 가오슝에 친구들과 다녀왔는데 뒤늦게 포스팅을 하려고 한다.가오슝이라는 이름을 처음 들어봤지만 대만을 가보고 싶었고, 같이 가는 친구들 중에 타이베이는 다녀온 친구들이 많아 가오슝으로 여행지를 정하게 되었다.대만은 전체적으로 중국과 일본이 섞인 느낌을 받았다.대만 여행이 처음이고 잘 몰라서 가오슝에 도착한 첫 날 "딘타이펑" 에 가자고 했다가 한 소리 들었다. 한국에도 있는 곳을 왜 가냐고 ㅋㅋㅋ 하지만 고집쟁이라 밀어 붙여서 결국 갔다왔다. 샤오롱바오는 존맛이었고 의외로 오이무침? 이랄까 그런 음식이 진짜 맛있었다. 맛있는 저녁을 먹고 와서 숙소에 와서 짐을 풀고 바로 야시장으로 직행했다. 대만에 온 이유 중 가장 큰 하나가 바로 야시장을 경험하고 싶었기 때문이다. 그리고 입구부터 그 ..

Travel 2024.12.28

[CS] CRDT

CRDT(Conflict-free Replicated Data Type) 는 분산 시스템에서 데이터 복제를 처리하기 위한 구조다. 1. 주요 특징- 충돌 없는 병합 > 각 노드에서 독립적으로 데이터를 수정한 후, 병합 시 충돌 없이 자동으로 일관된 상태 보장- 최종 일관성 > 네트워크 분리 또는 지연 상황에서도, 모든 노드는 결국 동일한 상태로 수렴- 병합 및 독립 수정 허용 > 여러 노드에서 병렬로 데이터를 수정할 수 있으며, 수정된 데이터는 병합 시 자동으로 조화 2. 종류 (데이터 병합 방식에 따라 나뉨)- 2.1. State-Based CRDT > 각 노드는 데이터의 전체 상태를 주기적으로 다른 노드와 동기화 > 병합 연산자는 결합 연산자를 사용하며, 연산의 순서와 상관없이 동일한 결과 ..

IT/CS 2024.12.11

[CS] .so 파일과 .a 파일 비교

.so 파일과 .a 파일에 대한 비교 글을 작성하고자 한다.결론적으로 .so 파일과 .a 파일은 모두 컴파일된 코드를 담고 있는 라이브러리 파일이지만, 사용하는 방식과 목적이 다르다. 1. .so 파일- 1.1. 정의  - 동적(공유) 라이브러리 파일- 1.2. 특징  - 실행 시간에 프로그램이 라이브러리 로딩  - 동일한 라이브러리를 여러 프로그램이 동시에 사용할 수 있어 메모리 사용량 줄임  - 변경된 라이브러리를 다시 컴파일하지 않고도 프로그램이 업데이트된 내용 사용 가능  - 배포 시 실행 환경에서 반드시 .so 파일 필요 2. .a 파일- 2.1. 정의  - 정적 라이브러리 파일- 2.2. 특징  - 프로그램이 빌드될 때 라이브러리의 모든 필요한 코드가 실행 파일에 포함되어 파일 크기 커짐  ..

IT/CS 2024.12.11

[CS] 사용자 패스워드 전송/보관 방법

사용자 패스워드를 전송 및 보관하는 방법에 대해 정리하고자 한다. 1. 패스워드 전송- 사용자 패스워드를 전송할 때는 네트워크에서의 도청과 변조를 방지해야 한다.- 대표적인 방법으로는 TLS(Transport Layer Security), CSRF(Cross-Site Request Forgery) 토큰 사용 등이 있다. 2. 패스워드 저장- 서버에서 사용자 패스워드를 해싱하여 저장한다.- 이때 사용되는 해싱 알고리즘으로는 bcrypt, 솔트(salt) 추가 등이 있다.(여기서 솔트(salt)란, 암호학 및 보안에서 사용되는 무작위로 생성된 고유한 데이터로 패스워드를 해싱하기 전에 추가하는 값을 의미한다. 즉, 패스워드에 솔트를 추가한 후 해싱한다.) 3. 패스워드 검증- 사용자가 로그인할 때 입력한 패..

IT/CS 2024.12.11