패스트캠퍼스 챌린지

패스트캠퍼스 환급 챌린지 12일차 : 9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online 강의 후기

ssoonearth 2025. 4. 12. 23:41

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

 

 

 

 

패스트캠퍼스의 '9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online' 강의 수강 11일차!
오늘은 커뮤니티 피드 서비스에 Spring을 적용시키는 실습과 JPA와 영속성 컨텍스트의 기본 개념을 학습하는 작업을 진행하였다.

 

build.gradle.kts 파일에 직접 plugin과 dependency를 추가하여 Spring을 적용시켰다.
plugin 블록에 Spring Boot 애플리케이션을 빌드하고 실행하기 위한 핵심 plugin인 "org.springframework.boot"과 의존성 관리를 돕기 위한 plugin인 "io.spring.dependency-management" 를 추가하였다.

plugins {
    id("java")
    id("org.springframework.boot") version "3.3.1"
    id("io.spring.dependency-management") version "1.1.5"
}

 

dependencies 블록에는 Spring의 기본 라이브러리를 묶어둔 패키지인 "org.springframework.boot:spring-boot-starter"와 웹 애플리케이션 관련 라이브러리 패키지인 "org.springframework.boot:spring-boot-starter-web", JUnit5 버전(BOM)을 선언하는 의존성인 "org.junit:junit-bom:5.10.0" 을 추가하였다.

dependencies {
    implementation("org.springframework.boot:spring-boot-starter")
    implementation("org.springframework.boot:spring-boot-starter-web")
    testImplementation(platform("org.junit:junit-bom:5.10.0"))
    testImplementation(platform("org.junit:junit-bom:5.9.1"))
    testImplementation("org.junit.jupiter:junit-jupiter")
}

 

그동안은 프로젝트를 시작할 때 늘 spring initializer로 생성했기 때문에 직접 타이핑해서 빌드 정보를 작성할 일이 없었는데, 이번 기회에 Spring 프로젝트가 어떤 플러그인과 의존성을 통해 구축이 되는지 알게 되었다. 다음에는 플러그인과 의존성 패키지 내부 구조에 대한 내용도 찾아보아야겠다.

 

 

JPA(Java Persistence API)란 Java 진영에서 ORM 기술 표준으로 사용하는 인터페이스의 모음이다.

여기서 ORM(Object Relational Mapping)은 Class 객체와 RDB 테이블을 자동으로 매핑하고 영속화하는 기능을 한다.

RDB 테이블인 컬럼을 통해 양방향 연결이 가능하고 고정된 형태의 값을 가지는 것과 달리, Java 객체는 객체간 양방향 연결이 불가하고 유연하게 다양한 데이터 구조 사용이 가능하다. 이렇게 상반된 특성을 가지고 있는 둘을 연결시켜 사용하기 위해 JPA를 이용하는 것이다.

 

엔티티(Entity)란 DB에서 영속적으로 저장된 데이터를 자바 객체로 매핑해 인스턴스로 존재하는 데이터를 말한다.

엔티티 매니저란, 이름에서부터 알 수 있듯이 엔티티를을 관리하는 객체이다.

그리고 엔티티 매니저가 엔티티를 관리(영구 저장, 삭제 등)하는 공간을 '영속성 컨텍스트' 라고 한다. 보통 엔티티 매니저 하나 당 영속성 컨텍스트 하나를 관리한다.

 

 

엔티티 생명주기(Entity LifeCycle)

1. 비영속 상태

- 엔티티가 영속성 컨텍스트에 저장되지 않았기 때문에 데이터베이스와 아무 연관이 없는 순수 객체 상태

 

2. 영속 상태

- 엔티티가 영속성 컨텍스트에 저장되어 관리되는 상태

- EntityManager의 persist() 메소드로 비영속 상태의 객체를 영속 상태로 만들 수 있다.

 

3. 준영속 상태

- 엔티티가 더 이상 영속성 컨텍스트에 의해 관리되지 않는 상태 (DB에는 존재함)

- EntityManager의 detach() 메소드로 준영속 상태로 만들 수 있다.

 

4. 삭제

- 엔티티가 영속성 컨텍스트에서 삭제된 상태 (DB에서도 삭제됨)

- EntityManager의 remove() 메소드로 삭제할 수 있다.

 

 

처음 스프링 공부를 시작할 때는 기능 개발에 급급했기 때문에 영속성 컨텍스트의 개념과 엔티티 라이프 사이클 등에 대해 깊게 공부하지 못했다. 강의에서 나온 내용 외에도 따로 더 정보를 찾아서 학습해야겠다!