| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 | 30 | 31 |
- spring security
- lombok
- OAuth 2.0
- builder
- factory
- Spring
- 일급 컬렉션
- 일급 객체
- synchronized
- Google OAuth
- middleware
- Dependency Injection
- Volatile
- nestjs
- java
- Today
- Total
목록JAVA (10)
HJW's IT Blog
0. Hibernate 프록시 객체본 글로 넘어가기전 간략하게 나마 Proxy 객체에 대해 짚고 넘어가겠다.JPA 의 엔티티 간에 연관 관계가 있을때, fetch = FetchType.LAZY 가 설정되어 있다면, Hibernate 는 DB에 실제 쿼리를 날리는 대신 임시 프록시 객체를 반환한다. 이로 인해, Hibernate 는 데이터가 실제로 필요한 순간까지 SQL 을 실행하지 않을 수 있다.Member member = em.getReference(Member.class, 1L); 이와 같이 getReference() 를 활용하면, 실제 클래스가 아닌 프록시 클래스를 조회할 수 있다. 1. 1:1 관계와 프록시 동작 분석@Entity public class Member { @Id ..
0. 들어가며JPA 의 entity 사이에 연관관계를 올바르게 설정하는것은 매우 중요하다. 데이터 무결성, 성능, 유지보수성 측면 모두에서 영향을 끼칠 수 있는것이 어떻게 연관 관계를 설정하는가 이다. 이번 글에서는, 연관관계의 주인 개념을 명확하게 짚고 넘어가겠다. 1. 연관관계란 무엇인가1.1 객체 지향 모델링 관점에서의 영향관계객체 지향 프로그래밍에서 연관관계는 하나의 객체가 다른 객체를 참조하거나 포함하는 구조를 의미한다. 즉, 객체간의 상호작용을 모델링할 수 있고, 현실의 개념을 더욱 직관적으로 표현할 수 있다. 예를 들어 User 와 Order 이 있다고 가정하자. User 는 여러 Order를 가질 수 있으며, Order 는 한명의 User 를 가진다. 이러한 관계를 어떻게 표현하고 설계할 ..
0. 들어가며JPA(Java Persistence API)는 Java 애플리케이션에서 데이터베이스와의 상호작용을 단순화하는 ORM(Object-Relational Mapping) 기술이다. 그중 EntityManager는 엔티티를 관리하고 데이터베이스의 CRUD 작업을 수행하는 핵심 객체이다. 이 글에서는 EntityManager의 역할과 특징, 그리고 영속성 컨텍스트의 동작 방식에 대해 다뤄보겠다.1. EntityManager 란?JPA 에서 Entity 를 관리하는 객체로, 데이터베이스의 CRUD 작업을 수행하는 역할을 한다. 다음과 같은 주요 기능을 수행한다.1.1 핵심 기능EntityManager 는 Entity 의 생명 주기를 관리한다.영속화 (Persist) : 엔티티 객체를 DB에 저장조회 ..
0. MapStruct 란 무엇인가?0.0 DTO 도메인 엔티티 변환 Java 코드를 작성하다 보면 DTO와 도메인 엔티티 간의 변환 작업이 빈번하게 발생한다. 특히, 계층적 구조를 가진 애플리케이션에서는 Controller - Service - Repository를 거치며 DTO와 엔티티를 서로 변환하는 일이 반복된다. 이를 수작업으로 작성할 경우,필드가 추가되거나 변경될 때마다 수동으로 코드를 수정해야 한다.사람이 작성하는 코드이므로 일부 필드를 누락할 가능성이 있다.필드의 수가 적다면 직접 변환 로직을 작성해도 문제가 없을 것이다. 그러나 필드가 수십 개 이상이거나 변환 로직이 복잡해질 경우, 실수로 인해 오류가 발생할 확률이 급격히 증가한다. 이때 MapStruct는 이러한 변환을 간결하게 처리..
들어가며..이 글은 Spring Framework 없이 순수 Java로 프로젝트를 진행하며, 나의 사고 과정을 기록하고, 어떻게 이런 설계에 도달했는지를 설명하기 위해 작성된 글이다. 특히 User, Message, Channel과 관련된 Service Layer, Repository Layer 그리고 이들 간의 의존성 관리를 어떻게 설계했는지에 대한 고민과 해결 과정을 담고 있다.개요User, Message, Channel 에 대한 Service Layer, Repository Layer 와 이들 사이의 의존성 관리를 다루는 미션을 수행하는 과정에서의 일이다.1. 도메인별 팩토리 + 하드코딩된 의존성1.1 초기 구조처음 설계 단계에서는 SOLID 원칙을 준수하기 위해 Factory Pattern을 도입..
1. Class Loader SystemJVM 의 `Class Loader` 는 Java 프로그램 실행 시 필요한 클래스를 **동적** 으로 로드하는 역할을 한다. 즉, 프로그램 실행시 모든 클래스를 한번에 메모리에 올리는 것이 아닌, 특정 클래스가 필요할 때 해당 클래스 파일을 로드하고 초기화 시키기에 메모리 낭비를 막을 수 있다. `Class Loader` 는 기본적으로 loading - linking - initialization 의 과정을 거친다. 자세히 알아보자 1.1 Loading이 과정에서, 클래스 파일이 로드된다. 클래스 로더는 특정 클래스의 이름을 기반으로 클래스를 찾고, JVM 메모리에 읽어들인다. 이 과정속, 클래스 로더는 주요 3가지 로더를 거치는데, 이들은 계층형 구조를 띄며, 상..
들어가며현대 소프트웨어 개발에서 멀티스레드 프로그래밍은 빠질 수 없는 핵심 주제중 하나이다. 여러 스레드가 하나의 프로그램을 구성하여 조작할 때, 여러 이점이 있지만, 동시성 문제, 일관성 등의 문제또한 야기한다.본격적으로 Volatile 에 대해 이야기 하기 전, 변수 가시성 에 대해 이해하고 넘어가야 한다. 변수 가시성 문제 란 하나의 스레드가 특정 변수의 값을 변경 했을 때, 다른 스레드에서 그 변경 사항을 즉각적으로 확인하지 못하는 상황을 의미한다. 다음 코드를 한번 보자class SharedResource { private boolean flag = false; public void setFlagTrue(){ this.flag = true; } public void waitForFlag()..
Linked ListLinked List 특징이중 연결 리스트로, 각 요소는 이전 및 다음 요소에 대한 참조 를 가진다삽입 및 삭제 작업이 효율적이다요소들이 삽입된 순서대로 유지된다임의 접근 속도가 느리다 → 특정 인덱스 접근 시간 O(n)Queue 와 Deque를 지원메서드LinkedList list = new LinkedList();list.add(1); // 리스트 끝에 추가list.add(index, 1); // index 위치에 삽입list.addFirst(1) // 리스트의 첫번째에 삽입list.remove(); // 첫 요소 삭제list.remove(index); // index 위치 요소 제거list.removeLast()' // 마지막 요소 삭제list.get(index); // 특정 인..
GenericType 을 포괄적으로 일단 정의하겠다클래스나 메서드에서 타입을 미리 정하지 않고 외부에서 사용할 때 타입을 정하도록 하는 문법적 장치왜 사용하는가 → 어떠한 클래스를 만들었는데, 거의 똑같은 클래스를 또 만들어야 한다면 중복되는 부분이 많고 비효율적이다 → 중복을 최소화 하자!class Data{ int obj; Data(int obj){ this.obj = obj; } int getObj(){ return obj; } void printInfo(Integer obj){ System.out.println(obj.getClass().getName()); }}class Data2{ String obj; Data2(String ..
Staticjava 관점으로 static 은 ‘클래스의’ , 공통적인 이라는 의미를 가진다이러한 개념을 이해하기 java가 어떤 방식으로 동작하는지를 알 필요가 있다java application 을 실행하면 JVM 은 OS 로부터 메모리를 할당한다java 컴파일러가 java 소스코드를 바이트코드로 컴파일한다클래스 로더를 통해 JVM 메모리로 로딩한다로드된 클래스 파일들은 기계가 읽을수 없으므로 execution engine 을 통해 기계어로 변환된다이 과정에서 실행엔진에 의해 garbage collector 등도 동작된다즉, 자바는 용도에 따라 여러 영역으로 나누어 메모리를 관리한다. 메소드 영역 → 클래스 파일을 읽어 데이터를 저장하는 영역힙 영역 → 인스턴스가 생성되는 공간이다호출 스텍 → 메소드의 ..