본문 바로가기

Java Custom Annotation Java Annotation은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 자바1.5 버전 이상에서 사용이 가능하며, @ 기호를 앞에 붙여서 사용한다. Annotation은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 JVM에 포함되어 작동한다. Annotation을 사용하면 관련 코드에 직접 메타데이터를 설정할 수 있어 가독성이 증대되며, 개발 효율성을 증대시킨다. Java에서는 사전에 정의된 Annotation들이 존재하는데 @Deprecated, @Override, @suppressWarning이 그것이다. 이러한 Annotation 외에 Annotation 정의를 위해 사용되는 Annotation이 존재하는데 이를 Meta Annotation이라고 한다. 대표적으로 ..
Spring StopWatch StopWatch stopWatch = new StopWatch("id"); stopWatch.start("taskName1"); task1(); stopWatch.stop(); stopWatch.start("taskName2"); task2(); stopWatch.stop(); stopWatch.getTotalTimeMillis(); // 전체 작업시간 stopWatch.prettyPrint(); // StopWatch 'id': running time (millis) = 2000 // ----------------------------------------- // ms % Task name // ----------------------------------------- // 01000 050% tas..
Transaction의 이해 트랜잭션(transaction)은 가장 작은 업무의 단위라고 정의된다. 예를 들어 은행에서 이체하는 경우를 생각하면, 내 계좌에서 10만원의 돈이 출금되고, 그 금액만큼을 다른 사람의 계좌에 입금해야한다. 만일 어떠한 이유에서든지 작업에 문제가 생겨 작업을 되돌려야하는 경우가 있다면, 상대방의 계좌에는 돈이 입금되지 않은 상태에서 그치는 것이 아니라 그 돈이 다시 내 계좌에 존재하도록 하는 상태까지가 원 상태로의 복귀임을 알 수 있다. 즉 이체라는 작업은 내 계좌에서의 출금과 상대방 계좌로의 입금이라는 형태로 구성되어 있다는 것을 알 수 있고, 이것이 가장 작은 업무의 단위임을 알 수 있는 것이다. 그리고 작업은 완전히 돈이 이체되는 것으로 완결되거나(commit), 돈이 이체되지 않고 내 계좌에 돈이 ..
Spring에서 Annotation으로 정의된 Validation 확인 Spring을 사용하면서 DTO를 정의하고 DTO의 필드에 validation을 추가한 경우에, 필요에 따라 validation을 직접 호출해야하는 경우가 발생할 수 있다. 예를 들어 카프카에서 사용하는 DTO의 필드 값이 유효한지 확인해야 하는 경우, 일반적인 Controller API의 경우를 따를 수 없었다. 이에 stack overflow에 해결책이 올라온 것을 확인하였고, 이를 적용하였다. 예를 들어 사용자 정보를 생성하는 Request에 대해 아래와 같이 DTO를 정의하였다. @Getter @AllArgsConstructor public class UserCreateRequestDTO { @NotEmpty(message = "name is mandatory value.") private Str..
공적마스크 재고현황 조회 웹 어플리케이션 공공API에 올라와있는 공적마스크 재고조회 API를 이용해서 재고현황 조회할 수 있는 웹앱입니다. https://code0xff.github.io/mask-tracker/ Public Mask Tracker code0xff.github.io 접속하게되면 내 위치에서 500m내에 있는 구매처의 재고 현황을 조회해주고, 검색범위를 선택하여 탐색할 수 있습니다. 결과는 카드형태로 보여지며, 약국명, 약국주소를 보여주고, 배지로 몇 km이내에 있는 약국인지, 현재 몇 개가량이 남아있는지 보여줍니다. 처음 접속시 위치정보 공유에 대한 권한제공에 대해 동의해주셔야 사용이 가능합니다. 추가 정보를 확인하기 위하여 지도에서 보기를 선택하면 카카오맵으로 위치를 확인시켜주며, 정보검색을 선택하면 카카오맵에서 해당 약국의 ..
ParallelStream의 결과를 List에 저장 ParallelStream은 Java에서 제공하고 있는 Stream 중 하나로 Collection 속의 데이터를 병렬 처리하기 위해서 사용된다. 최근에 팀에서 ParallelStream을 사용하던 코드에서 이슈가 있었는데, ParallelStream으로 처리된 결과를 List에 저장하여 추가적인 작업으로 후처리하려다가 문제가 발생한 것이다. 간단한 코드로 옮겨보자면 다음과 같은 구조의 코드였다. import java.util.ArrayList; import java.util.List; public class ListTest { public static void main(String[] args) { List numbers = new ArrayList(); for (int i = 0; i < 100000;..
Elemental Battles로 시작하는 EOS dApp 개발 (3) LESSON 2. Storing State and Login https://battles.eos.io/tutorial/lesson2/chapter1 LESSON1에서는 EOSIO에서 작동하는 스마트 컨트랙트와 실제 게임을 플레이하는 클라이언트 프로그램인 프론트 엔드 프로젝트를 구성해보았습니다. LESSON2에서는 이에 이어서 데이터 저장을 위한 멀티 인덱스 테이블을 생성해보고 테이블의 데이터를 변경하기 위한 액션이 어떻게 작성되는지를 살펴볼 것입니다. 또한 유저들의 게임 플레이를 위한 프론트 엔드 프로그램을 React와 Redux를 이용하여 작성해보겠습니다. 게임 플레이를 위해서 가장 먼저 해야할 작업은 바로 로그인을 하는 것입니다. 그렇기 때문에 로그인을 하기 위한 페이지를 프론트 엔드에 구현해보겠습니..
알고리즘과 자료구조 알고리즘을 공부하는 사람이 자료구조를 이해하지 못한다는 것은 어불성설이라고 생각합니다. 그만큼 알고리즘을 학습하는 사람에게 자료구조는 기본소양과 같습니다. 하지만 일반적으로 구현되어 있는 라이브러리를 이용하는 경우가 대부분이기 때문에 직접 구현해보라는 요구를 받게 되었을 때, 실제 구현하지 못하는 경우가 상당히 많습니다. 자료구조를 정확히 이해하지 못한다면, 어떤 알고리즘을 풀이할 때 어떤 자료구조를 사용하는 것이 옳은가에 대한 판단도 스스로 내리지 못하고 특정 알고리즘을 풀 때는 이 자료구조를 사용해야한다고 기계적으로 암기해버리는 경우가 많습니다. 이러한 문제가 발생하는 원인은 자료구조의 원리를 제대로 이해하지 못하고 있으며, 어떤 방식으로 구현되어 있는지를 이해하지 못하고 있기 때문입니다. 제대로 자..