Project/Extra

[📋] MariaDB 연동 시도

shin0112 2024. 7. 17. 13:41

개요

지난 회의

 

[회의] BackEnd 2차 회의

개요일시2024.07.16 (화)주제ERD 보완 및 DB 선정지난 회의 후 과제였던 DB 조사와 WebSocket 조사를 나누고 DB를 선정하는 시간을 가졌다.DB 선정여러 가지 DB에 대한 장단점이랑 RDBMS, NoSQL 등을 확인하면

je0301.tistory.com

MariaDB를 사용하기로 했었고, 다들 MariaDB는 안 써봤기 때문에 한 번씩 연동 시도 해보기로 해서 작성


설정

1. MariaDB 설치

MariaDB를 처음 쓰는 거라서 설치도 안되어 있는 상태여서 일단 설치(개인적으로는 MySQL보다 설치가 간단한 느낌)

port 번호가 MySQL이랑 동일해서 충돌 안나게 유의해서 써야함

예전에 한 번 깔고 지웠던 적이 있어서 깔려 있는 데이터 때문에 충돌난 거 해결하느라 시간이 좀 걸리긴 했는데,, 설치 성공

https://congsong.tistory.com/62

 

윈도우(Windows)에 MariaDB 다운로드(Download) & 설치(Install)하기

1. MariaDB란? MariaDB는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 오라클(Oracle)이 MySQL을 인수한 후, 라이센스 문제를 해결하기 위해 MySQL 창시자와 몇몇 개발자들이 오라클을 나와

congsong.tistory.com

2. Dependency 추가

https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client

	// mariadb
	implementation 'org.mariadb.jdbc:mariadb-java-client:3.4.0'

3. application.yml 수정

spring:
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC
    username: [root]
    password: [비번]

  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        format_sql: true
        show_sql: true

logging:
  level:
    org.hibernate:
      type.descriptor.sql: trace
      SQL: DEBUG

중간에 sql 오류가 나서 뭔가 싶었는데, 테이블 이름이 전부 소문자여야 인식하는 듯

Test라 써서 오류 발생 → test로 수정

4. 코드

Test

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Test {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;
    @Column
    String text;

    public Test(String text) {
        this.text = text;
    }
}

TestRepository

@Repository
public interface TestRepository extends JpaRepository<Test, Long> {
}

TestService

@Service
@RequiredArgsConstructor
public class TestService {
    private final TestRepository testRepository;

    public ResponseEntity<Test> test(Long id) {
        Test test = testRepository.findById(id)
                .orElseThrow(() -> new HttpClientErrorException(HttpStatus.BAD_REQUEST));

        return ResponseEntity.ok(test);
    }
}

TestController

@RestController
@RequiredArgsConstructor
public class TestController {
    private final TestService testService;

    @GetMapping("/test/mariadb/{id}")
    public ResponseEntity<Test> test(@PathVariable(name = "id") Long id) {
        return testService.test(id);
    }
}

추가

post도 확인해봐야할 것 같아서

// TestService
    public ResponseEntity<Test> post(String text) {
        Test test = new Test(text);
        return ResponseEntity.ok(testRepository.save(test));
    }
    
// TestController
    @PostMapping("/test/mariadb")
    public ResponseEntity<Test> post(@RequestBody String text) {
        return testService.post(text);
    }

연결은 됐는데,, Object로 안 받고 String으로 받아서 json이 전부 text로 들어감 

개발할 때는 dto 써야겠지만 테스트라서 그냥 Test로 받기로 함

// TestService    
    public ResponseEntity<Test> post(Test test) {
        return ResponseEntity.ok(testRepository.save(new Test(test.getText())));
    }
    
// TestController
    @PostMapping("/test/mariadb")
    public ResponseEntity<Test> post(@RequestBody Test test) {
        return testService.post(test);
    }

 


결론

연동 잘된다