memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

MySQL 설정

MySQL 설치

MySQL 설치는 아래 글 참고

2020/10/30 - [Database/RDB] - MySQL 설치하기 (Mac OSX)

 

MySQL 설치하기 (Mac OSX)

MySQL 설치 본 글에서는 Homebrew 를 이용하여 MySQL 을 설치한다. $ brew update $ brew install mysql 만약, 특정 버전을 따로 설치하고 싶다면 아래 명령어를 수행한다. 그리고, 원하는 버전의 mysql을 설치한..

memostack.tistory.com

 

데이터베이스 생성

우선 예제에서 사용할 데이터 베이스 및 테이블을 생성한다.

  • 본 글에서는 TEST_DB를 생성한다.
mysql> CREATE DATABASE TEST_DB
    ->     DEFAULT CHARACTER SET UTF8;
Query OK, 1 row affected, 1 warning (0.02 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| TEST_DB            |
+--------------------+
5 rows in set (0.00 sec)

 

유저 생성 및 권한 부여

test_user를 생성하고 비밀번호는 admin으로 한다.

권한은 모든 권한을 준다.

-- 사용자 생성
CREATE USER test_user@localhost
    IDENTIFIED BY 'admin';

-- DB 권한 부여
GRANT ALL PRIVILEGES
    ON TEST_DB.*
    TO test_user@localhost;

 

테이블 생성

-- MEMBER 테이블 생성
CREATE TABLE IF NOT EXISTS TEST_DB.MEMBER (
    PID BIGINT NOT NULL AUTO_INCREMENT,
    USERNAME VARCHAR(200),
    NAME VARCHAR(200),
    PRIMARY KEY(PID)
);

 

 

MySQL 설정은 여기서 끝. 정리하면 아래와 같다.

  • 데이터베이스명: TEST_DB
  • 테이블 명: MEMBER

 

Spring Boot 예제

의존성 추가

JPA를 사용하기 위해 dependency를 추가한다.

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>

	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
	</dependency>
</dependencies>

 

편의를 위해 롬복도 같이 추가하였다. (방법은 아래 글 참고)

2020/10/31 - [Spring/Spring Boot] - Spring Boot, Maven 프로젝트에 롬복 적용하기

 

Spring Boot, Maven 프로젝트에 롬복 적용하기

Gradle 프로젝트에 롬복 적용하는 방법은 아래 글 참고 2020/03/07 - [Spring/Spring Boot] - Spring Boot 롬복(Lombok) 적용 / Gradle과 IntelliJ 사용 Spring Boot 롬복(Lombok) 적용 / Gradle과 IntelliJ 사용..

memostack.tistory.com

 

SpringBoot와 MySQL 연동

application.properties 설정을 한다.

server.address=localhost
server.port=8080

spring.datasource.url=jdbc:mysql://localhost:3306/TEST_DB?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=test_user
spring.datasource.password=admin
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# mysql 사용
spring.jpa.database=mysql
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

# 로깅 레벨
logging.level.org.hibernate=info

# 하이버네이트가 실행한 모든 SQL문을 콘솔로 출력
spring.jpa.properties.hibernate.show_sql=true
# SQL문을 가독성 있게 표현
spring.jpa.properties.hibernate.format_sql=true
# 디버깅 정보 출력
spring.jpa.properties.hibernate.use_sql_comments=true

 

 

자세한 내용은 아래 글 참고

2020/10/31 - [Spring/Spring Boot] - Spring Boot 와 MySQL 연동하기 (Maven 프로젝트)

 

Spring Boot 와 MySQL 연동하기 (Maven 프로젝트)

의존성 추가 아래와 같이 java와 mysql 커넥터 의존성을 pom.xml에 추가한다. mysql mysql-connector-java application.properties 설정 spring.datasource.url에는 DB명을 작성 spring.datasource.username에는..

memostack.tistory.com

 

Entity 클래스 생성

아래와 같이 MemberEntity를 생성한다.

package com.example.demo.entity;

import lombok.*;

import javax.persistence.*;

@Getter // getter 메소드 생성
@Builder // 빌더를 사용할 수 있게 함
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity(name="member") // 테이블 명을 작성
public class MemberEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long pid;

    @Column(nullable = false, unique = true, length = 30)
    private String username;

    @Column(nullable = false, length = 100)
    private String name;

    public MemberEntity(String username, String name) {
        this.username = username;
        this.name = name;
    }
}

@Entity: JPA를 사용할 클래스를 명시하며, 테이블과 매핑하는 역할을 한다.

@Id: 기본키(Primary Key)라는 것을 명시하는 역할을 한다.

@GeneratedValue: 키값의 자동생성 전략을 설정할 수 있다. (default: GenerationType.AUTO)

  • 본 글에서는 MySQL에서 AUTO_INCREMENT를 사용하므로, GenetationType.IDENTITY를 사용한다.

@Column: 컬럼의 속성값을 설정할 수 있다.

 

Repository 생성

JpaRepository를 extends하여 아래와 같이 인터페이스를 생성

package com.example.demo.repo;

import com.example.demo.entity.MemberEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface MemberRepository extends JpaRepository<MemberEntity, Long> {

}

 

Controller 생성

package com.example.demo.controller;

import com.example.demo.entity.MemberEntity;
import com.example.demo.repo.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController // JSON 형태 결과값을 반환해줌 (@ResponseBody가 필요없음)
@RequiredArgsConstructor // final 객체를 Constructor Injection 해줌. (Autowired 역할)
@RequestMapping("/v1") // version1의 API
public class MemberController {

    private final MemberRepository memberRepository;

    /**
     * 멤버 조회
     * @return
     */
    @GetMapping("member")
    public List<MemberEntity> findAllMember() {
        return memberRepository.findAll();
    }

    /**
     * 회원가입
     * @return
     */
    @PostMapping("member")
    public MemberEntity signUp() {
        final MemberEntity member = MemberEntity.builder()
                .username("test_user@gmail.com")
                .name("test user")
                .build();
        return memberRepository.save(member);
    }
}

@RestController: 결과값을 JSON 형태로 반환해줌 (각 메소드에서 @ResponseBody를 작성할 필요 없음)

@RequiredArgsConstructor: final 객체를 Concstructor Injection을 해줌 (Autowired 역할)

 

결과 확인

/v1/memberPOST 방식으로 요청하면

$ curl -X POST http://localhost:8080/v1/member

 

아래와 같이 응답이 온다. (정상적으로 멤버가 생성됨)

{"pid":1,"username":"test_user@gmail.com","name":"test user"}

 

그리고, GET 방식으로 요청하여 멤버를 조회해보면 방금 등록된 멤버가 보인다.

 

콘솔 로그

application.properties 설정 때문에 아래와 같이 SQL문이 출력된다.

Hibernate: 
    /* select
        generatedAlias0 
    from
        member as generatedAlias0 */ select
            memberenti0_.pid as pid1_0_,
            memberenti0_.name as name2_0_,
            memberenti0_.username as username3_0_ 
        from
            member memberenti0_
반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!