전체 글
-
GitHub 브랜치 단위로 PR 하기 - 기초편-Contribution 2021. 11. 14. 01:26
1) 서론 그동안 혼자서 깃허브 저장소를 만들고, 로컬에서 그대로 push 하는 방식을 사용했었습니다. 아마도 함께 공부하고 협업했던 경험이 없었던 것이 이유일 것 같은데요. 하지만 막상 개발자로서 취업 후 하나의 origin(remote) 저장소를 기준으로 fork, branch, PR 등 다양하게 사용하고 있었습니다. 이는 협업을 바탕으로 저장소 관리와 기록을 편리하게 위함인데요. 처음에는 push 잘 못했다가 문제가 생기지 않을까 두려움에 떨기도 했었습니다. 딱히 알려주는 사람도 없었구요. 그래서 다시는 잊지 않으려고, 일련의 흐름을 간단히 기록하려고 합니다. 참고로 이 글에서는 Java 파일을 기준으로 합니다. 하지만 다른 언어 파일 혹은 단순 텍스트 파일도 관계없습니다. HTML 삽입 미리보기할..
-
@Async, 생각보다 까다롭다.Java & Kotlin 2021. 11. 1. 00:53
1) 서론 요즘 @Async를 어느 때보다 많이 사용하고 있습니다. 사실 그동안 간단하게 애노테이션과 thread pool 설정만 하면 된다고 생각했습니다. 하지만 실제로 사용할 때 예상하는 것과 다른 흐름으로 동작하고, 은근히 까다롭다는 것을 느꼈습니다. 제가 사용하며 만난 문제점과 해결 과정을 기록합니다. 2) 문제의 코드 전체적인 콘셉트는 간단합니다. 파싱 해온 데이터를 원하는 방향으로 가공합니다. 이때 이름, 가격을 나눠서 가공하고 비동기 처리합니다. public class MainClas { public void trimAndAddWines(List names, List prices) { log.info("\n === trimAndAddWines() 시작 ==="); // @Async wineN..
-
인터페이스의 default, static 메소드Java & Kotlin 2021. 10. 6. 00:37
1) 서론 창피하지만, 최근 이펙티브 자바를 읽으며 인터페이스에 default, static 메서드가 된다는 것을 알았습니다. JDK 17이 나오는 시점에서 JDK 8 조차 제대로 업데이트되지 않은 채 "그게 돼?" 라는 충격에 빠졌습니다. 그래서 이번 기회에 해당 메서드들이 왜 만들어졌고, 어떻게 사용되는지 공부해봤습니다. 2) default / static 메서드 원래 인터페이스는 추상 메서드만 사용 가능했었습니다. 여기서 추상메서드란 구현부가 없는, 아직 완성되지 않은 메서드인데요. 왜 추상메서드만 허용을 했었는가에 대한 명확한 설명은 없지만, 오라클 공식문서를 참고하면 오라클이 인터페이스를 어떻게 바라보고 있는지 조금은 알 수 있습니다. 오라클 공식문서에서는 인터페이스를 자동차 산업의 표준이 되는..
-
Kafka 클러스터 메세지 발행 및 문제 해결Kafka 2021. 10. 4. 01:46
1) 서론 단순 공부 및 테스트 위해 local 환경에서 broker 4 + zookeeper 3개의 서버를 사용합니다. 깊이 있는 설정은 배제하고, 전체적인 흐름 파악에 집중했습니다. 이 글에서는 카프카 클러스터의 설정 방법은 설명하지 않습니다. 궁금하신 분들은 아래 글을 참고해주세요. Kafka 클러스터 구성 및 장애 해결 Zookeeper 클러스터 및 컨트롤러 선출 전체적인 구조입니다. 꼭 8082 포트가 controller가 되는건 아닙니다. 단순 예시입니다. 2) 설정 최소한의 설정만 합니다. producer / consumer.properties (동일) // 연결할 broker 주소들 bootstrap.servers=localhost:8081,localhost:8082,localhost:80..
-
과거의 나에게...(와인 검색 서비스 회고)Java & Kotlin 2021. 10. 2. 01:39
1) 서론 이 글은 약 1년 전, 학생 때 만든 "와인 검색 서비스"의 회고(변명) 글입니다. 머릿속으로 대략 생각하면서 작성했습니다. 조만간 시간이 나면, 실제로 리팩토링 진행해볼 예정입니다. 저는 이상하게 새로 무언가를 만드는 것보다, 리팩토링을 통해서 더 좋은 코드와 성능 향상에 관심이 많습니다. 당시에 만든 서비스와 글은 아래와 같습니다. https://yeon-kr.tistory.com/131?category=868421 전체적인 내용(변명)은 "그때는 그게 최선이었다. 그것밖에 몰랐다"라고 할 수 있을 듯합니다... 과거의 나야... 제발 무전받아... 그렇게 하는 거 아니야... 2) 와인 검색 서비스... 패기는 좋았다! 사용된 기술 스프링 프레임워크 (boot X) JSP + JavaSc..
-
Zookeeper 클러스터 및 컨트롤러 선출Kafka 2021. 9. 19. 01:47
1) 서론 간단하게 zookeeper 3개의 서버를 실행시켜 클러스터로 만듭니다. 그리고 zookeeper에 등록되는 컨트롤러 브로커의 장애 발생 시 어떻게 되는지 살펴봅니다. +) 공부하는 입장에서 작성하는 "Hello World" 수준의 글입니다. 내용에 잘 못된 점이 있다면, 언제든지 댓글 남겨주세요! 2) Zookeeper zookeeper는 분산 애플리케이션들의 관리를 도와주는 역할을 합니다. 개발자로 하여금 비즈니스 로직에만 집중할 수 있게 하고, 클라이언트(kafka) 관리는 zookeeper가 대신해줍니다. 만약 zookeeper가 관리해주지 않는다면, 거대한 클러스터 애플리케이션의 설정과 동기화 등을 직접 관리해야 할 겁니다. kafka와 연동하여 서비스할 때 아래의 동작을 하게 됩니다...
-
Kafka 클러스터 구성 및 장애 해결Kafka 2021. 9. 12. 20:44
1) 서론 주키퍼(zookeeper) 1개 + 카프카(kafka) 3개 구성의 클러스터를 구성합니다. 학습에 목적을 두고 있기 때문에 최대한 간단한 클러스터를 구성했습니다. 이를 통해 카프카, 주키퍼의 설정 방식을 공부합니다. +) 학습과정의 블로그이므로, 오류는 댓글로 남겨주시면 감사히 수정하겠습니다! 2) Zookeeper 1대의 주키퍼 서버를 사용한다면, 더 설정할 것은 없습니다. 아래의 명령어를 통해 주키퍼를 먼저 실행합니다. $ bin/zookeeper-server-start config/zookeeper.properties or $ brew services start zookeeper 3) Kafka 카프카 브로커의 클러스터를 구성합니다. 우선, config/server.properties를 ..
-
첫 stackoverflow 질문을 남기다.Contribution 2021. 9. 2. 01:02
Kafka 관련하여 2주 정도 고민을 하고, 아무리 검색을 해봐도 답을 찾지 못했습니다. 그래서... 이 참에 처음으로 stackoverflow에 질문을 남겨봤습니다. 그리고 느낀 점을 간략히 기록합니다. 질문글 https://stackoverflow.com/questions/68987866/kafka-consumer-classnotfoundexception 1) 영어 저는 제가 영어를 잘하는 줄 알았습니다(?) 나름 캐나다에서 옷도 열심히 팔아봤고, 친구들도 사귀면서 문제없다고 생각했는데요... 막상 질문을 남기려고 영어를 작성하다 보니 헷갈리는 표현도 많고, 불필요하게 길어지기도 했습니다. 아무래도 축약할 수 있는 표현에 부족하기에 설명을 위한 문장이 길어졌습니다. 특히 말할 때는 문제가 없더라도, ..