[비동기 이벤트 처리] Inotify + RabbitMQ를 활용한 실시간 파일 감지 및 비동기 처리 파이프라인 구축
·
dev/backend
1. 서론회사에서 폐쇄망 운영 환경의 SI 사업에 투입됐다. 본 사업의 목표는 일 평균 10만건 데이터를 송수신 하는 인터페이스를 구축 및 고도화 하는 것이다. 보안상 상세하게 기재하진 못하지만 간단하게 운영환경을 기술하자면, 총 3대의 서버 (Rocky Linux 9.5) 가 구동된다. 물리적인 서버 3대가 있는 이유는 서버 이중화 와 예비 서버 용도이다. 이 3대 중 한 1대만 Active 상태를 유지하고 해당 서버를 통해 항공 데이터(.txt) 가 송수신된다. 데이터 양은 하루 평균 10만건이다. 또한, 데이터 종류가 8가지이고 데이터 종류별로 타깃 단위 시스템에 매핑해서 송수신 해야 하는데 이 단위 시스템 수만 118개이다.... ㄷㄷ 처음엔 막막했지만 다행히 이 중 15개 시스템에만 연계가 되..
[Python] KoNLPy 자연어 형태소 분석
·
dev/backend
* Python: v3.13 * 개발 환경 OS: Windows 11 Pro* 운영 환경 OS: CentOS 7 1. 서론회사 백오피스 서비스 개발에서 뉴스기사 크롤링 모듈 개발을 담당 하였다. 이와 연관지어 대시보드 페이지에 수집한 기사들의 키워드를 워드클라우드로 표출해야 하는 요구사항이 있다. 요구사항을 충족하기 위해선 뉴스 기사의 단어 빈도수를 분석하고 빈도수 기준 워드클라우드를 표출해야 한다. 자연어 문장에서 단어를 추출하는 로직을 직접 구현하는 것은 생각보다 복잡한 일이다. 한국어의 모든 조사, 부사 등을 갖고 있어야 하고 문장의 모든 배치 케이스를 적용해야 한다. 하지만 Python 에는 이를 직접 구현하지 않고 단어만 이쁘게 추출해주는 패키지 KoNLPy 가 존재한다. 이에 대해 기술한 내용..
[Python] SQLalchemy ORM
·
dev/backend
1. 서론회사 백오피스 서비스 개발에서 뉴스기사 크롤링 모듈 개발을 담당 하였다.크롤링 테스트 코드를 작성하고 비즈니스 로직을 작성하려고 하니, 막상 'DB 에 어떻게 쌓아야 하지?' 라는 생각이 들었다. 주력 프레임워크인 Springboot 에선 JPA + QueryDSL 을 사용하였는데, Flask 프레임워크 기반인 Python 프로젝트에는 없을까?이러한 이유로 SQLalchemy 라는 패키지를 알게되었고, 이에 대해 기술한 내용이다. 버전* Python: v3.13 * SQLAlchemy: v1.3* PostgreSQL: v17 2. 본론SQLAlchemy 는 SQL의 모든 기능과 유연성을 제공하는 Python 기반 SQL 툴킷이자 객체 관계형 매퍼이다.장점은 여타 ORM 과 마찬가지로 sql 쿼리..
[Python] BeautifulSoup 크롤링
·
dev/backend
1. 개요회사 백오피스 서비스 개발에서 뉴스기사 크롤링 모듈 개발을 담당 하였다. 해당 요구사항이 있어 이를 충족하기 위해 Python 에 크롤링 패키지를 찾아보았다.대표적으로 Beautiful Soup 과 Selenium 이 있었다. 둘다 써보고 보다 적합한 패키지를 결정하고자 하였고 이에 대해 기술한 내용이다. 2. 본론2.1. Selenium vs Beautiful Soup (+ requests)Selenium 과 Beutiful Soup 은 웹 데이터를 수집하는데에 특화된 패키지이지만, 작동 방식에서 큰 차이가 있어 목적에 따라 선택할 수 있다. 2.1.1. SeleniumSelenium 은 기본적으로 크롬이나 파이어폭스 같은 실제 브라우저 창을 띄운다.Selenium 은 단순히 코드가 브라우저..
[Python] pip 패키지 목록 자동생성
·
dev/backend
1. 서론회사 백오피스 서비스의 파이썬 모듈을 혼자 개발하던 중, 팀원 중 담당 기능 개발을 Java -> Python 으로 구현하는게 더 편할 것 같다고 해셔서 프로젝트를 공유하기 시작했다. 5인 협업 프로젝트였으나, 모듈이 다양했고 특히 내 Python 쪽은 나 혼자 개발했기에 패키지 버전 충돌이 일어나지 않았다.협업을 하게 되니 파이썬의 경우 패키지 버전 관리가 매우 중요하다는걸 몸으로 느끼고 해결방안을 쉽게 찾을 수 있었다. 2. 본론Python 환경에서는 한 패키지에 의존 패키지가 여러개 물려있어 버전관리가 특히 중요하다.그래서 보통 requirements.txt 를 활용한다. requirements.txt 파일에 {패키지 명 == version} 을 기입하면 다음과 같은 명령어 호출시 기술된 ..
[Python] windows .venv 세팅
·
dev/backend
1. 서론회사 백오피스 프로젝트에서 Python 기반 크롤링 모듈, 항공 전문 해석 모듈 개발을 담당하게 되었다.주전공 덕분에 Python 을 안써본건 아니지만, 데이터 분석 외 개발을 위한 Python 프로젝트는 처음이라 개발에 앞서 가상환경 세팅에 관한 내용을 기술한 내용이다. 2. 본론Python 을 포함한 어떠한 환경이든 패키지 or 라이브러리를 설치하였을 때 '가상화' 기술을 사용하지 않으면 지금 당장은 괜찮을지도 모르지만, 나중에 피를 볼 수 있다. 패키지 or 라이브러리에는 '버전' 이 존재하고, 해당 라이브러리를 사용하기 위해선 의존 라이브러리를 설치해야 하는 경우가 대부분이고, 이 의존 라이브러리들의 버전이 해당 라이브러리에서 요구하는 스펙이 아니면 사용할 수 없다. 그렇기 때문에 Pyt..
[Spring] Spring MVC
·
dev/backend
1. 서론매 프로젝트 때마다 Spring MVC 기반으로 개발을 했는데 정작 이걸 왜 쓰는지는 왜 좋은건지는 모르고 썼던 것 같다.더 깊이 있는 공부를 위해 이게 무엇인지 보다 왜 편한지에 중점을 둬서 찾아봤고 이를 기반으로 정리했다. 2. 본론2.1. MVC 패턴? MVC 는 Model, View, Controller 로 구분하여 서비스를 개발하는 디자인 패턴이다.View: 화면Model : DB 와 통신하며 비즈니스 로직 수행 View, Controller Class 의존 하면 XController : 클라이언트 요청을 직접 받는 EndpointModel 에겐 Model 에서 정의한 비즈니스 로직에 Dto (Data Transport Object) 송/수신해당 View 에게 Data 송신 2.2. 왜..
[SpringBoot] SpringBoot3 QueryDSL 정리
·
dev/backend
1. 서론보통 스프링으로 API 를 개발하게 되면 JPA 를 사용하게 된다. Repository 상속과 인터페이스 선언 만으로 커스텀 쿼리를 생성할 수 있다는 강력한 장점이 있으나 복잡한 쿼리를 생성하는 경우에서는 한계(여러 필터를 적용한 조회.. 등)가 있다.그래서 JPA 만 쓰기보단 QueryDSL 을 접목하여 많이들 사용한다. 이렇게 되면 좀 더 간결한 코드로 복잡한 쿼리를 호출 할 수 있다는 장점이 생긴다. 이와 관련하여 Springboot 3.x.x 버전의 QueryDSL 선언과 사용 방법을 정리하고자 한다. 2. 본론💻 개발환경Springboot V 3.2.1Java 17 DependencySpringboot 3.x.x 버전부터 classifier로 jakarta'를 추가하여 Querydsl..
[SpringBoot] 3.x.x maven 빌더 Lombok cannot find symbol
·
dev/backend
1. 서론QueryDSL 문법도 정리하고 여러가지 지저분한 코딩 스타일을 바꾸는 것을 연습하고자 오랜만에 새로운 프로젝트를 생성했는데 진짜 엉뚱하게 @Getter 어노테이션을 선언했는데 get Method 를 cannot find symbol 이라는 에러와 함께 컴파일이 안된다. 이에 대해 해결 한 내용을 정리했다. 2. 본론혹시나 해서 기존에 개발한 프로젝트들도 안되나 확인해봤는데, 다행히 정상적으로 컴파일 되는 것을 확인했다. 아마 새롭게 만든 프로젝트들에 한해서 이런 문제가 발생하는 것 같다.해당 문제에 대해 찾아보니 다 gradle 빌더를 사용하는 프로젝트에 관한 해결 방안이였다. Maven 으로 공부를 시작한 사람으로써 Maven 의 시대가 가는 게 느껴진다..그래도 꾸역꾸역 stackoverf..