| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 주식공부
- JavaScript
- stockx.com
- 자바스크립트
- Linux
- Dunk Low
- 오라클
- GIT
- Python
- 코로나19
- sacai
- 파이썬
- react
- jQuery
- 나이키
- 발매예정
- 리액트
- 덩크 로우
- 덩크 하이
- dunklow
- dunk high
- 리눅스
- Java
- 주식
- oracle
- 덩크로우
- Nike
- draw
- 드로우
- 제이쿼리
- Today
- Total
목록Java (17)
Life goes slowly...
Spring Data JPA에서 JpaRepository를 사용하면서 직접 쿼리를 작성하는 방법은 크게 세 가지가 있다. 단순한 이름 규칙부터 복잡한 동적 쿼리까지 상황에 맞게 선택하시면 된다. 1. 쿼리 메소드 (Query Methods)가장 간단한 방법입니다. 메소드 이름을 특정 규칙에 맞춰 선언하면 JPA가 이를 해석해 SQL을 자동으로 생성한다.단순조회나 간단한 조건의 쿼리를 사용할때 사용하는 방식이다.(And, Or정도)장점: 간단함, 별도의 쿼리 작성 불필요.단점: 조건이 많아지면 메소드 이름이 너무 길어짐.public interface UserRepository extends JpaRepository { // SELECT * FROM user WHERE email = ? Optio..
1. ExpressionUtils란?ExpressionUtils는 Expression(표현식)을 조합하거나서브쿼리를 select 절에 포함시킬 때 사용하는 유틸입니다.주 용도서브쿼리 → 컬럼처럼 사용alias 지정산술 연산용 Expression 구성2. 서브쿼리 기본 (JPAExpressions)queryFactory .selectFrom(member) .where(member.age.gt( select(member.age.avg()) .from(member) )) .fetch(); 3. Select 절에 서브쿼리 넣기 (ExpressionUtils.as)queryFactory .select( member.username, ..
1. Querydsl이란?Querydsl은 타입 세이프(Type-safe) 한 방식으로 JPQL을 작성할 수 있게 해주는 라이브러리입니다.문자열 JPQL 사용하지 말것 → 컴파일 시 오류 미검출Querydsl 사용 → 컴파일 타임에 쿼리 오류 검출동적 쿼리에 매우 강함JPA와 자연스럽게 결합2. 의존성 설정 (Spring Boot + Gradle)Gradle 설정dependencies { implementation 'com.querydsl:querydsl-jpa' annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa' annotationProcessor 'jakarta.persistence:jakarta.persistence-api' ..
ExpressionUtils로 산술 연산하기 ❌ 잘못된 시도ExpressionUtils.as(subQuery1, "a") .subtract(ExpressionUtils.as(subQuery2, "b")); -- ExpressionUtils는 계산용 API가 아니기 때문에 불가능 올바른 산술 연산 방법 (NumberExpression) - 서브쿼리끼리 “계산”을 하려면, 각각을 JPAExpressions로 만들고, select 절에서는 ExpressionUtils.as로 alias를 주고, where/조건절에서는 서브쿼리 Expression을 그냥 연산에 넣어서 사용 기본 개념 정리Querydsl(JPA)에서 서브쿼리는 select 절, where 절에서만 사용 가능.select 절:Exp..
JPA 초보자가 자주 하는 실수 Top 5 JPA(Java Persistence API)는 자바 개발자에게 ORM(Object-Relational Mapping)의 강력함을 제공하여 객체 지향적으로 데이터베이스와 상호작용할 수 있게 해줍니다. 하지만 강력한 만큼 제대로 사용하지 않으면 예상치 못한 문제에 부딪힐 수 있습니다. JPA를 처음 접하는 개발자들이 자주 하는 실수 5가지와 이를 피하는 방법을 알아보겠습니다. 1. Entity에 비즈니스 로직 넣기 → Service로 빼기문제점: Entity는 데이터베이스 테이블과 매핑되는 순수한 객체여야 합니다. 여기에 비즈니스 로직이 들어가면 Entity의 역할이 모호해지고, 재사용성이 떨어지며, 테스트하기 어려워집니다. Entity는 데이터의 상태를 표현하는..
JPA의 핵심 개념 5가지 !!! - 이것만 알고 있어도 절반은 이해하고 개발을 할수 있다.JPA 핵심 개념 5가지 - Entity, EntityManager , Repository, Persistence Context, Transaction ① Entity (엔티티)DB 테이블과 1:1로 매핑되는 Java 클래스@Entitypublic class Member { @Id @GeneratedValue private Long id; private String name;}정의: 데이터베이스의 테이블과 매핑(연결)되는 자바 클래스입니다.역할: 실제 데이터가 담겨 있는 객체입니다. 이 클래스의 인스턴스(객체) 하나는 데이터베이스 테이블의 한 행(Row)에 해당합니다. 개발자는 이 객체를 생성..
JPA가 코드 내부적으로 데이터를 관리와 데이터베이스와 소통 핵심 구성 요소를 동작구조에 대해서 설명하도록 하겠습니다.JPA의 동작 구조를 이해할 때 가장 중요한 것은 **'영속성 컨텍스트(Persistence Context)'**라는 입니다.1. JPA의 핵심 구성 요소EntityManagerFactory (공장): 딱 한 번만 만들어지는 커다란 공장입니다. 애플리케이션이 실행될 때 생성되어 DB 연결 정보 등을 준비합니다.EntityManager (일꾼): 고객의 요청(트랜잭션)이 올 때마다 공장에서 파견되는 일꾼입니다. DB에 저장하거나 수정하는 모든 일을 이 일꾼이 처리합니다.Persistence Context (영속성 컨텍스트): 일꾼이 들고 다니는 *임시 메모리 저장소(장바구니)*입니다. 자바..
초보자도 쉽게 이해하는 Spring Data JPA에 대해 설명해 드릴게요.먼저 각 용어가 의미하는 내용에 대해서 설명이 필요합니다. 1. JPA가 없을 때의 문제점옛날에는 자바 애플리케이션에서 데이터베이스에 데이터를 저장하거나 가져오려면, 개발자가 직접 복잡한 SQL 쿼리문을 하나하나 작성해야 했습니다. 마치 서로 다른 언어를 사용하는 두 사람 사이에 통역사가 없는 것과 같아서, 개발자는 SQL이라는 낯선 언어와 씨름하며 머리를 싸매야 했죠. //기존 JDBC와 SQL 방식Java 코드 ↓SQL 작성 ↓DB 실행 ↓ResultSet ↓Java 객체로 변환 2. JPA: 자바와 데이터베이스의 다리**JPA(Java Persistence API)**는 이런 문제를 해결해주는 '다리' 또는 '통..
Java와 같은 객체 지향 프로그램 언어를 사용하게 되면 객체들을 기준에 맞춰서 정렬해야 하는 경우가 있습니다. 객체의 정렬 기준을 명시하는 방법에 따라서 Comparable 과 Comparator 두 가지 방법이 있습니다. 단순한 숫자나 문자와 같은 기본형 데이터는 사람들이 일반적으로 받아들이는 대소 비교라는 개념이 있으며, 그에 따라서 정렬을 할 수 있습니다. 하지만 특정 타입의 객체는 기본형 데이터와 다르게 정렬 기준이 없기 때문에 정렬을 할 수가 없어서 정렬 기준을 정의하여 하며 그에 따른 정렬 기준에 따라서 정렬하게 됩니다. Comparable 정렬 수행 시 기본적으로 적용되는 정렬 기준이 되는 메소드를 정의하는 인터페이스입니다. Java에서 제공되는 정렬 가능한 클래스는 모두 Comparabl..
자바 프로그래밍에서 파일을 저장 시 디렉토리를 생성하는 함수인 mkdir(), mkdirs()를 기본적으로 제공하고 있습니다. 디렉토리 생성하는 함수인 mkdir(), mkdirs()로 두 가지가 있지만 세부적으로 약간 차이가 있습니다. File.mkdir() 프로그래밍 로직이 진행중에 만들고자 하는 Folder(디렉토리)의 상위 Folder(디렉토리)가 존재하지 않을 경우에는 생성이 불가능한 함수입니다. import java.io.*; public class Example{ public static void main(String[] args) { String path = "C:\\Test\\새폴더"; //폴더 경로 File Folder1 = new File("C:\\Test\\새폴더";); File F..
java.lang.NullPointerException은 프로그래밍 코딩중에 자주 발생되는 오류중에 하나입니다. 기본적인 오류이기에 원인을 확실하게 알고 해결해야 오류 발생을 방지할수 있습니다. Java의 오류인 java.lang.NullPointerException이란 Null 값으로 인하여 발생되는 Runtime Exception입니다. Java 프로그래밍 개발 중에 가장 자주 발생하거나 볼 수 있는 오류 중 하나가 [ java.lang.NullPointerException ]입니다. Java 프로그램 언어 코딩 중에 가장 기본적인 문제이기도 하지만 실수로도 발생할 수도 있는 오류입니다. java.lang.NullPointerException 원인 java.lang.NullPointerExceptio..
DAO (Data Access Object) Java 프로그래밍 코딩중에 Database의 Data에 접근하기 위한 객체로써, Database의 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해서 사용합니다. Database에 접근하기 위한 호출을 하거나 직접 쿼리를 작성하여 사용하는 Class 파일을 말합니다. 요즘에는 Mybatis 등을 사용하게 되면 커넥션풀까지 제공하여 DAO를 별로 만드는 경우가 줄어들게 되었습니다. import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class TestDao { public v..
Log 유틸 - Apache Log4j 컴퓨터 프로그래밍 언어를 작성하는 도중에 로그를 남기기 위해 사용되는 Java 기반 loging 유틸리티입니다. 대부분 디버그용 도구로 사용되고 있으며, 등급별로 FATAL, ERROR, WARN, INFO, DEBUG, TRACE 로그 레벨을 가지고 있으며 설정 파일에 대상별로 레벨을 지정이 가능하며 등급별로 저장하는 방식입니다. 개발자들이 개발 시 IDE 툴을 사용하여 디버깅을 하면 데이터 추적이 가능하지만 개발이 완료되고 컴파일 후에 서버에 반영후에는 데이터 추적하기가 어렵습니다. 버그를 추적할 수 있는 가장 편하고 좋은 방법이 로그를 남기고 추적하는 방법입니다. Apache Log4j 구조 Logger(Category) 로깅메세지를 Appender로 전달. ..
자바(Java) 프로그래밍에서는 현재 날짜와 현재 시간을 조회하는 방법이 여러가지 있는데, 기본적으로 JDK8 이전 Java에서는 java.util.Date 와 java.util.Calender 클래스를 많이 사용하였었지만, 사용함에 불편함이 많아서 java.time 패키지의 클래스를 많이 활용하고 있습니다. java.util.Date package domain; import java.util.*; import java.text.SimpleDateFormat; public class HelloWorld { public static void main(String[] args) { SimpleDateFormat test1 = new SimpleDateFormat ( "yyyy-MM-dd HH:mm:ss");..
정규식 표현(Regular expression) 정규식 표현을 간단하게 regexp라고도 하며, 프로그래밍의 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어입니다. 입력한 문자열(String)에서 특정한 조건을 표현하는 경우에 일반적 조건문으로는 다소 복잡할 수도 있지만, 정규 표현식을 이용하게되면 매우 간단하고 쉽게 표현이 가능합니다. 정규식표준 문법 문자열 검증 정규식 ^[0-9]*$ : 숫자만 ^[a-zA-Z]*$ : 영문자만 ^[a-z]*$ : 소문자만 ^[가-힣]*$ : 한글만 ^[a-zA-Z0-9]*$ : 영어/숫자만 자주사용되는 정규식 표현식 일반전화 : ^\d{2,3} - \d{3,4} - \d{4}$ 휴대폰 : ^01([0|1|6|7|8|9]?)?([0-9]{3,4})?([0..