본문 바로가기

Development/Spring

(40)
[Spring] JPA (Java Persistence API), Hibernate, Spring Data JPA JPA (Java Persistence API) 자바 진영의 ORM 기술 표준을 채택된 인터페이스의 모음 ORM이 큰 개념이라면 JPA는 더 구체화된 스펙을 포함함 즉 JPA는 실제로 동작하는 것이 어떻게 동작해야 하는지 메커니즘을 정리한 표준 명세 JDBC JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접근할 수 있게 해주는 API JDBC는 관계형 데이터베이스를 사용하기 위한 표준 인터페이스를 제공하며, SQL 쿼리를 실행하거나 결과를 검색하는 등의 데이터베이스 관련 작업을 수행할 수 있음 JPA의 메커니즘은 내부적으로 JDBC를 사용 개발자가 직접 JDBC를 구현하면 SQL에 의존하게 되어 개발 효율성이 떨어지는 문제 발생 JPA는 개발자 대신 적절한 SQL을 ..
[Spring JPA] DDL, DDL 옵션 DDL Spring JPA에서 DDL(Data Definition Language)은 데이터베이스 스키마를 생성하거나 변경하는 SQL 명령을 의미 DDL에는 보통 'CREATE', 'ALTER', 'DROP' 등의 명령어가 포함됨 Spring Boot에서 JPA를 사용할 때, 'spring.jpa.hibernate.ddl-auto' 라는 설정 속성을 통해 Hibernate가 어떻게 DDL 명령을 실행할지를 정의할 수 있음 ddl-auto 옵션 종류 create: 기존테이블 삭제 후 다시 생성 (DROP 후에 CREATE) create-drop: create와 같으나 종료시점에 테이블 DROP (테스트 코드 실행 시 주로 사용) update: 변경분만 반영, 추가만 반영되고 삭제는 반영되지 않는다. (DB..
[Spring] 스프링 부트의 동작 방식 스프링 부트의 동작 구조 스프링 부트에서 spring-boot-starter-web 모듈을 사용하면 기본적으로 톰캣(Tomcat)을 사용하는 스프링 MVC 구조를 기반으로 동작함 서블릿(Servelt)은 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술로, 클라이언트로부터 온 HTTP 요청에서 URL, header, 요청 파라미터를 추출한다. 그리고 애플리케이션 로직과 상호작용하며 response를 생성한다. 서블릿들은 서블릿 컨테이너에서 관리함 서블릿 컨테이너는 서블릿 인스턴스를 생성하고 관리하는 역할을 수행하는 주체 톰캣은 WAS의 역할과 서블릿 컨테이너의 역할을 수행하는 대표적인 컨테이너 서블릿 컨테이너의 특징은 다음과 같다. 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주..
[Spring] 스프링 부트란? Spring Framework 스프링 프레임워크(Spring Framework)는 자바(java) 기반의 애플리케이션 프레임워크. 현재 우리나라의 '전자정부 표준 프레임워크'의 기반 기술로 채택되어 공공기관 웹 서비스를 개발할 때도 사용. 엔터프라이즈급 개발을 편리하게 만들어주는 '오픈소스 경량급 애플리케이션 프레임워크'로도 불림. 스프링의 핵심 가치는 "애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 하는 것" 제어 역전 (Inversion of Control) 객체의 관리를 컨테이너(Spring 컨테이너 또는 IoC 컨테이너)에 맡겨 제어권이 넘어간 것을 제어 역전이라고 부름 일반적인 자바 개발의 경우, 객체를 사용하기 위해 아래와 같은 코드를 사용함 pa..
[Spring] JSP/Servlet부터 Spring, 그리고 Springboot 까지 JSP/Servlet 초기의 웹 개발에서는 Java Servlet을 통해 웹 애플리케이션을 개발하였습니다. Servlet이란 웹 어플리케이션을 생성하는 데 사용되며, 서버 측에 위치하며 동적인 웹 페이지를 생성합니다. Servlet은 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현을 통해 이루어지게 됩니다. Servlet API에는 Servlet, GenericServlet, HttpServlet, ServletRequest, ServletResponse 등과 같은 많은 인터페이스와 클래스가 있습니다. Servlet 이전에는 CGI(Common Gateway Interface) 스크립팅 언어가 서버 측 프로그래밍 언어로서 일반적이었습니다. 그러나 이 기술에..
[Spring] Spring JPA에서 null을 리턴 하지 않는 경우와 Optional 타입에 대하여 프로젝트를 진행하다가 JPA 메서드 리턴 타입에 Optional 래퍼 클래스를 씌운 적이 있는데, 이게 알고보니 JPA에서 null을 리턴하지 않는 메서드에다가도 적용을 했었던 의미 없는 변경을 한 적이 있습니다. 이 글에서는 Spring JPA에서 리턴 타입에 관해 작성해보고자 합니다. Optional Class Optional 은 Null이 아닌 값을 포함하거나 포함하지 않을 수 있는 컨테이너 객체를 나타내는 Java 클래스입니다. 값이 존재하는 경우 `isPresent()` 메서드는 `true`를 반환하며, `get()` 메서드는 해당 값을 반환합니다. 값의 존재 여부에 따라 의존하는 추가 메서드도 제공됩니다. 예를 들어, 값이 존재하지 않을 때 기본값을 반환하는 `orElse()` 메서드나 값이 ..
[Spring]Github Actions로 Springboot CI 구현하기, postgres 설정 여기서 CI/CD란? CI/CD는 Continuous Integration(지속적 통합) / Continuous Delivery(지속적 전달)의 줄임말입니다. 애플리케이션 개발 단계를 자동화하여 애플리케이션을 더욱 짧은 주기로 배포할 수 있습니다. CI/CD는 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제(일명 "통합 지옥(integration hell)")를 해결하기 위한 솔루션입니다. "CI"는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미합니다. 지속적인 통합이 제대로 구현되면 애플리케이션 코드의 새로운 변경 사항이 정기적으로 빌드 및 테스트를 거쳐 공유 리포지토리에 병합됩니다. 따라서 여러 명의 개발자가 동시에 애플리케이션 개발과 관련..
[Springboot] @NotNull, @NotEmpty, @NotBlank의 차이점 "Bean Validation is a standard validation specification that allows us to easily validate domain objects by using a set of constraints declared in the form of annotations." Springboot에서 Controller layer로 들어오는 Domain의 유효성을 검사할때 Bean Validation을 사용하여 편리하게 유효성을 검사할 수 있습니다. 이를 위해선 단순히 Domain 객체의 Field에 유효성이 필요한 어노테이션을 선언합니다. 그러나 각 어노테이션들의 기능을 이해하지 못하면 정확한 유효성 검사를 할 수 없습니다. 제가 겪은 어노테이션 헷갈렸던 어노테이션들은 @..