profile
백엔드
post-thumbnail

마이크로서비스란 무엇인가?

마이크로서비스는 SOA의 한 유형이고 비즈니스 도메인을 중심으로 모델링된 독립적으로 배포 가능한 서비스다. 기술 관점에서 마이크로서비스는 하나 이상의 네트워크 종단점을 통해 캡슐화되는 비즈니스 기능을 외부에 공개한다. 또한 잘 정의된 인터페이스를 통해, 데이터 저장소와

2일 전
·
0개의 댓글
·
post-thumbnail

로컬에서 카프카와 통신 오류

아파치 카프카 애플리케이션 프로그래밍 with 자바라는 책을 공부하고 실습 중이었다. EC2 서버에 카프카 클러스터를 구성하고 로컬에서 카프카 클라이언트를 구성했다.로컬에서 위의 명령어를 실행하여 원격으로 카프카의 버전과 broker.id, rack 정보, 각종 카프카

3일 전
·
0개의 댓글
·
post-thumbnail

1장. 들어가며

링크드인에서 만들었다. 링크드인은 아래와 같은 문제점을 겪었다.데이터를 생성하는 소스 애플리케이션과 데이터가 최종 적재되는 타킷 애플리케이션이 1:1 단방향 통신으로 연결되어 있었다. 아키텍처가 거대해지면서 소스 애플리케이션과 타킷 애플리케이션의 수가 많아지면서 데이터

4일 전
·
0개의 댓글
·

2장. 카프카 기초

카프카의 송수신 구조와 카프카의 기본 용어를 배운다. 주요 내용은 다음과 같다.메시지 송수신 기본시스템 구성분산 메시징을 위한 구조데이터 견고함을 담보하는 복제의 구조카프카의 주요 구성 요소는 다음 5가지다.브로커 \- 데이터를 수신, 전달하는 서비스메시지 \- 카

4일 전
·
0개의 댓글
·

아이템 28. 배열보다는 리스트를 사용하라

배열과 제너릭 타입에는 중요한 차이 두 가지가 있다.배열은 공변이지만 제너릭 타입은 불공변이다.배열은 실체화되어 런타임에도 자신이 담기로 한 원소의 타입을 인지하고 확인한다. 제너릭은 타입 정보가 런타임에는 소거된다.Sub가 Super의 하위 타입이라면 배열 Sub\[

5일 전
·
0개의 댓글
·

아이템 27. 비검사 경고를 제거하라

제너릭을 사용하기 시작하면 수많은 컴파일러 경고를 보게 될 것이다. 비검사 형변환 경고, 비검사 메서드 호출 경고, 비검사 매개변수화 가변변수 타입 경고, 비검사 변환 경고 등이다.대부분의 비검사 경고는 쉽게 제거할 수 있다. 코드를 다음처럼 잘못 작성했다고 해보자.다

5일 전
·
0개의 댓글
·

아이템 26. 로 타입은 사용하지 말라

클래스와 인터페이스 선언에 타입 매개변수가 쓰이면, 이를 제네릭 클래스 혹은 제네릭 인터페이스라 한다. 예를 들어 List 인터페이스는 원소의 타입을 나타내는 타입 매개변수 E를 받는다. 그래서 이 인터페이스의 완전한 이름은 List<E>이다. 제네릭 클래스와 제

6일 전
·
0개의 댓글
·

아이템 25. 톱레벨 클래스는 한 파일에 하나만 담으라

소스 파일 하나에 톱레벨 클래스를 여러 개 선언하더라도 자바 컴파일러는 잘 작동한다. 하지만 아무런 득이 없을 뿐더러 심각한 위험을 감수해야 하는 행위다. 이렇게 하면 한 클래스를 여러 가지로 정의할 수 있으며, 그 중 어느 것을 사용할지는 어느 소스 파일이 먼저 컴파

6일 전
·
0개의 댓글
·

아이템 24. 멤버 클래스는 되도록 static으로 만들라

중첩 클래스란 다른 클래스 안에 정의된 클래스를 말한다. 중첩 클래스는 자신을 감싼 바깥 클래스에서만 쓰여야 한다.중첩 클래스의 종류정적 멤버 클래스(비정적) 멤버 클래스익명 클래스지역 클래스정적 멤버 클래스를 제외한 나머지는 내부 클래스에 해당한다. 정적 멤버 클래스

6일 전
·
0개의 댓글
·
post-thumbnail

1장. 아파치 카프카 개요

아파치 카프카가 탄생한 배경에 대해서 알아보았다.카프카는 여러 대의 분산 서버에서 대량의 데이터를 처리하는 분산 메시징 시스템이다. 메시지를 받고, 받은 메시지를 다른 시스템이나 장치에 보내기 위해 사용된다.카프카는 대량의 데이터를 높은 처리량과 실시간으로 취급하기 위

2022년 8월 4일
·
0개의 댓글
·
post-thumbnail

도커 볼륨 경로 설정 오류

docker-compose.yml 파일에서 db에 볼륨을 설정할 때 경로를 설정하는 부분에서 아래와 같은 오류가 났다.절대 경로로 설정하라고 하면서 오류가 났는데 나는 절대 경로를 복사 붙여넣기 했기 때문에 왜 오류가 났는지 이해가 되지 않았다. 구글링을 해보니 원인을

2022년 7월 12일
·
0개의 댓글
·

아이템 23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라

태그 달린 클래스란 한 클래스가 두 가지 이상의 의미를 표현하고, 그 중 현재 표현하고 있는 의므를 태그값으로 알려주는 클래스이다.태그 달린 클래스는 클래스 계층구조보다 훨씬 나쁘다. 우선 열거 타입 선언, 태그 필드, switch문 등 쓸데없는 코드가 많다. 여러 구

2022년 5월 31일
·
0개의 댓글
·

아이템 22. 인터페이스는 타입을 정의하는 용도로만 사용하라

인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 즉, 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해주는 것이다. 인터페이스는 오직 이 용도로만 사용해야 한다. 이 지침에 맞지 않

2022년 5월 31일
·
0개의 댓글
·

아이템 21. 인터페이스는 구현하는 쪽을 생각해 설계하라

디폴트 메서드를 선언하면, 그 인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않은 모든 클래스에서 디폴트 구현이 쓰이게 된다. 기존 인터페이스에 메서드를 추가할 수 있게 되었지만 모든 기존 구현체들과 매끄럽게 연동된다는 보장은 없다. 자바 7까지의 세상에서는 모든

2022년 5월 22일
·
0개의 댓글
·

아이템 20. 추상 클래스보다는 인터페이스를 우선하라

자바가 제공하는 다중 구현 메커니즘은 인터페이스와 추상 클래스 두 가지다. 자바 8부터 인터페이스도 디폴트 메서드를 제공할 수 있게 되어 이제는 두 메커니즘 모두 인스턴스 메서드를 구현 형태로 제공할 수 있다. 둘의 가장 큰 차이는 추상 클래스가 정의한 타입을 구현하

2022년 5월 11일
·
0개의 댓글
·

아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라

상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지(자기사용) 문서로 남겨야 한다. 클래스의 API로 공개된 메서드에서 클래스 자신의 또 다른 메서드를 호출할 수도 있다. 그런데 마침 호출되는 메서드가 재정의 가능(public과 proetected

2022년 5월 8일
·
0개의 댓글
·

아이템 18. 상속보다 컴포지션을 사용하라

상속은 코드를 재사용하는 강력한 수단이지만, 항상 최선은 아니다. 잘못 사용하면 오류를 내기 쉽다. 상위 클래스와 하위 클래스가 같은 프로그래머가 통제하는 패키지 안에서라면 상속도 안전한 방법이다. 확장할 목적으로 설계되었고 문서화도 자 된 클래스도 마찬가지로 안전하다

2022년 5월 4일
·
0개의 댓글
·

아이템 17. 변경 가능성을 최소화하라

불변 클래스는 그 인스턴스의 내부 값을 수정할 수 없는 클래스다. 불변 인스턴스에 간직된 정보는 고정되어 객체가 파괴되는 순간까지 절대 달라지지 않는다. 불변 클래스는 가변 클래스보다 설계, 구현, 사용이 쉬우며 오류가 생길 여지도 적고 안전하다. 클래스를 불변으로 만

2022년 4월 3일
·
0개의 댓글
·

아이템 15. 클래스와 멤버의 접근 권한을 최소화하라

잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 오직 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 상관하지 않는다. 정보 은닉 혹은 캡슐화라고 하는 개념이다. 정보 은닉의 장점은 아래와 같다. 시스템 개발

2022년 4월 3일
·
0개의 댓글
·

아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

아래와 같이 인스턴스 필드들을 모아놓은 일 외에는 아무 목적도 없는 클래스를 public으로 작성하면 안 된다.이런 클래스는 데이터 필드에 직접 접근할 수 있으니 캡슐화의 이점을 살리지 못한다. API를 수정하지 않고는 내부 표현을 바꿀 수 없고, 불변식을 보장할 수

2022년 4월 1일
·
0개의 댓글
·