250220 TIL
·
TIL
Criteria API▪️JPA에서 동적 SQL을 안전하게 작성할 수 있도록 도와주는 API▪️jpql과 네이티브 쿼리는 문자열로 작성하므로 컴파일 타임에 오류를 체크해주지 않음▪️자바 코드 기반으로 쿼리를 구성하기 때문에 컴파일 타임에 오류를 잡을 수 있고, IDE의 자동완성 기능을 활용할 수 있는 장점이 있다Criteria API 구성 요소CriteriaBuilder (쿼리 생성 도구)▪️Criteria API 쿼리를 만들기 위한 팩토리 객체▪️이 객체를 통해 쿼리를 생성하고 조건을 추가할 수 있다▪️쿼리의 기본 제작 도구CriteriaBuilder cb = entityManager.getCriteriaBuilder();CriteriaQuery (쿼리 정의)▪️실제 SQL 쿼리를 나타내는 객체로, C..
250219 TIL
·
TIL
Spring Data JPASpring Framework에서 JPA를 더욱 쉽게 사용할 수 있도록 도와주는 라이브러리Spring Data JPA의 특징1️⃣자동 구현 ▪️Spring Data JPA에서는 기본적인 CRUD 작업을 자동으로 해줌.▪️CrudRepository나 JpaRepository 인터페이스를 상속받은 리포지토리 인터페이스를 정의하면, Spring Data JPA가 이를 기반으로 자동으로 구현해준다.public interface UserRepository extends JpaRepository { // 기본적인 CRUD 메서드는 자동으로 구현.} 2️⃣쿼리 메서드 ▪️Spring Data JPA는 쿼리 메서드를 자동으로 생성해준다.▪️findByUsername(String user..
250218 TIL
·
TIL
상속 매핑 전략객체 지향적인 상속 구조를 관계형 데이터베이스의 테이블로 변환하는 방법JPA는 3가지 주요 상속 매핑 전략을 제공1. 단일 테이블 전략 (Single Table Strategy)모든 자식 클래스를 하나의 테이블에 저장하는 방식한 개의 테이블에 모든 자식 클래스의 데이터를 저장부모 클래스와 자식 클래스의 모든 속성을 포함하는 하나의 테이블만 생성됨자식 클래스를 구분하기 위해 **"구분 컬럼(DTYPE)"**을 추가함테이블이 하나라서 조회 성능이 빠르고, 조인이 필요 없음불필요한 NULL 값이 많이 저장될 수 있음@Entity@Inheritance(strategy = InheritanceType.SINGLE_TABLE) // 단일 테이블 전략@DiscriminatorColumn(name = "..
250212 TIL
·
TIL
JPA(Java Persistence API)▪️자바에 대해서 ORM (Object-Relational Mapping) 표준을 제공하는 API▪️직접 쿼리를 작성하지 않고 엔티티 객체를 통해 데이터를 조작함▪️EJB(Entity Bean) → Hibernate → JPA(Java Persistence API)1️⃣EJB(Entity Bean) 시대▫️Entity Bean을 사용하여 데이터베이스와 연동함▫️복잡한 설정, 성능 문제 등 단점이 존재2️⃣Hibernate의 등장 ▫️Entity Bean의 한계를 극복하기 위해 Hibernate가 등장 ▫️객체-관계 매핑(ORM) 기술을 제공 3️⃣JPA(Java Persistence API)의 표준화 ▫️Hibernate 같은 ORM 기술이 널리 사용되면서, ..
250206 TIL
·
TIL
Java Stream API▪️자바 8에서 도입▪️컬렉션(리스트, 셋 등) 데이터를 처리▪️스트림과 컬렉션의 차이  ▫️스트림 : 데이터의 흐름, 데이터를 저장하지 않고 필요에 따라 계산  ▫️컬렉션 : 데이터를 저장하고 관리하는 구조Iterator는 List는 Collections.sort()로 정렬, 배열은 Arrays.sort()로 정렬▶️중복 정의 메서드가 많다▪️병렬 처리 기능▪️스트림은 한번만 사용 할 수 있다▪️데이터 처리의 목적을 표현하는 데 중점을 두며, "어떻게" 처리할 지에 대한 복잡한 구현을 숨김스트림 생성컬렉션에서 스트림 생성대부분의 컬렉션 클래스는 stream()메소드 제공List myList = Arrays.asList("a", "b", "c"); Stream myStream ..
250205 TIL
·
TIL
람다식(Lambda Expression)자바 8에서 도입익명 함수(메서드 이름이 없다), 간결한 방식의 코드 표현가독성이 좋아지고, 반복되는 코드가 간결함수의 매개변수에는 객체만 들어갈 수 있다 ▶️ 람다식은 컴파일 시 객체 변환‼️함수형 인터페이스의 인스턴스를 생성‼️함수형 인터페이스(추상 메서드가 하나)의 메서드만 가능(매개변수 목록) -> { 표현식 또는 코드 블록 } 1️⃣매개변수 : 여러 개의 매개변수 사용, 매개변수의 타입은 컴파일러가 자동으로 추론할 수 있어 생략▫️매개변수가 없을 경우: () -> { /* 동작 / } ▫️한 개의 매개변수만 있는 경우: (a) -> { / 동작 / } 또는 a -> { / 동작 / } ▫️두 개 이상의 매개변수가 있는 경우: (a, b) -> { / 동작 ..
250204 TIL
·
TIL
에러 페이지 처리에러 페이지는 was가 보여줌▶️사용자가 에러 페이지를 만들어서 보여줄 수 있음@ControllerAdvicepublic class GlobalExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(Exception.class) public ModelAndView exception(Exception e, Model model) { logger.error(e.getMessage(), e); //sout를 쓰면 시스템 성능이 낮아질수 있으므로 Logger 사용 // Sys..
250203 TIL
·
TIL
쿠키(Cookie)웹 애플리케이션에서 클라이언트(사용자의 브라우저)와 서버 간에 데이터를 저장하고 전송하는 데 사용되는 작은 데이터사용자의 상태 정보(예: 세션 ID, 마지막 방문 시간 등)를 유지쿠키는 사용자의 브라우저(클라이언트)에 저장브라우저가 이후에 서버에 요청을 보낼 때 쿠키를 함께 저장키-값 쌍으로 저장유효 기간 설정 가능특정 경로나 도메인에서만 쿠키가 유효하도록 설정클라이언트 측에서 저장되기 때문에 보안 상 이슈 있을 수 있음중요한 정보는 암호화 하거나 세션 사용HTTPS에서만 전송되도록 설정하거나, 클라이언트 스크립트(JavaScript)에서 접근하지 못하도록 설정@GetMapping("/visit")public String showVisit( @CookieValue(name ..
서블릿(Servlet), JSP(Java Server Pages), 서블릿 컨테이너 간단 정리
·
JAVA
서블릿(Servlet)자바에서 요청과 응답을 처리할 수 있는 기본적인 컴포넌트는 서블릿(Servlet)이다서블릿은 클라이언트로부터 HTTP 요청(request)을 받고 HTTP 응답(response)을 처리하는 역할을 하지만, HTML을 작성하려면 Java 코드 안에 직접 HTML 코드를 작성해야함response.getWriter().println("Hello, World!"); 유지보수가 어렵고 가독성이 떨어지며, 복잡한 UI를 개발하기에는 비효율적이다이러한 단점을 보완하기 위해 등장한 기술이 JSP(Java Server Pages)이다JSP(Java Server Pages)JSP는 HTML 태그 안에 Java 코드를 삽입할 수 있어, 페이지를 개발할 때 훨씬 더 편리하게 작업할 수 있다 He..
250116 TIL
·
TIL
프레임워크 vs 라이브러리프레임 워크▪️전체적인 구조와 규칙을 제공하는 틀, 개발자가 그 틀 안에서 작업하며, 프레임워크가 개발 과정을 주도함 ▪️프레임워크는 레고 세트와 비슷하다, 이미 만들어진 가이드(설명서)가 있어 그 규칙에 따라 조립,정해진 구조에 맞춰야함 🧩프레임 워크 구성요소1. Cold Spot (프레임워크 코어)▪️ 변경되지 않고 반복적으로 재사용되는 부분.▪️프레임워크가 제공하는 핵심 라이브러리와 핵심 기능, 개발자가 수정하거나 확장하지 않음. 2. Hook Point (확장 포인트)▪️ 프레임워크가 개발자에게 제공하는 확장 가능한 지점.▪️ 일반적으로 추상 클래스나 인터페이스 형태로 제공됨.▪️ 개발자는 이 부분을 구현하거나 상속받아 애플리케이션 고유의 로직을 추가할 수 있음 Spri..