
오늘은 코틀린+스프링 프레임워크(줄여서 코프링)이라고 하는 기법에 대한 글 중 카카오페이에서 도움이 될만한 글이 있어서 가져왔습니다. https://tech.kakaopay.com/post/overcome-spring-aop-with-kotlin/ Kotlin으로 Spring AOP 극복하기! | 카카오페이 기술 블로그 Kotlin의 문법적 기능을 사용해서 Spring AOP 아쉬운 점을 극복한 경험을 공유합니다. tech.kakaopay.com 원래 스프링 프레임워크는 코틀린 언어의 할아버지뻘 되는 언어인 자바에서 기본적으로 파생된 언어입니다. 코틀린은 제트브레인(JetBrain)이라고 하는 체코 회사에서 개발한 언어입니다.(안드로이드 스튜디오와 인텔리제이 IDE 툴 등을 개발한 Java 개발자들 사이..

자바 객체를 영속화하는 방법의 하나로 자바 직렬화를 사용할 수 있습니다. 단순하게는 Serializable 인터페이스를 구현하거나 더 확장성 있는 방법으로는 Externalizable 인터페이스를 구현하는 것을 선택할 수 있고, 자바 직렬화에 종속되지 않는 다른 방법을 선택할 수도 있습니다. 직렬화란? 자바 시스템 내부에서 사용되는 객체와 데이터를 외부에서도 사용가능하도록 바이트 형태로 데이터를 변환하는 기술입니다. 바이트로 변환된 데이터를 다시 객체로 변화는 것은 역직렬화라고 합니다. 자바는 JVM에 의해 관리가 되는데, 메모리에서 힙 또는 스택 영역에 저장되어 있는 객체 데이터를 바이트 형태로 변환하는 기술과 직렬화된 바이트 형태의 데이터를 객체로 변환하여 JVM에 상주시키는 형태를 이야기하곤 합니다..

현재 젠킨스로 배치를 배포하며 특정 서버에 SSH 연결을 통해 jar 파일을 실행하는 구조로 배치가 수행되고 있습니다. 서버간 파일 이동을 줄이기 위해 타겟 서버에 Git Repository Clone을 진행해두고 그 상태에서 프로젝트를 자체 gradle build 를 통하여 jar 를 생성하고 있었습니다. 문제는 아래와 같이 로그가 jar 파일 실행 이후에도 로그가 계속 출력되고 있어서 젠킨스 아이템이 멈추지 않는 증상이었습니다. 그래서 이 부분을 어떻게 해결할지 고민을 하다가 백그라운드에서 배치를 실행시키는 옵션을 찾게되었습니다. 기존에 사용하였던 run.sh 의 내용입니다. As-is !#/bin/sh port=18085; pid="$(sudo lsof -t -i :18085 -s TCP:LISTE..
구글링을 해보니 대부분 List의 알고리즘은 없고, Array에서 등수를 구하는 내용만 없어 직접 작성해보았습니다. public static void main(String[] args) { List temp = List.of(10, 20, 30, 40, 15, 25, 35, 60, 70, 35); List scores = new ArrayList(); scores.addAll(temp); Integer add = 50; scores.add(add); int[] rank = new int[scores.size()]; for (int i = 0; i < scores.size(); i++) { rank[i] = 1; } for (int i = 0; i < scores.size(); i++) { for (int..
안녕하세요! 최근에 나온 프레임워크로 Jetbrains 회사에서 만든 핫한 녀석중에 하나입니다. 바로 'Ktor' 라는 프레임워크인데요, 이 프레임워크는 애초에 Java 언어를 주력으로 개발, 기획하고 있는 Jetbrains 회사의 새로운 모델입니다. Jetbrains 사는 이미 IntelliJ IDE, Android Studio, DataGrip, WebStorm 등 다양한 개발 편의 도구인 IDE를 만드는 회사로 이미 명성이 자자합니다. 대부분의 스타트업 회사 및 신규 런칭 개발 프로젝트건에서도 빠지지 않고 사용하는 툴이기도 합니다. 가장 먼저 메인 페이지의 링크입니다. https://ktor.io/ Ktor: Build Asynchronous Servers and Clients in Kotlin K..
이번 글에서는 자바에서 사용하는 그룹핑 방법을 간단히 소개해드리고자 글을 작성하게 되었습니다. 회사에서 사용하는 기술 중 하나는 JPA인데, JPA에서는 기본적으로 Group By 옵션을 사용할 수 없습니다. 적어도 CustomRepository 를 만들어 Native Query 로 작성을 하거나, QueryDSL 을 사용해서 쿼리를 변경해야 합니다. 이 글은 MyBatis의 방법으로 GROUP BY 를 사용하는 대신 자바에서 사용할 수 있는 방법을 제시하고자 합니다. Collertors 클래스 사용하기 1. groupingBy() 데이터를 그룹핑해서 Map으로 리턴합니다. Thread safe 하지 않습니다. Lists.newArrayList() .stream() .collect(Collectors.g..

API 서버나 데이터를 가공해야 할 경우 JSONObject()를 Map(String, String) 형식으로 형변환을 해야할 경우가 종종 있습니다. 매번 Class에 생성하기 보다는 Util 형식으로 만들어 쓰시면 편할거 같습니다. JSONObject 형식을 Map형식으로 형변환 방법. /** * @param JSONObject * @apiNote JSONObject를 Map 형식으로 변환처리. * @return Map * **/ public static Map getMapFromJsonObject(JSONObject jsonObj){ Map map = null; try { map = new ObjectMapper().readValue(jsonObj.toString(), Map.class); } cat..

Node에서 활용하는 멀티파트 파일의 다운로드를 진행했었다면, 이번 글에서는 멀티파트 파일의 업로드 및 다운로드를 Java에서 진행하는 것으로 작성해보려 합니다. Express Router 를 사용해서 파일 다운로드 만들기 브라우저에서 버튼을 클릭할 때 파일을 다운로드하게 하는 방법입니다. 다운로드 zip Node 에서는 파일을 전송하기 위한 라우터가 필요한데, express를 설치합니다. $ npm i express const express = require('ex abbo.tistory.com 먼저 FileController 입니다. FileController.java import org.springframework.core.io.Resource; import org.springframework.ht..