728x90

회사에 도착 후 서버 점검을 하는데 오라클 ORA-04031 에러로 인해 개발서버가 실행되지 않고 있었습니다.

이 에러 내용은 nn byte에 공유 메모리를 할당할 수 없다는 내용으로 shared memory를 필요로 하지만 적재를 하지 못해 나는 에러입니다.

발생원인

ORA-04031 에러는 Shared Pool의 관리가 원활히 되지 않아 수행되는 SQL이 적재할 Memory가 없어 error가 발생해서 생기는 게 원인입니다.

구체적인 에러 원인으로 크게 2가지가 있습니다.

  • Shared Pool Fragmentation (Shared Pool 과도한 조각화)
  • Too many pinned packages (고정된 패키지가 많음)

해결방안

위와 같은 방식으로 오라클을 내렸다 올리면 바로 해결이 가능합니다.

하지만 구체적인 에러 원인에 대해 해결을 해야 에러가 반복되지 않을 것이라 생각하기에 아래와 같은 작업을 하였습니다.

1. Shared Pool Fragmentation (Shared Pool 과도한 조각화)

- 과도한 조각화를 방지하기 위해서는 Literal SQL > Bind Variable SQL로 바꿔주는 작업이 가장 좋은 방법입니다.

 하드코딩으로 박힌 SQL은 각각 마다 Shared Pool을 잡아 먹습니다. 하지만 Bind Variable SQL은 한 번 Shared Pool에 올라가서 Bind만 되는 것이기 때문에 하나의 Shared Pool만 잡아먹기 때문에 Bind Variable SQL로 대부분 바꿔주는 것이 좋습니다.

 

2. Too many pinned packages (고정된 패키지가 많음)

dbms_shared_pool.keep을 통해 크기가 큰 sql은 패키지를 해두어 빠르게 사용할 수 있도록 해둡니다.

하지만 너무 많은 keep이 일어나게 되면 새 작업을 위한 shared pool 부족 현상으로 ORA-04031의 에러가 발생할 수 있습니다. keep 해둔 것에 대한 unkeep을 통해 조절해야 될 것입니다.

 

또한 이 외에 예방 방법으로는

shared_pool_size , shared_pool_reserved_size에 RAM을 추가하거나

11g 이상에서는 memory_max_size를 늘려주는 방법이 있습니다.

 

memory_max_size를 늘리는 방법은 아래 URL에서 확인 가능합니다.

http://haisins.epac.to/wordpress/?p=354(출처:DB의 정석)

반응형
728x90

카카오톡을 이용하는 분이라면 생일에 대한 알람을 받아보셨을 겁니다.

하지만 내 생일 알림을 비공개하고 싶거나, 생일 날짜를 변경하고 싶은데 변경 방법을 몰라 변경을 못하시는 분들이 많으실 겁니다.

그래서 카카오톡 생일 설정 변경에 대한 정확한 방법을 포스팅하려고 합니다.

 

카카오톡 생일 설정 변경

1. 카카오톡을 열어서 가장 위에 있는 본인을 클릭해줍니다.

그럼 아래와 같은 화면이 나옵니다.

카카오톡 홈 화면 예시

2. 위 그림에서 보이는 화살표에 있는 톱니바퀴 모양을 클릭합니다.

아래와 같은 화면이 나옵니다.

프로필 관리 예시

프로필 관리 화면에서 아래 화살표에서 보이는 버튼으로

친구에게 보여지는 나의 생일 알림을 조정하여 카카오톡 생일 비공개/공개를 설정할 수 있습니다.

 

나의 생일에 대한 정보를 변경하고 싶다면,

예시에서 보이는 "계정관리"로 클릭하면 아래와 같은 화면이 나옵니다.

 

프로필 관리 예시

위 예시에 표시된 내정보관리를 클릭합니다.

로그인 화면

"내 정보관리"를 들어가기 위해서는 로그인이 필요합니다.

위 화면에서 본인의 ID와 비밀번호를 입력하고 로그인을 합니다.

 

내정보관리 화면

 

 

여기서 "생일"을 클릭해주면 아래와 같은 화면이 나옵니다.

생일 변경 창

이 화면에서 생일을 변경하면 완료됩니다.

 

카카오톡 생일 공개/비공개 및 내 정보 변경을 통해 생일 변경에 대해서 포스팅을 하였습니다.

도움이 되었다면 좋겠습니다.

반응형
728x90

형상관리 tool svn을 리눅스에서 설치 후 사용하면 계정 추가 및 변경을 해야될 필요성이 많이 생깁니다.

그에 따라 어디에 svn이 설치되어있고 그에 따라 어떤 것을 변경해야 계정 추가 및 변경을 할 수 있을지 잘 모를때가 많습니다.

 

svn 계정 추가 및 변경

우선 리눅스에 root권한으로 접속을 하게되면 모든 폴더를 들어갈 수 있기에 root권한으로 접속 후 아래와 같은 폴더에 들어갑니다.

 

svn/repo/프로젝트명/conf

 

svn의 폴더를 구조를 어떻게 가졌는지에 따라서 다를 수 있기에 만약 폴더를 찾기 어렵다면

 

find / -name svnserve.conf

 

위에 명령어를 사용하여 폴더를 찾아서 repo 폴더를 들어갑니다.

svn repo 폴더 파일들

3가지의 실행 파일로 svn 계정 추가 및 변경이 가능합니다.

 

 

1. authz

이 파일은 svn 계정에 다른 권한을 설정해주는 파일 입니다.

 

vi authz

이 명령어를 통해 편집기능을 활성화 시킵니다.

권한 설정

그룹 또는 유저에 대한 권한을 설정하여 사용할 수 있습니다.

 

@그룹명 = 그룹명을 설정할때 사용합니다.

유저명 = 유저명과 권한을 사용합니다.

r = read

w = write

 

위와 같이 그룹/유저에 대한 권한을 다양한게 설정하여 저장하면 사용이 가능합니다.

2. passwd

유저아이디와 password를 생성 및 변경을 해주는 파일입니다.

vi passwd

이 명령어를 통해 편집기능을 활성화 시킵니다.

user 추가

아이디 = password 로 구성하여 설정해주면 svn 유저 추가 및 변경이 가능합니다.

 

3. svnserve.conf

authz파일은 개개인의 계정에 대한 권한을 설정하였다면

비인증/인증 계정 권한 및 저장소 설명 등 svn에 대한 전반적인 info 및 권한을 보여줍니다.

 

anon-access = 비인증계정

auth-access = 인증계정

password-db = 인증계정정보

authz-db = 인증 계정의 저장소 권한 설정 파일

realm = 인증할 때 보여주는 간단한 저장소 설명

 

svnserve.conf 예시 

위에 예시로 설명을 하자면

  1. 비인증계정은 비인가 처리
  2. 인증계정은 write 권한
  3. 인증계정정보 파일은 passwd라는 파일 참조
  4. 저장소 권한 설정파일은 authz 파일 참조
  5. 저장소 설명은 Repository1이라는 설명

으로 설명됩니다.

 

앞서 설정된 passwd 파일과 authz 파일명 변경 후 svnserve.conf 파일에서 password-db, authz-db 설정을 다시 해준다면 사용이 가능합니다.

 

 

 

 

 

 

반응형

'형상관리 > SVN' 카테고리의 다른 글

Linux svn repository 저장소 생성  (0) 2021.07.02
SVN(subversion) 이란?  (0) 2021.03.15
728x90

서버 관리를 하다 보면 실시간으로 서버 상태를 체크해야 되는 경우가 많이 생깁니다.

갑자기 운영하는 서버가 느려지거나 하는 고객 컴플레인이 걸려올 때는 원인 분석을 해야 되기 때문입니다.

 

top 명령어

그걸 위해 리눅스에서는 Top 명령어를 지원해줍니다.

 

리눅스 서버를 접근 후 top명령어를 실행하면 아래와 같은 화면이 나옵니다.

top 명령어 실행 화면

 

위에 실행화면으로 line 별로 대략적으로 설명을 하자면 아래와 같습니다.

  • 1 Line - 서버시간 10:17:44 , 1 user 사용자 접속,  load average 서버 부하율
  • 2 Line - 전체 프로세스 tasks 247 total , 실행 중인 프로세스 1 running, 대기 중인 프로세스 246 sleeping, 멈춘 프로세스 0 stopped , 좀비 상태 프로세스 0 zombie 
  • 3 Line - 유저 cpu 비중 0.6 us, 시스템 cpu 비중 0.1 sy, 나이스 한 cpu 비중 0.0, 99.1

이 외에 라인 밑에 있는 부분들은 프로세스 리스트입니다.

해당 실행화면은 오라클 DB서버에 접속한 것 입니다.

이에 따른 예시입니다.

 

아래 표는 프로세스 리스트 컬럼에 대한 설명입니다.

 

PID  프로세스 ID
USER 프로세스 실행시킨 사용자
PRI 우선순위
NI NICE 값
마이너스를 가지는 Nice value 우선순위 높음
VIRT 가상 메모리 사용량
RES 현재 페이지 크기
SHR 분할된 페이지, 사용된 메모리를 나눈 총합
S 프로세스 상태
%CPU 프로세스가 사용하는 CPU 사용율
%MEM 프로세스가 사용하는 메모리 사용율
COMMAND 실행된 명령어

 

이러한 top 명령어를 통해 실행되는 프로세스의 cpu 사용량을 체크하여 해당 프로세스를 kill 해주어 서버 지연 상태를 해결합니다.

반응형
728x90

ORACLE

오라클을 서버를 구축하고 서버 관리를 하면서

Service는 왜 올리는 것이며, Instance는 왜 올리는 것인지에 대해서 정확한 개념을 알 수가 없었습니다.

 

일반적으로 로컬에서 사용하는 테스트 환경에서는 한 Instance에 한 Service가 올라가는것이라 잘 이해가 되지 않았습니다. 하지만 클라우드 환경이나 서비스 업체에서는 다양한 Sid를 사용하여 DB를 관리하는 경우가 있습니다. 이럴 때 정확한 개념 이해가 필요하여 이 부분에 있어서 포스팅을 하게 되었습니다.

 

Instance는 Oracle에서는 sid라고 명명합니다.

예를들어 sid1, sid2라고 명명된 2가지 sid가 있다고 한다면 하나의 Service에서 2개의 Instance를 운영하고 있다고 생각하시면 됩니다.

비교할 수 있는 예시로는, Web서버에서 우리는 여러 대의 Was를 운영하는 것처럼 이해하시면 됩니다.

Web서버가 내려가면 Was가 기동이 안될 것 입니다. 하지만 #1 Was가 Stop 된다 하더라도 #2 Was에서 영향이 가지는 않을 것입니다.

 

Service = Web Server

Instance = Was

 

라고 생각하시면 이해하기 편하실 겁니다.

 

 

 

 

 

반응형
728x90

최근에 클라우드가 성행하게 되면서 클라우드 가상화 기술 중 하나인 도커(Docker)를 많은 기업에서 사용하고 있습니다.

이러한 도커(Docker)라는 개념을 정확히 알고 나면 머릿속에 많은 개념들이 잡혔습니다. 저 또한 처음에 도커(Docker)라는 의미가 머릿속에 들어오지 않기 때문에 도커를 진짜 모른다는 사람에게 설명한다는 식으로 이 포스팅으로 최대한 쉽게 풀어내려고 합니다.

도커란 무엇인가?

  • 도커(Docker)의 개념
  • 이미지(Image) 란?
  • 컨테이너(Container) 란?

2013년 도커는 처음 등장한 컨테이너(Container) 기반 가상화 도구입니다. 도커는 Google Go Language로 개발되고 있으며 현재까지 지속적으로 업데이트를 지속하며 컨테이너 가상화 도구 중 핵심으로 잡아가고 있습니다.

 

도커는 리눅스 OS 기반이며 컨테이너 방식으로 관리를 통해 프로세스 실행 환경을 구축할 수 있게 해 줍니다.

프로세스 실행 환경을 도커에서는 이미지(Image)라고 부릅니다.

컨테이너의 이미지를 관리 및 실행을 통해 어느 환경에서도 컨테이너를 실행하여 쉽게 서버 실행 환경을 구축할 수 있도록 도와줍니다.

 

위에 설명한 글은 제가 알고 있는 지식을 풀어냈으나 정확하게 이해가 안 가실 수 있습니다.

각각의 의미를 추적하여 정확하게 이해가 갈 수 있도록 설명하겠습니다.

이미지(IMAGE) 란?

도커에서 프로세스가 사용하는 자원들(서버 프로그램, 소스 등)을 도커 이미지(Image)라 부릅니다.

컨테이너(Container) 생성하기 위하여 필요한 모든 파일과 설정값을 가지고 있는 것이라 생각하면 됩니다.

 

이미지의 특징

  • 한 번 만들어진 이미지는 변하지 않음.
  • 하나의 이미지로 여러 컨테이너 생성 가능
  • 컨테이너가 삭제돼도 이미지는 삭제되지 않음.
  • DockerHub를 통해 형상 관리 가능
  • API를 통한 자동화 기능 가능
  • 이미지 생성과정을 확인 및 수정 가능

컨테이너(Container) 란?

도커 컨테이너

컨테이너는 네이버 백과사전에서는 아래와 같이 정의합니다.

 

화물 수송에 주로 쓰는, 쇠로 만들어진  상자.  꾸리기가 편하고 운반이 쉬우며, 안에 들어 있는 화물을 보호할  있는 장점이 있다.

 

우리 사전의 의미만 알고 있기 때문에 그림과 같은 컨테이너를 상상하실 겁니다. 우리가 컨테이너 없던 시절은 배에다가 짐을 싣을때 많은 짐을 쌓을 수가 없었습니다. 하지만 이제 종류/구분 별로 컨테이너에 짐을 실어 컨테이너만 싣어 운반하고 있어 관리 및 효율적인 측면에서 배송이 쉬워졌습니다.

마찬가지로 도커는 가상화 기술 중 하나로 도커의 컨테이너는 프로세스가 사용하는 자원들을 격리하는 환경을 컨테이너로써 만드는 것입니다. 그래서 그 컨테이너를 명령어를 통해 그 자원들을 그대로 사용할 수 있게 만들어 주는 역할을 합니다.

 

컨테이너 특징

  • 이식성이 좋다
  • 컨테이너의 격리공간이 있어 버전 간 관리에 있어 충돌이 없다.
  • 빠른 배포와 서비스가 가능하여 애플리케이션 라이프사이클의 자동화가 가능하다
  • 개발 환경을 실제 운영환경과 동일하게 사용이 가능하게 격리공간으로 활용해서 개발/운영 프로세스가 단순해진다.
반응형

'네트워크' 카테고리의 다른 글

공유기 포트포워딩(IPTIME) 하는법  (0) 2021.06.18
728x90

최근에 집을 알아보기 위해 여러 웹사이트와 앱을 찾아보았습니다.

우리가 흔히 알고 있는 웹 사이트 부동산으로는 네이버, 다음이 있습니다. 그 외에 직방, 다방 등 다양한 앱 사이트가 있습니다.

이 중에서 제가 여러군데를 방문하고 유투버 등 Search를 통해 찾아본 결과, 다음 부동산이 심사가 까다로워 허위매물이 없고 괜찮다는 것을 알았습니다.

그래서 다음 부동산을 매물 이용방법에 포스팅하려고 합니다.

 

다음 부동산 매물 이용방법

다음 부동산

위와 같이 다음 부동산으로 접근을 하시면 간단하게 접근이 가능합니다.

다음 부동산 메뉴

들어가시며 다양한 카테고리 별로 검색이 가능하게 되어있습니다.

원하시는 항목에 들어가셔서 검색이 가능합니다.

 

많이 사용하시는 "주거" 메뉴를 통해 "아파트" 메뉴에서 파주 지역을 검색하시게 되면

파주 부동산

각 평수대의 가격과 시세 변동 등의 정보를 알수가 있습니다.

또한 그 지역의 학교정보, 교통정보 등 아파트의 시세뿐만 아니라 주변 정보도 알 수가 있어 괜찮다고 생각합니다.

빌라,투룸 필터 검색조건 예시

이 외에도 주거에서도 단위별로 나뉘어져있는 아파트, 빌라, 원룸 등 카테고리 별로 검색조건도 다르게 잘 구성되어 있어

찾는 고객에 맞게 잘 구성되어 있다고 생각하며 저는 찾기가 쉬웠습니다.

 

경매를 하시는 분들에게는 가격 비교 및 검색 등의 서비스를 제공하고 있습니다.

인테리어의 항목에서는 즉각 상담 등 다른 곳에서 찾고 고생할 필요 없이 다음 부동산 하나의 플랫폼에서 사용이 가능하여 편리하다고 느껴졌습니다. 아파트에 들어가서 인테리어를 새롭게 하실 분들에게는 유용해 보입니다.

 

저는 집을 구하기 위해 다음 부동산에 찾아보고 직접 방문했을 때와 큰 차이가 없어 나름 만족하며 신뢰하고 있습니다.

 

혹시나 집을 구하기위해 찾아보시는 분들에게는 다음 부동산에서 매물을 검색하여 직접 방문해보시길 추천드립니다.

 

반응형
728x90

개발자로서 많이 마주치는 상황 중 하나는 자바 특정폴더 파일을 읽어와서 다운로드 기능을 많이 마주칩니다.

저 또한 이러한 요청사항을 받아서 하다가 정리하면 좋을 것 같아서 해당 기능을 설명하려고 이 글을 쓰려고 합니다.

 

파일 경로에 있는 폴더에 있는 전체 파일을 갖고 와서 단순하게 파일 이름을 출력하는 알고리즘입니다.

 

 

 

******************************************************************************************************************************

String fileName = "";

 

/*파일 경로에 있는 파일 가져오기*/

File rw = new File(filePath);

 

/*파일 경로에 있는 파일 리스트 fileList[] 에 넣기*/

File []fileList = rw.listfiles();

 

/*fileList에 있는거 for 문 돌려서 출력*/

for(File file : fileList) {

      if(file.isFile()) {

         fileName = file.getName();

         System.out.println("fileName : " + fileName);

      }

}

******************************************************************************************************************************

 

이러한 구조로 파일 목록을 가져와서 API로 특정폴더에 쌓여있는 파일을 가져오거나 하는 작업들을 합니다.

반응형

+ Recent posts