반응형

분류 전체보기 428

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

Javascript Cookie 쿠키 저장, 가져오기, 삭제 함수

쿠키(Cookie) 개념, 본격적으로 코드를 보기 전에 쿠키(Cookie)의 개념부터 간단하게 살펴보면, HTTP 쿠키는 웹 브라우저(web browser)에 저장되는 4KB 크기를 가진 문자열입니다. 기본적으로 HTTP 프로토콜은 각각의 요청을 독립적인 트랜잭션으로 취급하는 통신 프로토콜로 '무상태(Stateless) 프로토콜' 이라고도 불리는데요. 이때 쿠키는 제한적이긴 하지만 브라우저와 서버 간에 지속적으로 유지할 수 있는 데이터를 제공하는데, 이것이 HTTP 프로토콜에서 상태 관리의 개념으로 볼 수 있습니다. 하나의 예로, 쿠키는 서버에서 받은 로그인 토큰 정보를 웹 브라우저에 저장하고, 다시 서버에 요청을 할 때, 그 정보를 서버에 보냄으로써 사용자를 식별할 수 있게 하는 역할을 합니다. 쿠키를..

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

@RequestBody @ResponseBody 어노테이션 이해하고 사용하기

클라이언트와 서버의 통신(HTTP) @RequestBody, @ResponseBody Annotation을 이해하기에 앞서, 클라이언트와 서버 간 통신에 대해서 먼저 간단하게만 살펴보겠습니다. HTTP(HyperText Transfer Protocol) 통신이란, 브라우저와 서버가 통신하기 위한 여러 프로토콜 가운데 한 종류로 웹 브라우저와 웹 서버 사이에 HTML(하이퍼텍스트) 문서를 주고받는 데 사용되는 통신 프로토콜입니다. HTTP의 통신 방식은 기본적으로 '요청과 응답(request, response)'으로 이루어져 있는데요. 클라이언트가 요청(HttpRequest)을 서버에 보내면 서버는 클라이언트에게 응답(HttpResponse)하는 구조입니다. // start line POST /paymen..

@Value 어노테이션 null이 나오는 문제 해결 방법

@Value annotation을 사용하여 properties에 있는 메타 정보 값을 가져오는 과정에서, 값이 null으로 들어오는 문제를 해결하며 기록한 내용입니다. @Value Annotation 쉽게 @Value 어노테이션은 데이터베이스 연결 정보나, 외부 API 주소 등, 메타 정보를 관리하기 위한 프로퍼티(properties) 파일이나, 야믈(yml, yaml) 파일에서 메타 정보를 가져오기 위해 사용하는 어노테이션입니다. properties 또는 yml 파일에 메타 정보를 기록해놓고 @Value 어노테이션을 통해 해당 값을 가지고 오는 방식을 통해 로컬(local) 개발 환경에서의 설정 값과 개발(dev), 실제 서버(prod)의 설정 값을 따로 분리할 수 있고, 수정과 관리가 용이하다는 장점..

JPA @Modifying clearAutomatically 속성 발생할 수 있는 문제

해당 포스팅에서는 JPA @Modifying 어노테이션을 적용할 때 clearAutomatically 속성에서 발생할 수 있는 영속성 컨텍스트의 1차 캐시 관련 문제에 대해서 살펴보겠습니다. 시작에 앞서 JPA와 Spring Data JPA에 대해서 간단하게 이야기하면, 'JPA'는 Java Persistence API의 약자로, 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스입니다. 그리고 'Spring Data JPA'는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 만들어진 모듈 중 하나인데, JPA를 한 단계 추상화시킨 Repository라는 인터페이스를 제공함으로써 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 할 수 있도록 ..

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

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

Programming/Java 2022.04.04

ngrok 외부에서 로컬 개발환경 localhost 접근하기(mac)

ngrok을 사용하여 외부에서 로컬 개발환경 localhost에 접근하는 방법을 살펴보겠습니다. (기본적인 동작은 설치 및 가입 이후 간단한 명령어만 사용하면 되기 때문에 크게 어렵지 않습니다.) 먼저 ngrok에 대해서 설명하자면, ngrok은 로컬 개발환경인 localhost에서 구동 중인 웹 서비스를 외부 인터넷 환경에서 접근할 수 있도록 만들어주는 툴입니다. Ngrok exposes local servers behind NATs and firewalls to the public internet over secure tunnels. (ngrok 공식 홈페이지에서는 다음과 같이 설명되어 있습니다.) 웹 서비스를 개발하다 보면 localhost가 아닌 외부 환경에서 개발 중인 서비스에 접근해야 하는 경..

Programming/Web 2022.04.01

생성자 주입과 필드 주입, 수정자 주입 정리 (feat. 의존성 관계 주입)

생성자 주입(Constructor Injection), 필드 주입(Field Injection), 수정자 주입(Setter Injection)은 모두 의존성 관계 주입이라고 합니다. 각각의 의존성 관계 주입 방법에 대해서 알아보기 전에 의존성과 의존성 관계 주입(Dependency Injection, DI)이 무엇인지에 대해서 먼저 알아보고 시작하겠습니다. 의존성과 의존성 관계 주입(Dependency Injection, DI) '의존성 관계 주입'은 Spring 프레임워크의 3가지 핵심 프로그래밍 모델 중에 하나로 Spring에서만 사용되는 용어가 아니라 객체지향 프로그래밍 어디서나 통용되는 개념입니다. 의존성이란 한 객체가 다른 객체를 사용할 때 의존성이 있다고 하며, A클래스가 B클래스 또는 인터페..

반응형