Spring

Spring

비동기 동기 블로킹, 논블로킹

동기 동기 작업은 하나의 작업이 완료될 때까지 다른 작업을 대기하는 방식입니다. 즉, 현재 작업이 끝나야만 다음 작업이 시작됩니다. 작업이 순차적으로 실행되며, 작업 간에 의존성이 있는 경우에 주로 사용됩니다. 데이터베이스 트랜잭션, 파일 읽기/쓰기 작업, 연속적인 계산 작업 등등에 사용합니다. public class Main { public static void main(String[] args) throws InterruptedException { System.out.println("작업 1 시작"); task1(); System.out.println("작업 2 시작"); } public static void task1() throws Interr..

Spring

JPA - Entity 매핑

필드 매핑 종류 어노테이션 설명 @Column 컬럼 매핑 @Temporal 날짜 타입 매핑 @Enumerated enum 타입 매핑 @Lob BLOB, CLOB 매핑 @Transient 특정 필드를 컬럼에 매핑하지 않음(매핑 무시) 이제 위의 종류의 옵션들을 알아볼려고 한다. @Column 속성 설명 기본값 name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름 insertable, updatable 등록, 변경 가능 여부 TRUE nullable(DDL) null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다. unique(DDL) @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제 약조건을 걸 때 사용한다. ..

Spring

JPA - Entity 매핑 (데이터베이스 스키마 자동 생성)

매핑 종류 객체와 테이블 매핑: @Entity, @Table 필드와 컬럼 매핑: @Column 기본 키 매핑: @Id 연관관계 매핑: @ManyToOne,@JoinColumn @Entity @Entity 어노테이션이 붙인 클래스는 JPA가 관리하고 이것을 엔티티라고 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수이다. !!! 주의 !!! 기본 생성자 필수 ( 파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용 X 저장할 필드에 final 사용 X @Table name : JPA에서 사용할 엔티티 이름을 지정한다. - 보통은 Entity 그대로의 이름을 쓰긴 합니다. catalog : 데이터베이스 cat..

Spring

JPA - 영속성 컨텍스트

영속성 컨텍스트 전에 썻던 글처럼 EntityManagerFactory 에서 EntityManager 를 생성하여 커넥션풀에서 미리 연결를 하고 있는 디자인 패턴에서 하나를 사용하여 DB 에 데이터 CRUD 를 하게 된다. 그렇다면 영속성 컨텍스트는 무엇일까? - Entity를 영구 저장하는 환경 이라는 뜻 - EntityManager.persist(entity) -> 영속성 컨텍스트에 저장한다는 구문 - 논리적인 개념으로 EntityManager 를 통해서 영속성 컨텍스트에 접근한다. Spring 프레임워크는 아래와 같은 구조를 가지고 있다. Entity 생명 주기 비영속 (new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속 (managed) 영속성 컨텍스트에 관리되는 상태..

Spring

JPA - 구동 방식

JPA 구동 방식 설정 정보를 조회하고 Persistence 에서 EntityManagerFactory 를 생성하고 그 안에서 EntityManager 를 생성하게 된다. 코드 persistence.xml 위와 같이 나의 상황에 맞게 설정해둔다. 나는 H2 Database 를 깔지 않고 MySQL 로 사용하기로 하였다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); 위와 같은 구문으로 우리는 hello 라는 정보를 가져온거다. 처음 이미지에 있는 1번 설정 정보 조회와 EntityManagerFactory 생성하는 2번 부분이다. 자 이제 EntityManagerFactory 를 만들었으니 여러 EntityManag..

Spring

JPA - 기본 개념

JPA Spring 으로 예시를 들어보자면 Spring 에서 JDBC 의 API를 이용한 JPA 를 사용하여 DB 에 쿼리를 날려 결과를 반환한다. 여기서 애플리케이션과 DB 에 매핑해주는것이 JPA 이다. - 직접 SQL 을 써서 가져오는 MyBatis 도 있다. JPA는 인터페이스 모음 - 하이버네이트, EclipseLink, DataNucleus - 이렇게 3개가 존재한다. 하지만 80%이상 하이버네이트를 쓰게 된다. 그렇다면 왜 사용해야 하나? - SQL 중심적인 개발에서 객체 중심으로 개발 - 생산성 - 유지보수 - 패러다임의 불일치 해결 - 성능 - 데이터 접근 추상화와 벤더 독립성 - 표준 의미로 사용하는것 같다. 내가 JPA 와 Mybatis 를 사용해봤지만, JPA 월등히 가독성과 유지보..

Spring

@Conditional

@Conditional 특정 조건일 때만 해당 기능을 활성화 할수 있고, 소스코드를 고치지 않고 가능하다. 특정상황일때만 특정 빈들을 등록해서 사용하도록 도와주는 기능이다. package org.springframework.context.annotation; public interface Condition { boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata); } matches() 메서드가 true 를 반환하면 조건에 만족해서 동작하고, false 를 반환하면 동작하지 않는다. ConditionContext : 스프링 컨테이너, 환경 정보등을 담고 있다. AnnotatedTypeMetadata : 애노테이션 메타 정보를 담..

Spring

HikariCP

Connection Pool 란? 서버가 DB에 연결하기 위한 Connecting 비용이 가장 큰 비율을 차지한다. 이처럼 Connection을 생성하는 작업은 비용이 많이 드는 작업이다. 이를 보완할 수 있는 방법이 바로 Connection Pool이다. 커넥션 풀은 데이터베이스와 연결된 커넥션을 미리 만들어 놓고 이를 pool로 관리하는 것이다. 즉, 필요할 때마다 커넥션 풀의 커넥션을 이용하고 반환하는 기법이다. 커넥션 풀 디자인 패턴처럼 미리 만들어 놓은 커넥션을 이용하면 Connection에 필요한 비용을 줄일 수 있다. 따라서 DB에 빠르게 접속할 수 있다. HikariCP 란? HikariCP는 가벼운 용량과 빠른 속도를 가지는 JDBC의 커넥션 풀 프레임워크이다. SpringBoot는 커넥..

Spring

테스트 도구 Apache JMeter

Apache JMeter 란? Java 로 GUI 기반으로 서버, 서버 그룹, 네트워크 또는 개체의 과부하를 시뮬레이션하여 강도를 테스트하거나 다양한 부하 유형에서 전체 성능을 분석하는 데 사용할 수 있다. 지원하는 프로트콜도 다양하고 플러그인으로 확장성도 다양하다. 또한, 레코딩 기능을 제공하고 오래전부터 사용하던 Test Tool 이다. 이를 통해 큰 커뮤니티와 많은 플러그인이 존재한다. JMeter 사용방법에 대하여 먼저 다운을 받는다. https://jmeter.apache.org/download_jmeter.cgi Apache JMeter - Download Apache JMeter Download Apache JMeter We recommend you use a mirror to downloa..

Spring

Spring interface 의존성 주입

Spring 에 interface 의존성 주입에 대해 알아보자! 당연하지만 실제로 테스트를 해보고 싶었다. 나는 간단하게 Controller 를 Test 로 만들고 TestInterface 와 구현체인 Test1 를 만들었다. 아래의 코드다. @RestController @RequiredArgsConstructor public class Test { private final TestInterface testInterface; @GetMapping("/t") public String test(){ return testInterface.getMsg(); } } public interface TestInterface { String getMsg(); } @Component public class Test1 i..

Domae_
'Spring' 카테고리의 글 목록