반응형
반응형

Lombok 같은 경우 그냥 저장소에서 다운만 받아서는 실행이 불가능하고 jar파일을 실행시켜서 해당 프로젝트가 롬복을 사용한다는 설정을 해줘야합니다. Lombok에 기능은 필드명만 넣어주고 어노테이션만 설정하면 생성자 및 Getter 및 Setter를 안 만들어도 자동 생성해줍니다.

 

Maven의 경우 여기에 들어있고

C:\Users\${사용자계정}\.m2.....

 

Gradle의 경우 여기에 들어가있습니다.

C:\Users\${사용자계정}\.gradle\caches\modules-2\files-2.1\org.projectlombok\lombok\1.18.24

 

 

cmd에서 jar 실행시켜주면 이렇게 나옵니다.

 

Specifiy location을 누른 후 sts4(툴)을 선택해줍니다.

Install 눌러서 툴에 설정을 설치하시면 됩니다. 그 후 sts4 재실행 해주세요

 

package com.lsj.chatting;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

// @Getter // Getter 생성
// @Setter // Setter 생성 
// @RequiredArgsConstructor // final 필드가 존재할 경우 생성자
@Data // Getter + Setter 생성
// @AllArgsConstructor // 생성자 생성
@NoArgsConstructor // 기본생성자
public class Account {

	// private final String id; // DB에서 값을 받아와 수정할 일이 없을 때는 final 로 쓰는게 trend
	// private final int password; // DB에서 값을 받아와 수정할 일이 없을 때는 final 로 쓰는게 trend 
	private String id;
	private int password;
	
	@Builder // 내가 원하는 생성자 파라미터 지정 가능 (자세한건 TestController에서 봐주세요)
	public Account(String id, int password) {
		this.id = id;
		this.password = password;
	}
	
	
	
}
package com.lsj.chatting;

import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
	@GetMapping("/test/get")
	public String hello(Account account) {
		
		account.setId("hello");
		account.setPassword(1234);
		
		System.out.println("id : " + account.getId() + " password :" + account.getPassword() );
		// id : hello password :1234 출력
		
		account = Account.builder().password(0).build(); // password만 포함된 생성자
		System.out.println("id : " + account.getId() + " password :" + account.getPassword() );
		// id : null password :0
		
		Account account2 = Account.builder().password(150).id("halo").build(); // id, password가 포함된 생성자 
		System.out.println("id : " + account2.getId() + " password :" + account2.getPassword() );
		// id : halo password :150
		
		// @Builder는 다양하게 생성자를 오버로딩해서 만들 수 있다. → 
		return "<h1> get </h1>";
		
	}

	@DeleteMapping("/test/delete")
	public String delete() {
		return "<h1> delete </h1>";
	}
	
	@PostMapping("/test/post")  // Body : json → application/json (Text → text/plain로 요청시 에러 발생 [자동매핑이 안 되어서])
	public String post(@RequestBody Account account) { // MessageConverter라는 Class가 자동 Injection을 해준다.
		return "id : " + account.getId() + "\n password : " + account.getPassword(); 
		// {id:1,password:1234} 으로 요청 
	}
	
	@PostMapping("/test/post2") // Body : Text → text/plain 
	public String post2(@RequestBody String text) { // @requestBody body 데이터를 받기 위해 필요
		return text; // 정말로 맛있어요 으로 요청 
	} 
	
	@PutMapping("/test/put")
	public String put() {
		return "<h1> put </h1>";
	}
	
}
반응형
반응형

📝MIME 타입

MIME 타입이란 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘 → 내가 보낸 데이터가 Text이다 또는 엑셀이다 등


MIME 타입의 구조는 매우 간단합니다 '/'로 구분된 두 개의 문자열인 타입과 서브타입으로 구성됩니다 → type/subtype

정해진 것들만 사용하기 때문에 아래 예제를 보시면 이해가 더 쉬울 것입니다

 

  • text (텍스트를 포함하는 모든 문)
    • text/plain → <b> 안녕하세요 </b> → <b> 안녕하세요 </b> 
    • text/html → <b> 안녕하세요 </b> → 안녕하세요
  • image (모든 종류의 오디오 파일)
    • image/jpeg
    • image/png
  • audio (모든 종류의 오디오 파일)
    • audio/mpeg
    • audio/ogg
    • audio/*
  • video (모든 종류의 이진 데이터) 
    • video/mp4
    • applicaiton (모든 종류의 이진 데이터)
    • applicaiton/json


🔗 MIME 타입 정의서
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types

 

MIME 타입 - HTTP | MDN

MIME 타입이란 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘입니다: 웹에서 파일의 확장자는 별 의미가 없습니다. 그러므로, 각 문서와 함께 올바른 MIME 타입을 전송하도록,

developer.mozilla.org

 

📝싱글톤 패턴

싱글톤(Singleton)패턴은 객체의 인스턴스가 오직 1개만 생성되는 디자인패턴이다
이점은 메모리 측면에서 좋으며 다른 클래스의 인스턴스들이 접근하여 사용할 수 있지만 데이터를 동시에 접근하면 동시성에 문제가 발생할 수 있으니 유의해야한다.

public class Single {

    private static Single singleton = new Single();
    
    private Single() {
        // 생성자는 외부에서 호출 못하도록 private 선언
    }

    public static Singleton getInstance() {
        return instance; // 외부 클래스들이 쓸 수 있도록 static 선언
    }
}

 

⚠️싱글톤 문제점 

  1. 코드 자체가 많이 들어간다
  2. DIP위반 .getInstance를 이용해 구체로 들어가 호출해야한다
  3. private 생성자로 자식 클래스 만들기 어렵다유연성이 떨어지고 안티패턴으로 불린다.

 

📝Chunk 지향 처리

Chunk데이터 덩어리트랜잭션이라고 생각하시면 편하실 거 같습니다
Chunk 지향처리란, 한 번에 하나씩 데이터를 읽어 Chunk라는 덩어리를 만든 뒤 Chunk 단위로 트랜잭션을 다루는 것을 의미합니다 여기서 Chunk 단위로 트랜잭션을 수행하기 때문에 실패할 경우에는 해당 Chunk 만큼만 롤백이 되고 이전에 커밋된 트랜잭션 범위까지는 반영이 된다는 것입니다.

 

📝APM

Application의 성능을 관리하는 서비스로 모니터링, 성능 분석, 장애관리 등 지원한다.

 

📝메모리디비

Memory DB는 Disk-based DB와 달리 말 그대로 외부 저장 장치에 데이터를 저장하지 않고 메모리에서 데이터를 읽고 쓴다 아래 사진과 같은 구조로 접근하기 때문에 Disk-based DB보다 훨씬 속도가 빠르다 하지만 Memory DB는 기본적으로 영속성(persistence)을 보장하지 않는다 즉, 에러 발생으로 갑자기 프로세스가 종료될시 휘발성으로 데이터가 모두 날아갈 수 있다 또한 메모리에 저장하기 때문에 용량에 대한 제약이 있다 한계에 도달하면 기존 데이터를 지우든가 아니면 새로운 데이터를 입력하지 못할 것입니다.

 

출처 : https://constructor.tistory.com/18

반응형
반응형

HTTP 통신 Request와 Response를 보기 좋게 보여주고 요청을 쉽게 도와주는 프로그램이다.

 

- 설치

https://chrome.google.com/webstore/search/postman?hl=ko

 

Chrome 웹 스토어

Chrome에 사용할 유용한 앱, 게임, 확장 프로그램 및 테마를 찾아보세요.

chrome.google.com

 

설치 후에 사용방법은 간단합니다.

 

 

Method가 Http 통신 방식을 정하시고 URL을 적어주시면 됩니다.

GET의 경우 웹브라우저로 요청해도 오니 POST방식을 알려드리겠습니다.

 

 

package com.lsj.chatting;

import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
	@GetMapping("/test/get")
	public String hello() {
		return "<h1> get </h1>";
	}

	@DeleteMapping("/test/delete")
	public String delete() {
		return "<h1> delete </h1>";
	}
	
	@PostMapping("/test/post")  // Body : json → application/json (Text → text/plain로 요청시 에러 발생 [자동매핑이 안 되어서])
	public String post(@RequestBody Account account) { // MessageConverter라는 Class가 자동 Injection을 해준다.
		return "id : " + account.getId() + "\n password : " + account.getPassword(); 
		// {id:1,password:1234} 으로 요청 
	}
	
	@PostMapping("/test/post2") // Body : Text → text/plain 
	public String post2(@RequestBody String text) { // @requestBody body 데이터를 받기 위해 필요
		return text; // 정말로 맛있어요 으로 요청 
	} 
	
	@PutMapping("/test/put")
	public String put() {
		return "<h1> put </h1>";
	}
	
}
package com.lsj.chatting;

public class Account {

	private String id;
	private int password;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public int getPassword() {
		return password;
	}
	public void setPassword(int password) {
		this.password = password;
	}
	
	
}

기본적으로 form 따위 방식으로 보낼 때 x-www-form-urlencoded 방식으로 body에 담아 보냅니다. 

 

Header에 보시면 text/plain으로 보낸 걸 알 수 있습니다.

 

Body에 담아서 보낼 경우 Text 방식과 Json 방식을 설정할 수 있습니다.

 

반응형
반응형
# git config 확인
git config --list

# git config 설정
git config --global user.name "user-name"
git config --global user.email abcd@naver.com

# 잘못등록한 config 삭제
git config --unset --global user.name
git config --unset --global user.email

 

 

🔗 참고 및 출처

https://jonhyuk0922.tistory.com/233

반응형
반응형

src/main/resources/application.properties → application.yml으로 수정

 

spring:
  datasource:
    driver-class-name: oracle.jdbc.OracleDriver
    url: jdbc:oracle:thin:@localhost:1521:orcl
    username: c##root
    password: 1234

주의) 탭사용 금지, 무조건 띄어쓰기로 구분해주세요

키: 값 형태에서 콜론 다음 띄어쓰기 꼭 해야합니다.

 

spring.datasource.driver-class-name

spring.datasource.url

spring.datasource.username

spring.datasource.password

→ yml의 계층구조는 위에 구조를 계층화 시켜서 간단하게 표현한 것입니다.

 

이제 Gradle에서 주석처리한 JPA를 Gradle로 다운받고 Application 시작을 하면 잘 접속이 되는 걸 확인할 수 있습니다.

(JPA을 사용하는데 DB 접속을 안 시켜놓으면 Application 시작시 에러나옴)

 

yml이란

JSON, XML과 형태나 형식이 유사합니다. 공백 두개로 계층을 구분합니다.

 

 

 

 

 

반응형
반응형

📝오라클DB 설치

다운로드 URL : https://www.oracle.com/kr/downloads/

 

Oracle 소프트웨어 다운로드

클라우드 무료 체험과 소프트웨어 다운로드에서 Oracle의 애플리케이션, 미들웨어, 데이터베이스, Java, 개발자 도구를 확인해 보세요.

www.oracle.com

 

📝설치

압축을 풀고 C드라이브에 Oracle을 폴더를 만들어주세요 (C드라이브 Oracle에 압축을 푸시면 안 됩니다.)

 

계속 진행하다보면 기본 설치 부분에 패스워드 설정 및 여러가지 행위를 하는데 OracleBase를 C:/Oracle로 잡아주세요환경변수가 설치시 바로 실행파일 경로로 잡힙니다

 

 

Oracle Developer (IDE)

설치 URL : https://www.oracle.com/kr/database/sqldeveloper/

 

SQL Developer

Oracle SQL Developer is a free, development environment that simplifies the management of Oracle Database in both traditional and Cloud deployments. It offers development of your PL/SQL applications, query tools, a DBA console, a reports interface, and mor

www.oracle.com

오라클 DB에 접근할 수 있게 해주는 툴입니다.

 

 

📝계정생성 및 권한 부여

  1. cmd 접속
  2. sqlplus 입력 (오라클 DB 접근)
  3. 사용자명 : sys AS SYSDBA  → 패스워드 없이 접근 가능한 슈퍼 계정
  4. 계정 생성
    • CREATE USER 유저이름 IDENTIFIED BY 비밀번호;
    • 예) CREATE USER c##root IDENTIFIED BY 1234;
    • id 앞에는 c## 필수적으로 들어가야한다.
  5. 권한부여
    • GRANT 권한 to 유저이름;
    • 예) GRANT RESOURCE, CONNECT, DBA to c##root;
    • RESOURCE
      • 개체를 생성, 변경, 제거 할 수 있는 권한(DDL,DML 사용가능)
    • CONNECT
      • 데이터베이스에 연결할 수 있는 권한
    • DBA
      • 데이터베이스 관리자 권한

 

 

 

📝Oracle 접속

 

 

SID는 인스턴스의 이름입니다. 필요한 이유는 한 서버에 여러개의 인스턴스가 기동 될 수 있기 때문입니다.

밑에서 보이는 구조가 오라클 DB 구조인데 여러개의 PDB를 가진 거 처럼 구분할 수 있는게 필요합니다.

 

 

📝CDB 

하나의 DB를 컨테이너로 보고 그 컨테이너를 담을 수 있는 DB를 의미한다

 

📝PDB 

CDB에 끼워넣을 수 있는(Pluggable) DB 즉, CDB안에 있는 DB를 의미한다

 

  1. 오라클 데이타베이스명을 확인하는 방법
    • SELECT NAME, DB_UNIQUE_NAME FROM v$database;
  2. 오라클 SID를 확인하는 방법
    • SELECT instance FROM v$thread;

 

 

📝SID

DB 하나의 인스턴스 

 

📝Service Name

여러개의 인스턴스를 모아 하나의 서버 혹은 시스템을 구성한것

 

서버에서 여러개의 인스턴스를 가질 수 있으며 만약 두개의 인스턴스를 묶어 사용해 동기화시켜서 같은 서버인 것 처럼 활용할 경우 두개의 인스턴스는 SID는 다르지만 같은 Service Name을 가질 수 있게 된다. 

 

 

Oracle DB구조

 

 

🔗 참고 및 출처

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=dibidibijp&logNo=150180040069 

 

 

 

반응형
반응형

앵커(Anchor) A태그를 의미한다.

 

- 방법 1
<a href="javascript:void(0)">링크기능무효화</a>
void(0)의 경우, () 안의 값이 숫자나 영문자 등등을 사용해도 문제는 없지만, 일반적으로 숫자 0을 사용합니다.

- 방법 2
<a href="# return false"> return false 로 링크 기능인 href가 수행시키지 않게 한다.

- 후기 
그냥 # 뒤에 아무거나 붙여도 기능 수행을 안시킨다 하지만 저렇게 return false 처럼 명시해두면 구분하기는 편할 거 같다.

반응형
반응형

우분투 20.04을 기준으로 작성했습니다.

 

📝기존 마리아DB 삭제 

1. 설치된 마리아디비 조회

  • sudo dpkg -l | grep mariadb

2. 삭제

  • apt-get purge ${package_name}

 

[ 삭제 처리가 잘 안 될시 해당 명령어 순차 입력 ]

  • sudo apt-get purge mariadb*
  • sudo apt-get purge mysql*
  • sudo apt-get autoremove
  • sudo apt-get autoclean
  • sudo apt-get remove dbconfig-mariadb
  • sudo apt-get update -y
  • sudo apt-get dist-upgrade -y

 

 

🔗참고 자료

https://leannet.tistory.com/49 

 

ubuntu 서버 MariaDB 삭제

서버 설정한다고 미쳐 블로그 관리를 못하였다 그래서 MariaDB를 삭제를 하고 다시 설치를 해볼려고 한다. 삭제 sudo apt-get remove --purge mariadb 다시 한번 설정 파일까지 싹 삭제 혹시 몰라 mysql도... sud

leannet.tistory.com

 

📝마리아DB 설치

1. apt 설치 (없을 시)

  • sudo apt get install


2. apt 외부 repository 주소 설정

  •  sudo vi /etc/apt/sources.list
  • :%s/kr.archive.ubuntu.com/mirror.kakao.com/g

 

 

🔗참고 자료 : https://qucdas.tistory.com/95

 


3. 마리아 DB 설치

  • sudo apt install mariadb-server -y
  • * 우분투 설치시 기존 mysql이 깔려 있어 충돌이 날 수 있다 그럴 경우 mysql 삭제 필요

 

🔗참고자료 : https://leannet.tistory.com/49

 


4. 마리아DB 설치 확인

  • mariadb --version


5. 마리아DB 시작

  • sudo systemctl start mariadb


6. 마리아 DB root 패스워드 설정 (슈퍼계정)

  • sudo /usr/bin/mysqladmin -u root password


7. 접속 확인해보기 (root로 접속)

  • mysql -u root -p


8. 부팅 시 마리아DB 자동시작 설정

  • systemctl is-enabled mariadb


9. DB 및 table 덤프 import 하기 (존재할 시 사용)

  • mysql -u root -p --database=mysql < ${경로}/${덤프DB및테이블}.sql


10. 개발망에서 접근할 수 있게 포트 개방

  • sudo iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT


11. 외부접근 허용

  • vi /etc/mysql/mariadb.conf.d/50-server.conf
  • #bind-address            = 127.0.0.1 주석처리 마리아 DB는 bind-address가 지정되어있어서 해당 아이피만 허용 가능하다 즉, 초기에는 로컬에서만 접근 가능하다.

 

📝마리아DB 기동

  • sudo systemctl start mariadb

 

📝마리아DB 중지 

  • sudo systemctl stop mariadb

 

📝마리아DB 재기동

  • sudo systemctl restart mariadb

 

📝계정 생성 

1. 계정 생성

  • CREATE USER '${id}'@'%' IDENTIFIED BY '${password}';
  • 예) CREATE USER 'sjk40'@'%' IDENTIFIED BY '1234';
  • # 여기에서 %란 모든 아이피대역에서 해당 아이디를 사용할 수 있다는 의미
  • # 192.168.% 인 경우 192.168.xxx.xxx 대역에 해당 아이디를 사용할 수 있다는 것
  • # 참고로 처음 마리아DB 설치시 root는 로컬에서만 접근 가능하다

 

2. 권한 부여

  • GRANT ALL PRIVILEGES ON *.* TO '${id}'@'%';
  • 예) GRANT ALL PRIVILEGES ON *.* TO 'sjk40'@'%'; 
  • # 여기에서 *.*란 DB.테이블명을 의미한다 *의 경우 모든이라는 의미로 모든 DB와 모든테이블의 접근 권한을 준다는 의미이다.
  • # 물론 위에 계정 생성에 아이피대역에 따라 접근할 수 있는 아이디들이 다 다르다
  • # 그래서 어떤 아이피 대역의 아이디에 권한을 줄지에 대한 것을 잘 명시해야한다

 

3. Commit

  • flush privileges;

 

📝계정조회

  1. use mysql;
  2. select user, host from user;

 

📝계정 삭제 

  • DROP USER '${id}'@'%';
  • 예) DROP USER 'rootuser'@'%';
  • # 여기에서 %는 아이피대역으로 삭제할 Host IP를 제대로 입력해야한다.

 

 

반응형

'[Database] > [MariaDB]' 카테고리의 다른 글

[MariaDB] 마리아 디비 설치  (0) 2021.06.20
반응형

 

병렬 작업 처리가 많아지면 스레드 개수가 무한정으로 증가하고 CPU가 바빠지며 메모리 사용량이 늘어난다.

따라서 애플리케이션의 성능이 급격하게 저하되게 된다.

 

스레드 풀

작업 처리에 사용되는 스레드를 제한된 개수 만큼 미리 생성해서 작업 큐에 쌓여지는 작업들을 하나씩 스레드가 맡아서 처리한다. 제한을 걸기 때문에 무한정으로 증가하지 않으며 서버가 뻗지 않게 된다.

 

코어 스레드 수  

최소 스레드 수 (60초 동안 추가된 스레드가 아무 작업 하지 않으면 놀고 있는 스레드가 존재해 없애야한다.)

 

스레드풀의 스레드는 기본적으로 데몬 스레드가 아니기 때문에 main 스레드가 종료되더라도 계속 실행 되므로

반드시 종료시키려면 스레드 풀을 따로 종료시켜야한다.

 

 

 

반응형