| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- http
- Kotlin
- TypeScript
- 배포
- Studying
- Design
- Algorithm
- frontend
- CS
- react
- Database
- Network
- Spring
- inflearn
- DB
- springboot
- VUE
- architecture
- GCP
- spring boot
- java
- docker
- AI
- Android
- SQL
- blockchain
- DL
- cloud
- Python
- OS
- Today
- Total
목록java (65)
소소한 지식 저장소
Lombok이란Java 개발에서 반복적으로 작성해야 하는 보일러플레이트 코드(boilerplate code)를 줄이고 가독성을 높이기 위해 사용하는 라이브러리임.보일러플레이트 코드란 본질적인 비즈니스 로직과 무관하지만 언어 구조상 반드시 작성해야 하는 반복 코드를 가리킴. Java에서는 객체 필드를 다룰 때 필요한 getter(), setter(), equals(), hashCode(), toString() 메서드가 대표 사례임. Lombok은 이 메서드들을 어노테이션 하나로 컴파일 시점에 자동 생성해 줌.주요 Lombok 어노테이션 어노테이션 역할/설명 적용 위치 @Getter모든 필드에 대해 getter 메서드 자동 생성클래스@Setter모든 필드에 대해 setter 메서드 자동 생성클래스@ToS..
객체 생성 패턴 (Creational Patterns) 개요객체의 생성 과정을 추상화하여, 시스템이 구체적인 클래스에 의존하지 않고 객체를 만들 수 있게 해주는 패턴군임. 패턴명 주요 목적/역할 대표 예시 Singleton단 하나의 인스턴스만 생성·공유 (전역에서 하나의 객체만 필요할 때)Runtime, LoggerFactory Method객체 생성을 하위 클래스에서 담당. 상위 클래스는 인터페이스만 제공Calendar.getInstance()Abstract Factory관련 객체 집합을 통일된 방식으로 생성 (객체 계열 묶음 생성)GUI Toolkit, DAO FactoryBuilder복잡한 객체의 생성 절차를 단계별로 분리, 체이닝 지원StringBuilder, Lombok @BuilderSing..
JVM 구조JVM(Java Virtual Machine)은 자바 소스 파일(.java)이 컴파일러(javac)를 거쳐 바이트코드(.class)로 변환된 후, ClassLoader를 통해 JVM 내부로 로드되어 실행되는 가상 머신임.JVM 내부는 크게 공유 영역(Shared Area)과 스레드별 영역(Per Thread)으로 구분됨.공유 영역에는 다음 세 구역이 존재함.Heap: 객체 인스턴스가 저장되는 공간. Young Generation(Eden, S0, S1)과 Old Generation(Tenured)으로 구성됨.Method Area: 클래스 메타데이터와 상수 풀(Runtime Constant Pool)이 저장됨.Code Cache: JIT 컴파일된 네이티브 코드가 저장됨.스레드별 영역에는 각 Th..
IP와 Port네트워크 환경에서 프로세스 간 통신을 식별하려면 IP와 Port를 함께 사용함.IP 주소: 인터넷에서 특정 컴퓨터(Host)를 식별하는 논리적 주소. 유선/무선 네트워크 장비를 거쳐 각 호스트에 할당됨.Port: 동일한 IP를 가진 Host 안에서 실행 중인 특정 서비스/프로세스를 구분하는 번호.둘을 합쳐 IP:Port 형태로 표현하며, 예를 들어 http://168.126.63.42:8080은 IP 168.126.63.42의 호스트에서 포트 8080으로 열린 프로세스에 접근함을 의미함.Localhost vs 127.0.0.1동일 Host 안에서 프로세스끼리 통신할 때 사용하는 특수 주소임.localhost: 로컬 호스트를 가리키는 도메인 이름127.0.0.1: 루프백(loopback) I..
1. 스프링 데이터 JPA 예제의 트레이드오프앞 장의 어댑터 구조는 ItemService가 기존 ItemRepository 계약만 알도록 유지한다. 구현 기술을 바꿔도 서비스 코드를 수정하지 않아도 되므로 DI와 OCP에 유리하다.어댑터 구조의 클래스 의존 관계 ItemService는 ItemRepository에만 의존한다. JpaItemRepositoryV2가 기존 인터페이스를 구현하면서SpringDataJpaItemRepository로 위임하는 어댑터 역할을 한다.어댑터 구조의 런타임 객체 의존 관계실행 시 itemService → jpaItemRepositoryV2 → SpringDataJpaItemRepository 프록시 순으로 호출된다. 서비스는 구현체 교체를 알 필요가 없다.하지만 중간 어댑..
1. Querydsl 소개Querydsl은 JPA의 동적 쿼리 문제를 자바 코드로 해결하는 라이브러리다. JPQL 문자열을 조립하는 대신, 컴파일 시점에 생성되는 Q 타입과 타입 안전한 API로 조건을 작성한다.동적 쿼리: BooleanBuilder 또는 조건 메서드를 where()에 조합한다.컴파일 시점 검증: 엔티티 속성명 오타·타입 불일치를 컴파일 단계에서 확인한다.조건 재사용: likeItemName(), maxPrice()처럼 조건을 메서드로 분리해 여러 쿼리에서 재사용한다.Querydsl은 JPA 위에서 JPQL을 생성하므로 EntityManager가 필요하다. JPA와 스프링 데이터 JPA를 이해한 뒤 사용하는 것이 바람직하다.2. Querydsl 설정스프링 부트 2.x와 3.x는 Query..
1. 스프링 데이터 JPA 소개스프링 데이터 JPA는 JPA를 더 편리하게 사용하도록 돕는 라이브러리다. 핵심은 JPA를 대체하는 기술이 아니라 JPA 위에서 반복되는 리포지토리 코드를 줄이는 도구라는 점이다. 따라서 JPA의 엔티티 매핑·영속성 컨텍스트·JPQL을 이해하는 것이 우선이다.대표 기능은 다음 두 가지다.JpaRepository 기반 공통 인터페이스: 기본 CRUD, 페이징·정렬 기능을 제공한다.쿼리 메서드: 인터페이스 메서드 이름을 분석해 JPQL을 만들고 실행한다.2. 공통 인터페이스 - JpaRepositoryJpaRepository는 Repository → CrudRepository → PagingAndSortingRepository를 확장한다. CRUD뿐 아니라 페이지·정렬, JPA..
1. JPA 시작스프링이 DI 컨테이너를 비롯한 애플리케이션 전반의 기능을 제공한다면, JPA는 ORM 기반 데이터 접근 기술을 제공한다. JdbcTemplate·MyBatis는 개발자가 SQL을 직접 작성하지만, JPA는 객체와 테이블의 매핑 정보를 바탕으로 SQL 생성·실행·결과 매핑을 처리한다.실무에서는 JPA를 더 편리하게 쓰기 위해 스프링 데이터 JPA와 Querydsl을 함께 사용한다. 이 강의에서는 JPA의 기본 적용 흐름을 확인하고, 이후 스프링 데이터 JPA·Querydsl로 확장할 수 있는 기반을 만든다.JPA: 자바 ORM 표준스프링 데이터 JPA: JPA 사용을 편리하게 하는 리포지토리 추상화Querydsl: 타입 안전한 동적 쿼리 작성 도구2. JPA 설정spring-boot-st..
1. MyBatis 소개MyBatis는 JdbcTemplate보다 많은 기능을 제공하는 SQL Mapper다. JDBC 반복 작업을 줄이고 SQL 결과를 객체로 매핑한다는 점은 JdbcTemplate과 비슷하지만, SQL을 자바 문자열이 아니라 XML에 작성하고 동적 쿼리를 편리하게 다룰 수 있다는 점이 핵심이다.여러 줄 SQL 비교JdbcTemplateString sql = "update item " + "set item_name=:itemName, price=:price, quantity=:quantity " + "where id=:id";MyBatis update item set item_name=#{itemName}, price=#{price}, ..
1. 테스트 - 데이터베이스 연동데이터 접근 기술은 실제 데이터베이스에 데이터를 정상적으로 저장·조회하는지 검증해야 한다. 이 강의에서는 기존 ItemRepositoryTest를 실제 H2 DB와 연결해 실행하고, 테스트 데이터가 서로 영향을 주지 않도록 만드는 과정을 다룬다.테스트 코드는 src/test에 있으므로 테스트 실행 시 src/test/resources/application.properties가 우선 적용된다. 기존 테스트 설정에는 DB 연결 정보가 없으므로 다음처럼 추가한다.main - application.propertiessrc/main/resources/application.propertiesspring.profiles.active=localspring.datasource.url=jd..
