네로개발일기

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

'web'에 해당되는 글 82건


반응형

발단>

1. Gradle 버전이 4.*에서부터 5.* 최근에는 6.7까지 출시

2. Spring boot 2.3부터 Gradle 버전 6.3 이상을 요구

 

개발환경>

spring boot 2.4

Gradle 6.7.1 

 

인텔리제이에서 프로젝트를 진행하면서 QueryDsl을 이용해서 생성한 Q클래스를 생성하였다.

빌드시 에러가 발생함. 

 

에러 메시지>

package com.querydsl.core.types does not exist

수정 전 build.gradle>

plugins {
    id 'org.springframework.boot' version '2.4.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
    id 'java'
}

group = 'com.jiyoon'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation 'io.rest-assured:rest-assured:4.3.3'
    compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
    compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
    implementation 'com.querydsl:querydsl-jpa'
    implementation 'com.querydsl:querydsl-apt'
}

test {
    useJUnitPlatform()
}

def querydslSrcDir = "src/main/generated"

querydsl {
    library = "com.querydsl:querydsl-apt"
    jpa = true
    querydslSourcesDir = querydslSrcDir
}

sourceSets {
    main.java.srcDirs = ['src/main/java', querydslSrcDir]
}

configurations {
    querydsl.extendsFrom compileClasspath
}

compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

Gradle Plugin “com.ewerk.gradle.plugins.querydsl” 로 설정하였다. 해당 프로젝트에서는 빌드 시 에러가 발생

 

수정 후 build.gradle>

plugins {
    id 'org.springframework.boot' version '2.4.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.jiyoon'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

def querydslVersion = '4.3.1'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation 'io.rest-assured:rest-assured:4.3.3'
    compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
    compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'

// Querydsl
    implementation group: 'com.querydsl', name: 'querydsl-jpa', version: querydslVersion
    implementation group: 'com.querydsl', name: 'querydsl-apt', version: querydslVersion
    implementation group: 'com.querydsl', name: 'querydsl-core', version: querydslVersion

    annotationProcessor group: 'com.querydsl', name: 'querydsl-apt', version: querydslVersion
    annotationProcessor group: 'com.querydsl', name: 'querydsl-apt', version: querydslVersion, classifier: 'jpa'
    annotationProcessor("jakarta.persistence:jakarta.persistence-api")
    annotationProcessor("jakarta.annotation:jakarta.annotation-api")
}

test {
    useJUnitPlatform()
}

clean {
    delete file('src/main/generated') // 인텔리제이 Annotation processor 생성물 생성위치
}

참고

Gradle 5.0이상 & IntelliJ 2020.* 사용 시

 

Spring Boot Data Jpa 프로젝트에 Querydsl 적용하기

안녕하세요? 이번 시간에는 Spring Boot Data Jpa 프로젝트에 Querydsl을 적용하는 방법을 소개 드리겠습니다. 모든 코드는 Github에 있습니다. Spring Data Jpa를 써보신 분들은 아시겠지만, 기본으로 제공해

jojoldu.tistory.com

[gradle] 그레이들 Annotation processor 와 Querydsl

 

[gradle] 그레이들 Annotation processor 와 Querydsl - I'm honeymon(JiHeon Kim).

이 글에서 다룰 예정인 ‘Querydsl’과 ‘Annotation processor’ 에 관한 내용도, 스프링 부트를 버전업하는 과정에서 겪게 된다. 사내 개발기기 교체주기가 되어 새로운 맥북을 받고 스프링 부트 버전

honeymon.io

problem-with-generating-querydsl-classes-with-gradle

 

Problem with generating Querydsl classes with Gradle

I want to generate 'Q' classes using querydsl. The problem that I'm facing is described by errors: > Task :compileJava FAILED Attempt to recreate a file for type com.my.dinner.rest.database.ent...

stackoverflow.com

 

728x90
반응형
blog image

Written by ner.o

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

반응형

목차

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

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

반응형

목차

1. Amazon Web Service 이용

2. Amazon Web Service에 MySQL 연동

3. Amazon Web Service RDS 이용

1. 데이터베이스 생성

https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#

 

[데이터베이스 생성] 버튼 클릭

 

[MySQL]을 선택하고 맞는 버전을 선택해주면 된다.

 

[프리티어]를 선택

 

마지막에 [스토리지 자동 조정 활성화] 버튼을 해제한다.

 

스크롤을 내려 [데이터 생성] 버튼을 클릭한다.

 

생성 완료

 

2. 파라미터 그룹 생성 / 접속 권한 설정

좌측에서 [파라미터 그룹]을 선택 후 [파라미터 그룹 생성] 버튼을 클릭

[그룹 이름][설명]을 작성 후 [생성] 버튼 클릭

 

character 를 검색하고 [파라미터 편집] 버튼 클릭

 

아래 항목을 utf8로 변경하고 [변경 사항 저장] 버튼 클릭

character_set_client: utf8

character_set_connection: utf8

character_set_database: utf8

character_set_filesystem: utf8

character_set_results: utf8

character_set_server: utf8

 

collation을 검색하고

아래 항목도 변경하고 [변경 사항 저장] 버튼 클릭

collation_connection: utf8_general_ci

collation_server: utf8_general_ci

 

좌측에서 [데이터 베이스]를 선택

해당 DB 선택 후 [수정] 버튼 클릭

[DB 파라미터 그룹]을 방금 만든 mysql57kor로 변경한다.

[보안 그룹]launch-wizard-1으로 수정해준다.

 

하단의 [계속] 버튼 클릭

[즉시 적용]으로 변경 후 [DB 인스턴스 수정] 버튼 클릭

 

3. MySQL Workbench에서 연결

[엔드포인트] 주소 복사

MySQL Workbench에서 [Database - Manage Connections] 클릭

Connection Name 입력

Hostname에 복사한 엔드포인트 주소를 붙여넣기

user 에 RDS 데이터베이스를 생성할 때 입력한 사용자 이름 입력

password까지 입력하면 워크밴치와 연결 완료

 

 

 

728x90
반응형

'web > AWS' 카테고리의 다른 글

[AWS] 2. Amazon Web Service에 MySQL 연동  (0) 2020.05.09
[AWS] 1. Amazon Web Service 이용  (0) 2020.05.09
blog image

Written by ner.o

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

반응형

목차

1. Amazon Web Service 이용

2. Amazon Web Service에 MySQL 연동

3. Amazon Web Service RDS 이용

1. MySQL 설치

1) 설치

PuTTY로 서버 연결

서버 명령창에 아래 명령 실행

 

sudo apt update

사용하는 패키지 정보를 업데이트

 

sudo apt install mysql-server

MySQL 설치

도중에 root 계정의 비밀번호를 입력하라는 화면이 나타난다. 안전한 비밀번호를 입력하자.

 

dpkg -l | grep mysql-server

안전하게 설치가 되었는지 확인

ii mysql-server 5.7.17-0ubuntu0.16.04.1 all MySQL database server (metapackage depending on the latest version) 
ii mysql-server-5.7 5.7.17-0ubuntu0.16.04.1 amd64 MySQL database server binaries and system database setup 
ii mysql-server-core-5.7 5.7.17-0ubuntu0.16.04.1 amd64 MySQL database server binaries

위와 같은 메시지가 출력된다면 잘 설치된 것

 

2) 실행

sudo netstat -tap | grep mysql

MySQL 서버는 설치하면 자동으로 실행된다. MySQL 서버가 실행되고 있는지 확인

tcp 0 0 localhost:mysql *:* LISTEN 2556/mysqld

위 명령의 실행 결과로 아래와 같은 메시지가 출력되면 실행되고 있는 것

만약 MySQL 서버가 실행되지 않는다면 아래 명령을 입력

sudo systemctl restart mysql.service

 

3) 설정 파일 변경

cd /etc/mysql/mysql.conf.d
sudo vi mysqld.cnf

위 명령을 입력하면 mysqld.cnf 파일을 수정할 수 있다.

/bind-address

위 명령을 입력하여

bind-address  = 127.0.0.1
bind-address  = 0.0.0.0

127.0.0.1을 0.0.0.0으로 수정해준다. 아마 vi 명령어를 검색하면 수정할 수 있는 방법이 자세히 나와 있을 것이다.

esc 버튼을 여러번 누른 뒤 wq를 입력해주면 저장 후 종료가 된다.

 

설정 파일을 변경한 후에는 MySQL 서버를 재시작한다.

sudo systemctl restart mysql.service

 

2. MySQL Workbench 연결

1) MySQL Workbench 설치

 

2) 연결

Workbench를 실행한 후 [Database-Connect to Database]를 클릭

Connection MethodStandard TCP/IP over SSH 로 변경

SSH Hostname본인 IP 입력 (IPv4 퍼블릭 IP)

SSH Usernameubuntu

SSH Key File에 다운 받은 *.ppk 파일

password 에서 [Store in Vault] 버튼을 클릭하고 root 사용자의 비밀번호를 입력하면 된다.

 

[OK] 버튼을 입력하면 연결된다.

 

3. 인바운드 규칙 추가

좌측에서 [네트워크 및 보안-보안그룹] 선택

[인바운드 규칙] 선택한 뒤 [인바운드 규칙 편집]버튼 클릭

 

[MySQL/Aurora] 선택하여 인바운드 규칙을 생성

 

 

 

728x90
반응형

'web > AWS' 카테고리의 다른 글

[AWS] 3. Amazon Web Service RDS 이용  (2) 2020.05.09
[AWS] 1. Amazon Web Service 이용  (0) 2020.05.09
blog image

Written by ner.o

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

반응형

목차

1. Amazon Web Service 이용

2. Amazon Web Service에 MySQL 연동

3. Amazon Web Service RDS 이용

1. AWS 계정 생성 

https://aws.amazon.com/ko/

에 들어가셔서 [무료 계정 생성] 버튼을 클릭하시거나

아래의 사이트에서 가입하시면 됩니다.

https://portal.aws.amazon.com/billing/signup#/start

 

AWS Console - Signup

 

portal.aws.amazon.com

결제 정보에서 해외 결제가 가능한 카드(비자 카드, 마스터 카드)의 정보를 입력한다.

정보를 입력하면 유효한 카드인지 확인하기 위해 1$가 결제되지만, 곧 결제 취소가 된다. 

(저 같은 경우는 12일 뒤에 들어왔습니다. 이 게시물 작성한다고 또 입력하는 바람에 또 1달러가 결제됐네요.....(우울) 한 1244원 정도 결제되는 듯 싶어요.)

 

2. Linux (리눅스) 가상 머신 시작

[EC2를 사용하여] 버튼을 클릭

 

좌측 단에서 [프리 티어만]에 체크하면 무료로 설치할 수 있는 AMI를 선택할 수 있다.

Ubuntu Server를 설치해주면 구글링이 편하다.

Ubuntu Server 18.04 LTS [선택] 버튼을 클릭한다.

 

프리 티어 사용 가능한 t2.micro 유형을 선택해주고 [다음: 인스턴스 세부 정보 구성] 버튼을 클릭한다.

 

[다음: 스토리지 추가] 버튼을 클릭한다.

 

[다음: 태그 추가] 버튼을 클릭한다.

 

[태그 추가] 버튼을 클릭해서 리눅스 가상 머신의 이름을 입력한다.

(저는 키에 Name, 값에 MyFirstLinux를 입력하였습니다.)

[다음: 보안 그룹 구성]을 클릭한다.

 

[규칙 추가] 버튼을 클릭하여 HTTP, HTTPS 항목을 추가한 뒤 [검토 및 시작] 버튼을 클릭한다.

 

[시작하기] 버튼을 클릭

 

[새 키 페어 생성]을 선택하고 키 페어 이름을 입력한다.

[키 페어 다운로드] 버튼을 클릭하면 키 페어 이름.pem 파일이 다운로드된다.

이 파일은 가상 머신 연결할 때 쓰일 필수적인 키이다. 

 

[인스턴스]를 클릭하면 본인 IP를 확인할 수 있다. (IPv4 퍼블릭 IP)

 

3. 서버 연결

1) PuTTY 설치

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

본인 PC 버전에 맞는 *.msi 파일을 다운로드하면 된다.

 

2) PuttyGen 실행

[Load] 버튼을 클릭

 

파일 형식을 All Files (*.*)로 설정해주고 방금 다운로드한 *.pem 파일을 열어준다.

 

[확인] 버튼을 클릭

 

[Save private key] 버튼을 클릭

Warning 창이 나오는데 [예] 버튼을 클릭

 

*.pem 파일을 *.ppk 파일로 변환하여 저장하는 창이다. 적당한 이름을 입력하고 [저장] 버튼을 클릭

 

3) PuTTY 실행

Host Name에 본인 IP를 입력한다. (위 인스턴스에서 확인한 IPv4 퍼블릭 IP)

 

[Connection-SSH-Auth]에 들어가서 Private key file for authentication에 *.ppk 파일을 선택한다.

[Open] 버튼을 클릭

 

[ubuntu] 입력

728x90
반응형

'web > AWS' 카테고리의 다른 글

[AWS] 3. Amazon Web Service RDS 이용  (2) 2020.05.09
[AWS] 2. Amazon Web Service에 MySQL 연동  (0) 2020.05.09
blog image

Written by ner.o

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