Dev 226

[MODERN JAVA] 컴파일러가 보는 람다(Lambda)

람다는 파라미터로 코드를 넘기는 기술이다. 사과를 분류하는 메소드가 있다. 메소드는 사과를 분류하는 로직을 갖는데, 로직은 정부정책에 따라 매번 바뀐다고 가정하자. 매번 바뀌는 로직 때문에 메소드를 매번 수정하기는 번거로우니 분류 로직만 변경하고 싶다. 이때, 로직을 간편하게 넘길 수 있는 기술이 '람다'이다. 파라미터로 '로직'만 넘겨받으면 메소드는 어떤 수정도 할 필요가 없다. 정책에 따라 파라미터로 넘겨받는 로직만 달리하면 되기 때문이다. 그러나 파라미터도 일종의 '변수'로 원시타입이나 참조타입만 들어갈 수 있다. '코드'가 들어갈 수 없다. 그래서 JAVA는 함수형 인터페이스를 사용한다. 함수형 인터페이스란, 메소드가 하나밖에 없는 인터페이스이다. 하나밖에 없는 메소드는 '함수'이다. 람다는 함수..

Dev/JAVA 2023.06.01

[JPA] 엔티티 매핑 - 기본 키 생성전략 ( IDENTITY, SEQUENCE )

JPA는 어노테이션으로 엔티티와 테이블을 매핑한다. [JPA] 엔티티 매핑 - @Entity, @Table, @Column 엔티티매니저에 의해 생성된 엔티티는 DB의 테이블과 매핑된다. 매핑 작업은 JPA프레임워크가 담당한다. 개발자가 해야할 일은 어떤 엔티티가 어떤 테이블과 매핑되어야 하는지, 어떤 필드가 기 lordofkangs.tistory.com 테이블에서 가장 중요한 개념 중 하나가 '기본 키' 이다. 개발자는 기본 키 정보를 엔티티에 어노테이션으로 '표시'하여 JPA에게 전달해야 한다. JPA는 표시된 어노테이션을 바탕으로 테이블과 엔티티를 매핑한다. @Id @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy...

Dev/JPA 2023.05.31

[JPA] 엔티티 매핑 - @Entity, @Table, @Column

엔티티매니저에 의해 생성된 엔티티는 DB의 테이블과 매핑된다. 매핑 작업은 JPA프레임워크가 담당한다. 개발자가 해야할 일은 어떤 엔티티가 어떤 테이블과 매핑되어야 하는지, 어떤 필드가 기본키인지, 어떤 필드가 어떤 컬럼과 매핑되어야 하는지를 '표시' 하는 작업이다. '표시'는 '어노테이션'으로 이루어진다. [JAVA] 어노테이션( Annotation )이란? 어노테이션(Annotation)은 무엇일까? 어노테이션은 '주석'이다. JVM이 읽는 주석이다. 주석이 필요한 이유가 무엇일까? 철학책과 과학책이 있다. 과학책은 과학코너로 철학책은 철학코너로 분류하고 lordofkangs.tistory.com 어노테이션에 대한 자세한 내용은 위 포스팅을 참고 바란다. 이번 포스팅에서는 매핑작업에 사용되는 가장 기..

Dev/JPA 2023.05.31

[JAVA] 어노테이션( Annotation )의 속성

[JAVA] 어노테이션( Annotation )이란? (1) 어노테이션(Annotation)은 무엇일까? 어노테이션은 '주석'이다. JVM이 읽는 주석이다. 주석이 필요한 이유가 무엇일까? 철학책과 과학책이 있다. 과학책은 과학코너로 철학책은 철학코너로 분류하고 lordofkangs.tistory.com 이전 포스팅에서 어노테이션의 개념을 알아보았다. 이번 포스팅에서는 어노테이션의 속성을 다루어보겟다. 어노테이션의 속성 어노테이션은 '특정한 로직'이 처리되어야 하는 대상에 남기는 '표시'이다. '표시'를 남길 때, 단순히 '@' 하나로만 남기면 구체적인 정보를 제공할 수 없다. 조금 더 세밀한 작업을 위해서는 구체적인 데이터를 담아야 하는데, 어노테이션의 속성이 그 역할을 한다. 속성은 추상메소드로 구현..

Dev/JAVA 2023.05.29

[JAVA] 어노테이션( Annotation )이란?

어노테이션(Annotation)은 무엇일까? 어노테이션은 '주석'이다. JVM이 읽는 주석이다. 주석이 필요한 이유가 무엇일까? 철학책과 과학책이 있다. 과학책은 과학코너로 철학책은 철학코너로 분류하고 싶다. 그런데 철학책과 과학책은 외관으로 구분하기 어렵다. 그래서 색상 인식 분류기를 하나 구매했다. 색상인식분류기가 구분할 수 있도록 과학책 오른쪽 상단에 '파란원' 표시를 남겼다. 파란원이 있는 책은 과학코너로 분류되어야 한다. 어노테이션은 '파란원'과 같다. 클래스는 모두 구조가 같다. 모두 필드와 메소드로 구성되어 있다. 외관으로는 구분이 안되나 클래스의 목적은 제각기 다르다. 그래서 개발자는 처리를 달리하고 싶은 대상에 어노테이션을 표시해 JVM에게 알려준다. @Entity @Entity publ..

Dev/JAVA 2023.05.29

[JPA] 영속성 컨텍스트의 이점 ( + DirtyChecking )

[JPA] JPA 동작원리 ( 영속성 컨텍스트 ) [JPA] 패러다임의 불일치 어플리케이션 개발은 주로 객체지향언어로 이루어진다. 객체지향언어는 현실의 많은 문제를 코드로 구현하지만 문제가 있다. 데이터는 주로 관계형DB에 저장되는데 관 lordofkangs.tistory.com 영속성 컨텍스트의 동작원리를 간단히 설명하면, 엔티티(member)는 영속화(persist)되어 1차 캐시에 저장된다. 그리고 쓰기지연SQL저장소에는 INSERT문이 생성되어 1차캐시에 등록된 데이터를 DB 테이블에 추가할 준비를 한다. 그리고 flush 명령이 내려오면 쓰기지연SQL저장소에 저장된 쿼리들이 실행되면서 1차캐시와 DB가 동기화된다. 마무리로 커밋(commit)까지 완료되면 완전히 1차캐시 내용이 DB에 반영된다...

Dev/JPA 2023.05.25

[JPA] 엔티티(Entity)가 기본생성자를 가져야 하는 이유 ( Reflection )

조회시 사용되는 엔티티(Entity)는 기본생성자를 가지고 있어야 한다. @Entity @Data public class Member { @Id public String name; public int age; public Member() {} //반드시 필요! public Member(String name, int age) { this.name = name; this.age = age; } } 이유가 무엇일까? ◎ Reflection EntityManger가 조회(find)를 요청하면 1차캐시에 원하는 엔티티가 없는 경우 DB에 SELECT문을 실행하여 조회한다. 그리고 결과를 1차캐시에 저장하고 엔티티 객체를 생성하여 반환(return)한다. 즉, 프로그램 실행 중에 동적으로 엔티티 객체를 생성해야 한..

Dev/JPA 2023.05.25

[JPA] 트랜잭션(Transaction) 이해하기(2) - JPA

DB의 데이터변경은 '트랜잭션(Transaction)' 단위로 이루어진다. 트랜잭션이란? DB 데이터 변경은 단 하나의 쿼리만으로 이루어지지 않는다. 입금을 생각해보자. A가 B에게 5만원을 입금하면 두 가지 쿼리가 실행되어야 한다. 1) A계좌에 5만원 출금 2) B계좌에 5만원 입금 1) 과 2)는 독립되어 있지 않다. 1)이 성공해도 2)가 실패하면 1)은 원복되어야 한다. 그러므로 여러 처리를 하나의 단위로 묶는 논리적 단위가 필요한데, 이가 바로 '트랜잭션'이다. [JPA] 트랜잭션(Transaction) 이해하기(1) - JDBC DB의 데이터변경은 '트랜잭션(Transaction)' 단위로 이루어진다. 트랜잭션이 필요한 이유가 무엇일까? DB 데이터 변경은 단 하나의 쿼리만으로 이루어지지 않..

Dev/JPA 2023.05.24

[JPA] 트랜잭션(Transaction) 이해하기(1) - JDBC

DB의 데이터변경은 '트랜잭션(Transaction)' 단위로 이루어진다. 트랜잭션이란? DB 데이터 변경은 단 하나의 쿼리만으로 이루어지지 않는다. 입금을 생각해보자. A가 B에게 5만원을 입금하면 두 가지 쿼리가 실행되어야 한다. 1) A계좌에 5만원 출금 2) B계좌에 5만원 입금 1) 과 2)는 독립되어 있지 않다. 1)이 성공해도 2)가 실패하면 1)은 원복되어야 한다. 그러므로 여러 처리를 하나의 단위로 묶는 논리적 단위가 필요한데, 이가 바로 '트랜잭션'이다. DB에서 트랜잭션 구현하기 H2 DB에서 트랜잭션을 이해해보자. 계좌 테이블(Account)은 계좌정보가 들어있다. 사쿠라는 20000원 김채원은 30000이 계좌에 들어있다. 그럼 사쿠라가 김채원에게 5000원을 송금하는 과정을 구현..

Dev/JPA 2023.05.24

[JPA] JPA 프로젝트 만들기 ( with Maven )

JPA는 SQL 중심 프로그래밍을 자동화하여 개발자가 쿼리를 짜는 노고를 줄이는 ORM 기술이다. JPA를 구현하는 대표 구현체는 Hibernate이다. JPA 구현은 대부분 Hibernate로 구현된다. DB는 H2 DB를 사용할 예정이다. [ DB ] H2 DB를 사용하는 이유 H2 데이터베이스는 간단한 프로젝트나 테스트용으로 적합한 데이터베이스이다. H2의 장점은 Embeded모드를 지원하기 때문이다. Application과 DB의 통신 Oracle , MySQL, MariaDB의 작동원리는 위 그림과 같 lordofkangs.tistory.com ( H2 사용은 위 포스팀 참고 ) 그럼 JPA 프로젝트를 만들어보자. 1. pom.xml 설정하기 JPA 예제를 위한 라이브러리를 디펜던시로 추가해보자..

Dev/JPA 2023.05.22