java 15

[Java] Apache POI(XSSF)를 사용한 Excel(XLSX) 파일 처리

Apache POI는 Java에서 Microsoft Office 문서를 읽고 쓸 수 있게 해주는 라이브러리이다. 그중 XSSF는 Excel 2007 이상(xlsx) 포맷을 처리하는 구현체이다. 이번 글에서는 XSSF를 사용해 엑셀 파일을 생성, 읽기, 그리고 고급 기능을 활용하는 방법을 알아보자. 1) 환경 설정Apache POI를 사용하려면 Maven 또는 Gradle에 의존성을 추가해야 한다. org.apache.poi poi-ooxml 5.2.5// Gradle 설정implementation 'org.apache.poi:poi-ooxml:5.2.5' 2) 엑셀 파일 생성하기간단한 데이터로 XLSX 파일을 생성하는 예제이다.import org.apache.poi.xssf.usermod..

Java/Java 2025.08.11

[Java] Java 8의 주요 특징 정리

Java 8은 자바 언어에 함수형 프로그래밍 개념을 본격적으로 도입한 버전으로, 람다식, Stream API, Optional 클래스 등 코드의 간결성과 안정성을 높이는 다양한 기능들이 추가되었다. 특히 컬렉션 처리와 null 관련 문제 해결에 큰 도움이 되는 기능들이 포함되어 있어, 실무에서도 널리 사용되고 있다. 1) Java 8 주요 기능 목록람다식 (Lambda Expression)Stream APIOptional 클래스인터페이스의 default 및 static 메서드 2) 람다식 (Lambda Expression)2-1) 개요람다식은 익명 함수 형태로 간결한 함수형 코드를 작성할 수 있도록 해준다.익명 내부 클래스의 코드를 줄이고 가독성을 높여준다.2-2) 예시// 기존 방식Runnable r1..

Java/Java 2025.08.06

[Java] 자바 전역변수, 지역변수, static 변수란?

자바에서 변수는 선언 위치에 따라 전역변수와 지역변수로 나뉘며, static을 사용하면 객체 없이도 공유되는 클래스 변수로 사용할 수 있다.이번 글에서는 전역변수, 지역변수, static 변수에 대해 알아보자. 1) 전역변수1-1) 정의전역변수는 클래스 내부에서 선언된 변수로, 객체 전체에서 사용할 수 있다. 주로 필드(Field)라고 부른다. 1-2) 특징클래스의 모든 메서드에서 접근 가능객체가 생성될 때 메모리에 함께 올라감초기화를 하지 않아도 기본값이 자동으로 설정됨 1-3) 사용예시class Student { String name; // 전역변수 int age; // 전역변수 void printInfo() { System.out.println(name + "..

Java/Java 2025.07.11

[Java] XML Parsing 방식(DOM, SAX 방식)

최근에 대용량 데이터 처리에 대한 업무 개선을 위해,외부에서 받아서 처리하는 XML 데이터의 파싱 방식을 변경하는 작업을 진행했다.XML 데이터를 파싱하는 대표적인 방식으로 DOM 방식과 SAX 방식이 있는데,각각의 장단점과 방식을 변경한 이유에 대해 설명해보겠다. 1) XML 파싱(XML Parsing)1-1) XML Parsing? : XML(eXtensible Markup Language)은 데이터를 저장하고 전송하기 위한 표준화된 형식이고, XML 파싱은 이러한 XML 문서를 읽고 그 구조와 내용을 프로그램에서 사용할 수 있는 형태로 변환하는 과정이다.1-2) XML 문서의 구조 : XML 문서의 구조를 아래 예시를 통해 알아보자.XML 문서 예시 귤 과일 ..

Java/Java 2025.04.18

[Java] javax.servlet import 에러 해결 방법

HttpServlet을 사용하기 위해 관련 패키지를 import하려고 하는데, 오류가 발생하였다.오류가 발생하는 이유는 이클립스 내 해당 프로젝트에 Server 라이브러리가 설정되어있지 않기 때문인데,이 오류를 해결하는 방법에 대해 알아보자.개발환경JDK: Java 1.8서버: Tomcat 9.0IDE: IntelliJ 먼저, 아래 이미지를 참고하여 프로젝트 우클릭 > Properties 를 선택한다. Java Build Path를 클릭하고, Add Library를 클릭한다. 서버 라이브러리를 추가해야하기 때문에, Server Runtime을 클릭한다. 각자 프로젝트 환경에 맞는 서버를 선택하고, Finish를 클릭한다. 위 과정을 거치면, 서버 라이브러리가 정상적으로 Build Path에 추가된 ..

[Spring/MyBatis] 페이징 처리, Pagination 구현하기

API를 개발할 때, 페이징처리는 서버의 부하를 위해 꼭 필요한 기능이다.Spring에서 제공하는 Pageable을 활용하여 페이징 처리(페이지네이션)를 하는 방법에 대해 알아보자. 1) Pagination(페이지네이션): 데이터를 정렬기준, 페이지 크기, 몇 번째 페이지인지를   토대로 정보를 전달해주는 것1-1) Pageable Interface: Spring에서 페이징 처리를 하기 위해서 사용하는 인터페이스이다.객체를 생성할 때는 구현체인 PageRequest 를 사용하는데,PageRequest 생성자를 보면 page, size, sort 가 있다.[ PageRequset.class ]API를 호출할 때, 몇 번째 페이지인지에 대한 정보(page)와한 페이지당 보여줄 데이터의 개수(size)를 함께..

[Spring Data JPA] JPA 기본 Annotation 정리

Spring JPA에서 객체를 entity로 사용하기 위해 @Entity 어노테이션을 사용해야한다.이처럼 JPA를 사용할 때 필요한 Annotation에 대해 몇 가지 알아보자.  아래의 Member Entity를 예시로 들어보자.1) @Entity: entity 어노테이션은 DB 테이블과 1:1로 매칭되는 객체로, entity 객체의 인스턴스 하나가 테이블에서 하나의 레코드 값을 의미한다.따라서 각 레코드를 구분하기 위한 유일한 키값을 가지는데, 이것이 테이블의 PK(Primary Key)와 같은 의미를 가지며, @Id 어노테이션으로 정의한다. 2) @GeneratedValue: PK 자동 생성 전략을 설정하는 어노테이션으로, 4가지가 있다.@GeneratedValue(strategy = {기본키값 생..

[Spring] Spring Security + Swagger 적용 401 에러 해결

Swagger는 REST API를 설계, 빌드, 문서화 및 사용하는 데 도움이되는 OpenAPI 사양을 중심으로 구축 된 오픈 소스 도구 세트이다.이번에 신규 서비스를 개발하게 되면서, API를 간편하게 문서화하기 위해 프로젝트 Gradle에 Swagger를 적용하였다.Swagger 적용으로 개발할 때도 Postman을 별도로 사용하지 않고 바로 테스트가 가능하여 굉장히 편리하다는 생각이 들었다.하지만 이후에 인증 기능을 추가하게 되면서 Swagger 페이지가 갑자기 열리지 않는 상황이 발생하였다.이 문제를 해결하는 과정에 대해서 알아보자. 개발환경언어: Java버전: Java 17프레임워크: Spring Boot 3IDE: IntelliJ빌드: Gradle 1) 문제파악Swagger를 잘 사용하던 중에..

[Java] printStackTrace 취약점

intelliJ 환경에서 Java Spring 개발을 하던 중, e.printStackTrace() 구문을 사용한라인에서 warning 표시가 나오는 것을 보았다.코드를 지우면서 문득 왜 사용을 지양해야하는지 궁금해져서 찾아보게 되었다.  1) printStackTrace란?: printStackTrace() 는 예외발생 당시의 호출스택(Call Stack)에 있었던 메소드의 정보와 예외 메시지를 화면에 출력한다.위의 코드는 실제 printStackTrace() 함수의 내부 구현인데,System.err를 PrintStream으로 사용하고 있다.그리고 이 함수 내부를 타고 가다가 보면 StackTraceElement.of 를 통해 StackElement를 가져온다.이 of 메소드 내부를 또 살펴보게 되면 ..

Java/Java 2025.03.17

[Java/Spring] MyBatis typeAlias 사용법

Java로 서버개발을 할 때 MyBatis를 자주 사용하게 될 것이다.이 때 MyBatis의 typeAlias 라는 것을 사용할 수가 있는데,Alias는 "별칭" 이라는 의미로 사용자가 직접 정의하는 이름(별명)을 붙여주는 것이다.MyBatis를 사용하여 데이터를 처리할 때, 일반적으로 결과 데이터와 매핑되는 Java 클래스를 생성하게 된다.이 때 해당 Java 클래스의 Alias를 지정하여 사용하는 방법에 대해 알아보자. 1) typeAlias란: MyBatis를 이용하여 DB의 데이터를 받아 자바의 VO 객체에 담거나,반대로 자바 VO 객체의 데이터를 DB에 전송하는 과정에서보다 간결하게 코드를 작성하기 위해 사용하는 것이다.클래스의 경로를 별칭을 사용하여 정의해두고,이 별칭을 클래스 경로 대신 활용..