[📋] MariaDB 연동 시도
개요
[회의] 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);
}
결론
연동 잘된다