[Spring]Spring Boot DB연동(with mybatis)

Inung_92·2023년 7월 7일
1

Spring

목록 보기
11/15
post-thumbnail

포스팅 목적

📖 Spring Boot의 DB 연동 방법과 Mybatis를 통해 DB를 사용하는 방법에 대해서 알아보자.

환경

OS : Windows
IDE : Intellij
SpringBoot : 2.7.6
DB : Postgresql 42.5.2
Persistence : Mybatis 2.2.0
Build : Gradle

DB 연동

먼저 Spring Boot에 DB를 연결하기 위하여 의존성을 추가해준다.

⚡️ build.gradle

dependencies {
	... 생략
	runtimeOnly group: 'org.postgresql', name: 'postgresql', version: '42.5.2'
	implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
}

이후 DB 정보를 설정한다

⚡️ application.properties

spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://{IP주소}:5432/{DB명}?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
spring.datasource.username={사용자명}
spring.datasource.password={비밀번호}

여기서 포트번호가 5432인 이유는 Postgresql 서버의 포트번호이기 때문이다. 오라클의 경우 1521, Mysql의 경우 3306이 될 것이다.

이렇게 설정하면 DB에 대한 연동 설정은 완료되었으니 다음 단계로 넘어가자.

Mybatis 사용

⚡️ build.gradle

아래와 같이 의존성을 추가해준다.

dependencies {
	... 생략
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0'
}

⚡️ application.properties

나는 mapper를 기존 Spring Legacy에서 사용했더 방식으로 xml에 작성하여 사용한다. 이러한 이유로 해당 mapper의 경로를 잡아주기 위하여 아래 설정을 진행하자.

# Mybatis config
mybatis.mapper-locations=mapper/*.xml

위와 같이 작성하고, 아래 사진과 같이 패키지 구조를 생성하면된다.

여기서 UserMapper.xml이 위치한 곳이 위에 설정한 경로가 되는 것이다.

⚡️ Mapper 인터페이스

Mapper.xml을 매핑 할 인터페이스를 선언해주어야한다. 추상 메소드를 사용하여 .xml에 선언한 쿼리문을 수행 할 예정이기 때문에 다음 예시를 보자.

@Mapper
public interface UserMapper {
	// 메소드명은 Mapper.xml에 작성될 쿼리문의 ID
    User selectUser(User user);
}

Mapper 인터페이스가 위치한 패키지는 다음과 같다.

⚡️ Mapper.xml

이제 인터페이스와 1:1로 매핑 할 .xml 파일을 작성하면된다. namespace는 인터페이스 패키지 경로를 포함한 이름으로 하면된다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.demo.demoproject.model.repository.UserMapper">
    <select id="selectUser" resultType="User">
        select * from [테이블명] where [컬럼1]=#{[값1]} and [컬럼2]=#{[값2]}
    </select>
</mapper>

여기서 중요한 부분은 mapper의 namespace는 반드시 패키지 경로를 포함해야하며, 쿼리문의 resultType 등에 작성되는 클래스의 이름은 패키지 경로를 포함하여 작성하는 것이 원칙이고, alias를 등록하여 사용 할 수 있다.

🖥️ alias 등록(application.properties)

# Mybatis config
mybatis.mapper-locations=mapper/*.xml
mybatis.type-aliases-package=com.demo.demoproject.domain

이런식으로 설정해주면 aliases에 등록한 패키지명은 생략해도 무방하다.

⚡️ Service

이제 DB와 데이터를 주고받을 Mapper에 대한 준비를 끝냈으며 Service를 작성하여 결과를 반환시켜보자.

@Service
public class UserService {
    @Autowired
    UserMapper userMapper;

    public User findUser(User user){
        return userMapper.selectUser(user);
    }
}

⚡️ Controller

Service에서 반환된 값을 전달할 Controller 생성

@RestController
@Slf4j
public class LoginController {

    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public ResponseEntity<User> login(@RequestBody User user) {
        log.debug("로그인 요청 :: " + user);
        return ResponseEntity.ok(userService.findUser(user));
    }
}

마무리

여기까지 완성하면 View 영역에서 결과를 확인하면 된다.

Spring Legacy에 비하면 비교적 간단(?)하게 설정을 마친 것 같다.
그럼 이만.👊🏽

profile
서핑하는 개발자🏄🏽

0개의 댓글