본문 바로가기
Programming/Spring

스프링 프레임워크 기초: ORM(Object-Relational Mapping) 개념과 활용하기

by vita12321 2023. 8. 11.
728x90
반응형

글에서는 ORM 기본 개념, 스프링 프레임워크와 ORM, 그리고 스프링 부트와 JPA 사용한 예제에 대해 자세하게 설명하겠습니다.


1. ORM(Object-Relational Mapping) 소개

 

ORM Object-Relational Mapping 약자로 객체 관계 매핑이라고도 합니다. 데이터베이스와 객체지향 프로그래밍 간의 패러다임 불일치 문제를 해결하기 위해 고안된 프로그래밍 기술로, 객체 지향 프로그래밍 언어와 관계형 데이터베이스의 데이터를 서로 변환해주는 역할을 합니다. ORM 사용하면 관계형 데이터베이스의 것을 객체 지향적으로 다룰 있어 개발자가 SQL 작성이나 데이터베이스 세부 구현에 신경 쓰지 않아도 됩니다.


2. 스프링 프레임워크에서 ORM 사용하기

 

스프링 프레임워크에서는 JDBC 외에도 ORM 지원하는 다양한 라이브러리와 프레임워크를 제공합니다. 대표적인 예로 Hibernate, MyBatis, JPA(Java Persistence API) 등이 있습니다. JPA 자바 언어 플랫폼 전용 ORM 표준으로, 복잡한 쿼리와 데이터베이스와의 세밀한 상호작용을 처리하며 추상화된 인터페이스를 제공합니다.


3. 스프링 부트와 JPA 사용한 ORM 예제

 

이제 스프링 부트 프로젝트에 JPA 적용해 보겠습니다. 아래 예제는 web 기반의 간단한 회원가입 관리 애플리케이션을 개발하는 과정을 보여줍니다.

 

3.1. 프로젝트 초기 설정

 

스프링 부트 프로젝트를 생성하고 필요한 의존성을 추가합니다. 여기서는 스프링 , JPA, H2 데이터베이스를 사용합니다.

 

  • Gradle 기반 프로젝트의 경우 build.gradle 파일에 다음과 같이 의존성을 추가합니다.
// Gradle 
dependencies {

  implementation 'org.springframework.boot:spring-boot-starter-web'

  implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

  runtimeOnly 'com.h2database:h2'

}

 

  • Maven 기반 프로젝트의 경우 pom.xml 파일에 다음과 같이 의존성을 추가합니다.
// xml
<dependencies>

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

  </dependency>

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-data-jpa</artifactId>

  </dependency>

  <dependency>

    <groupId>com.h2database</groupId>

    <artifactId>h2</artifactId>

    <scope>runtime</scope>

  </dependency>

</dependencies>

 

3.2. 데이터베이스 설정하기

 

`src/main/resources/application.properties` 파일에서 데이터베이스 설정을 추가합니다.

 

// properties
spring.datasource.url=jdbc:h2:mem:testdb

spring.datasource.driverClassName=org.h2.Driver

spring.datasource.username=sa

spring.datasource.password=

spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

spring.jpa.hibernate.ddl-auto=update

 

3.3. 회원 엔티티 레파지토리 정의하기

 

우선 회원 정보를 저장할 `Member` 엔티티를 정의하고, 그에 대한 레파지토리를 생성합니다.

@Entity

public class Member {

 

  @Id

  @GeneratedValue(strategy = GenerationType.IDENTITY)

  private Long id;

 

  private String name;

  private String email;

  private String password;

 

  // 생성자, getter, setter 생략

}

 

public interface MemberRepository extends JpaRepository<Member, Long> {

}

 

3.4. 회원가입 조회 API 구현하기

 

회원에 관한 CRUD 작업을 처리하는 서비스 클래스를 구현하고, 이를 이용해 컨트롤러에서 회원가입 조회 API 작성합니다.

@Service

public class MemberService {

 

  @Autowired

  private MemberRepository memberRepository;

 

  public Member register(Member member) {

    return memberRepository.save(member);

  }

 

  public Optional<Member> findById(Long id) {

    return memberRepository.findById(id);

  }

 

  public List<Member> findAll() {

    return memberRepository.findAll();

  }

}
@RestController

@RequestMapping("/members")

public class MemberController {

 

  @Autowired

  private MemberService memberService;

 

  @PostMapping

  public ResponseEntity<Member> register(@RequestBody Member member) {

    return new ResponseEntity<>(memberService.register(member), HttpStatus.CREATED);

  }

 

  @GetMapping("/{id}")

  public ResponseEntity<Member> findById(@PathVariable Long id) {

    return memberService.findById(id)

        .map(member -> ResponseEntity.ok().body(member))

        .orElse(ResponseEntity.notFound().build());

  }

 

  @GetMapping

  public ResponseEntity<List<Member>> findAll() {

    return new ResponseEntity<>(memberService.findAll(), HttpStatus.OK);

  }

}

4. 결론

 

글에서는 ORM 기본 개념과 스프링 프레임워크에서 ORM 사용하는 방법, 그리고 스프링 부트와 JPA 사용한 전체적인 예제에 대해 자세하게 설명했습니다. ORM 이용하면 객체 지향 프로그래밍을 사용하면서도 관계형 데이터베이스를 쉽고 효과적으로 관리할 있습니다. 스프링 프레임워크에서 제공하는 다양한 ORM 프레임워크를 활용하여 데이터 처리를 더욱 효율적으로 구현해 보세요.

728x90
반응형