본문 바로가기

전체 글

(215)
1260 - DFS와 BFS[S2] 문제 https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 입력 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ..
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..
인터셉터와 AOP의 차이, 인터셉터의 추가 개념 개요 이번 프로젝터에서 prehandler를 사용하여 인터셉터 기능을 사용했었고, 로그 수집을 위해 포인트컷을 사용하여 AOP(로그 수집)의 기능도 구현해봤다. 문득 드는 생각이 두 기능이 로직상 유사해 보이는데, 똑같은 거 같은데 굳이 인터셉터를 쓰는 이유가 뭘까? 정확히 말하면 인터셉터의 기능을 AOP가 전부 할 수 있지 않나? 싶어 조사해보았다. 그림으로 보는 도식도 일단 필터는 이전에 학습했던 것처럼, 스프링 영역 밖에서 서블릿의 입출력을 관리한다. Dispatcher Servlet의 호출 이전/이후로 인터셉터는 동작한다.AOP의 경우 애플리케이션 전방에 걸쳐 다양하게 작업을 적용할 수 있는 것을 확인할 수 있다. 인터셉터의 주요 메소드 preHandle: 이 메소드는 컨트롤러(핸들러) 메소드가 ..
[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..
[GIT] 대용량 파일을 점진적으로 받아올 때. (--depth) https://eunjinii.tistory.com/128 RPC failed; curl 18 transfer closed with outstanding read data remaining 문제해결 방법 문제상황 git clone을 받으려고 하는데 "RPC failed; curl 18 transfer closed with outstanding read data remaining" 라는 문구가 뜨면서 클론이 안 되고 있다. 원인 규모가 큰 레포지토리를 클론하려고 하는데 로컬에 eunjinii.tistory.com 해당 블로깅을 참고하였다. 문제 상황 최종 파일을 정리하고, 발표 대본과 데이터를 넣던 도중 팀원이 최종 브랜치에 많은 양의 대용량 데이터를 넣는 일이 있었다. 이 이후 pull이나 파일을 받아오..
AOP의 개념과 적용하기 개요 https://csg1353.tistory.com/90 위의 포스팅처럼 elasticsearch의 logstash 로그를 수집하기 위해 AOP의 개념을 사용해 로그를 수집해보려 한다. 이를 위해서는 먼저 AOP에 대한 개념을 학습해야 할 것이다. AOP란 (Aspect-Oriented Programming) 정의 공통 기능(예: 로깅, 보안)을 핵심 비즈니스 로직에서 분리하고, 이러한 공통 기능을 필요한 위치에 적용 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 한 것. AOP는 기존 OOP의 객체 지향적인 프로그래밍이 아닌, Aspect(관점)을 기준으로 프로그래밍하는 기법이다. 공통 기능의 관심 사항과 핵심 관심 사항 등, 객체지향으로는 분..