본문 바로가기

실습64

Redis In Java_자료구조 Redis 레디스는 인메모리 기반의 키-값 데이터 저장소이다. 인메모리의 특성상 아주 빠른 속도를 가지고 있고, 이에 따라 자주 사용하는 데이터 정도를 저장하는 간단한 데이터베이스 정도로 생각을 하고 있었다. 하지만 실무에서 본 Redis는 그 쓰임새가 생각보다 많았다. 기본적으로 키-값 데이터 저장소라는 이야기를 듣고 아, 그냥 캐시에다 Map을 저장하는 거구나 라고 생각을 했었다. 그리고 이 Map은 내 기준에서는 키와 값 두 개의 스트링으로 이루어진 데이터일 뿐이었다. 하지만 의외로 Value에는 다양한 자료구조가 탑재될 수 있었다. 물론 여기까지는 어느정도 Map을 생각했을 때 당연하다고 생각되는 부분이었지만, 보다 신기했던 기능은 Redis가 RabbitMQ, Kafka와 같은 메시지 큐로써의 .. 2022. 3. 20.
Spring Cloud Config 타인이 만든 프로그램을 유지보수 및 업그레이드 하면서 궁금한 점이 생겼다. 그것은 바로 Config-Server 라는 이름의 프로그램이었다. 처음에는 이 또한 프로그램의 일부로, 어떤 로직을 수행하는 것인줄 알았다. 하지만 막상 코드를 열어보니 안에는 아무 내용이 없었고, 그저 설정 파일과 디폴트로 만들어지는 메인 클래스만이 존재할 뿐이었다. 그래서 이게 뭘까... 도대체 왜 만든 걸까...? 하고 찾아보다 Spring-Cloud-Config 라는 개념을 처음으로 알았고, 앞으로 유지보수를 위해서도 알아야 할 내용이라는 생각이 들어 공부를 시작했다. Spring Cloud Config 어플리케이션에는 당연히 application.properties, application.yml, bootstrap.pro.. 2022. 3. 13.
Spring Boot 캐시 사용 개발이 완료된 프로그램이 있다. 해당 프로그램은 필요 이상의 인프라 (DB, RabbitMQ 등)를 요구했고, 이 점으로 인해 설치가 어렵고 프로그램의 복잡도가 높았다. 그래서 해당 프로그램의 인프라 의존도를 낮추기 위한 수정 작업을 수행했다. 그 중 하나는 Redis에 저장하는 정보를 캐시에 저장하여 Redis에 대한 의존성을 없애는 작업이었다. 아래는 해당 작업을 위해 공부한 내용이다. Cache 캐시는 데이터의 값을 복사해놓는 임시 저장소이다. 주 메모리에 비해 데이터에 접근하는 시간이 짧기 때문에, 자주 사용하는 정보를 임시로 저장해놓고 사용한다. 스프링에서 Cache는 아래의 어노테이션을 사용하면 쉽게 사용할 수 있다. @Cacheable @CachePut @CacheEvict 데이터 준비 실습.. 2022. 3. 11.
httpd (아파치 웹 서버) 지금까지 테스트용 웹 페이지가 필요하면, 당연히 이클립스로 프로젝트를 만든 후 컨트롤러를 만들어 HTML 페이지를 띄웠다. 그런데 실무 중 테스트용 웹 페이지가 필요한 일이 생겨 부랴부랴 프로젝트를 생성하는데, 옆에서 사수분께서 리눅스에 httpd를 사용해 테스트용 웹 페이지를 띄우는 모습을 보았다. 그래서 오, 이런 게 있었구나 했고 알아두면 두고두고 활용할 일이 많을 수 있을 것 같아 공부를 시작한다. httpd 아파치라고도 불리는 httpd는 아파치의 HTTP 서버 프로그램이다. Cent OS를 기준으로 아래의 명령어로 설치할 수 있다. yum -y install httpd 설정 httpd의 설정 파일은 /etc/httpd/conf/httpd.conf 에 존재한다. *물론 이외에도 여러 설정 파일들.. 2022. 3. 6.
Filter, Interceptor, AOP Dispatcher Servlet 필터, 인터셉터, aop를 알기 전에 먼저 디스패처 서블릿 (Dispatcher Servlet)을 알아야 할 것 같다. 디스패처 서블릿이란 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 수신하여 해당 프로토콜이 호출하는 컨트롤러에 위임해주는 프론트 컨트롤러이다. 즉 사용자가 HTTP 기반 접근을 수행할 경우 가장 먼저 해당 프로토콜을 수신하는 역할인데, 필터와 인터셉터는 해당 디스패처 서블릿의 앞 뒤에서 작동한다. 그리고 AOP는 컨트롤러의 바로 앞단에서 수행된다. 전체적인 구조도는 아래의 링크에서 확인 가능하다. 그림으로 정리를 너무 잘해놓으셨다. https://goddaehee.tistory.com/154 [Spring] Filter, Interceptor, A.. 2022. 2. 1.
ntp를 이용한 타임서버 구축 외부망에 연결된 장비들은 얼마든지 타임서버와의 동기화를 통해 시간을 맞춰줄 수 있다. 하지만 외부망과 연결되지 않은 내부망은 그럴 수가 없고, 자체적으로 시간을 설정할 수 밖에 없는데 이렇게 맞춘 시간은 시간이 지나며 조금씩 틀어지게 된다. 그래서 장비들간 시간을 동기화하기 위하여 자체 타임서버를 구축하는 작업을 연습해볼 생각이다. 일단 사용되는 장비는 총 두 개이고, 모두 CensOS 7.8이다. ntp 타임서버 구축에는 ntp를 사용할 예정이다. 여기서 ntp란 network time protocol, 즉 네트워크 시간 프로토콜의 약자로 네트워크로 연결된 컴퓨터들끼리 클록 시간을 동기화하는 데 사용되는 프로토콜이다. 일단 타임서버가 될 서버와, 해당 서버의 시간을 따를 서버에 모두 ntp를 설치해주자.. 2022. 1. 22.
Scheduler Scheduler 프로그래밍을 하다보면 주기적으로 실행되어야 하는 코드들이 있다. 스케줄러는 이러한 때에 사용되는 코드로, 특정 시간 혹은 특정 간격을 바탕으로 주기적으로 실행되는 코드이다. 스프링 부트에서 Scheduler를 시용하기 위해서는 먼저 SpringBootApplication에 @EnableScheduling 어노테이션을 추가한다. package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableSch.. 2022. 1. 15.
JPA Java Persistence API (JPA) DB의 테이블을 프로그램에서 사용하기 위해 자바에서는 DTO라는 클래스를 DB와 같이 만들어 사용한다. 그렇다면 이 클래스는 DB 테이블과 완전히 같을까? 당연히 그럴 리가 없다. 예를 들어보자. 클래스는 부모 클래스를 상속받아 그 변수와 함수를 물려받을 수 있다. 하지만 테이블은? 당연히 상속이라는 개념이 없다. 또한 테이블에는 다른 테이블을 참조하는 외래키가 존재한다. 하지만 객체는? 당연히 외래키를 직접적으로 사용할 수 없기에 해당 객체를 직접 멤버변수르 가져야 하는 불편함이 생긴다. 이는 객체와 DB가 지향하는 목적이 다르기에 어쩔 수 없이 발생하는 표현 방법의 차이이다. 이러한 불일치를 패러다임 불일치라 부른다. 그리고 이 패러다임 불일치를 해결해.. 2021. 11. 27.
메일 발송 프로그램을 구현하다 보면 때론 특정 상황 발생 시 관리자 혹은 사용자에게 메일을 보내야 하는 요구사항들이 있다. Python은 이러한 기능을 smtplib, email 기능을 통해 제공해주고 있다. 오늘의 실습은 Python을 활용하여 자동으로 메일을 보내는 기능이다. 물론 바로 사용은 안되고, 사전 설정이 필요한데 이번 실습은 구글의 지메일을 사용할 것이기 때문에 지메일 내에서 다음 설정이 필요하다. 또한 원래 사용하던 비밀번호를 통한 접속이 안되기 때문에 Gmail APP 계정 설정을 통해 생성된 비밀번호 입력이 필요하다. 구글 계정 > 보안 > Google에 로그인 > 2단계 인증 설정 > 앱 비밀번호 이제 사전 준비가 끝났으니, 코딩을 시작하자. 가장 먼저 필요한 라이브러리들을 import한다. .. 2021. 11. 18.
Nltk_영어 텍스트 분석 NLTK import nltk NLTK는 자연어 처리 및 문서 분석에 사용되는 파이썬 라이브러리이다. 기본적인 실습에 필요한 자료를 제공하며, 토큰 생성, 형태소 분석, 품사 태깅 등의 작업을 수행해준다. 또한 한글의 경우 불용어로 별도로 가져와 사용해야 했지만, NLTK는 기본적으로 stopwords를 제공한다는 특징이 있다. from nltk.corpus import stopwords 참고로 만약 위의 두 작업 중 다음의 에러가 발생할 수 있다. Resource stopwords not found. Please use the NLTK Downloader to obtain the resource: 이 경우도 위와 마찬가지로 download 함수를 사용하여 별도의 다운로드를 해주면 더 이상 발생하지 않는.. 2021. 11. 18.
Konlpy_한글 텍스트 분석 텍스트 분석 텍스트 분석이란 비정형 데이터인 텍스트에서 의미있는 정보를 추출하는 작업이다. 텍스트 분석의 종류로는 텍스트 분류, 감성 분석, 요약, 군집화와 유사도 측정 등이 있다. 텍스트 분석의 순서는 다음과 같이 이루어진다. 문장 : 최초의 입력값 단어 : 문장을 단어 단위로 자른다. (영어의 경우 띄어쓰기 단위로, 한글은 형태소 단위로 자르곤 한다.) 키워드 : 단어의 배열에서 내장된 사전을 통해 키워드를 추출한다. 필터링 : 추출한 키워드 중 필요없는 단어들을 필터링한다. 집계 : 필터링 결과를 집계한다. 시각화 : 집계 결과를 시각화한다. 위의 과정 중 문장을 단어로 나누는 작업은 영어의 경우라면 띄어쓰기 만으로 충분히 처리할 수 있다. 하지만 한국어의 경우 같은 단어라도 다양한 형태로 나타나기.. 2021. 11. 18.
Bokeh 패키지 Bokeh Bokeh는 Matplotlib, Seaborn과 마찬가지로 파이썬에서 그래프를 작성하는 라이브러리이다. 사실 Matplotlib이나 Seaborn을 사용하면 대부분의 그래프는 출력이 가능하다. 하지만 굳이 Bokeh를 사용하는 이유는 바로 사용자와의 상호작용 때문이다. 기본적으로 위의 두 라이브러리들은 출력 후 사용자는 해당 그래프에 대하여 어떤 상호작용, 즉 이벤트를 부여할 수 없다. 하지만 그에 비해 Bokeh은 출력된 그래프에 대하여 드래그, 확대 등 다양한 상호작용이 가능하고, 이러한 장점을 강점으로 삼는다. 줄여 말하면 Bokeh은 Interactive한 그래프를 그릴 수 있는 패키지이다. 선언은 아래와 같다. from bokeh.plotting import figure from b.. 2021. 11. 17.