스프링 부트와 JPA 기초
1. 스프링 부트 소개
스프링 부트란?
- 스프링 프레임워크 기반의 프로젝트 생성 도구
- 간편한 셋업과 최소한의 설정으로 빠른 개발 가능
- 임베디드 서버(예: 톰캣) 내장으로 별도 설치 없이 실행 가능
- 스타터 의존성을 통해 필요한 라이브러리 자동 설정
스프링 부트 프로젝트 생성
버전 접미사
- SNAPSHOT: 현재 테스트 단계
- MX: 주요 기능 및 버그 수정 중인 단계 (M1, M2...)
- RC: 전반적 기능과 버그가 모두 수정된 최종 배포 전 단계
- GA: 최종 배포 단계 (대부분 기능과 버그들이 안정화된 단계)
src 디렉터리 구조
- main/java: 자바 코드 저장 공간
- resources: 외부 코드 저장 공간
2. 머스테치 (Mustache)
- 뷰에서 사용하는 템플릿 엔진
- 기본 위치: src/main/resources/templates
- 컨트롤러에서 mustache 파일명 반환 시 서버가 해당 파일을 찾아 웹 브라우저로 전송
3. MVC 패턴

- 컨트롤러: 클라이언트 요청에 따른 서버 처리 담당
- 뷰: 화면 출력 담당, 실제로 보이는 부분 (예: JSP, Thymeleaf, Mustache)
- 모델: 데이터 관리 담당
컨트롤러
@Controller
어노테이션: 컨트롤러 클래스 지정
@GetMapping
어노테이션: 특정 URL 요청 시 메서드 실행
모델
- 컨트롤러 메서드의 매개변수로 받음
addAttribute()
메서드로 변수 등록
4. JPA (Java Persistence API)
- 자바 언어로 DB에 명령을 내리는 도구
- 데이터를 객체 지향적으로 관리 가능
JPA 구성
- 엔터티 (Entity): 자바 객체를 DB가 이해할 수 있는 형태로 변환, 테이블 생성의 기반
- 리포지토리 (Repository): 엔터티의 DB 저장 및 관리를 위한 인터페이스
주요 어노테이션
@Entity
: 클래스를 엔터티로 지정
@Column
: DTO(Data Transfer Object)에서 컬럼 속성 지정
CrudRepository
CrudRepository<T, ID>
: 기본적인 CRUD 연산 제공
- T: 엔터티 클래스 타입
- ID: 엔터티의 기본키(primary key) 타입
5. DTO와 Entity 분리
장점
- 유연한 응답 구조
- 상호 참조 이슈 방지
- 보안 강화
- Entity에 없는 값 처리 가능
toEntity() 메서드
6. 롬복 (Lombok)
- 코드 간소화를 위한 라이브러리
- 주요 어노테이션:
@Data
, @Slf4j
7. JPA 메서드
findAll()
: 리포지토리의 모든 데이터 조회
8. 형변환 (Casting)
업캐스팅 (Upcasting)
- 더 넓은 범위의 타입으로 변환 (예: 고양이 → 동물)
다운캐스팅 (Downcasting)
- 더 좁은 범위의 타입으로 변환 (예: 동물 → 고양이)
컬렉션 형변환
- Iterable → Collection → List 순으로 범위가 좁아짐