1. MySQL 설정
1.1. 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
1.2. 데이터베이스 생성
우선 예제에서 사용할 데이터 베이스 및 테이블을 생성한다.
- 본 글에서는 TEST_DB를 생성한다.
<html />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)
1.3. 유저 생성 및 권한 부여
test_user
를 생성하고 비밀번호는 admin
으로 한다.
권한은 모든 권한을 준다.
<html />-- 사용자 생성 CREATE USER test_user@localhost IDENTIFIED BY 'admin'; -- DB 권한 부여 GRANT ALL PRIVILEGES ON TEST_DB.* TO test_user@localhost;
1.4. 테이블 생성
<html />-- 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
2. Spring Boot 예제
2.1. 의존성 추가
JPA
를 사용하기 위해 dependency
를 추가한다.
<html />
<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
2.2. SpringBoot와 MySQL 연동
application.properties
설정을 한다.
<html />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
2.3. Entity 클래스 생성
아래와 같이 MemberEntity
를 생성한다.
<java />
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
: 컬럼의 속성값을 설정할 수 있다.
2.4. Repository 생성
JpaRepository
를 extends하여 아래와 같이 인터페이스를 생성
<java />
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> {
}
2.5. Controller 생성
<java />
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 역할)
3. 결과 확인
/v1/member
로 POST
방식으로 요청하면
<java />
$ curl -X POST http://localhost:8080/v1/member
아래와 같이 응답이 온다. (정상적으로 멤버가 생성됨)
<java />
{"pid":1,"username":"test_user@gmail.com","name":"test user"}
그리고, GET
방식으로 요청하여 멤버를 조회해보면 방금 등록된 멤버가 보인다.

3.1. 콘솔 로그
application.properties 설정 때문에 아래와 같이 SQL문이 출력된다.
<html />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_
'Backend > Spring Boot' 카테고리의 다른 글
Spring Boot와 @RequestMapping, @GetMapping, @RequestParam 예제 (1) | 2020.11.11 |
---|---|
Spring Boot 와 MySQL 연동하기 (Maven 프로젝트) (0) | 2020.10.31 |
Spring Boot, Maven 프로젝트에 롬복 적용하기 (0) | 2020.10.31 |
Spring Boot, 간단한 REST API 만들기 (0) | 2020.10.31 |
SpringBoot 서버 포트 변경하기 (0) | 2020.10.31 |