Java

새로운 프로젝트 진행 중 만나버린 친구.. 오랜만이다 CORS 에러.. 안녕?.. CORS 에러는 웹 개발자라면 꼭 만날 수 밖에 없는 에러로 명성이 자자하다. CORS란? Cross-Origin Resource Sharing의 줄임말로 웹 브라우저에서 다른 출처의 리소스 공유에 대한 허용/비허용을 다룬 보안 정책이다. 예를 들어, 다른 회사의 API 등 다른 도메인의 API(다른 출처)를 이용하고 싶을 때 CORS 허용 설정이 되어 있어야 성공적으로 API에 접근해 리소스를 공유받을 수 있다. CORS 설정 방법 CORS 에러를 해결하기 위한 여러 방법이 있겠지만 오늘은 직접 서버에서 HTTP 헤더 설정을 통해 다른 출처를 허용하도록 설정하려고 한다. Spring 서버, Node 서버 등 각 서버에 맞..
· Java
개발을 하며 MySQL의 Timestamp가 이상하게 조회되는 상황에 맞닥뜨렸다. 발생한 이슈와 원인, 해결한 방법 순서대로 기록해둔다. 이슈 발생 간단하게 정리하면 데이터 조회 시 특정 일자의 하루 동안 저장된 데이터를 조회해야 했고, 이를 위해서 특정 일자의 시작 시간(yyyy-MM-dd 00:00:00)과 끝 시간(yyyy-MM-dd 23:59:59)을 Timestamp 타입으로 만들었다. 예를 들어 일자별 회원가입 현황을 데이터테이블로 산출하려고 한다. 조회 시에는 JPQL을 사용했고, 테스트 용으로 아주 간단하게만 구현해두었다. /** * 일자별 회원가입 현황 * @param * @return */ public List getDailySignUp(Integer start, Integer leng..
· Java
Integer ArrayList을 int 배열로 변환하는 방법에 대해 알아보자. 사실 자꾸 까먹어서 기록해둔다. String 타입의 List를 배열로 변환할 때 toArray()를 사용하면 된다. List list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); // 1. toArray() - 배열 선언과 동시에 할당 String[] arr = list.toArray(new String[0]); // ["a", "b", "c"] // 2. toArray() - 배열 선언 후 값 할당 String[] arr2 = new String[list.size()]; list.toArray(arr2); // ["a", "b", "c"] 하지만 int형..
· Java
오늘은 ORM에 대해 정리해본다. ORM(Object Relational Mapping)이란? 데이터들이 프로그램이 종료되어도 사라지지 않고 어떤 곳에 저장되는 개념을 영속성(Persistence)이라고 한다. Java에서는 데이터의 영속성을 위한 JDBC를 지원해주는데, 이는 매핑 작업을 개발자가 일일히 수행해야 하는 번거로움이 있다. SQL Mapper와 ORM은 JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있도록 기능을 제공해주는 Persistence Framework 종류이다. SQL Mapper SQL Mapper는 Object와 SQL의 필드를 매핑하여 데이터를 객체화 하는 기술이다. 객체와 테이블 간의 관계를 매핑하는 것이..
· Java
Java로 개발을 시작하기도 전부터 'JVM에 대해서는 잘 알고 있어야 한다'는 이야기를 들었었다. 특정 운영체제 종속적이지 않고, 직접 메모리를 관리해주는 등 JVM이 중요한 이유도 함께 들었던 기억이 있다. 오늘 드디어 이 JVM에 대해 간단히 정리를 해본다. JVM(Java Virtual Machine) JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자로 자바 프로그램 런타임 환경을 제공하는 소프트웨어이다. 자바 애플리케이션을 클래스 로더를 통해 읽어 들여, 자바 API와 함께 실행하는 역할을 한다. Java와 OS 사이에서 중개자 역할을 수행해 Java가 OS에 구애받지 않고 실행되도록 한다. 또한, Garbage Collection, 즉 프로그램 메모리 관리도 하며 최적..
자료 구조 중 트리가 있다. 트리 구조를 순회하는 방법에는 세 가지 방법이 있다. 전위 순회(Pre-order) 중위 순회(In-order) 후위 순회(Post-order) 이러한 순회 방법은 트리 내의 모든 노드를 방문하는 기초적인 방법들로서, 트리 구조를 다루는데 중요한 역할을 한다. 순회 방법은 트리의 형태와 원하는 결과에 따라 다르게 선택될 수 있다. 그렇다면 이 3가지 트리 순회에 대해 알아보자. 전위순회(Pre-order) 전위순회는 다음 순서로 노드를 순회한다. Root - Left - Right 상단의 트리를 전위순회로 순회한다면 다음과 같은 순서로 노드를 순회할 것이다. 전위 순회한 결과 : ABDCEFG 중위순회(In-order) 중위순회는 다음 순서로 노드를 순회한다. Left - R..
· Kafka
Kafka에서 이벤트를 소비/생성해야 하는 Spring Boot 기반 애플리케이션이 있을 경우 2가지 라이브러리 중 선택해 사용할 수 있다. Kafka Clients Spring Kafka 둘 중 어떤 라이브러리를 사용할 것인가에 대한 스택오버플로우의 한 게시물에서는 이렇게 설명하고 있다. Spring Kafka는 핵심 의존성 주입으로 대표되는 Spring 개념을 적용하는데 도움된다. 이것은 메시지를 보내는데 사용되는 ‘템플릿’을 높은 수준의 추상화로 제공한다. 또한, @KafkaListener 어노테이션과 ‘Listener Container’를 사용해 메시지 기반의 POJO(Message-driven POJOs)를 지원한다. 두 가지 라이브러리에 대해 좀 더 자세히 알아보자. Kafka Clients ..
· Java
특정 구간의 코드 실행 시간을 알고 싶은 경우가 있다. 대부분 개발 중 어느 부분이 느린지 알아내야하는.. 경우다. 이 때 사용할 수 있는 Java 함수 하나 알아보자. Java에서 특정 구간의 코드 실행 시간이 얼마나 소요되는지 알고 싶을 때는 System.currentTimeMillis() 함수를 사용하면 된다. 이 함수는 현재 시간을 받아오는 System 함수로, 실행 시간을 측정하고 싶은 코드의 시작 구간과 종료 구간에 각각 해당 함수를 사용해 시간을 받아오고, 두 시간 사이의 차이를 계산하면 된다. 함수명에서 알 수 있듯이 ms 단위의 시간 차를 결과값으로 얻을 수 있다. 만약 값을 초(s) 단위로 변환하고 싶다면 System.currentTimeMillis()/1000 을 사용하면 되고, 초(..
자료구조 중 해시 테이블(Hash Table)에 대해 알아보자. 해시 테이블(Hash Table)이란? 해시 테이블(Hash Table)은 효율적인 검색과 삽입 연산을 위해 설계된 자료구조다. 이는 키-값 쌍의 데이터를 저장하는데 사용되며, 각 키는 해시 함수를 통해 고유한 인덱스로 변환되어 배열 내에 저장된다. 기본 개념에 대해 살펴보면 다음과 같다. 해시 함수 : 해시 함수는 키를 해시 값으로 변환하는 함수다. 이 해시 값은 고유한 인덱스로 사용된다. 해시 충돌 : 서로 다른 키가 같은 해시 값을 가질 경우 해시 충돌이 발생한다. 이는 해시 함수가 충돌을 완전히 피하는 것이 불가능하기 때문에 주의해야 한다. 해시 테이블 : 해시 테이블은 배열로 구성되어 있으며, 각 배열 요소는 버킷 또는 슬롯이라고 ..
자료구조 중 트리(Tree)에 대해 정리해보자. 트리(Tree)란? 트리(Tree)는 계층적인 구조를 나타내는 비선형 자료구조로 그래프(Graph)의 특수한 형태이다. 트리는 노드(Node)와 간선(Edge)으로 이루어져 있다. 간단히 말해 트리는 하나의 루트 노드를 가지고 있으며, 각 노드는 0개 이상의 자식 노드를 가질 수 있다. 이러한 구조로 인해 데이터를 계층적으로 표현할 수 있다. 트리의 주요 개념과 용어는 다음과 같다. 노드(Node) : 트리의 기본 단위로 데이터를 저장하는 요소다. 각 노드는 부모 노드와 하위 노드(자식 노드)를 가질 수 있다. 루트(Root) : 트리의 맨 위에 있는 노드로 다른 모든 노드는 루트를 향해 이어진 경로를 가지고 있다. 트리는 하나의 루트 노드만을 가진다. 부..
토발자_Hflug
'Java' 태그의 글 목록