IT

    Spark 개발 환경 구축하기 - Scala, IntelliJ, SBT

    Spark 애플리케이션을 개발에는 크게 Scala 또는 Python을 사용할 수 있다. 기존에 자바로 개발을 주로 해왔던 개발자라면 Scala를 선호할텐데 개발 환경 세팅을 할때 참조할만한 자료가 많지 않아 직접 프로젝트 세팅을 하며 정리해봤다. 시작하기에 앞서 세 가지 선결 사항이 있다. Spark 설치, 환경변수 설정 Scala 설치 IntelliJ Scala plugin 설치 설치 방법은 구글에서 쉽게 찾을 수 있다. 본 게시물 최하단에도 참고 링크를 걸어두었다. 1. 프로젝트 생성 이제 Scala, Spark, IntelliJ Scala plugin 설치는 모두 되어있다고 가정하고 IntelliJ 새프로젝트를 생성해보자. build tool을 선택하면 되는데 sbt가 recommended라고 되어..

    Spring Batch - Paging 처리시 주의점

    스프링배치의 ItemReader 중에서는 Paging 처리를 지원하는 것들이 있다. 대표적으로 JdbcPagingItemReader와 최근에 추가된 것으로 보이는 JpaPagingItemReader가 있다. 이외에 Spring Data repository를 사용할 수 있게 해주는 RepositoryItemReader도 Paging처리를 지원한다. 해당 ItemReader들을 활용해 Paging 처리를 할시, 데이터가 Skip현상이 발생할 수 있다. 아래와 같이 유저 상태가 '01'인 데이터들을 읽어들여 '02'로 업데이트 해주는 배치 애플리케이션이 있다고 가정해보자. 실제로는 select 쿼리에 페이징 처리도 들어가게 된다. 이렇게 페이징 처리를 했을때의 문제는 where 절에 조건 컬럼을 업데이트한다는..

    레거시 코드 개선기(feat. 스프링 부트, JPA)

    레거시를 버려야 할 때 오랜 시간 문제없이 돌아가는 레거시 코드는 낡았지만 돈을 벌어다 주는 고마운 존재다. 물론 낡을대로 낡은 레거시 코드는 볼때마다 갈아엎고 싶은 생각이 가득하지만, 잘 돌아가는 코드를 뒤엎기에는 개발자는 할 일이 너무 많다. 하지만 계속 운영되기만 하면 될게 아니라 요구 사항이 계속 추가되거나 수정되어야 하는 경우가 바로 분명한 동기가 생기는 시점이다. 깔끔하고 확장 및 수정이 쉬운, 세련된 코드로 탈바꿈 할 때가 온 것이다. 문제점 파악 개선 대상 서비스는 '오늘의 팁'이라는 판매자용 서비스다. 판매자들이 백오피스에 접속했을때 지난주 유입 고객들이 얼마나 되며, 이번주의 인기 카테고리는 무엇인지 등 판매 활동 개선에 필요한 팁들을 제공한다. 문제는 아직 새로운 팁 종류를 추가하거나..

    목적 조직에서 개발자로 살아남기

    목적 조직에서 2년 간을 일하며 느꼈던 바를 기록하고자 한다. 당연히 목적 조직이냐 기능 조직이냐에 대한 답을 내리는 등의 담론을 다루고자 함은 아니며 목적 조직에 몸담으며 느낀 개발자의 역할에 대해 이야기려고 한다. 또한, 우연히 다른 블로거분이 기획자 관점에서 쓰신 개발팀과 개발팀장이 사라져야 하는 이유라는 글을 보았는데, 몇 가지는 동의하지만 몇 가지는 그렇지 않기에 이 글을 통해 반박해보고 싶다. 비즈니스 vs 시스템 기획자, 데이터분석가, 개발자로 구성되어 있는 조직에서의 2년을 요약해본다면 비즈니스 vs 시스템이라는 두 가지 목표의 충돌이었다. 이게 무슨 해괴한 소린가. 결국 회사 모든 조직의 목표는 돈을 버는 것인데 조직 내부에서 추구하는 바가 다를 수가 있을까? (혹은 달라서야 되겠는가?)..

    Springboot yaml 파일에 List 세팅하기

    yaml property에 list 형식의 데이터를 세팅해줘야 되는 경우가 있다. 이런 경우 두 가지 방식이 있는데, 먼저 아래와 같이 "- "(dash and space) 문법을 활용하면 자바에서 Collection 필드에 주입할 수 있다. my: servers: - dev.example.com - another.example.com 그러면 자바 코드에서는 아래와 같이 Collection 필드에 주입된다. dash 뒤에 공백을 한 칸 줘야하는 것을 꼭 잊지말자.@ConfigurationProperty 말고 @Value를 사용할 수도 있는데, @ConfigurationProperty는 bulk injection이 되므로 데이터가 계층 구조일때 편의성이 있다. 반면 단일 필드를 사용할때는 @value가 더..