cs/Java 6

왜 같은 엔티티를 두 번 조회해도 DB를 안 탈까? - 영속성 컨텍스트

영속성 컨텍스트(Persistence Context) 는 JPA를 이해할 때 가장 중요한 개념 중 하나다. 사실 JPA가 단순한 SQL 자동 생성기가 아니라는 점도, 대부분 영속성 컨텍스트 때문에 가능하다. 쉽게 말하면,영속성 컨텍스트는 엔티티를 관리하는 JPA의 내부 저장소이자 작업 공간이다. JPA는 엔티티를 그냥 DB에 바로 넣고 바로 꺼내는 방식으로 동작하지 않는다. 중간에 영속성 컨텍스트라는 공간을 두고, 여기서 엔티티를 관리한 뒤 필요한 시점에 DB와 동기화한다. 영속성 컨텍스트란?영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라고 표현한다. 여기서 중요한 건 “DB 자체”가 아니라, 엔티티 객체를 관리하는 메모리상의 컨텍스트라는 점이다. 예를 들어 이런 코드가 있다고 해보자.Member me..

cs/Java 2026.03.29

객체와 RDB의 불일치 5가지

객체지향과 관계형 데이터베이스는 애초에 설계 철학이 다르다.객체지향: 현실 세계를 객체, 참조, 상속, 캡슐화로 표현RDB: 데이터를 테이블, 컬럼, PK, FK, JOIN으로 관리그래서 객체를 그대로 DB에 저장하려고 하면 여러 불일치가 생긴다. 이걸 ORM, 특히 JPA가 중간에서 많이 완화해준다.1. 세분성(Granularity)객체는 하나의 개념을 여러 클래스로 잘게 나눠서 표현할 수 있는데, DB는 하나의 테이블로 단순하게 저장하는 경우가 많다.즉, 클래스 수와 테이블 수가 딱 맞지 않는다는 문제다.예시객체class Member { Long id; String name; Address address;}class Address { String city; String street; String zi..

cs/Java 2026.03.23

JPA (with. ORM, Hibernate)

Spring 기반 백엔드 개발을 하다 보면 JPA라는 기술을 자주 접하게 된다. 실제로 많은 자바 프로젝트에서 데이터 접근 기술로 JPA를 사용한다. 그렇다면JPA는 무엇인가?왜 많은 자바 프로젝트에서 JPA를 사용할까?JPA는 어떻게 동작하는 걸까?이 질문을 제대로 이해하려면 ORM, Hibernate, 그리고 객체와 데이터베이스의 차이를 함께 알아야 한다 JPA란?JPA는 Java Persistence API의 약자로, 자바에서 ORM을 사용하기 위한 표준 인터페이스이다.JPA는 ORM 기술 자체가 아니라 ORM을 사용하기 위한 표준 규격이다. 즉, JPA는 이렇게 말한다."자바에서 데이터베이스를 객체로 다루려면 이런 방식으로 사용하자" 예를 들어 JPA에서는 다음과 같은 코드를 사용할 수 있다.M..

cs/Java 2026.03.23

Spring에서의 @PathVariable, @RequestParam, @ModelAttribute, @RequestBody

Spring으로 API를 개발하다 보면 컨트롤러에서 데이터를 받기 위해 여러 어노테이션을 사용한다. 대표적으로 다음 네 가지가 있다.@PathVariable@RequestParam@ModelAttribute@RequestBody처음 보면 모두 클라이언트가 보낸 값을 받는 역할을 하기 때문에 차이가 헷갈리기 쉽다. 하지만 실제로는 데이터가 위치한 곳과 Spring 내부 동작 방식이 다르다.1. HTTP 요청에서 데이터가 전달되는 위치HTTP 요청은 크게 세 곳에서 데이터가 전달된다.1. URL 경로2. Query Parameter3. HTTP Body 예를 들어 다음과 같은 요청이 있다고 가정해보자.POST /users/10?page=2//Body{ "name": "kim", "age": 25} 이 요..

cs/Java 2026.03.14

빌드 자동화 도구 feat. maven, gradle

빌드 자동화 도구 소프트웨어를 개발할 때 작성한 코드는 바로 실행할 수 있는 형태가 아니다. Java와 같은 언어에서는 코드를 컴파일하고, 필요한 라이브러리를 연결하며, 테스트를 수행한 뒤 실행 가능한 파일을 만들어야 한다. 이러한 과정을 빌드(Build)라고 한다. 프로젝트가 커질수록 빌드 과정은 복잡해지고 반복적으로 수행해야 한다. 이때 빌드 과정을 자동으로 처리해 주는 도구가 바로 빌드 자동화 도구(Build Automation Tool)이다. 빌드 자동화 도구는 코드 컴파일, 테스트 실행, 패키징, 의존성 관리 등 소프트웨어 빌드 과정을 자동으로 수행하는 도구다.예를 들어 Java 프로젝트를 실행하기 위해서는 다음과 같은 과정이 필요하다.소스 코드 컴파일필요한 라이브러리 다운로드테스트 코드 실행..

cs/Java 2026.03.13

[Java] System.in은 한 번만 선언해야 할까?

1. Java에서 데이터를 입력받을 때 사용하는 'System.in' 이게 뭘까? System.in은 "표준 입력 스트림"을 의미"표준 입력"이란?보통 키보드에서 사용자가 입력하는 데이터"스트림(Stream)"이란?데이터가 한 방향으로 흘러가는 통로를 의미즉, System.in은 키보드로 입력한 데이터를 '한 방향'으로 읽을 수 있게 하는 통로 🧠 쉽게 비유해보자System.in = 수도관에 흐르는 물줄기물줄기는 계속 한 방향으로 흐른다. (거슬러 올라갈 수 없음)한 번 지나간 물은 다시 읽을 수 없다.물줄기에 컵(BufferedReader, Scanner 등)을 대서 물(데이터)을 받아오는 것. 📚 System.in의 구조타입: InputStream데이터 단위: Byte(바이트)방향: 읽기 전용(F..

cs/Java 2025.04.29