분류 전체보기

    Jar와 War의 차이(spring initializr packaging)

    Jar와 War의 차이(spring initializr packaging)

    JAR와 WAR은 자바 프로그램 및 관련 자원을 패키지하고 배포하기 위한 파일 형식입니다. 프로젝트 생성시 `Packaging` 옵션에서 JAR 혹은 WAR를 선택하여 해당 형식으로 어플리케이션 패키징하여 배포할 수 있습니다. JAR (Java Archive) 확장자: .jar JAR 파일은 자바 클래스 파일, 리소스 파일 (이미지, 설정 파일 등) 및 라이브러리(JAR 파일 자체 또는 외부 라이브러리)를 하나의 아카이브 파일로 패키징합니다. 일반적으로 JAR 파일은 자바 클래스 파일과 그 클래스들이 사용하는 이미지, 설정 파일, 텍스트 파일, 라이브러리 등을 포함합니다. 이것은 다른 프로그램에서 재사용되거나 실행될 수 있도록 도와줍니다. 예를 들어, 다른 사람이 만든 유용한 코드 조각을 JAR 파일로 ..

    Servlet에 대해 알아보자!! 동작 원리 파악하기

    Servlet에 대해 알아보자!! 동작 원리 파악하기

    Servlet 서블릿은 자바를 기반으로 한 웹 어플리케이션 개발 기술로, 클라이언트의 요청과 응답을 처리하고 동적인 콘텐츠를 생성하는 역할을 담당합니다. Servlet의 역할 앞서 포스팅한 웹 서버 vs 웹 어플리케이션 서버 vs CGI 프로그램: 차이 쉽게 이해하기 에서 서블릿과 서블릿 컨테이너에 관해 간단하게 설명을 했었습니다. 앞에 내용을 안다는 전제하에 설명을 하도록 하겠습니다. 원래는 클라이언트가 데이터를 전송하기 위해서는 소켓 연결, HTTP 요청 메시지 파싱, Content-Type 확인, HTTP 응답 메시지 생성 등 많은 것들을 직접해주어야 했지만 서블릿을 지원하는 WAS(엄밀히 말하면 WAS안에 포함되어 있는 서블릿 컨테이너)를 사용하면서 비즈니스 로직을 제외한 모든 처리를 서블릿이 해..

    웹 서버 vs 웹 어플리케이션 서버 vs CGI 프로그램: 차이 쉽게 이해하기

    웹 서버 vs 웹 어플리케이션 서버 vs CGI 프로그램: 차이 쉽게 이해하기

    웹 (Web): HTTP 기반 웹은 HTTP(하이퍼텍스트 전송 프로토콜) 기반으로 작동합니다. HTTP 메시지는 웹 상에서 클라이언트와 서버 간에 데이터를 교환하는데 사용되는 형식화된 텍스트입니다. HTML, 문서파일, 이미지, 오디오, 영상, XML, JSON 등 다양한 데이터유형을 클라이언트와 서버 사이에서 안전하게 전송할 수 있습니다. 웹 서버 (Web Server) 웹 서버는 클라이언트(웹 브라우저)로부터 HTTP 요청을 받아들이고, 정적인 웹 리소스를 제공하는 역할을 합니다. 정적 리소스: HTML 파일, 이미지, CSS 파일 등 웹 서버 예: Apache, Nginx 등 웹 어플리케이션 서버 (Web Application Server): 웹 어플리케이션 서버는 웹 서버의 확장된 개념으로, 동적..

    JPA Entity의 기본 생성자가 필수인 이유

    JPA Entity의 기본 생성자가 필수인 이유

    Entity는 반드시 `기본 생성자`를 가져야한다. 기본 생성자의 접근 제어자는 `public`, `protected`이어야한다. JPA를 학습할 때 위와 같은 원칙을 본적이 있을 겁니다. 무심코 넘어갔던 개념을 되짚어보기 위해 JPA Entity의 기본 생성자에 대해 포스팅 해보겠습니다. 기본 생성자가 있어야하는 이유? 리플렉션(Reflection)을 통한 객체 생성: JPA는 데이터베이스로부터 엔티티 객체를 생성하여 값을 주입할 때 `Reflection API`를 이용합니다. Reflection API를 통해 객체를 생성하려면 `기본 생성자`가 반드시 필요합니다. JPA는 Entity의 기본 생성자로 객체를 생성한후 Reflection API를 사용하여 값을 매핑합니다. 따라서 Entity에는 기본 ..

    JPA Spring Data JPA: 스프링 프레임워크에서 JPA 편리하게 사용하기

    JPA Spring Data JPA: 스프링 프레임워크에서 JPA 편리하게 사용하기

    Spring Data JPA Spring Data JPA는 Spring 프레임워크의 일부로, JPA(Java Persistence API)를 편리하게 이용할 수 있습니다. 이를 통해 개발자들은 데이터 엑세스 코드를 작성하는데 적은 시간을 투자하고, 비즈니스 로직에 더욱 집중할 수 있습니다. Repository 인터페이스: 편리함 증대 Spring Data JPA는 데이터베이스와의 상호작용을 더욱 간단하게 만들기 위해 Repository 인터페이스를 활용합니다. 기존의 JPA에서는 개발자가 EntityManager를 사용하여 데이터베이스 작업을 수행하였습니다. 그러나 Spring Data JPA는 이보다 더 추상화된 접근 방식을 제공합니다. 개발자는 단순히 Repository 인터페이스를 정의하고, 필요한..

    JPA JPQL(객체 지향 쿼리 언어)를 완벽히 이해해보자

    JPA JPQL(객체 지향 쿼리 언어)를 완벽히 이해해보자

    JPQL: Java Persistence Query Language `em.find()` 메서드는 엔티티의 기본키를 이용하여 데이터를 가져오는 방법입니다. 하지만 `em.find()` 메서드만으로는 더 복잡한 검색 조건이나 특정 필드 기반의 조회 등의 다양한 쿼리를 작성하기는 어렵습니다. 이러한 처리를 위해 SQL과 같은 유연한 처리를 위해 JPQL를 제공합니다. JPQL은 다음과 같은 특징을 갖고 있습니다. 객체 지향적 쿼리 작성: SQL: 데이터베이스 테이블을 대상으로 하는 데이터 중심의 쿼리 JPQL: Entity 객체를 대상으로 하는 객체지향 쿼리 데이터 베이스의 독립성: JPQL은 SQL 문법을 추상화하였기 때문에 데이터베이스 독립성을 제공합니다. 복잡한 쿼리 작성 용이: 기존 JPA와는 다르게..

    JPA '값 타입'의 선언과 활용, @AttributeOverride와 @ElementCollection, @CollectionTable 역할

    JPA '값 타입'의 선언과 활용, @AttributeOverride와 @ElementCollection, @CollectionTable 역할

    값 타입 엔티티에서 데이터 타입은 엔티티 타입과 값 타입으로 나눌 수 있습니다. 값 타입은 단순히 값을 의미하고, 고유한 식별자를 가지지 않습니다. 엔티티와 달리 고유한 식별자가 없고, 다른 엔티티와의 관계를 형성하지 않습니다. 값 타입의 데이터들이 고유한 식별자를 갖고 있지 않다고 해서 DB 테이블에 매핑되지 않는 것은 아닙니다. 똑같이 매핑되고 생명 주기도 해당 엔티티에 의존합니다. @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private int age; // ... } 고유한 식별자를 갖고 있는 `id`는 엔티티 타입입니다..

    JPA 영속성 전이(CASCADE)와 고아 객체 제거: 데이터 일관성과 관리 효율 높이는 전략(방법)

    JPA 영속성 전이(CASCADE)와 고아 객체 제거: 데이터 일관성과 관리 효율 높이는 전략(방법)

    영속성 전이: CASCADE JPA 영속성 전이(CASCADE)는 부모 엔티티의 작업이 자식 엔티티로 전파되도록 설정하는 기능입니다. 부모 엔티티의 변경이나 삭제 작업이 연관된 자식 엔티티에 자동으로 전파됨으로써 데이터의 일관성을 유지합니다. 또 중복된 코드 없이 객체 간의 연관 작업을 간편하게 처리함으로 개발 생산성을 높일 수 있습니다. 사용법은 다음과 같이 cascade 옵션을 지정해 주면 됩니다. `CascadeType.ALL`으로 설정하여 모든 작업을 자식 엔티티로 전파하는 예제 코드입니다. @Entity public class Parent { @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) private List children; // ...