본문 바로가기

전체 글

(60)
Spring Batch를 활용해 Elasticsearch에 데이터 적재하기 이번 글에서는 Spring Batch를 활용해 간단한 데이터를 Elasticsearch에 적재하는 예제를 다뤄보겠습니다. 작은 단위의 Tasklet을 사용해서 배치 작업을 수행하고, Elasticsearch Java Client를 이용해 데이터를 인덱싱하는 방식으로 구현합니다. 대량의 데이터를 정기적으로 처리하거나, 시스템 간 데이터를 동기화하는 작업은 많은 백엔드 개발자들이 마주하게 되는 과제입니다. 이때 유용하게 사용할 수 있는 프레임워크가 바로 Spring Batch입니다. Spring Batch는 크게 두 가지 처리 방식인 Tasklet 기반과 Chunk 기반을 지원합니다. 이 글에서는 그중에서도 상대적으로 간단한 Tasklet 기반 구조를 중심으로 설명하겠습니다. Tasklet은 말 그대로 하나..
자바에서 한글(hwpx) 파일 읽기 - hwpxlib hwpxlib로 HWPX 파일 텍스트 추출하기이전 글에서 hwplib을 활용해 .hwp 문서에서 텍스트를 추출하는 방법을 다뤘다.이번 글에서는 그 후속으로, .hwpx 파일을 다룰 수 있는 hwpxlib 사용법에 대해 정리하려고 한다.기본 사용 예제아래 코드는 hwpxlib를 이용해 .hwpx 파일에서 텍스트를 추출하는 가장 기본적인 형태다.public class Hwpxlib { public static void main(String[] args) throws Exception { HWPXFile hwpFile = HWPXReader.fromFilepath("C:/Users/eunji/Downloads/새 한글.hwpx"); TextMarks textMarks = new ..
자바에서 한글(hwp) 파일 읽기 - hwplib 자바에서 한글(HWP) 파일을 읽기 위한 방법을 찾다 보니,hwplib 라는 라이브러리가 있었다.개인적인 취미, 사회 기여 목적으로 라이브러리를 개발하셨다고 하는데 정말 대단하다.  📌 아쉬운 점공식 문서나 기능별 사용법 가이드가 부족해서, 처음 접근할 때 다소 불편함이 있었다.그래서 직접 테스트하면서 기능을 파악해보기로 했다.https://github.com/neolord0/hwplib  GitHub - neolord0/hwplib: hwp library for javahwp library for java. Contribute to neolord0/hwplib development by creating an account on GitHub.github.com 📦 라이브러리로 한글 파일 텍스트 추출하..
한화 Beyond SW 캠프 7기 13주차 회고 배운점전역적 상태 관리 Vuex를 통해서 전역적으로 장바구니의 담겨있는 물건의 개수를 관리할 수 있었다. 예전에 팀프로젝트를 할 때 프론트 친구가 전역 상태 관리로 어려워 하는 것을 본 적이 있는데 왜 힘들어했는지 알겠다.. 프론트에서 한 작업 중 제일 어려웠던 것 같다. 그래도 필수적인 부분인 것 같다고 생각되어 .. 복습을 더 해야겠다알림 기능 Spring의 SSE를 통해 서버가 클라이언트에게 데이터를 전송할 수 있다. 알림 기능을 통해 일반회원이 삼품을 주문했을때 판매자에게 실시간 주문 알림이 가는 기능을 만들었다. sse를 다양하게 사용할 수 있도록 프로젝트에 적용해보고 싶다.잘한 점남아서 프로젝트프로젝트가 코앞이다보니 같은 조원들도 몇몇 남았다. 같이 남은 조원들과 프로젝트를 하니 시간이 금방 ..
한화 Beyond SW 캠프 7기 12주차 회고 배운점이니셜 데이터 로더Spring Boot 애플리케이션이 시작될 때 특정 로직을 실행할 수 있게 해주는 기능이다. 개발을 할 때마다 테스트 데이터 넣는 것 때문에 엄청 귀찮고 힘들었는데 이니셜 데이터 로더라는 것을 알게 되어 정말 기뻤다.. 🤩모르던 기능을 많이 알게되어 기쁜 요즘이다동시성 이슈 해결DB 배울 때부터 나는 언제 동시성 이슈 해결해 보나 했는데 그날이 벌써 왔다 .. 충격 왜냐면 벌써 12주차가 끝났기 때문 ..처음 동시성 이슈를 해결하기 위한 코드를 짜기 위해서 redis를 통한 분산락을 구현했었다.충격적이게도 아무리 테스트 코드를 돌려봐도 테스트 실패의 쓴맛을 보았고 .. 로그를 열심히 찍어본 결과INFO 46378 --- [pool-2-thread-4] c.e.d.r.Reserva..
한화 Beyond SW 캠프 7기 11주차 회고 배운점페이징 처리페이징 처리는 페이지 사이즈만큼만 조회하면서 서버의 부하를 줄이기 위해 사용된다. 직접 만든 프로젝트에서는 전체 데이터를 조회해서 서버의 부하가 많이 갈 정도에 데이터가 있어본적이 없어서 이런 부분에 대해 잘 알지 못했던 것 같다.스케줄러팀프로젝트에 매일 데이터가 업데이트되는 기능을 넣고싶은데 스케줄러라는 것이 있는 줄 몰라서 바보같이 헤맸다.. 이런 기능을 많이 아는 것도 중요하다고 느꼈다. 잘한 점팀프로젝트 커밋팀플 깃을 만든지 2주가 조금 안된 것 같은데 100 커밋을 돌파했다. 매일 조금씩이라도 작업해서 커밋하기로 팀원들과 약속했던 것이 잘 지켜졌다는 의미인 것 같아서 기쁘다 🤩  아쉬운 점복습 부족이번주부터 스프링 심화를 들어가서 페이징 처리, 스케줄러, 배치, AOP, 로그백..
한화 Beyond SW 캠프 7기 10주차 회고 배운점swaggerswagger 툴을 한번도 써본적 없는데 수업을 통해 swagger가 무엇인지 알 수 있었고 사용해볼 수도 있었다.간단하게 테스트를 해볼수있다는 점과 api목록을 쉽게 볼 수 있다는 점에서 장점이 꽤 있는 것 같다.N+1이슈N+1 이슈라는게 있다는 사실을 알고는 있었는데 제대로 배운 것은 처음이었다.조회하는 방식으로 인해 자식 엔티티를 조회하면, 자식 엔티티를 로드하는 1번의 쿼리와 부모엔티티(10개가 있다고 가정) 로드를 위한 10번의 쿼리가 발생하여 총 11번의 쿼리 발생이렇게 불필요한 쿼리로 인해 성능이 저하되지 않도록 신경써야함을 알게되었다.잘한 점organizaton을 만들어 개발시작 ! 순항중 ..이번주부터 개발을 시작하기로 했다. 처음인 팀원들도 있고 나도 수업시간에 나가는..
한화 Beyond SW 캠프 7기 9주차 회고 배운점배포프론트와 백엔드를 간단하게 배포하는 실습을 진행했다. 배포를 간단하게 진행해보면서 항상 어렵다고 생각했던 배포의 개념을 더 잘 이해할 수 있게 되었다.사용자와 데이터를 주고받는 방식에 대한 정리json 주고 받기, 파일 주고받기, form 데이터 주고받기 .. 분명 다 해본건데 머릿속에 정리가 전혀 안되어있었음을 알게됐다. GET방식과 POST방식에 대한 case 별로 배울 수 있어서 좋았다. 잘 정리해두고 프로젝트 코드를 짤 때 참고해야겠다 !!!잘한 점건강 챙기기요즘 운동량도 줄고 수면시간도 줄고 영양제 섭취도 줄고 건강한 음식도 안먹고 했더니 피부가 뒤집어졌다. 항상 건강에 신경을 못쓰면 피부로 올라오는 것 같다. 그래서 피부가 뒤집어지면 부랴부랴 건강을 신경쓰는 편이다. (건강마저 벼락치..