Programming/SpringBoot

Spring Boot 5강 - Json, Thread, DB연결

상맹 2021. 9. 18. 22:58
반응형

1. JSON -> JAVA로 변경하기

	 {
    "이름": "홍길동",
    "나이": 25,
    "성별": "여",
    "주소": "서울특별시 양천구 목동",
    "특기": ["농구", "도술"],
    "가족관계": { "아버지": "홍판서", "어머니": "춘섬"},
    "회사": "경기 수원시 팔달구 우만동"
    }

 

    class 가족관계{
        String 아버지  = "홍판서";
        String 어머니  = "춘섬";
    }
	
	public class Test{
		String 이름 = "홍길동";
	    int 나이 = 25;
	    String 성별 = "여";
	    String 주소 = "서울특별시 양천구 목동";
	    List<String> 특기 = new ArrayList<>();
	    가족관계 가족 = new 가족관계();
	    String 회사 = "경기 수원시 팔달구 우만동";
	}

Json 으로 바꿔서 BufferedWrited 해야한다. 하지만 라이브러리를 이용하면 간편하게 바뀐다.

하지만 Json이 어떻게 생기고 동작하는지 알아야한다.

 

2. Thread

c x

- 1번 클라이언트가 request를 하면 1번 스레드가 처리하여 서버에 세션을 저장, 1번 쿠키 생성

- 2번 클라이언트가 동일한 request시에는 2번 스레드를 통한 서버에는 세션이 존재하지 않으므로 빠른 요청 처리불가

- 1번 서버에 있는 세션을 2번 서버에 복베하거나 동일한 루트로만 request를 하도록 설정

- 동시에 2가지 일을 한다. => 타임 슬라이싱(1초)

- 왔다갔다 하면서 일을 한다.(Context Switching)

- UX를 좋게한다.

- 통신을 할때는 속도가 빨라진다.

- I/O을 할때는 속도가 빨라진다.

 

3.lambok

 3-1. lombok jar 적용

사용자 파일 ->.m -> repository -> org -> projectlombok -> lombok -> 1.18.20

마우스 오른쪽 버튼 -> git bash here -> java -jar lombok-1.18.20.jar 명령어

pom.xml -> lombok 적용 시켜서 보면은 파일경로를 알 수 있다.
창 이 켜지면 Specify location 버튼 클릭
SpringToolSuite 경로 찾아서 선택
인스톨 / 업데이트 버튼 클릭
Quit Installer 버튼 누르면 완료! -> Spring boot 재시작

 3-2 VO, DTO, Model

  - Model : 

  - VO = Value Object : 

  - Data Transfer Object : 

 

 3-3 MariaDB 설치

 

 

Download MariaDB Server - MariaDB.org

REST API MariaDB Repositories Release Schedule Reporting Bugs … Continue reading "Download MariaDB Server"

mariadb.org

버전 10.5.12 선택후 다운로드 클릭
실행

 

HeidiSQL 실행
신규 버튼 선택
세션 이름, 사용자이름, 암호 입력

  3-4. DB와 Spring 연결

   1. New → Spring Starter Project

Spring Data JPA와 MariaDB Driver를 선택하여 만들기

JPA - JAVA Persistence Application Programming Interface

   

 

    2. 원래 프로젝트의 pom.xml에 위에서 선택한 dependencies 복사 후 붙여넣기

   3. application.yml 설정

  - username : 연결할 계정

  - password : 계정 암호

  - url : 연결한 포트번호 및 서버 시간 맞추기 위한 지역 입력

  - ddl-auto: create → 서버실행시마다 삭제하고 다시 생성(데이터 날라감)

  - ddl-auto: none → 한번 만들어졌으면 none으로 변경

      → 테이블을 수정할경우에 create로 변경 후 만들어야한다

 

  4. TABLE 생성 및 데이터 INSERT

  → pom.xml , application.yml 설정한 뒤 class 생성

- Maria DB에 해당 쿼리실행

create user 'cos'@'%' identified by 'cos1234';
GRANT ALL PRIVILEGES ON *.* TO 'cos'@'%';
create database cosdb;

 

- User 생성

package com.cos.blogapp.domain.user;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

// 테이블 모델
@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
public class User {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id; //PK (자동증가 번호)
	private String username; // 아이디
	private String password; // 패스워드
	private String email; // 이메일
}

@Id를 걸어주면 해당 된거는 PK로 적용된다.

→ auto_increment : 시퀀스라는 오브젝트 +1씩 증가한다. 

→ IDENTITY : 현재 DB 기본 전략 증가를 따라가라.

ddl-auto : create 실행시 user, board table drop 후 재 생성된다.

ex) 오라클일 경우 시퀀스로 실행 maria는 auto_increment

(create table user 자동 생성 알림)

create table user (
    id integer not null auto_increment,
    email varchar(255), 
    password varchar(255),
    username varchar(255), 
    primary key (id)
) engine=InnoDB

- 데이터 INSERT

UserRepository 만들기 (interface)

package com.cos.lsm.domain.user;

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

@Repository
public interface UserRepository extends JpaRepository<User, Integer>{

	@Query(value = "insert into user (username, password, email) values(:username, :password, :email)", nativeQuery = true)
	void join(String username, String password, String email);
	
}

 - extends JpaRepository를 하여 사용할 테이블명과 Primary Key의 Type을 적는다 → <User, Interger>

 - @Query 부분은 JPA에 내장된 save 함수가 아닌 직접 정의한 쿼리문을 이용하여 데이터를 INSERT하기 위해 작성

 

@Controller
public class UserController {
	
	private UserRepository userRepository;
	
	// DI
	public UserController(UserRepository userRepository, HttpSession session) {
		this.userRepository = userRepository;
		this.session = session;
	}
}

- Controller class 에서 앞서 만든 인터페이스를 의존성 주입(DI : Dependency Injection) 시킨다.

 

- 데이터 INSERT 하는 방법

① 인터페이스에서 정의한 쿼리함수를 통하여 직접 데이터 INSERT

@Getmapping("/test/query/join")
	public void TestQueryJoin(){
		userRepository.join("cos","1234","cos@nate.com");
    }

② JPA에 내장된 save 함수를 통해 INSERT하는 방법

@Getmapping("test/join")
	public void testJoin(){
    	User user = new User();
        user.setUsername("ssar");
        user.setPassword("1234");
        user.setEmail("cos@nate.com");
        
        // insert into user(username, password, email) values ('ssar', '1234', 'cos@nate.com')
        userRepository.save(user);
   }

insert 후 콘솔에 뜬 코드

- 매핑한 주소를 입력하면 STS 콘솔 창에서 다음과 같은 코드를 확인 할 수 있다. 그 후에 데이터가 정확히 INSERT 되었는지 MariaDB에 확인해 본다.

INSERT 된 DB

반응형