일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 가상화
- 컴퓨터공학
- AWS
- 클라우드
- 블록체인
- TypeScript
- 이슈
- k8s
- JavaScript
- kubernetes
- 이더리움
- 웹
- next.js
- 리액트
- 자바스크립트
- 백준
- 프론트엔드
- 쿠버네티스
- HTML
- 솔리디티
- 백엔드
- CSS
- 타입스크립트
- VUE
- es6
- BFS
- 알고리즘
- react
- 파이썬
- docker
- Today
- Total
즐겁게, 코드
12월 9일 : MySQL 접속 오류, DTO와 엔티티, 자바의 List 인터페이스 본문
1. MySQL 접속하기
mySQL을 실행하려 할 때 이런 오류가 뜰 때가 있는데, 이는 권한과 관련된 오류로 'using password' 를 봐주면 된다.
NO
: 비밀번호를 입력하지 않아 생긴 문제
YES
: 비밀번호가 일치하지 않아 생긴 문제
비밀번호를 사용해 mySQL에 접속할 때는 -p 플래그를 사용해주면 된다.
# 패스워드를 사용한다
mysql -p
# 특정 유저로 로그인하면서 패스워드를 사용한다
mysql -u [유저네임]
2. DBeaver
SQL에 익숙하지 않은 사람들을 위해 DBeaver GUI 툴을 사용할 수도 있다.
데이터베이스 / 테이블 / 칼럼 생성을 GUI에서 수행할 수 있다.
3. DTO와 엔티티의 차이
DTO와 엔티티는 데이터 구조를 나타내는 역할인데, 엄밀한 차이가 무엇일까?
A. 엔티티
엔티티는 데이터베이스의 테이블을 나타내며, ORM 도구가 데이터베이스의 레코드를 조작하는데 사용한다.
=> 엔티티는 "데이터베이스" 의 데이터를 구조화하는데 사용한다.
B. DTO
DTO는 데이터를 전송하는데 사용하는 자바 객체이다.
서버에서 클라이언트 측으로, 또는 그 반대로 통신할때 사용되며 데이터베이스 구조와 직접적인 연결은 없다.
(= 프론트엔드에서 타입스크립트로 API 응답을 정의해주는 것과 유사하다고 보면 될 것 같다.)
즉 엔티티는 데이터베이스의 칼럼 형태를 표현하며, DTO는 전송하는 데이터를 표현하는 데에 사용한다.
4. repository 폴더의 역할
스프링 부트 프로젝트에는 service, controller, dto, entity 외에도 repository 라는 폴더를 활용하는 것 같다.
이 폴더는 무슨 역할을 할까?
대략 살펴보면 스프링에서 데이터베이스와 상호작용할 때 필요한 로직들이 모이는 것 같다.
그런데 JPA라는 녀석이 또 언급되는 것 같은데, JPA를 사용하기 위한 설정들을 진행해보자.
5. H2 데이터베이스 설정하기
데이터베이스를 테스트할때는 MySQL, PostgreSQL을 기본으로 사용하는줄 알았는데, 로컬 및 테스트용으로는 H2라는 데이터베이스도 많이 사용한다는 것 같다. H2의 설치 및 연결은 이 블로그 를 참고해 진행했다.
스프링에 H2를 연결하기 위해서는 application.properties를 다음과 같이 작성한다.
spring.datasource.url==[H2 데이터베이스에 로그인할 때 지정한 JDBC URL]
spring.datasource.username=[유저네임]
spring.datasource.password=[비밀번호]
spring.datasource.driverClassName: org.h2.Driver
# 데이터베이스에는 표준을 지키지 않는 고유한 방언(dialect)이 있다.
# JPA는 특정 데이터베이스에 종속되지 않아, Oracle8iDialect, H2Dialect, MySQL8Dialect 등으로 대응하는 DB의 방언을 사용할 수 있다.
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
- 생각보다 사전 지식이 필요한 부분이 더 있어 다음 글에 이어서 작성하기...
6. 자바의 List
학부 과목에서 배웠던 자바의 배열을 떠올려 보자.
public class MainClass {
public static void main(String[] args) {
String[] array = {"chanmin", "developer"};
System.out.println(Arrays.toString(array)); // [chanmin, developer]
}
}
이렇게 정의한 배열은 동적으로 길이를 확장할 수 없다는 문제가 있다.
메모리 공간이 한번 할당되면 이를 줄이거나 늘릴 수 없다는 해결하기 위해 List 라는 인터페이스가 존재한다.
import java.util.ArrayList;
import java.util.List;
public class MainClass2 {
public static void main(String[] args) {
List<String> array = new ArrayList<String>();
array.add("chanmin");
array.add("is");
array.add("developer");
// 1. 출력 시 toString()을 거치지 않아도 된다
System.out.println(array); // [chanmin, is, developer]
// 2. N번째 인덱스에 접근할 때는 .get() 메서드를 사용한다.
// System.out.println(array[2]); ❌
System.out.println(array.get(2)); ✅ // developer
// 3. 존재하지 않는 인덱스에 접근하면 java.lang.IndexOutOfBoundsException 이 발생한다.
// System.out.println(array.get(14)); ❌ // Index 14 out of bounds for length 3
}
}
'🧺 일상다반사 > TIL' 카테고리의 다른 글
JPA 이슈 디버깅 기록, JpaRepository는 무엇인가 (0) | 2023.12.10 |
---|---|
12월 4일 TIL : mySQL 의존성 오류, DTO, Lombok (0) | 2023.12.04 |
12월 3일 TIL : 스프링 기초, 라우트, Automatic Batching (2) | 2023.12.03 |