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

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/memberPOST 방식으로 요청하면

<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_
반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

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