전체 글
[JPA]SpringDataJPA 공통 필드 BaseEntity로 관리하기, Auditing으로 시간관리하기
[JPA]SpringDataJPA 공통 필드 BaseEntity로 관리하기, Auditing으로 시간관리하기
2024.09.24다양한 엔티티를 생성하여 사용하다 보면 엔티티 생성마다 중복되는 필드(id, createdAt, updatedAt 등)를 반복적으로 계속 생성해 줘야 하는 걸까?라는 의문이 들곤 합니다.이번 포스팅에서는 엔티티 생성시 중복되는 필드를 BaseEntity를 활용하여 관리하는 방법에 대해 알아보겠습니다.BaseEntity 생성@Getter@MappedSuperclasspublic class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @CreationTimestamp @Column(name = "created_at", nullable = false, updatable = f..
CSR과 SSR의 개념과 차이점 (feat. SPA, MPA)
CSR과 SSR의 개념과 차이점 (feat. SPA, MPA)
2024.09.11CSR과 SSR의 개념과 차이점을 알아보기 전 SPA와 MPA의 개념과 차이점에 대해 먼저 알아보도록 하겠습니다. SPA(Single Page Application) 개념한 개(Single)의 Page로 구성된 ApplicationCSR(Client Side Rendering) 방식으로 렌더링서버로부터 완전한 새로운 페이지를 불러오지 않고 현재의 페이지를 동적으로 다시 작성함으로써 사용자와 소통하는 웹 애플리케이션 또는 웹 사이트Angular, React, Vue 등 프레임워크로 만든 홈페이지들이 대부분 SPA에 해당 작동 방식SPA는 웹 애플리케이션에 필요한 모든 정적 리소스(HTML, CSS, JavaScript)를 단 한 번만 로딩이후 추가적인 요청 시 페이지 갱신에 필요한 API를 JSON으로 전..
[Docker] Docker Compose로 MySQL 개발환경 설정하기
[Docker] Docker Compose로 MySQL 개발환경 설정하기
2024.09.05로컬 환경MacOSDocker 27.1.1Docker Compose v2.29.1DB IDE: DataGrip docker-composedocker-compose는 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의하여 컨테이너를 묶음으로 관리할 수 있는 개발 환경을 제공하는 관리도구 입니다. docekr-compose를 사용하는 이유yaml파일로 애플리케이션의 서비스를 구성하여 팀원에게 동일한 개발환경을 제공하나의 애플리케이션에 필요한 여러 서비스를 하나의 서비스로 정리하여 컨테이너를 묶음으로 관리각 컨테이너의 의존성, 네트워크, 볼륨 등을 함께 정의 docker-compose로 MySQL 구성하기버전 확인docekr-compose --version먼저 버전을 확인하여 설치 유무를 체크합니다...
REST API, RESTful API란?
REST API, RESTful API란?
2024.08.30APIAPI(Application Programing Interface)Application: 고유한 기능을 가진 모든 소프트웨어를 나타냅니다.Programing: 컴퓨터가 작업을 수행하기 위해 따를 수 있는 프로그램이라는 명령어 순차 조합을 구성하는 것을 말합니다.Interface: 두 애플리케이션 간의 서비스 상호작용을 나타냅니다. 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의합니다.정리하자면 컴퓨터의 기능을 실행, 어떠한 응용프로그램에서 데이터를 주고받기 위한 방법을 의미합니다. RESTREST(Representational State Transfer)Representational: 자원의 표현State: 웹 애플리케이션의 상태Transfer: 이 상태의 전송자원의 표현에 의한..
[Spring]@DataJpaTest, @SpringBootTest 차이
[Spring]@DataJpaTest, @SpringBootTest 차이
2024.08.28@DataJpaTest란?JPA관련 구성 요소에 초점을 맞춘 데이터 액세스 계층 테스트특징Application의 JPA에 필요한 Bean을 로드@Repository 어노테이션을 가진 Bean들을 자동 스캔빠른 테스트 실행 속도데이터 액세스 레이어에 집중하여 구체적인 테스트 가능in-memory embedded DB 사용 가능- @TypeExcludeFiltersApplication 컨텍스트가 생성되는 동안 특정 타입의 빈을 제외시키는 역할을 합니다.DataJpaTypeExcludeFilter를 통해 JPA외의 @Controller, @Service, @Component 등과 같은 어노테이션이 달린 클래스를 컴포넌트 스캔 대상에서 제외시키는 동작을 수행합니다. - @AutoConfigureDataJpa테스..
[Spring]@DataJpaTest를 이용한 테스트코드 작성 deleteAll? deleteAllInBatch?
[Spring]@DataJpaTest를 이용한 테스트코드 작성 deleteAll? deleteAllInBatch?
2024.08.26@DataJpaTest@DataJpaTest 어노테이션은 JPA관련 테스트 설정만 로드합니다.DataSource의 설정이 정상적인지, JPA를 이용하여 데이터를 저장, 수정, 삭제하는지 등의 테스트가 가능하며, 내장형 데이터베이스를 사용하여 실제 데이터베이스를 사용하지 않고 테스트 데이터베이스로 테스트가 가능합니다.(H2, DERBY, HSQLDB) 테스트코드 작성SpringBoot 3.3.3Java21Junit5Spring Data JPA - 테스트코드 환경 구축Entity@Entity@Getter@NoArgsConstructorpublic class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Lon..
[JPA] JPA 영속성 컨텍스트란? 영속성 컨텍스트 개념과 이점
[JPA] JPA 영속성 컨텍스트란? 영속성 컨텍스트 개념과 이점
2024.08.11영속성 컨텍스트영속성 컨텍스트란?엔티티를 영구적으로 저장하는 환경, JPA를 이해하는데 가장 중요한 용어이다.EntityManager.persist(entity) → DB에 저장하는 게 아닌 엔티티를 영속성 컨텍스트에 저장DB저장은 트랜잭션(Transaction)에서 커밋(commit) 시점에 저장된다.영속성 컨텍스트는 논리적 개념이며 눈에 보지 않는다. → 엔티티매니저를 통하여 영속성 컨텍스트에 접근 비영속 (new / transient)영속성 컨텍스트와 전혀 관계없는 새로운 상태// 객체를 생성한 상태 (비영속) JPA와 전혀 관계없는 상태Member member = new Member();member.setid("member1");member.setname("오팔봉");영속상태가 아니므로 영속성 컨..
[JPA] JPA 1차 캐시란? 1차 캐시의 동작원리
[JPA] JPA 1차 캐시란? 1차 캐시의 동작원리
2024.08.061차 캐시란?영속성 컨텍스트 내부에는 엔티티(Entity)를 보관하는 저장소가 있는데 이것을 1차 캐시라고 한다.엔티티 정보를 키 벨류 값으로 가지고 있어 DB에 접근하는 횟수를 줄여 성능상의 이점을 가져온다.엔티티매니저(EntityManager)로 변경, 조회하는 모든 엔티티는 1차 캐시에 저장되며 트랜잭션이 커밋되는 시점에 데이터베이스와 동기화된다. (비교는 PK로 한다.) 좀 더 자세히 동작하는 원리에 대해서 알아보자1차 캐시 동작원리 find를 했을 때 해당 엔티티가 영속성 컨텍스트의 1차 캐시에 존재하고 있을 경우DB조회를 거치지 않고 1차 캐시에 저장되어 있는 엔티티를 반환한다. find를 했을 때 해당 엔티티가 영속성 컨텍스트의 1차 캐시에 존재하지 않을 경우DB를 조회하고 조회한 엔티티..
[Spring] Spring IOC, DI, DL 이란?
[Spring] Spring IOC, DI, DL 이란?
2024.07.27- Spring IOCIOC ( Inversion of Control)란 즉 제어의 역전이다. 제어의 역전이란? 제어권이 역전되다, 기존의 제어방식이 뒤바뀌었다는 것메서드나 객체의 호출작업을 개발자가 결정하는 게 아닌, 외부에서 결정되는 것을 의미한다. 이로 인해 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 되어 가독성, 코드중복, 유지보수를 용이하게 한다.기존객체 생성 → 의존성 객체 생성 → 의존성 객체 메서드 호출스프링 제어의 역전객체 생성 → 의존성 객체 주입 → 의존성 객체 메소드 호출의존성 객체를 직접 생성하지 않고 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입한다. - DIDI (Dependency Infection)란 스프링이 다른 프레임워크와 차별화되어 제공하..
[IntelliJ] IntelliJ Lombok(롬복) 설치, 설정
[IntelliJ] IntelliJ Lombok(롬복) 설치, 설정
2024.07.08- 롬복 (Lombok) 이란?롬복(Lombok)은 자바 클래스 내에서 생성되는 Getter, Setter, toString, 생성자 코드 등의 소스를 어노테이션(Annotation)을활용해 생략함으로써 컴파일 시점에 자동으로 생성해주어 더욱 간결하고 편리하게 만들어주는 라이브러리이다. - 롬복 (Lombok) 설치방법IntelliJ Settings.. → plugin 검색 → marketplace탭에서 Lombok 검색 IntelliJ 2020.03 이후 버전에서는 기본 Plugin으로 Lombok이 설치되어 있다. - Dependency 적용하기Maven 설정https://mvnrepository.com/artifact/org.projectlombok/lombok Maven Repository 사이..
Java - Scanner 클래스 next(), nextLine()의 차이
Java - Scanner 클래스 next(), nextLine()의 차이
2024.05.27next()와 nextLine()의 차이 next()공백( \t ), 엔터( \n )를 기준으로 한 단어 또는 한 문자씩 입력받는다.문자열 내에 엔터( \n ), 공백( \t ) 등은 입력되지 않는다.nextLine()엔터( \n )를 포함한 문자열 전체를 입력받는다.버퍼에 포함된 개행문자를 포함해서 입력받는다.한마디로, next()와 nextLine()은 개행문자의 포함 유무로 나뉜다. 개행문자란?표시 위치를 다음의 행으로 옮기는 데 사용되는 문자. 쉽게 말해 Enter( \n )등 을 의미한다. 예를 들어보자 System.out.print("첫번째 정수를 입력하세요: ");int num1 = scanner.nextInt();System.out.print("연산자를 입력하세요: ");String o..