네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

목차

1. Spring Boot 프로젝트 생성 및 설정

2. Spring Boot 프로젝트와 RDS MySQL 연동 후 CRUD 메서드 구현

3. Android에서 Retrofit을 사용해서 REST API와 통신

 

참고사항

1. 졸업 프로젝트(임시 프로젝트명 : LIE)을 진행하였을 때 

2. 사용한 소프트웨어는 STS 4.5.1MySQL Workbench, PuTTY 등이있으며, Java 빌드 도구로는 Maven을 사용하고 있습니다. 

3. AWS 이용할 수 있다는 가정하에 진행됩니다. 아래 링크에서 확인할 수 있습니다. https://frogand.tistory.com/26

4. REST API의 이론 개념은 아래 링크에서 확인할 수 있습니다. https://frogand.tistory.com/17

5. 간단한 데이터베이스를 만들어 놓은 상태입니다. project 스키마Member 테이블을 생성하였습니다.

CREATE TABLE `Member` (
  `id` varchar(45) NOT NULL,
  `name` varchar(45) NOT NULL,
  `password` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

1. Spring Boot 프로젝트 생성

1) 프로젝트 생성

[File - New - Spring Starter Project]

Type : Maven / Packaging : Jar로 설정하고

Name, Group, Package 명을 입력한다. 

Spring Web/ MySQL Driver/ Spring Data JPA 를 선택하고 [Finish] 버튼 클릭

 

2) application.properties

src/main/resources/application.properties

# API 호출시, SQL 문을 콘솔에 출력한다.
spring.jpa.show-sql=true

# DDL 정의시 데이터베이스의 고유 기능을 사용합니다.
# ex) 테이블 생성, 삭제 등
spring.jpa.generate-ddl=true

# MySQL을 사용한다.
spring.jpa.database=mysql

# MySQL 설정
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://database-1.(생략).ap-northeast-2.rds.amazonaws.com:3306/project?useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul
spring.datasource.hikari.username=user1
spring.datasource.hikari.password=test1234

# MySQL 상세 지정
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.database=mysql
spring.jpa.show-sql=true

application.properties는 spring Boot 설정 파일이다.

MySQL 설정에서 hikari를 써준 이유는 hikari Connection Pool를 사용하기 위함이다. hikariCP를 사용하지 않을 경우 그냥 spring.datasource.diver-class-name 등으로 작성하면 된다.

 

* spring.datasource.hikari.jdbc-url=jdbc:mysql://database-1.(생략).ap-northeast-2.rds.amazonaws.com:3306/project?useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul

 

1. database-1.(생략).ap-northeast-2.rds.amazonaws.com 대신에 본인 AWS의 엔드 포인트를 입력한다.

2. project 대신에 본인 스키마를 입력한다.

3. useUnicode=yes&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Seoul 은 MySQL 설정하는 부분이다. utf-8로 인코딩 설정, 서버 타임존을 아시아로 설정하였다.

 

* spring.datasource.hikari.username=user1

* spring.datasource.hikari.password=test123

 

데이터베이스에 연결할 계정을 지정한다. 본인의 데이터베이스를 설정한대로 작성한다.

 

* spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

 

엔터티 클래스의 studentNumber 속성에 자동으로 연결될 데이터베이스 필드 명이

studentNumber 형태이면 이 설정이 필요하다. (camel case)

student_number 형태이면 이 설정이 필요없다. (snake case)

 

3) pom.xml

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
		<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<scope>runtime</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-tomcat</artifactId>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
		<exclusions>
			<exclusion>
				<groupId>org.junit.vintage</groupId>
				<artifactId>junit-vintage-engine</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	<dependency>
		<groupId>org.apache.tomcat.embed</groupId>
		<artifactId>tomcat-embed-jasper</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-configuration-processor</artifactId>
		<optional>true</optional>
	</dependency>
	<dependency>
		<groupId>com.zaxxer</groupId>
		<artifactId>HikariCP</artifactId>
		<version>3.1.0</version>
	</dependency>
</dependencies>

오류 방지를 위해 모든 라이브러리 의존성을 첨부합니다. 

 

4) 테스트용 컨트롤러

TestController.java

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

	@RequestMapping("/")
	public String index() {
		return "Hello!";
	}
}

[프로젝트 마우스 우클릭 - Run As - Spring Boot App]을 클릭해야 실행이 된다.

localhost:8080 에 접근하면 Hello! 텍스트가 보인다.

2. 엔터티 클래스 구현

Member.java

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Member {
	@Id
	private String id;
	private String name;
	private String password;

	public Member() {

	}

	public Member(String id, String name, String password) {
		this.id = id;
		this.name = name;
		this.password = password;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

 

3. 레포지토리 구현

MemberRepository.java

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import kr.ac.skhu.project.domain.Member;

@Repository
public interface MemberRepository extends JpaRepository<Member, String>
{
	
}

 

4. 컨트롤러 구현

APIController.java

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import Member;
import MemberRepository;

@RequestMapping("/member")
@RestController
public class APIController {

	@Autowired
	private MemberRepository memberRepository;

	@RequestMapping(value = "/select", method = { RequestMethod.GET, RequestMethod.POST })
	public List<Member> selectAll() {
		return memberRepository.findAll();
	}

	@RequestMapping(value = "/insert", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public Member insert(@RequestBody Map<String, String> map) {
		return memberRepository.save(new Member(map.get("id"), map.get("name"), map.get("password")));
	}
}

웹브라우저에서 http://localhost:8080/member/select

URL을 GET 방식으로 요청하자.

서버가 전송하는 JSON 포멧 데이터를 웹브라우저에서 볼 수 있다.

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !