조치사항

1. MS-SQL 메모리 할당

2. NDU 기능 OFF

3. Memory Compression Disable


1. MS-SQL 메모리 할당

현상 분석

1.DB 서버의 전체 용량은 16GB였으며, 점검 당시 약 15GB 의 메모리를 SQL Server에서 독점하고 있었다.

2.SQLServer 내 최대 메모리 설정은 10350MB로 설정되어 있었다. 

1) 최대 메모리 설정을 10G로 했는데, 왜 이를 넘어섰을까?

최대 메모리 설정을 해 두어도, SQL Server는 그 외의 메모리 (worker thread 메모리, 확장 저장 프로시저 등)을 사용한다고 한다. 이러한 메모리 때문에 10G로 설정했음에도 15G 이상을 MSSQL이 사용하고 있던 것이다.

 

2) 왜 최대 메모리까지 쓰는데 정상인걸까?

이건 MSSQL의 특성 때문인데,

MSSQL은 메모리를 한 번 점유하면 OS가 요청하지 않는 한 거의 메모리 반환을 하지 않는다고 한다.

(쿼리의 재사용성을 위해서)

따라서 메모리를 쓰는 만큼 계속 차오르고, 다 쓴 메모리를 반환하지 않으니 늘 최대치까지 차 있는 것으로 보인다.

하지만 이는 잘 돌아가고 있는 상태라고 한다. (메모리 부족 에러가 나지 않는다면!)

이걸 굳이 내려주려면 DB서버 재부팅을 시켜주라고 한다. 하지만 그렇게 내려준다고 하더라도 어짜피 다시 찰것이다.

 

변경 방법

변경 방법은 간단하며, 시스템 재시작도 필요하지 않다.

 

1.SQL Server에서 루트를 우클릭 > 속성(Properties)클릭

2.왼쪽 페이지 선택 > 메모리 > 서버 메모리 옵션 > 최대 서버 메모리 설정 (MB단위)

 

결과

내려서 적용하자 마자 메모리가 쭉 내려갔다. 하지만 적용해 준 메모리가 최적의 메모리가 아닐 수 있다.

지속적인 모니터링 후 적정 값을 조절할 필요가 있다.

 


 

2. NDU(Windows Network Data Usage Monitoring Driver) 기능 OFF

  • win+R (실행창) - "regedit"
  • HKEY_LOCAL_MACHINE₩SYSTEM₩ControlSet001₩Services₩Ndu

 

  • start 값을 2 -> 4로 바꾼다.

 

  • 재부팅하면 끝.

3. Memory Compression Disable

 

  • Windows PowerShell 검색 후 '관리자 권한'으로 실행

 

  • MMAgent 를 입력해서 현재상태를 확인한다.

.

메모리압축 비활성

Disable-MMAgent -MemoryCompression

 

메모리압축 활성(원상 복구시)

Disable-MMAgent -MemoryCompression

 


4. Mem Reduct 프로그램 사용

Mem Reduct.zip
0.21MB

 

프로그램 실행 후 

 

'설정' - '메모리 정리'

다음 그림과 같이 설정해 주면 된다.

 

'IT > 🚨Error🚨' 카테고리의 다른 글

[🚨Error] Scanner 사용시 nextInt 뒤에 nextLine 생략됨!  (4) 2023.06.29

 

 기능 : 분산형 버전 관리 시스템의 한 종류이다.

  • 버전 관리란?
    • 각 파일을 이전 상태로 되돌릴 수 있다.
    • 프로젝트를 통째로 이전 상태로 되돌릴 수 있다.
    • 시간에 따라 수정 내용을 비교해 볼 수 있다.
    • 누가 문제를 일으켰는지도 추적할 수 있다.
    • 누가 언제 만들어낸 이슈인지도 알 수 있다.
    • 파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있다.


세 가지 상태

Git은 파일을 Committed, Modified, Staged 이렇게 세 가지 상태로 관리합니다.

  • Committed : 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미합니다.
  • Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 말합니다.
  • Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미합니다.

이 세 가지 상태는 Git 프로젝트의 세 가지 단계와 연결돼 있습니다. Git directory, Working Tree, Staging Area 단계가 있습니다. 

 

Git directory 는 Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말합니다. 이 Git 디렉토리가 Git의 핵심입니다. 다른 컴퓨터에 있는 저장소를 Clone 할 때 Git 디렉토리가 만들어집니다.

 

Working Tree 는 프로젝트의 특정 버전을 Checkout 한 것입니다. Git 디렉토리는 지금 작업하는 디스크에 있고 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와서 워킹 트리를 만듭니다.

 

Staging Area 는 Git 디렉토리에 있습니다. 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장합니다. Git에서는 기술용어로는 “Index” 라고 하지만, “Staging Area” 라는 용어를 써도 상관없습니다.

 

Git으로 하는 일은 기본적으로 아래와 같습니다.

 

  1. Working Tree 에서 파일을 수정합니다.
  2. Staging Area 에 파일을 Stage 해서 커밋할 스냅샷을 만든다. 모든 파일을 추가할 수도 있고 선택하여 추가할 수도 있습니다.
  3. Staging Area 에 있는 파일들을 커밋해서 Git 디렉토리에 영구적인 스냅샷으로 저장합니다.

 

Git directory 에 있는 파일들은 Committed 상태입니다. 파일을 수정하고 Staging Area에 추가했다면 Staged입니다. 그리고 Checkout 하고 나서 수정했지만, 아직 Staging Area에 추가하지 않았으면 Modified입니다. 


설치 방법

Linux에 설치

 

Fedora에서  'dnf'

sudo dnf install git-all

 

Ubuntu등 데비안 계열 'apt'

sudo apt install git-all

 

Mac에 설치

 

  • Terminal에 'git' 입력
  • Homebrew가 설치돼있으면 아래 코드를 입력하면 된다.
brew install git

 

Windows에 설치

 

Git - Downloading Package (git-scm.com)

 

Git - Downloading Package

Download for Windows Click here to download the latest (2.43.0) 32-bit version of Git for Windows. This is the most recent maintained build. It was released 2 months ago, on 2023-11-20. Other Git for Windows downloads Standalone Installer 32-bit Git for Wi

git-scm.com


초기 설정

Git을 설치하고 나서 가장 먼저 해야 하는 것은 사용자이름이메일 주소를 설정하는 것이다. Git은 커밋할 때마다 이 정보를 사용한다.

 

시작 - git폴더 - Git Bash 실행

 

 

아래와 같이 콘솔창이 나오면 정상실행 완료!

 

사용자 정보

 

git config --global user.email "you@example.com"

 

git config --global user.name "Your Name"

 

위에 쓰인 you@example.com, Your Name 부분을 본인 이메일, 이름으로 수정해서 Enter를 해주면 된다.


시작하기

  •  git init 를 터미널에 쳐서 .git이라는 폴더 만든다.
  • git 명령어:
    - git status // 상태 파악
     - git status --short // 혹은 -s하면 짧게 볼 수 있음 (-- 를 앞에 붙이면 전체 단어를 씀)


- git add 파일명 // (ex. basic.html)을 하면 index에 올라온 상태
   git add . // (.은 해당폴더)(*은 전체폴더) 현재 폴더에 있는 모든 것을 업로드한다는 뜻

- git commit // 터미널에서 commit하기 (commit창 뜨고 간단한 메모 쓰고 끄면 저장됨)
  git commit -m "n 번째 커밋입니다." // 커맨드 창에서 바로 메모 쓰고 commit할 수 있는 기능, 창 안뜸
   git commit -am "n 번째 커밋입니다." // add하면서 바로 commit까지 하기
  (※ 만약, git commit시 터미널에서 하라고 나오면 내용 간단하게 쓰고, 맨 밑에 :q하면 그냥 꺼짐, :wq누르면 저장하고 꺼짐)

- git log // 커밋 기록 확인할 수 있음
  git log --oneline // 로그 간단하게 보여줌 한 줄씩
   git log --graph // 간단하게 디렉토리를 표시해줌
   (근데 Extensions에서 git graph 찾아서 설치하고 Source control에서 누르면 더 가시적으로 볼 수 있음)


- git --help // 간단한 명령어들 알려줌

**저장된 기록을 되돌릴 수 있는 방법(stage->work tree)

1. add // 스테이지로 올린다
- git add . // 


2. restore // 스테이지에 올라와 있는 것을 취소한 방법
- git restore --staged 파일명 // stage에 올라간 파일 다시 내릴 수 있음


3. - git diff --staged // 뭐가 변경되었는지 확인할 수 있다.


** 저장한 기록을 되돌릴 수 있는 방법(commit -> stage) // 반드시, commit이 된 상태로 움직여야 함, 무조건 commit 먼저 하기)
// 마스터(혹은 메인이라고도 함)가 항상 기본이라고 생각해야 함

1. reset // 버전기록을 삭제하는 방법, 파일은 남아있음
- git reset 예전버전의 해시값 // 7글자 적어준 코드의 위부터 저장하고 commit된 버전이 없어짐(7글자 코드까지만 저장됨)


2. revert // reset과는 다르게 이전 기록들이 남으면서 새로운 버전이 됨 (버전을 rollback) 
- git revert  


3. branch // resvrt와는 달리 되돌아가지만 새로운 브랜치가 생성됨, 이전 기록들 남음

- git checkout 해시값 // git log --oneline에서 나오는 7글자(=해시값) 원하는 버전에 왔다갔다 할 수 있음
   git checkout - // 다시 원래의 마지막 상태로 돌아감
  git checkout HEAD // ????

- git swith -c 새로운브랜치이름 // checkout의 역할이 너무 많아지면서 새로 생긴 기능, 브랜치를 만들면서 바로 이동 가능(c의 뜻은 creat)

- git branch 이름설정 // 브랜치 만들기


- git branch // 현재 생성되어 있는 브랜치들 확인, 여기서 checkout해서 원하는 브랜치로 이동할 수 있음
   git branch 원래이름 바꾸고싶은이름 // 기 설정된 브랜치 이름 바꿀 수 있음

- git show 7글자 // 바꾼 내용 보여줌

* HEAD // 꼬리표 개념, 현재 내가 있는 위치를 가리킨다.

 

 

'IT > Git & Github' 카테고리의 다른 글

[Git 오류] warning: LF will be replaced by CRLF  (0) 2023.06.25
Git 브랜치  (0) 2023.06.04
Git 명령어 3  (0) 2023.06.04
Git 명령어 2  (0) 2023.06.01
Git 명령어 1  (0) 2023.06.01

🟩 개발환경이란 

프로그램 개발에 필요한 컴파일러, 통합개발도구(IDE), 서버 런타임, 편집기 및 유틸리티 등을 개발 컴퓨터에 세팅해 놓은 것.

 

🟩 Eclipse 

자바 기반의 오픈소스 통합 개발 환경(IDE)입니다. 이클립스는 프로그래밍 언어로 자바뿐만 아니라 다양한 다른 프로그래밍 언어와 프레임워크를 지원하며, 코드 편집, 디버깅, 빌드, 테스트 및 프로젝트 관리를 위한 다양한 기능을 제공합니다.


🟩 Web  

  • 정의 : 웹은 인터넷 브라우저를 통해 접근되는 웹사이트나 웹 애플리케이션을 의미합니다.
  • 접근 방식 : URL을 통해 접근하며, 다운로드나 설치 과정 없이 사용 가능합니다.
  • 호환성 : 다양한 브라우저와 기기에서 사용할 수 있어 호환성이 높습니다.
  • 개발 언어 : HTML, CSS, JavaScript 등 웹 표준 기술을 사용합니다.

🟩 Front-end 개발 

 

프론트엔드는 단어에서 예측할 수 있듯이 사용자의 앞에 보이는 화면, 즉 인터페이스를 만드는 작업이라고 볼 수 있다.

프론트에서 사용자가 선택한 요청사항에 따라 데이터나 서비스를 서버에 요청하거나 또는 요청해서 얻은 데이터를 사용자에게 보여주는 것. 보이는 인터페이스에 대한 개발인 만큼 사용자 인터페이스(UI)와 사용자 경험(UX)과 밀접한 관련이 있다.

 

🟩 HTML(HyperText Markup Language)

기능 : HTML 웹페이지의 구조를 정의하는 마크업 언어입니다. 웹페이지의 틀을 만들고, 텍스트, 이미지, 링크 등의 콘텐츠를 웹페이지에 배치합니다.
역할/필요성 : HTML은 웹의 기본 구조를 만드는 데 필수적입니다. 웹페이지의 모든 요소들이 HTML을 통해 정의되며, 이를 통해 사용자에게 정보를 제공하고 상호작용을 가능하게 합니다.

 

🟩 CSS(Cascading Style Sheets)

CSS 적용 전 - 후

기능 : CSS HTML로 만든 웹페이지의 디자인과 레이아웃을 꾸며주는 스타일 시트 언어입니다. 폰트 스타일, 색상, 간격, 레이아웃 및 다양한 시각적 효과를 정의합니다.
역할/필요성 : CSS는 웹페이지의 시각적 매력을 높이는 데 중요합니다. 사용자 경험(UX)을 향상시키고, 웹페이지를 더 읽기 쉽고 접근하기 쉬운 형태로 만듭니다. 반응형 디자인을 통해 다양한 기기에서도 웹페이지가 잘 보이게 할 수 있습니다.

 

🟩 JavaScript

기능 : JavaScript는 웹페이지에 Interactive한 요소를 추가하는 프로그래밍 언어입니다. 사용자와의 상호작용을 가능하게 하고, 데이터를 처리하며, 동적인 콘텐츠를 생성합니다.

 

역할/필요성 : JavaScript는 웹페이지를 동적이고 생동감 있게 만듭니다. 사용자의 입력에 반응하여 웹페이지의 내용을 실시간으로 변경할 수 있으며, 복잡한 사용자 인터페이스와 애니메이션, 게임, 양방향 어플리케이션 등을 구현할 수 있습니다.

 

🟩 AJAX (Asynchronous JavaScript and XML)

 비동기 통신: 서버와의 통신을 위해 XMLHttpRequest 객체를 사용하여, 사용자의 활동에 따라 필요한 데이터만 서버로부터 비동기적으로 요청하고 받아옵니다.

동기 통신(좌), 비동기 통신(우)

 페이지 일부분만 갱신: 서버로부터 받은 데이터를 이용해 웹 페이지의 특정 부분만을 업데이트합니다. 이는 페이지 전체를 새로 고치는 것보다 빠르고 효율적입니다.
 JSON, XML, HTML, 텍스트 데이터 처리: AJAX JSON, XML, HTML, 텍스트 등 다양한 형식의 데이터를 처리하고, 이를 페이지에 동적으로 표시할 수 있습니다.

🟩 Back-end 개발 

 

백엔드 개발(Backend Development)은 웹사이트나 애플리케이션의 서버, 데이터베이스, 그리고 애플리케이션의 핵심 기능적 부분을 구축하는 과정을 말합니다. 사용자가 직접 보거나 상호작용하는 프론트엔드(웹 페이지의 시각적 요소 등)와 달리, 백엔드는 주로 데이터 처리, 보안, 서버 관리 등 사용자에게 직접 보이지 않는 부분을 담당합니다.

백엔드 개발의 주요 구성 요소는 다음과 같습니다:

  1. 서버: 클라이언트(예: 웹 브라우저)의 요청을 받아 처리하고, 필요한 데이터를 응답으로 보내는 시스템입니다.
  2. 데이터베이스: 정보를 저장, 검색, 업데이트, 삭제할 수 있는 구조화된 데이터의 집합체입니다. 백엔드 개발자는 데이터베이스와의 상호작용을 통해 데이터를 관리합니다.
  3. 애플리케이션 로직: 사용자의 요청에 따라 특정 작업을 수행하고, 결과를 사용자에게 전달하는 프로그램의 일부분입니다. 이 로직은 서버에서 실행됩니다.

백엔드 개발자는 주로 서버 사이드 프로그래밍 언어(예: Java, Python, Ruby, Node.js 등)와 데이터베이스 관리 시스템(예: MySQL, PostgreSQL, MongoDB 등)을 사용하여 이러한 기능을 구현합니다. 또한, API(애플리케이션 프로그래밍 인터페이스) 개발, 서버 보안, 데이터 처리 및 저장 최적화 등의 업무도 수행합니다.


🟩 JAVA

 기능 : 자바는 강력한 객체지향 프로그래밍 언어로서, 다양한 플랫폼에서 실행될 수 있는 애플리케이션을 개발하는 데 사용됩니다.

 

 

 역할/필요성 : 자바는 ‘WORA(Write Once, Run Anywhere)'이라는 특징을 가지고 있어, 다양한 환경에서의 호환성과 이식성을 제공합니다.
 

 

 JDK (Java Development Kit) : 자바 애플리케이션 개발을 위한 핵심 도구 모음으로, 소스 코드를 컴파일하고 실행하는 데 필요한 컴파일러와 라이브러리를 포함합니다. 자바 개발자에게 필수적인 환경입니다.
 JRE (Java Runtime Environment) : 자바 애플리케이션을 실행하는 데 필요한 환경을 제공하며, JVM을 포함한 라이브러리와 기타 파일로 구성됩니다. 사용자가 개발된 자바 애플리케이션을 실행할 때 필요합니다.
 JVM (Java Virtual Machine) : 자바 바이트코드를 실행하고, 다양한 운영 체제에서 자바 애플리케이션을 구동할 수 있도록 하는 가상 실행 환경입니다. '한 번 작성하면 어디서나 실행될 수 있음'을 가능하게 만드는 핵심 요소입니다.

 


🟩 Spring

 정의  : 엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크

장점 : 다양한 라이브러리를 제공하며 업무 분업화 및 느슨한 결합을 통해 유지보수에 용이하게 할 수 있다.
단점 : 초기 설정 및 러닝커브가 높다.  

🟩 git

 

 기능 : 분산형 버전 관리 시스템의 한 종류이다.

 

 버전 관리란?

  • 각 파일을 이전 상태로 되돌릴 수 있다.
  • 프로젝트를 통째로 이전 상태로 되돌릴 수 있다.
  • 시간에 따라 수정 내용을 비교해 볼 수 있다.
  • 누가 문제를 일으켰는지도 추적할 수 있다.
  • 누가 언제 만들어낸 이슈인지도 알 수 있다.
  • 파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있다.

 

 git의 장점 ?

 

  • 소스 코드를 주고 받을 필요 없이, 같은 파일을 여러 명이 동시에 작업하는 병렬개발이 가능하다.
  • 분산 버전 관리이기 때문에 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있고, 중앙 저장소가 날라가 버려도 원상 복구할 수 있다.
  • 팀 프로젝트가 아닌, 개인 프로젝트일지라도 Git을 통해 버전 관리를 하면 체계적인 개발이 가능해지고, 프로그램이나 패치를 배포하는 과정도 간단해진다.

 

👇 git 공식사이트

https://git-scm.com/
 

Git

 

git-scm.com

 

👇 pro-git E-book 다운로드

https://github.com/progit/progit2-ko/releases/download/2.1.80/progit.pdf

 


🟩 웹 서버 (Web Server)


클라이언트가 GET, POST 등의 메소드를 이용해 전송한 요청을 받아 HTML이나 오브젝트를 HTTP 프로토콜을 이용해 전송하는 프로그램 입니다. 웹 서버는 웹 페이지, 이미지 등의 정적인 컨텐츠만 제공할 수 있습니다.

 


 Apache 란?

Apache란 아파치 소프트웨어 재단에서 관리하는 HTTP 웹 서버입니다. Apache는 오픈 소스이기 때문에 누구든지 수정, 재배포가 가능합니다. 게다가 Apache는 다양한 기능을 제공하고 다른 웹 서버들에 구축이 쉽다는 이유로 많이 사용되고 있습니다.

 

 Tomcat 란?


Tomcat이란 아파치 재단에서 만든 오픈 소스 WAS(Web Application Server)입니다. Tomcat은 Java Servlet과 JSP가 실행할 수 있는 환경을 제공하여 동적인 페이지를 생성합니다. 그리고 DB 연결 및 데이터 조작, 다른 응용프로그램들과 상호 작용이 가능합니다.


🟩 App ?

 정의 : 앱은 모바일 기기(스마트폰, 태블릿) 또는 데스크탑에 설치되어 사용되는 소프트웨어 응용 프로그램입니다.
 접근 방식 : 앱 스토어(Apple App Store, Google Play Store )를 통해 다운로드하여 설치한 후 사용합니다.
 호환성 : 특정 운영 체제(iOS, Android)에 최적화되어 있어, 기기 간 호환성이 웹에 비해 제한적일 수 있습니다.
 개발 언어 : Swift, Kotlin, Java 등 특정 플랫폼에 특화된 언어를 사용합니다.

 

🟩 모바일 App 개발 방식 ?

 

 Native App

 정의 : 특정 운영 체제에 최적화되어 개발된 앱입니다.

 개발 언어 : iOS의 경우 Swift Objective-C, Android의 경우 Java Kotlin을 사용합니다.
 장점 : 높은 성능, 운영 체제의 기능을 최대한 활용할 수 있습니다.
 단점 : 각 플랫폼에 대해 별도의 앱을 개발해야 하므로 시간과 비용이 더 듭니다.
 

 Hybrid App

 정의 : 웹 기술을 사용하여 개발되며, 네이티브 앱으로 패키징한 입니다.
 개발 언어 : HTML, CSS, JavaScript 등 웹 기술을 사용합니다.
 장점 : 하나의 코드베이스로 여러 플랫폼에 배포할 수 있습니다.
 단점 : 네이티브 앱에 비해 성능이 떨어질 수 있습니다.
 도구 : Apache Cordova(PhoneGap), Ionic 등이 있습니다.
 

 Cross Platform App

 정의 : 여러 운영 체제에서 실행될 수 있도록 개발된 앱입니다.
 개발 언어 : React Native(JavaScript), Flutter(Dart) 등 특정 프레임워크와 언어를 사용합니다.
 장점 : 하나의 코드베이스에서 여러 플랫폼을 지원하며, 네이티브에 가까운 성능을 제공합니다.
 단점 : 복잡한 기능이나 최신 API 지원에 제한이 있을 수 있습니다.

 

 

 

$ - dollar sign

# - pound sign ( or hash mark )

 

octap@octap-ubuntu:~$

root@octap-ubuntu:~#

 

root 권한 실행(sudo)

 

$ sudo reboot

$ sudo halt

 

root 사용자로 전환

 

$ sudo su - root

$ sudo su - 

$ sudo su 

 

exit - 관리자 권한에서 나가기

 

리눅스 파일 시스템

 

 

디렉토리 이동하기 & 항목들 보기

man - 앞에 붙이고 명령어를 쓰면 상세한 내용을 알려줌

 

cd - 디렉토리 이동

 

../ - 상대경로

/   - 절대경로

 

cd ~ - 홈 디렉토리로 이동

 

ls - 해당 디렉토리에 항목들 보기

 

ls -l - 길게 항목들 보기

ls -l | more

ls -l | less

 

pwd (PrintWorkingDirectory) - 현재 디렉토리 경로를 출력

 

 

파일 관리 명령어

 

mkdir - 디렉토리 생성

 

rmdir - 디렉토리 삭제

 

touch - 빈 파일 생성

 

  • touch test.txt - test.txt 라는 파일을 만든다.

 

mv - 파일 이동/ 변경

  • mv test.txt workspace/

rm - 파일 삭제

  • rm -r workspace/ - 디렉토리 안에 내용까지 다 지워버린다.
  • rm -ri workspace/ - 디렉토리 안에 내용을 확인하면서 지워버린다.

 

rmdir - 디렉토리 삭제( 디렉토리가 비워져 있어야 삭제 가능 )

 

 

cp - 파일 복사

 

mv [기존 폴더명] [바꾸고 싶은 이름] - 폴더명 변경

 

 

파일 편집기

 

 

vi editor (리눅스 편집기) 명령어

i : 입력(편집 모드)

a : 프롬프트 다음칸에 입력 (편집 모드)

dd : 줄 잘라내기 

3dd : 3줄 잘라내기

yy : 줄 복사

3yy : 3줄 복사

p : 붙여넣기

Ctrl g 로 라인 확인 가능

Shift g 단축키로 파일 최하단으로 이동

편집기 작업 중/ 작업 후  esc  # 편집 모드 종료

작업 후 esc / shift + : # 명령 모드 

→(q! + enter : 저장 하지 않고 종료)

→(wq! + enter : 작업 내용 저장하고 vi edit

 
or 종료)

 

nano editor (리눅스 편집기) 명령어

 

nano [파일명] / editor [파일명]

 

 

파일 찾기와 파일 정보 확인

파일 찾기

 

find ./ -name *.java

find ./ -name *.java -size 1

 

whereis [파일명] - 위치를 알려줌

 

파일 내용 확인하기

 

cat Hello.java

cat test | sort

cat test | sort -r - 역정렬

 

파일 정보 내에서 원하는 정보 찾기

 

grep class Hello.java

 

두 개의 파일 비교하기

 

cmp Hello.java Hello1.java

diff Hello.java Hello1.java

 

유용한 명령어

 

history - 내가 사용했던 명령어들의 목록이 나온다.

![명령어 항목 번호] - 해당 번호에 명령어를 실행한다.

 

 

redirect

 

echo - 화면에 출력하게 한다

echo "Hello">test - test라는 파일에 "Hello"를 쓴다.

 

파일 압축 관리

파일 압축 방법

tar(Tape ARchive) + zip

 

파일 압축 하기

tar -cf name.tar a b c ( a,b,c는 묶을 파일 들 )

tar -zcf name.tar.gz a b c ( a,b,c는 묶을 파일 들 )

tar -zcf name.tar.gz * ( 현재 디렉토리에 있는 것들을 다 묶음 )

 

파일 압축 풀기

tar -xvf name.tar

tar -zxvf name.tar.gz

 

-f : 파일 이름을 지정

-c : 파일을 tar로 묶음

-x : tar 압축을 풂

-v : 내용을 자세히 출력

-z : gzip으로 압축하거나 해제함

-t : 목록 출력

-p : 파일 권한을 저장

-c : 경로를 지정

 

압축본 JDK 설치하기

JDK 8 다운로드 ~/download

wget -c --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" 
https://javadl.oracle.com/webapps/download/GetFile/1.8.0_261-b12/a4634525489241b9a9e1aa73d9e118e6/linux-i586/jdk-8u261-linux-x64.tar.gz

 

사용자 추가하기

사용자 추가

useradd testuser

tail -n2 /etc/passwd

chown testuser:testuser /home/testuser

echo "testuser user added"

 

nano useradd (nano editor를 켜준다.)

 

파일과 디렉토리 권한 변경

chmod [OPTION]...MODE[,MODE]...FILE....

 

 

-[rwx][r-x][r-x]

 

위에 예시를 해석해보면

 

[ - ] : 일반 파일

소유자 : 읽기,쓰기,실행가능

그룹 : 읽기, 실행가능

기타 유저 : 읽기, 실행가능

 

권한을 변경하는 방법

 

chmod : 권한을 변경하는 명령어

./ [파일명] : 파일을 실행 시키는 명령어

 

 

Parameter를 이용한 스크립트 파일로 변경하기

useradd $1

tail -n2 /etc/passwd

mkdir /home/$1

chown $1:$1 /home/$1

echo "$1 user added"

 

현재 사용자가 adduser라는 파일을 실행하면 인자가 $1에 들어가게 된다.

 

 

사용자 프롬프트 설정하기

프롬프트 스트링(PS1) 출력하기

PS1 = "[변경하고 싶은 이름]"

 

색상 변경

 

 

 

type [ls,pwd,....]

 

 

컴퓨터 켜고 끄기와 Run Level

 

1) BIOS (Basic Input Output System)

 

 

향상된 패키지 관리 도구 APT를 이용한 OpenJDK 설치하기

소프트웨어 설치 with APT(Advanced Packaging Tool)

 

 

PPA(personal Package Archive)를 이용한 소프트웨어 설치

 

 

 

service --status-all

 

service ssh status

 

service ssh

 

기본형은 공유하지 않는다. 참조형만 자료를 공유함.


6.29(목)

데이터 구조 정의하기.

 

구조를 만들게 되면 "Flat 한 상태에서 -> 계층(layor)"이 생긴다.

 

클래스는 파일당 하다.

 

클래스는 대문자로 시작

 

객체는 new를 통해 만들어서 공간을 만들어야 한다. 

 

객체를 생성하지 않고 사용하게 되면 "NullPointerError뜸!"


 

🟩 재귀함수 

자기가 자기를 부르는 함수

 

stackoverflow errer

(?) Quic Sort(재귀함수를 이용한 정렬) 숙제!!!!!

 

장점 : 병렬작업을 할때는 일을 나눠서 할 수 있어서 좋다.

 

🟩 함수의 재사용

재사용이란? 

  • 소스코드 -> 컴파일 -> 배포코드
  • 위에 3개 중에 재사용한다는 의미는 배포코드를 재사용한다는 의미이다.
  • 자바에서는 ". class " 단위가 재사용되는 단위이다.

private(다른 클래스에서 접근하는 것을 불허함)/ public(다른 클래서에서 쓰는 것을 허가함)/

 

배포단위 : Exam.java/ ExamList.java -> compile -> zip압축 ->. jar(확장자 변경) ->. jar(자바 압축파일)

 

jar파일로 만든 후 라이브러리 추가하는법 다시 해보기 (만약 FileInputStream 같은 파일 경로를 지정하는 class파일이 있으면 경로를 사전에 잘 설정하고 생각해 보기.)

 

🟩 객체지향 프로그래밍(OOP-//Object Oriented Programming)

실 세계(real world)의 일들을 객체를 사용해서 모델링하고, 객체를 사용하지 않으면 불가능 혹은 무지 어려웠을 일들을 쉽게 처리하는 방법을 제공한다는 것입니다.

 

객체지향은 코딩이 아니고, 설계이다.

 

 

캡슐화/ 상속 추상화/ 다형성

 

함수는 외부데이터의 영향을 받지 않기 위해 지역변수를 사용했다.... 근데 문제가 생겼다! 지역변수가 구조화되면 문제가 생긴다. 구조화된 객체를 사용하는 함수는 객체의 구조를 변경에 아주 취약하다.

 

캡슐화를 하면 데이터 구조에 따른 코드의 수정법 위를 캡슐 범위로 한정할 수 있다.(캡슐 범위 내에서 오류가 나서 그 부분만 찾으면 된다.)

 

은닉성

 

객체지향의 캡슐화

데이터구조 + 함수구조

 


🟩 객체와 개체

개체 : 개별적으롤 나눌 수 있는 것 (비행기, 자동차, 사람)/ 종류명(Type)이 개체이다.

객체 : "B747"이라는 개체의 "왼쪽으로 날아가는 비행기" 객체

 

추상화된 이름, 개체, 객체 구분하기

 

객체의 속성이란?

모든 객체는 식별하기 위해 식별코드가 존재한다.

 

 


🟩 static 메서드와 instance 메서드

 

 

class안에 함수는 static 메서드(울타리 안에 있는 함수)

 

객체지향으로 만들어지면 instance메서드

 

 

Static Method는 받아오는 값(매개변수)이 있으니까 This를 사용할 수 없다.

 

Instance Method는 받아오는 값(매개변수)가 없으니까 This를 사용해서 받아온다.(This생략가능)

 


🟩 생성자 : 초기화를 위한 특별한 함수

 

1. 객체가 생성되자마자 무조건 제일 먼저 실행되어야 만 한다.

2. 생성될 때 단 한 번만 실행되어야 만 한다.

new Exam();
new Exam + ();//소괄호는 생성자를 호출했다는 것

//생성자를 안만들어주면 기본 생성자가 생성됨

public Exam{
	private int kor;
	private int eng;
	private int math;
}

 

Exam exam = new Exam();
Exam exam = new Exam(1); //parameter 
Exam exam = new Exam(1,6);

public Exam(){//객체의 초기화(이름이 없어서 여러번 호출 할 방법이 없음)
         kor =3;
         eng = 4;
         math= 5;
     }
    public Exam(int a){//객체의 초기화(이름이 없어서 여러번 호출 할 방법이 없음)
        kor =a;
        eng = 4;
        math= 5;
    }
    public Exam(int a, int b){//객체의 초기화(이름이 없어서 여러번 호출 할 방법이 없음)
        kor =a;
        eng = b;
        math= 5;
    }

 

🟩 생성자 오버로드

 

public Exam(){//객체의 초기화(이름이 없어서 여러번 호출 할 방법이 없음)
     //this.kor=3;//사용한 적이 없어야 한다.
     this(3,4,5);//이름이 없기때문에 this를 사용한다.
 }
public Exam(int kor,int eng, int math){//객체의 초기화(이름이 없어서 여러번 호출 할 방법이 없음)
    this.kor =kor;
    this.eng = eng;
    this.math= math;
}

🟩 캡슐에 역할부여와 플랫폼

 

캡슐화는 함수만 묶는 것이 아니라 역할을 주어지는 것.

Ex) Exam아 국어 성적 저장해~!

 


🟩 상속

객체의 분리와 결합(Has A 관계)

 

UI와 데이터 서비스는 분리하는 것이 바람직 하다.

 

 

 


Getter/Setter

 

용도 : 

 

 


객체지향 프로그램의 구조

 

Dependency 의존성 = 도구라고 부른다

 

c를 b가 만들엇다


객체의 탈부착 관계(Associaton Has a 상속)

 

-------------------------------------------
1. Association: 파트타이머
부품(Exam) 클래스의 속성만 준비한 상태에서
필요에 의해 객체를 주입해야 하는데,

이때 setter(혹은 다른 이름의 만들어주는 메소드도 가능)
또는 생성자의 매개변수로 부품(Exam) 클래스의 객체를 생성하는 녀석


2. Aggregation: 파트타이머
Association이 일대다(배열)의 관계가 되면 이녀석


3. Composition: 정규직
제품 클래스(ExamConsole)의 객체가 만들어지면서
생성자에 의해 부품 클래스(Exam)의 객체가 동시에 만들어지는 녀석
(일대다, 일대일 구분 없음)
-------------------------------------------

 

Composition has a(일체형) : 객체를 A가 만들때 B객체가 같이 있는 것.(한번에 다 준비되어 있는 상태)

 

public class ExamConsole {
	// has a 상속관계/ A(ExamConsole)가 B(Exam)를 가지고 있다.
    // 누군가가 ExamConsole을 만들면 Exam이 자동으로 만들어 진다.
    //Composition has a 관계
    
    private Exam exam = new Exam();
    
}

 


Aggregation has a () : 그때 그때 필요할 때 만들어 두는 관계.(준비만 해두는 상태)

public class ExamConsole {
    private Exam[] exams;
    private int index;

    public ExamConsole() {
        int max = 3;
        exams = new Exam[max];
        index = 0;
    }
}

 

Association has a(분리형) : 

 

 

객체들은 관계가 있는데 다 이용관계이다.

 

Dependency Injection

 

어소시에이션>>어그리게이션   외부생성 장착

컴포지션       자체 내부에서 부품 생성


 

IS A 상속

 

틀을 이용해서(가지고) 만들었다.(프레임워크를 사용하는 관계)

 

 

 

메소드 재정의 Override 하기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'IT > JAVA' 카테고리의 다른 글

[Java] 제네릭(Generic)  (1) 2023.07.09
[JAVA] ✏️ Boxing과 Unboxing  (1) 2023.07.09
[Java] 컬렉션(Collection) ?  (1) 2023.07.09
[Java] 함수 오버로드(overload)  (1) 2023.07.04
[Java]구조적인 프로그래밍(메서드)  (2) 2023.06.28


SQL(structured Query Language)

  • DBMS에게 질의를 위한 명령어

 

DDL(Data Definition Language) - create/alter/drop

DML(Data Manipulation Language) - select/insert/update/delete

DCL(Data Control Language) - grant/ revoke

 

https://www.oracle.com/database/technologies/xe-downloads.html

 

Oracle Database Express Edition (XE) Downloads

Support Oracle Database Express Edition (XE) is a community supported edition of the Oracle Database family. Please go to the Oracle Database XE Community Support Forum for help, feedback, and enhancement requests. Note: Oracle Support Services only provid

www.oracle.com

 

https://www.oracle.com/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

 

 

DML 항목들은 달달 외우도록 연습한다.

 

오라클에서는 싱글 따옴표 (') 를 사용하고, 더블 따옴표(")는 다른 의미를 가진다.

 

VARCHAR2(size[BYTE | CHAR]) - 가변길이의 데이터 형식

 

NCHAR[(size)] - National character 다국어를 사용할 수 있는 방법.

 

 

CONTENT CLOB

 

 

 

예약어, 명령어를 이름으로 쓰고싶으면 [" "]을 사용하면 된다.

 

 

C - Create : insert

R - Retrieve : select

U - Update : update

D - Delete : delete

 


 

로드 - 연결 - 문장 - 결과집합

 

String url="jdbc:oracle:thin:@데이터베이스 서버 주소/xepdb1";
String sql="SELECT * FROM MEMBER";

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url, "ID","PASSWORD");
Statement st = con.createStatement();	
ResultSet rs = st.executeQuery(sql);

		int index = 1;

		while (rs.next()) {
			int id = rs.getInt("ID");
			int age = rs.getInt("AGE");
			String name = rs.getString("name");
			String pwd = rs.getString("pwd");
			String phone = rs.getString("PHONE");

			//테이터 분석 : 집계(평균, 중앙값....),정렬, 필터링, 맵핑.....
			
			//나이가 200살 안되는 회원으로만 선택적으로 출력을 하시오.
			//SELECT * FROM MEMBER
			
			if (age <= 200 && age != 0) {

				System.out.println("ID : " + id);

				System.out.println("Name : " + name);

				System.out.println("Pwd  : " + pwd);

				System.out.println("AGE  : " + age);

				System.out.println("PHONE  : " + phone + "\n");

				index++;
			}
		
rs.close();
st.close();
con.close();

https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html


연산을 통한 데이터 조회

SELECT age+100 age from member;

SELECT age+'100' age from member;

//오라클에서는 +연산자는 숫자로 연산한다.

 

 

문자열 더하기 연산자

 

 

SELECT NAME ||'('||ID||')' NAME  FROM MEMBER ORDER BY ID;

 

 

SELECT *FROM [테이블명] WHERE BETWEEN [숫자] AND [숫자]

 


%를 사용하면 *와 같음.

 

 

010-2345-246[0123456789]			 //뒤에 0~9까지 숫자잇것을 찾음
010-2345-246[0-9]					 //위랑 같은 식
010-2345-[0-9][0-9][0-9][0-9]		 //간단하게 표현한 식
010-2345-\d\d\d\d
010-2345-\d{4}
010-\d{4}-\d{4}
010-\d{3, 4}-\d{4}					 //중간에 3자리 또는 4자리를 찾음
01[016789]-\d{3, 4}-\d{4}			 //예전 번호 양식으로 정규식을 만듦


^\d{1,3}(?:,\d{3})*원$

regular +expression -mdn
(?<=\+)\w+

x

SELECT M.* FROM (SELECT ROWNUM NUM,MEMBER. * FROM MEMBER) M WHERE NUM BETWEEN 6 AND 10 ;--SUB 쿼리

 

SELECT ROWNUM, MEMBER.* FROM MEMBER WHERE ROWNUM BETWEEN 1 AND 5 ;

--SELECT ROWNUM, MEMBER.* FROM MEMBER WHERE ROWNUM BETWEEN 6 AND 10 ;

SELECT * FROM (SELECT ROWNUM NUM,MEMBER. * FROM MEMBER) WHERE NUM BETWEEN 6 AND 10 ;

SELECT * FROM ( SELECT ROWNUM NUM, M.* FROM (SELECT * FROM MEMBER ORDER BY ID DESC) M )WHERE NUM BETWEEN 6 AND 10;

SELECT M.* FROM (SELECT ROWNUM NUM,MEMBER. * FROM MEMBER) M WHERE NUM BETWEEN 6 AND 10 ;--SUB 쿼리

SELECT DISTINCT AGE FROM MEMBER;--중복값 제거

SELECT LENGTH(NAME) FROM MEMBER;
SELECT * FROM MEMBER WHERE LENGTH(NAME)=3;

SELECT * FROM MEMBER ORDER BY NAME DESC;

SELECT  * FROM MEMBER ORDER BY NAME DESC,ID ASC;

UPDATE MEMBER SET NAME='리유진' where ID=15;

 

오름차순 - 낮은수부터 

내림차순 - 큰수부터

 

--문법 작성시 이 순서대로 써야한다.
SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY

 


중복을 제거한 이유  -> 무결성 때문에

 

 


레코드를  확장할 때 쓰는놈임.

 

'IT > SQL' 카테고리의 다른 글

Oracle SQL  (0) 2023.08.30

+ Recent posts