반응형

Programming 362

트리구조 DB 설계 방법 - 클로저 테이블(Closure Table)

계층 구조를 가지는 데이터는 개발에서 너무나 자주 접하게 되며, 또 잘 설계되어야 효율적으로 사용할 수 있는 구조인데요. 때문에 한번 잘 정리해놓으면 좋겠다 싶어서 공부한 내용입니다. 해당 포스팅은 트리 구조의 데이터베이스를 설계하는 방식 중 '클로저 테이블(Closure Table)' 방식에 대해서 살펴보고, 직접 구현해본 내용입니다. Closure Table 'SQL Anti Patterns' 도서에 수록된 클로저 테이블은 '계층 구조를 저장하는 단순하고 우아한 방법'으로 정의되어 있습니다. 아래에서 자세하게 살펴보겠지만 클로저 테이블은 조상-자손 관계에 대한 경로뿐만 아니라 트리의 모든 경로를 저장하는데요. obj_table과 clo_table을 통해 자세한 내용 살펴보겠습니다. (기본적인 클로저 ..

VSCode Vue.js 프로젝트 생성 및 실행하기

시작에 앞서 Vue.js란, 2014년 첫 출시된 Vue.js는 애플리케이션 로직과 UI의 분리가 필요한 프로젝트에서 UI를 빠르게 개발하기 위해 만들어진 자바스크립트 기반 프레임워크입니다. MVVM(Model-View-ViewModel) 패턴을 따르며, Angular.js와 React.js가 대부분을 차지하던 JavaScript Framework 시장에서 꾸준하게 점유율을 높여 현재는 비슷한 위치에 있다고 합니다. Vue.js는 Angular.js와 React.js에 비하여 유연하고 가볍다는 장점이 있으며, HTML 마크업 기반의 템플릿을 활용하여 CSS를 작성하는 기존의 문법 스타일을 사용하기 때문에 Vue.js를 처음 접하는 사용자들이 배우기 쉽다는 점도 장점으로 꼽히고 있습니다. Vue.js 프로..

Programming/Vue 2022.06.10

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
반응형