전체 글

일단 맨땅에 헤딩한 뒤에 배우는 타입입니다
프로젝트/레시피토리(Recipetory)

레시피 검색에 Elastic Search를 사용해보자 1 : 메세지 큐 아키텍처

선요약 : 레시피의 태그, 제목, 항목 등의 검색에 JPQL을 사용하다 쿼리 구성이 더 간편하고 검색 속도가 빠른 엘라스틱 서치를 사용했습니다. 인덱싱 작업을 메세지 큐에 넘겨 트랜잭션으로 묶일 필요가 없는 작업들을 메세징 처리했습니다. (하단 서버 구조 참고 - 원래 4번은 worker 모듈을 따뤄 둬야 합니다!) # 상황 : 레시피 검색! Recipetory는 레시피가 존재하는 레시피 공유 사이트이다. 레시피를 업로드하고 조회하는 기능 이외에 메인 기능이라고 한다면 "레시피 검색 기능"이다. 보통 "제목"과 "특정 태그"를 포함하는 컨텐츠에 대한 검색 기능을 제공하는 서비스를 생각해보면, 특정 제목과 항목을 가진 컨텐츠를 검색할 수 있다. 특정 태그(들)를 포함한 컨텐츠를 검색할 수 있다. .. 정도..

프로젝트/레시피토리(Recipetory)

Event Publisher 사용하기 -> Deadlock 이슈?!

부하 테스트 후, 랜덤한 시점에서 post 요청에 완전히 타임아웃이 나는 문제의 원인을 분석하고 나름대로 해결을 시도해본 결과입니다. 선요약 : 특정 이벤트가 발생하면 알림이 발송되는 로직을 ApplicationEventPublisher를 사용해 횡단적으로 구성했습니다. 이벤트 리스너는 새로운 트랜잭션을 여는 옵션이었기 때문에, 하나의 스레드에서 두 개 이상의 DB 커넥션을 요구하면서 커넥션 데드락이 발생했습니다. 두 번째 DB 커넥션이 필요한 로직을 메세지 큐를 이용한 비동기 처리로 넘겨 문제를 해결했습니다. # 원했던 기능 : 글을 작성하면 팔로워에게 알림을 보내자. 유저가 특정 글을 작성한 뒤 post 요청을 보내면 해당 유저를 팔로우하고 있는 유저 전부에게 Notification을 생성하고 싶었다..

프로젝트/레시피토리(Recipetory)

젠킨스(Jenkins) + Docker를 이용한 배포 자동화

- 이 글은 배포 자동화에 대한 자세한 방법보단, 신입 입장에서 각각의 간단한 개념과 필요한 이유를 중점으로 다룹니다. # 통합/배포란 무엇이며, 자동화가 필요한 이유 자바 개발자에 의해 작성된 .java 소스코드는 javac 컴파일러에 의해 .class 확장자를 가진 자바 바이트 코드로 변환된다. 바이트 코드는 하드웨어가 아니라 JVM이 실행할 수 있는 코드인데, JVM은 바이트 코드를 그대로 기계어로 번역하기도 하고, 여러번 실행되는 메소드 단위의 코드를 한번에 기계어로 컴파일하는 JIT 컴파일링 방식을 사용하기도 한다. 이렇게 컴파일된 코드는 java 명령어로 실행할 수 있다. 보통의 어플리케이션 코드는 프레임워크나 라이브러리가 제공하는 의존성 코드들을 어마어마하게 많이 가지고 있는데, 라이브러리를..

프로젝트/레시피토리(Recipetory)

Artillery 부하 테스트 해보기

1. POST 데이터 구하기 (csv) post 테스트를 하기 위해서.. 음식 관련한 정보가 필요했다. 부하 테스트에 사용될 놈들이었다. 공공데이터 포털에 들어가.. 음식 이름이 담긴 csv 파일을 다운받아보았다. 파일 이름을 'food-name-db.csv'로 적당히 바꾸고, UTF-8 인코딩을 적용하여 저장한 뒤 확인해보았다. 으음~ 뭔가 많이 있지만 음식 이름으로 사용할 5번째 column(index기준)만 필요할 것 같다. 해당 column만 뽑아서 새로운 csv 파일을 만들어야겠다. 그러기 위해 python의 csv 모듈을 사용해서 5번째 column들만 뽑아 새로운 csv파일을 작성하는 스크립트를 짰다. import csv content = [] with open('food-name-db.cs..

김부추
두들두들