본문 바로가기

개발

[ELK] 시작한 김에 ELK(2) 오늘은 logstash dummy 파일을 만들고 elasticsearch로 보낸 후 kibana에서 조회해보고자 한다. 지난번처럼 역시나 (https://xodns.tistory.com/115) 블로그의 내용을 참고했다. Elastic 진영에서는 Beats 라는 Agent를 도입하여 사용을 권장하고 있는듯 하나, 일단은 임시로 생성한 파일을 통해 logstash로 읽고 elasticsearch로 보내는 과정을 진행해보고자 한다. "DOCKER-ELK" 프로젝트에서 logstash 부분의 설정파일들을 수정해준다. 일단 더미 파일을 하나 만들자. 나는 파일명을 logstash.log 로 했다. hello world chicken pizza burger logstash 경로에 test 디렉토리를 하나 만든 후.. 더보기
[ELK] 시작한 김에 ELK(1) Elasticsearch를 적용해보면서, 단순히 ES만 사용할것이 아니라, 일반적으로 하나의 Stack으로 보는 Logstash 와 Kibana도 설치해보기로 했다. 기존에 single node 로 구성한 es는 삭제하고, docker-compose 환경으로 새롭게 구성하겠다. 각 모듈을 개별적으로 설치 후 구성할수도 있겠지만.. 여기서는 현대 문명의 혜택을 누리고자 한다. 아래의 github으로 가면 Docker 환경에서의 ELK 구축을 위한 구성을 이미 해 두었고, 손쉽게 구축이 가능하다. https://github.com/deviantony/docker-elk GitHub - deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and .. 더보기
[Spring] Elasticsearch를 Spring에 적용해보자(2) 이전 글에서 야심차게 Elasticsearch 환경을 구축하고 테스트까지 하였지만, 라이선스 관련 문제로 Opensearch로 변경하게 되었다. spring-data-elasticsearch를 사용하기 애매해졌지만, 이미 진행한 부분까지는 작성해보고자 한다. 이후에는 Opensearch 전환 및 적용기를 작성하겠다. Elasticsearch 연동을 위한 SpringBoot 프로젝트를 하나 생성(과정 생략)하고, application.yml에 의존성을 추가한다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' } 이후 연결을 위한 Configuration 클래스를 생성한다. @Conf.. 더보기
[Spring] Kotlin + Spring 프로젝트 만들고 테스트 해보기 요즘 백엔드 공고를 보면 Spring 개발자를 뽑는 공고에 유독 Kotlin 가능자를 우대하는 경우가 많다. 작년에만 해도 가능은 하지만 Kotlin은 Android 개발에만 주로 사용된다 정도로 알고 있었는데.. 어느덧 점점 주류가 되고 있는 개발언어인 것 같다. 작년에 AOS 쪽 직무를 잠깐 진행하면서 Kotlin을 공부하기는 하였지만, 겉햝기 수준이었고, 그 이후로는 따로 시간내서 공부하지 않았다. 그러다 개인적으로 프로젝트를 한번 진행해보고 싶었는데, 지금까지는 사용하지 않았던 것들만 주로 사용해서 느리더라도 한번 진행해보고 싶어졌다. 최종적으로 Spring + Kotlin + MongoDB 로 진행해보려고 한다.(FE : Vue.js 예정) 기획부터 있어야겠지만, 그 전에 내가 소위 말하는 "야.. 더보기
[Java] 예외의 종류(Checked, UnChecked, Error) 현업에서 시간에 쫓기다보면, 가장 기본적인것부터 놓치기 쉬운것 같다. 기존 기능을 개선하는 과정에서, 단순 Read 로직이었던 부분에 Write, Delete 로직이 추가되었고, 그 당시에는 해당 부분을 모두 검증하였는데, 추후에 트랜잭션이 추가되면서, 직접 구현한 CustomException을 발생시키면서 모든 로직이 rollback 되었다. 실제 운영서버 중단 패치중에 일어난 일이었고, 명백히 검증을 소홀히 한 실수였기에 평소에 가장 기본적이었던 것들을 놓치고 있었던 기본들에 대해 다시금 생각해보게 되었다. 서론이 길었지만 결론적으로는 예외의 종류에 따른 처리 문제였다. Java에서 예외는 크게는 Error와 Exception으로 나누어지고, Exception은 또다시 Checked Exception.. 더보기
[Spring] @RequestParam / @ModelAttribute / @RequestBody / @Requestpart 스프링에서 HTTP 요청으로 넘어오는 데이터를 어떻게 받아야 하는지에 대해 명확한 개념정의 없이 사용하다보니, 때때로 문제를 일으키기도 한다. 물론 제대로 적용하고 있을 때조차, 왜 이 어노테이션을 사용해야 하는지 모르고 사용하는 경우도 많다. 회사에서는 Binary 데이터가 포함되는 파일 전송의 경우에는 모두 @ModelAttribute 로 처리하고 있었는데, API는 Frontend와 통신함에 있어 모두 Json 형식으로 통신하고 있기 때문에, 굳이 Model 객체를 반환하지 않음에도 불구하고, ModelAttribute를 쓰는것이 맞는가에 대한 의문이 들었다. 물론 ModelAttribute가 단순히 Model 객체를 사용하는 목적이 아니기도 한 것 같아, 이 기회에 더 자세히 알아보고자 한다. @.. 더보기
[Spring] @Configuration, @Bean 으로 의존성 주입(DI) 하기 기존에 순수 Java 코드를 사용하여 DIP와 OCP를 준수하여 의존성을 주입하는 코드를 알아보았다. 스프링 컨테이너를 사용하면 이러한 부분들을 훨씬 간편하게 사용할 수 있다. ( 2022.03.06 - [개발/Java] - [Java]순수 자바 코드로 DIP와 OCP를 준수하는 방법 ) 먼저 간단한 설정 사례를 보자 @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemberRepository(); .. 더보기
[Java] Enum 에 대해 실무를 진행하다보면 요구사항에 따라 수많은 분기처리가 되는 경우가 있다. 가장 심플하게 해결하자면 if 문으로 도배하면 되는데 (나야 나) 현실적으로 그렇게 처리하면, 구현하면서도 스스로 헷갈리고, 코드를 보는 사람의 입장에서도 굉장히 고달픈 일이 된다. 물론 적절한 분기처리를 수행하지 못해 예상과는 다른 결과가 도출되는 것은 덤. 실무에서는 이렇게 분기처리가 많을 경우 Enum을 사용하면 깔끔하게 정리하고 가독성도 높일 수 있다. 최근에도 사용하게 된 케이스가 있었는데 사실 사용하면서도, 실제로 Enum이 얼마나 더 많은 활용도를 가지고 있는지는 깊게 고민해보지 못했다. 실제 다른 기술 블로그들을 참고해보면 Enum의 기능에 대해 이야기하고 있는데, 살펴보자면 1. 데이터들 간의 연관관계를 표현해준다... 더보기