일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- refreshtoken
- 다형성
- DI
- 항해99 9기
- 싱글톤패턴
- 인프콘
- 지네릭스
- 스프링컨테이너
- 일급컬렉션
- bean
- IoC
- 비정적중첩클래스
- Velog
- 애너테이션
- publicapi
- 자바의정석
- privateapi
- github actions
- 스파르타코딩클럽
- 정적중첩클래스
- 9기
- SOLID
- 변경감지
- 더티채킹
- Spring
- 인수테스트
- 항해99
- 클라이언트사이드렌더링
- 서버사이드렌더링
- java
- Today
- Total
목록JAVA & Spring & JPA (16)
멈재
JPA에서 데이터를 변경하는 방법을 소개하고 병합을 통한 변경 시에 주의할 점에 대해서 소개하려고 합니다. 일반적으로 Spring Data JPA에서 데이터를 변경하는 방법은 두 가지가 있습니다. 더티채킹에 의한 변경 병합(merge)을 이용한 변경 그리고 Spring Data Jpa를 이용하여 작성한 코드는 보통 다음과 같은 패턴의 형태로 동작되게 됩니다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello jpa"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); try { tx.begin(); // biz l..
스프링에서는 트랜잭션 처리를 하는 선언적 트랜잭션 방식인 Transactional 애너테이션을 제공해주고 있고, 해당 애너테이션이 있다면 트랜잭션 AOP의 대상이 되어 트랜잭션 프록시가 적용된다. 트랜잭션이 무엇인지는 [DB] MySQL 트랜잭션 격리 수준 살펴보기 포스팅을 참고해주세요 본 포스팅에서는 (나도 그랬고) 스프링을 처음 접하거나 익숙하지 않을 때 Transactional 애너테이션으로 인해 마주할 수 있는 두 가지 문제를 소개하려고 한다. 주요 내용은 크게 다음과 같다. 트랜잭션 프록시의 적용 대상과 접근제어자 트랜잭션 AOP 프록시의 내부 호출 트랜잭션 프록시의 적용 대상과 접근제어자 자바에는 외부로부터 함부로 접근하지 못하도록 접근제어자가 존재하고 있고 접근제어자의 종류와 허용 범위는 다..
지금껏 면접에서 제네릭에 관한 질문이 두 번이나 있었다.1. 제네릭은 타입 안전성을 어떤 원리로 보장해주는가 2. 이펙티브 자바로 '배열보다는 리스트를 사용하라'의 주제로 학습한 적이 있던데 설명해보라 첫 번째 질문이 들어왔을 때에는 변성에 관한 단어만 들어봤을 뿐 전혀 몰랐기 때문에 모르겠다고 답변을 했었다. 두 번째 질문은 비교적 최근에 봤던 면접이었는데 이때에는 내용이 기억나질 않아서 가변적인 크기와 고정적인 크기를 이야기하며 메모리적인 이유를 들며 답변했다. 두 번째 답변도 결국 면접관이 원했던 답변을 하지 못했고, 아쉬움이 남아 작성하게 되었다. 제네릭이란컴파일 타임에 타입을 체크하여 코드의 안정성을 높여주는 기능파라미터 타입이나 리턴 타입을 외부에서 지정하는 기법 아래 제네릭의 용어를 알고 가..
최근에 스터디원 중 한 분이 JPA flush를 공유하는 과정에서 잘 이해되지 않는 부분이 있었고, 해당 주제로 의견을 나눈 것이 있었다. 질문이 자세하게 기억나지는 않지만 나도 내 생각과 의견을 말하면서 명확하지 않은 부분이 존재했었다. 문제 상황에 바로 들어가기보다 플러시를 이해하기 위해 영속성 컨텍스트(1차 캐시)의 개념을 간략히 리마인드 해보려고 한다. 영속성 컨텍스트는 영속 엔티티 인스턴스의 집합으로 컨텍스트 내에서 엔티티 인스턴스와 해당 라이프 사이클이 관리된다. 엔티티 매니저 API는 엔티티 인스턴스를 생성 및 제거하고, 기본 키로 엔티티를 찾고, 엔티티에 대해 쿼리하는데 사용한다.An EntityManager instance is associated with a persistence con..
간단한 요청 응답 객체를 만든다거나, 여러 가지 이유로 중첩 클래스를 쓸 때가 있다. 자바의 중첩 클래스로 여러 종류의 중첩 클래스가 존재하지만, 여기에서는 정적 중첩 클래스와 내부 클래스를 중점적으로 알아보려 한다. 중첩 클래스란들어가기에 앞서, 중첩 클래스?? 내부 클래스?? 이름 그대로 뭔가 겹쳐서 사용하는 클래스인 것 같다. 중첩 클래스는 어떤 클래스의 내부에 존재하는 클래스를 의미한다. 중첩 클래스는 컴파일되면 바깥클래스$안쪽클래스의 형태로 컴파일된 클래스 파일이 생성되게 된다.class Outer { // 바깥 클래스 class Inner { // 안쪽 클래스 ... } }🖐️ 외부 클래스와 내부 클래스로 이름 짓는것이 명확하지만 중첩 클래스의 종류로 내부 클래스가 존재하기 때문에 앞으로 바깥..
싱글턴 패턴은 개념과 원리 그리고 구현 코드 자체도 간단하고, 스프링 컨테이너에 적용된 만큼 많은 사람들이 익히 알고 있는 패턴이다. 하지만 그만큼 다소 위험한 예시 코드들을 접하게 되면서 위험성을 가진 코드들을 알기도 쉬워졌다. 나 또한 그런 사람들 중 한 명이었고, 이번 기회에 싱글턴 클래스를 만들 때 주의해야 점을 다뤄보려 한다. 싱글턴 패턴이란 어떤 클래스의 인스턴스가 오직 하나임을 보장하며, 전역적으로 해당 인스턴스에 접근할 수 있도록 하는 제공하는 패턴 싱글턴 패턴을 쓰는 이유는 한 번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다. 싱글턴의 인스턴스는 전역 인스턴스이기 때문에 데이터를 공유하기 쉽다. 그렇다면, 싱글턴 패턴은 어떨 때 사용하는 것이 적합할까 애플리케이션에..
모든 예시 코드는 깃허브에 있으니 참고해주세요. 애너테이션이란 애너테이션은 Java 5부터 등장한 기능으로 Java 컴파일러 또는 JVM에게 추가 정보를 제공하는 메타데이터의 일종이다. @Override @Getter @Setter @Data @Controller ... 메타 데이터란?? 메타데이터란 데이터를 설명해주는 데이터라는 의미를 갖는데 예를 들어, 사진이라는 데이터는 사진 그 자체와 직접 관련이 없는 사진 크기, 해상도, 촬영 일시 등의 추가 정보를 담고 있다. 이러한 사진에 추가적인 정보를 메타데이터라고 한다. 1. 컴파일러에게 코드 문법이나 경고를 나타내지 말라는 정보를 줄 수 있다. @Override 메서드 앞에만 붙일 수 있는 애너테이션으로 부모 클래스의 메서드를 오버라이딩한다는 것을 컴..
Java에는 실수형을 나타내는데 기본적으로 float과 double을 지원한다. float 4 바이트 정밀도 7자리 저장 가능 범위: 1.4x10^(-45) ~ 3.4x10^38 Double 8 바이트 정밀도 15자리 저장 가능 범위: 4.9x10^(-324) ~ 1.8x10^308 실수를 표현하는 방식으로는 고정 소수점 방식과 부동 소수점 방식으로 나눌 수 있다. 이러한 float과 double은 기본적으로 부동 소수점 방식을 사용한다. 고정 소수점과 부동 소수점 컴퓨터는 0과 1로만 이루어진 2진수 체계로 이루어져있다. 그렇기 때문에 실수 또한 2진수로 표현해야 한다. 참고: 컴퓨터는 왜 2진수를 기반으로 할까? https://madplay.github.io/post/why-computer-is-ba..
어떠한 두 대상이 같은지 여부를 확인하는 과정에서 흔히 동일성 비교와 동등성 비교를 하게 된다. 다만, 경우에 따라서 메모리 내 주소값이 달라도 특정 조건을 만족하면 논리적으로 같은 객체로 다뤄야 하는 경우가 존재한다. 동일성(identity): 메모리 내 주소값이 같은지 비교한다. (==) 동등성(equality): 논리적 지위가 동등한 지 비교한다. (equals) 우선 동일성 비교(==)부터 알아보자. int, boolean과 같은 원시 타입간에 동일성 비교는 값을 비교한다. boolean isTrue = true; boolean isFalse = false; System.out.println(isTrue == isFalse); // true == false >> false System.out.pr..
지난 유스콘 콘퍼런스의 OOP START! 세션을 들으면서 캡슐화, 상속의 쓰임을 새로 알게 되면서 객체 지향을 다시 꼼꼼히 알아보자는 생각에서 쓰게 되었다. 객체 지향 프로그래밍의 특징 중 하나로 코드의 재사용. 즉, 상속(inheritance)이 있다. 코드 재사용을 수행할 수 있는 방법은 두 가지가 있다. 상속의 구현(IS-A 관계) 객체 구성(HAS-A 관계) 일반적으로 흔히 아는 내용은 보통 이럴 것이다. IS-A: ~은 ~이다. ex) 강아지는 동물이다. HAS-A: ~은(는) B를 가지고 있다. ex) 자동차는 엔진을 가지고 있다. 내가 처음 이 말을 들었을 당시 되게 추상적으로 다가왔다. ~은 ~이면 IS-A 관계를.... ~은 ~를 가지고 있으면 HAS-A 관계를... . 그래서.... ..