Programming/Java 66

@MappedSuperclass 조금 다르게 사용해보기

@MappedSuperclass 어노테이션을 조금 다르게 사용하는 방법에 대한 포스팅입니다. 해당 어노테이션의 핵심 기능은 '공통 매핑 정보를 간편하게 관리'하기 위해서 인데요. 때문에 프로젝트에서는 일반적으로 createdDate와 modifiedDate 같은 공통 필드를 관리하는 BaseTimeEntity 클래스에서 가장 많이 사용됩니다. 아래 내용은 BaseTimeEntity가 아닌 @MappedSuperclass 어노테이션을 활용해 '완전히 똑같은 필드를 가진, 같은 종류지만 서로 다른 Entity를 하나의 Repository로 관리하는 방법'을 정리한 포스팅입니다. 단순하게 공통 매핑 정보를 관리하는 것과는 조금 다르게 사용해보았기 때문에 내용 참고해보시고 필요에 따라 적용을 고려해보시면 될 것..

Programming/Java 2022.07.18

Java 클라이언트 요청 IP 가져오는 방법(HttpServletRequest)

HttpRequestHeader로부터 사용자 요청 IP(Internet protocol) 가져오는 방법 프로젝트를 하게 되면 IP Whitelist 등의 목적으로 인해 사용자의 요청 IP를 가져와야 하는 경우가 있습니다. IP란 무엇인지 간단하게 살펴보고, HttpServletRequest로부터 사용자의 요청 IP를 가져오는 코드를 함께 살펴보겠습니다. (IP 가져오는 부분의 코드만 살펴보실 분은 내용을 아래로 조금만 스킵해주시길 바랍니다.) IP(Internet protocol)란, IP 통신에 필요한 고유 주소를 말하며, 인터넷에 연결된 통신 기능이 제공되는 모든 장치들(컴퓨터, 스마트폰 등)이 서로 통신을 하기 위해 필요한 식별이 가능한 고유 번호입니다. 스마트폰으로 예를 들면 스마트폰끼리 통화를 ..

Programming/Java 2022.06.07

LocalDateTime Jackson 직렬화 오류, 두 가지 해결 방법

Java 8, LocalDateTime Jackson Serializer Error 해결 방법 @AllArgsConstructor @Setter @Getter public class Example { private LocalDateTime localDatetime; } Example example = new Example(LocalDateTime.now()); ObjectMapper objectMapper = new ObjectMapper(); try { String jsonStr = objectMapper.writeValueAsString(example); } catch (JsonProcessingException e) { e.printStackTrace(); } (오류 예시 코드) LocalDateT..

Programming/Java 2022.06.04

Java QR코드 생성 (Image 출력 및 파일저장)

해당 포스팅은 Java에서 QR Code를 생성하여 화면으로 출력하는 방법과 이미지 형식으로 저장하는 방법에 대해서 정리한 내용입니다. QR코드는 'Quick Response(빠른 응답)을 뜻하며 흑백의 격자무늬 패턴 방식으로 정보를 나타내는 매트릭스 형식의 2차원 바코드인데요. 기존의 상품 바코드보다 큰 용량으로 많은 양의 정보를 담을 수 있다는 장점이 있습니다. (QR코드는 숫자 최대 7089자, 문자(ASCll) 최대 4296자를 담을 수 있습니다.) com.google.zxing javase 3.4.0 (의존성 추가 / maven) * 현재 3.4.0 버전에서 심각한 취약점 이슈가 발생되어 다른 버전을 사용하시길 바랍니다. QR Code 생성을 위해서는 'com.google.zxing' 라이브러리..

Programming/Java 2022.05.28

Java - Future Interface 비동기적 연산 작업을 위한 인터페이스

Java에서 비동기적 연산 작업을 위해 만들어진 인터페이스인 Future에 대해서 살펴봅니다. Future란, 자바 1.5에서 나온 인터페이스로 비동기적 연산의 처리 결과를 표현하기 위해 사용됩니다. 비동기 처리가 완료되었는지 확인하고, 처리 완료를 기다리고, 처리 결과를 반환하는 메서드를 제공합니다. Future를 이용하면 멀티 스레드 환경에서 처리된 어떤 데이터를 다른 스레드에 전달할 수 있으며, Future는 내부적으로 Thread-Safe 하게 구현되어 있기 때문에 synchronized block(동기화 블록)을 사용하지 않아도 됩니다. Future 객체는 작업이 완료될 때까지 기다렸다가 최종 결과를 얻는 데 사용하며, 때문에 지연 완료(pending completion) 객체라고도 합니다. *..

Programming/Java 2022.04.04

Java 주식 API (대신증권 사이보스 플러스) 연동하기

Java로 대신증권 사이보스 플러스 API 사용하기 프로그래밍을 통한 자동 매매를 구현하기 위한 대부분의 증권사 api가 C, C++ 또는 Python에서는 사용하기 쉽게 되어있습니다. 하지만 공식적으로 Java 언어를 통해 사용할 수 있는 증권사 api는 찾을 수 없었습니다. 그러던 중 구글링을 통해 대신증권 사이보스 플러스 api의 .dll 파일을 com4j 라이브러리로 .java 파일로 변환해서 사용하는 것을 보고 참고하여 작업하며 정리한 내용입니다. - 작업 환경 Windows10 64비트(x64), Java8 32비트(x86), IntelliJ 32비트 런쳐(18.3.6) 환경에서 작업하였습니다. (작업 중 64비트에서는 오류가 발생하고, 32비트에서만 동작하는 부분이 있어서 32비트 설치 후 ..

Programming/Java 2022.02.05

Windows10 Java8 32bit 설치하기 jdk8(x86)

윈도우10 Java8, JDK8 32비트(x86) 버전 설치하는 방법입니다. (Windows10 64비트 환경에서 설치를 진행하였으며, 개발상 필요에 의해 32비트 jdk를 설치하게 되었습니다.) 일반적으로 대부분의 운영 체제가 64비트(x64)를 사용하겠지만 간혹 특별한 상황에서 32비트를 사용해야 하는 경우가 발생합니다. 32비트의 Java8을 설치하기 위해서는 아래 Oracel 사이트를 통해 Java SE Development Kit 8u202, Windows x86 버전을 다운로드합니다. Java SE (Standard Edition) https://www.oracle.com/kr/java/technologies/javase/javase8-archive-downloads.html (JDK 다운로드..

Programming/Java 2022.02.03

자바 소켓 통신(Socket)을 사용하는 이유와 동작 원리 및 코드

Java 소켓 통신(Socket)을 사용하는 이유 먼저 자바에서 소켓 통신은 C 또는 C++ 언어로 구현된 프로젝트와의 통신에 많이 사용됩니다. 이유는 Java와 C의 데이터 개념이 다르기 때문인데요. C에서는 구조체를 사용하는데 반해서 Java에는 구조체가 없습니다. 이처럼 Java의 Object 구조를 C에서 이해하지 못하고 C의 구조체를 자바에서 이해하지 못하기 때문에 서로 통신을 위해서는 byte 단위로 정보를 주고받아야 합니다. (Socket을 사용한 전문 통신) Http 통신과 Socket 통신의 차이점 - 단방향 통신인 Http 통신 Http 통신은 Client의 요청(Request)이 있을 때만 서버가 응답(Response)하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식입니다. Cl..

Programming/Java 2022.01.25

LocalDateTime toString() 메서드 사용 시 주의해야 할 점(00초 사라짐)

LocalDateTime의 toString() 메서드 사용 시 00초가 사라지는 경우 먼저 LocalDateTime은 java.time 패키지에 있는 시간을 다루는 클래스이며 jdk1.8부터 사용되었고 기존의 Date와 Calendar 클래스의 단점을 보완하기 위해서 나오게 되었습니다. 프로젝트 진행 중 LocalDateTime 타입의 값을 toString() 메서드로 문자열 형태로 가지고 와서 사용하는 과정에서 LocalDateTime의 기본 형태인 'yyyy-MM-ddTHH:mm:ss'에서 저장된 데이터의 마지막 ss 초 값이 00 일 경우에 값이 아예 출력되지 않고 'yyyy-MM-dd T HH:mm' 까지만 나오는 경우가 발생하였습니다. ex) mariaDB에 저장된 DateTime 값 '2022..

Programming/Java 2022.01.20

전문통신이란? Java 전문통신(Fixed Length Format) 문자열 길이 맞추는 메서드

전문 통신이란, 먼저 'Fixed Length Format'은 전문을 구성하는 field들의 길이를 입력받을 수 있는 최대 사이즈로 고정시키는 방식입니다. 대규모의 프로젝트를 진행하다 보면 서로 다른 시스템끼리 데이터를 주고받아야 하는 상황이 생깁니다. 이 경우 시스템 간의 통신에서 데이터 송수신 format을 정하는 것도 중요한데요. 일반적으로 데이터를 송수신하는 전문의 형태는 JSON, XML, Fixed Length 등 여러 가지로 구성할 수 있습니다. (요즘은 XML, JSON 등의 format 형태가 많이 사용되지만 C언어와의 통신에서는 데이터 송수신 format으로 C언어에서 사용하기 편리한 형태인 Fixed Length 형태도 많이 사용됩니다.) 전문은 일정한 크기의 공통된 데이터를 가진 h..

Programming/Java 2022.01.19