본문 바로가기

프로젝트

(77)
자바 버전과 base 선택 기존 프로젝트들은 전부 Java11 & springboot 2.7.x 버전을 사용했었다. 23년까지 11 버전이 LTS를 지원하므로, 새로운 프로젝트는 자바 버전을 올려보고 개발을 할 생각이다. 간단히 찾아본 정보에 따르면, 11버전에서 마이그레이션시 변경사항은 다음과 같다고 한다. Java 11에서 Java 17의 변경 사항 switch 표현식의 표준 포함. Java의 Concurrent Mark Sweep (CMS) 가비지 콜렉터 제거. macOS와 Windows에서 ZGC 가비지 콜렉션 및 메모리 관리 지원. Text Blocks의 두 번째 프리뷰. Foreign-Memory Access API의 인큐베이션. 여러 기능의 추가 및 개선, 예를 들어 Pattern Matching for switch,..
CSRF의 정의와 프로젝트에서의 방어했던 방법 CSRF (Cross-Site Request Forgery) CSRF는 희생자가 이미 인증된 상태에서 공격자가 의도한 행위를 서버에 요청하게 만드는 공격 유형이다. 이 공격은 토큰이나 쿠키를 직접 탈취하는 것이 아니라, 희생자의 브라우저를 이용하여 공격자가 원하는 요청을 서버에 보내게 만드는 방식으로 이루어진다. https://tibetsandfox.tistory.com/11 CSRF(Cross Site Request Forgery)란? CSRF란? CSRF는 Cross Site Request Forgery(사이트 간 요청 위조)의 줄임말로 웹 취약점 중 하나입니다. 공격자가 희생자의 권한을 도용하여 특정 웹 사이트의 기능을 실행하게 할 수 있으며 이는 희생자 tibetsandfox.tistory.com..
[Elasticsearch] 시스템 구조 및 flow 정리 시스템 구조 이번 프로젝트의 구조도를 한눈에 정리하자면 다름과 같다. Main 서버에는 FE 서버와 본체 비즈니스 서버, Elasticsearch와 연동되는 API 서버가 존재하고, 핵심 로직을 담당한다. Sub 서버에는 ELK 및 배치 프로그램, MySQL의 저장소 위주로 구성하였다. 이는 Elasticsearch와 배치 프로그램이 상대적으로 RAM 용량을 많이 차지하기 때문에, 부하를 줄일 목적으로 Sub 서버를 구성하였다. 데이터 아키텍쳐 - 스크래핑 데이터 정제 구조도이다. 우리는 배치 프로그램을 통해 스크래핑이 허가된 사이트에서(robot.txt 및 정책 확인) 부하를 주지 않는 선에서 데이터를 수집하였다. 이 과정에서 수집된 html 데이터는 텍스트화하여 1차적으로 MongoDB 클라우드에 저..
[Elasticsearch] 회고 및 리뷰 성과 Spring 서버 연동 및 API 생성 및 인프라 구축 - spring data elasticsearch와 native search query를 사용한 API 서버 구축. - elasticsearch, kibana, logstash를 사용할 수 있는 서버 환경 구축. ES 버전은 7.11.2를 사용하였다. 유사도 비즈니스 로직 구현 1. 입력 검색어에 대한 오탈자 보정 후 유사 검색 결과 반환 및 비즈니스 로직 제공 API 요청 당시 가장 큰 요구사항은 '오탈자'에 대한 올바른 검색 결과를 제공하는 것이었다. 따라서 숙소, 관광지, 음식점의 데이터셋을 분석기와 커스텀 필터를 통해 인덱스에 저장하였다. 이후 ngram과 fuzzy 방식을 융합하여 사용자의 요청에 따라 가장 유사한 검색 결과를 반환할 ..
[Logstash] 로그스태시로 로그 뽑아서 저장하기 경로 맞추기 내 스프링부트 컨테이너 내부 경로와 외부 마운팅할 파일 경로를 맞춰줘야 한다. sudo docker exec -it elastic-container /bin/bash 를 통해 접속한 결과 이런 식으로 기본 루트 디렉토리가 /app임을 확인할 수 있다. 이는 당연한데, 도커파일이 다음과 같이 정의되었기 때문이다. 따라서 나는 경로를 /app/log/logfiles.log로 저장하고자 한다. # 기본 이미지로 Java 11을 사용합니다.. FROM openjdk:11-jre-slim # 작업 디렉토리를 설정합니다. WORKDIR /app # 이 폴더를 외부 볼륨 마운팅 하는 폴더로 설정합니다. VOLUME ["/app/logs"] # 호스트 머신에서 JAR 파일을 복사합니다. COPY build..
[LogBack]API 요청 로그 수집하기 개요 API 요청에 따라 springboot에서 로그를 수집하고, 발생하는 로그를 ES의 인덱스에 추가하려고 한다. 전체적인 로직은 다음 포스팅들을 참고하였다. https://prohannah.tistory.com/182 Spring Logging (1) : HTTP Request/Response 로그 남기기 서비스를 운영하면서 서버가 받는 HTTP 요청과 서버가 제공하는 응답을 로그로 남긴다면, 추후 무슨 일이 생겼을 때 추적이 용이하다. 이번 포스팅은 Spring Boot을 사용하여 로그 남기기 시리즈 중 prohannah.tistory.com https://devbksheen.tistory.com/entry/ELK-Filebeat%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%..
[Kibana] Kibana 데이터시각화 구현 https://www.elastic.co/guide/en/kibana/7.11/index-patterns.html Create an index pattern | Kibana Guide [7.11] | Elastic If you don’t set a default time field, you will not be able to use global time filters on your dashboards. This is useful if you have multiple time fields and want to create dashboards that combine visualizations based on different timestamps. www.elastic.co 1. 인덱스 패턴 생성 Stack ..
[Elasticsearch] 네트워크 오버헤드 효율 비교 및 개선(쿼리 변경) 개요 기존 프로젝트에서 우리는 오타를 보정하기 위해 검색어와 가장 유사한 검색어들을 차등적으로 리스트의 형태로 제공했다. 이 과정에서 Ngram과 Fuzzy의 분석 결과를 요청하고, 이를 다시 합산하여 가장 스코어가 높은 순서대로 유사하다는 결론을 내렸다. //통합 제목 검색 : 제목 일치 or (Fuzzy + ngram) @GetMapping("/title/aggregate-search") public List searchTitleComprehensive(@RequestParam("title") String title, @RequestParam("maxResults") int maxResults, @RequestParam("fuzziness") int fuzziness, @RequestParam("fu..