| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- kotlin
- 개발
- framework
- database
- ES
- cleancode
- Spring
- 개발자
- Elasticsearch
- 클린코드
- 스프링
- Java
- 백준
- 자바
- 코딩테스트
- 코딩
- 프레임워크
- 데이터베이스
- 알고리즘
- 그리디
- Baekjoon
- 그리디알고리즘
- 엘라스틱서치
- API
- 읽기쉬운코드
- 애자일기법
- JPA
- 코드
- spring boot
- 애자일프로그래밍
- Today
- Total
목록전체 글 (193)
튼튼발자 개발 성장기🏋️
java에서 비교하는 방법은 참조 비교(==)와 값 비교(equals()) 두 가지가 있다.String str1 = "str";String str2 = "str";String str3 = new String("str");/* * 리터럴이 이전에 상수 풀에 저장된 적이 있다면, 새로운 객체를 생성하지 않고 이미 존재하는 객체의 참조를 할당한다. * 따라서 같은 메모리의 주소를 바라보고 있기 때문에 첫 번째 비교문은 참이다. */System.out.println(str1 == str2); // true// str1과 str2는 같은 값인 "str"이 할당되어 있기 때문에 참이다.System.out.println(str1.equals(str2)); // true/* * 리터럴이 상수 풀에 존재하더라도, 힙 메..
java에서 문자열을 생성할 때 보편 적으로 두 가지 방법이 있다. (StringBuilder, StringBuffer 제외)String str1 = "str1";String str2 = new String("str1"); 이 두 방법에는 어떤 차이가 있을까?일단 이를 이해하려면 jvm의 메모리 구조를 알아야 한다.더보기 [그림 1]과 같이 jvm은 크게 다섯 가지의 메모리 구조를 갖는다. 컴파일이 된 class 파일은 Class Loader로부터 method 영역에 로드된다. method 영역: 클래스에 대한 정보가 저장된다. (클래스 이름, 접근 제어자, 필드, 메서드) 또한 static 변수가 저장되는데 힙 영역에 생성된 객체를 참조할 수 있다.Heap 영역: 런타임에 생성되는 모든 객체가 저장된다..
java에서는 "에러"라는 워딩보다 "예외" 혹은 "Exception"이라는 워딩을 사용하고 python에서 "Error" 워딩을 사용했었다. 그런데 java에서도 Error라는 워딩을 사용한다. 에러(Error)와 예외(Exception)는 모두 런타임에 발생할 수 있는 문제를 나타낸다는 공통점이 있다. 하지만 차이점은 분명히 있다. Error에러는 주로 jvm에서 발생하는 심각한 문제로, 프로그램이 정상적으로 실행될 수 없을 때 발생된다. 보통 개발자가 직접 처리하기 어렵거나, 처리하지 않아야하는 경우가 많다고한다. 우리가 흔히 알고있는 Throwable 클래스를 상속받은 Error 클래스는 java.lang 패키지에 있다. 이 Error 클래스를 상속받은 ThreadDeath 클래스라던지, Virt..
1. 프록시엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아닐 것이다. 지금 내가 리딩하고 있는 토이프로젝트만 봐도 유저 엔티티에 피드 엔티티, 댓글 엔티티 등 많은 엔티티와 연관관계를 갖는데 항상 사용되지는 않는다. 유저의 정보를 조회할 때 이 사용되지 않는 엔티티까지 조회하는 것은 굉장한 부담이 되고 비효율적일 것이다.JPA는 이런 문제를 해결하고자 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공하는데 이것을 지연 로딩이라고 한다. 이 지연 로딩을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이 것을 프록시 객체라 부른다.1.1. 프록시 기초 프록시는 JPA가 엔티티의 연관관계를 처리하는 핵심적인 기법 중 하나로, 실제 ..
1. 토픽과 파티션1.1 적정 파티션 개수토픽은 카프카에서 데이터를 관리하는 기본 단위이며, 각 토픽은 여러 개의 파티션으로 구성된다. 파티션은 데이터의 분산을 가능하게 하며, 병렬 처리를 통해 성능을 최적화할 수 있다. 적정 파티션 개수를 결정하는 것은 매우 중요하다. 어떻게 설정하느냐에 따라서 성능을 좌우하기 때문이다. 적절한 파티션 개수는 다음 요소에 따라 결정된다.프로듀서/컨슈머 수: 높은 병렬 처리를 위해 파티션 수를 컨슈머 스레드(혹은 프로세스) 수와 비슷하게 맞추는 것이 이상적이다.데이터 처리량: 파티션 수가 많을수록 병목 현상이 줄어들며, 데이터 처리량이 증가한다.브로커 수: 파티션은 브로커에 분산되므로 브로커의 수에 따라 파티션 수를 조정해야 한다.ISR(In-Sync Replicas)와..
1. 상속 관계 매핑객체 지향 프로그래밍에서 상속은 중요한 개념인 것은 누구나 알고 있는 사실이다. JPA에서는 이러한 상속 관계를 데이터베이스 테이블에 매핑하는 여러 가지 전략을 제공한다.1.1. 조인 전략 (Joined Strategy)조인 전략은 부모 클래스와 자식 클래스 각각에 대한 테이블을 생성하고, 자식 클래스의 테이블은 부모 클래스의 기본 키를 외래 키로 참조하는 방식이다.@Entity@Inheritance(strategy = InheritanceType.JOINED)public abstract class Item { @Id @GeneratedValue private Long id; private String name;}@Entitypublic class Book extend..
단방향 연관관계순수한 객체 연관관계순수한 객체 모델에서는 클래스 간의 연관관계를 필드를 통해 나타낸다. 예를 들어, Member 객체가 Team 객체와 연관관계를 가질 때, Member 클래스는 Team 객체를 참조하는 필드를 가질 수 있다.public class Member { private Long id; private String name; private Team team;}public class Team { private Long id; private String name;}테이블 연관관계관계형 데이터베이스에서는 이러한 연관관계를 외래 키(Foreign Key)를 통해 관리한다. 위의 객체 모델을 데이터베이스에 매핑하면, MEMBER 테이블에는 TEAM_ID라는 외래 키..
Apache Kafka MirrorMaker 2 (MM2)는 클러스터 간 데이터 복제 및 동기화를 위해 사용하는 도구다. 이는 주로 다중 데이터 센터 간의 데이터 복제, 지리적으로 분산된 클러스터 구성 및 고가용성 아키텍처 구현에 사용된다. MirrorMaker 2는 Kafka Connect 프레임워크 위에서 작동하며, 기존 MirrorMaker의 한계를 개선한 버전이다.미러메이커2를 활용한 단방향 토픽 복제단방향 토픽 복제는 데이터가 원본 클러스터에서 복제 클러스터로 한 방향으로만 전송되는 복제 방식이다. 이 방식은 주로 백업, 데이터 이관, 또는 특정 지역의 데이터 처리 요구를 충족시키기 위해 사용된다.구성 방법:원본 Kafka 클러스터와 복제할 Kafka 클러스터를 설정MirrorMaker 2의 s..