Notice
Recent Posts
Recent Comments
관리 메뉴

즐겁게, 코드

12월 9일 : MySQL 접속 오류, DTO와 엔티티, 자바의 List 인터페이스 본문

🧺 일상다반사/TIL

12월 9일 : MySQL 접속 오류, DTO와 엔티티, 자바의 List 인터페이스

Chamming2 2023. 12. 9. 01:00

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]
    }
}

이렇게 정의한 배열은 동적으로 길이를 확장할 수 없다는 문제가 있다.

add, push, append 등 배열을 확장하는 함수가 보이지 않는다.

메모리 공간이 한번 할당되면 이를 줄이거나 늘릴 수 없다는 해결하기 위해 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
    }
}

   

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆