본문 바로가기
SI 업무/나만의 프로젝트 만들기

3. Spring Boot Properties 설정

by 새로운걸 배우는게 너무 싫은 IT 복붙러 2024. 11. 22.
728x90

지난 글에서 Spring initializr 로 Project 를 만들었다.

이제 본격적으로 설정을 해 볼 생각이다.

 

1. /home/계정명/private/study 폴더를 만들고 Spring initializr 로 만든  myproject.zip 을 옮기고 압축을 푼후

    Intellj 로 open 했다.

 

2. Spring initializr 설정때 처음으로 maven 이 아닌 gradle 을 쓴다고 했는데 제대로 gradle 이 로딩 된듯 하다.

    코끼리 마크가 보이고 화면에 별 다른 특이사항이 없다.

 

3. mybatis 설정을 시작 한다.

  • src/main/resources 디렉토리 아래에 mybatis-config.xml 파일을 생성 한다.
    • IntelliJ에서: File > New > File을 클릭하고 파일 이름을 mybatis-config.xml로 지정.
  • 아래 형식으로 mybatis-config.xml  파일의 내용을 채운다. 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!-- 캐시를 활성화 -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 반환 시, 자동으로 키를 CamelCase로 변환 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!-- 환경설정 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.OracleDriver"/>
                <property name="url" value="jdbc:oracle:thin:@<host>:<port>:<sid>"/>
                <property name="username" value="<your-username>"/>
                <property name="password" value="<your-password>"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 매퍼 설정 -->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>

 

나같은 경우에 oracle xe를 docker 로 띄웠고 띄울때  서비스네임을 'XEPDB1' 로 해서

sid를 멀 넣어야 하나 당황했는데,  챗gpt 에 물어보니 보통 orace xe 일 경우 "XE" 가 sid 라고 해서 "XE"로 설정 했다.

jdbc:oracle:thin:@localhost:1521:XE

 

resouces/mappers 폴더를 만들고 UserMapper.xml 도 추가 했다. 

 

더보기

주요 항목:

  • cacheEnabled: MyBatis에서 캐시 사용 여부 설정.
  • mapUnderscoreToCamelCase: 데이터베이스 컬럼 이름을 Java 객체의 CamelCase 속성으로 매핑.
  • environments: 데이터베이스 연결 정보를 설정.
  • mappers: XML 매퍼 파일의 경로를 지정.

4. mapper.xml ( 여기서는 UserMapper.xml) 을 만들고 mapper.xml과 연결된 interface 파일을  만든다.

   

  • mappers 안에 들어가는 UserMapper.xml 을 나의 프로젝트 구조에 맞게 생성한다. 
    namespace 정보가  Mapper 인터페이스와 일치해야 합니다.(중요함)
    resulType 도 dto 안에 있는 패키지구조와 class 명과 일치 해야 함(중요함)
<?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.example.myproject.mapper.UserMapper">

    <!-- 간단한 SELECT 예제 -->
    <select id="getUserById" parameterType="int" resultType="com.example.myproject.dto.User">
        SELECT * FROM users WHERE id = #{id}
    </select>

</mapper>
  • UserMapper.xml 에 선언한 Mapper Interface 와 dto 를 xml에 선언한 내용과 일치 하게 파일 생성함.
package com.example.myproject.biz.mapper;


import com.example.myproject.biz.dto.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper  // 이 어노테이션으로 MyBatis가 해당 인터페이스를 Mapper로 인식
public interface UserMapper {
    User getUserById(@Param("id") int id); // 매퍼 XML에 정의된 SQL과 매핑되는 메서드
}

     맨 천지가 annotation 천지백깔이다.
     또 모르는 @Param 이라는 annotation을 만났는가?

     @Param 이라는 annotation 은 UserMapper.xml 에서 #{} 붙는 녀석의 이름을 지정 하는것이다.

     여기 예제는 그렇지 않다만
     만약 @Param("idxxx") 라고 정하면 xml 에서 쿼리는 아래 처럼 바뀌어야 한다.

     select *

     from users 

     where id =#{idxxx}

  • DTO 를 만든다.
package com.example.myproject.biz.dto;

import lombok.Data;

@Data
public class User {
    private int id;
    private String name;
    private String email;
}

5. application.properties 를 설정 한다.

   어떤 프로젝트는 applicaiton.properties 를 쓰고 어떤곳은 application.yml을 쓴다.

   둘다 써도 되는데, 우선 순위는 applicaiton.properties가 더 앞이다.

   설정이 복잡해지면 계층 구조로 보이게 하는것이 가독성이 좋아서

   기존에 스프링들은 properties 하나만 썼는데 그후 yml 형식이 나온 것 이다.

 

spring.application.name=myproject

spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=sys
spring.datasource.password=1234
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

spring.mybatis.config-location=classpath:mybatis-config.xml
spring.mybatis.mapper-locations=classpath:mappers/*.xml

 

위처럼 설정 하고 나니 궁금해 졌다.

위에서 mybatis-config.xml 에도 db 정보 넣었는데,

또 applicaiton.properties.xml 에도 db정보를 넣어야 하나

조금 이상한데.

내 생각이 맞았다.

mybatis-config.xml 에는 db정보를 빼도 된다.

더보기

Spring Boot에서 MyBatis와의 결합

Spring Boot에서 MyBatis를 사용할 때는 mybatis-spring-boot-starter를 사용합니다.

  • 이 경우 MyBatis의 DataSource 설정은 Spring Boot의 DataSource를 재사용하도록 설정됩니다.
  • 따라서, mybatis-config.xml의 데이터베이스 설정은 무시되며, Spring Boot의 설정(application.properties)을 기준으로 동작합니다.

mybatis-config.xml의 역할

  • SQL 매핑 관련 설정에만 집중하도록 사용됩니다.
    • 예: 캐시 사용 여부, CamelCase 매핑 등
  • 데이터베이스 설정은 Spring Boot에서 관리하며, MyBatis는 Spring Context의 DataSource를 사용합니다.

 

그래서 mybatis-config.xml 에서 enviorment 를 날렸다.

 

 

오늘은 이만..

다음편에 계속.

to be continue..

728x90