나만의 git 서버 git lab 만들기

TEAMLAB

Human knowledge belongs to the world . -AntiTrust

나만의 git 서버 – 간단 git lab 만들기

나만의 git 서버 git lab 만들기

git

분산 버전 관리 시스템을 대표하는 git은 연구자, 개발자라면 뗄 수 없는 시스템이다. 리눅스 토발즈가 리눅스 커널 개발을 위해 처음 만든 2005년 0.99버전 이후 2017년 2.14 버전에 이르기 까지 오픈소스를 기반으로 Ms, Google 등 다수의 기업과 개발자들이 사용하고 있다. git의 주요 특징은 저장 이력, 변경 기록 등을 추적하는 시스템으로 중앙 서버에 의존하지 않고 자신의 로컬 컴퓨터에서 작업을 한다. 또한 로컬 컴퓨터에서 끝낸 작업은 원격 저장소(Remote Repository)로 보내 개발 완료시 원격 저장소와 합치거나(Merge), 개발 중간에 Tag를 붙이고, 분기(Branch) 할 수 있다.

git hosting

git을 호스팅(hosting – 서버 공간의 전체 또는 일부 이용할 수 있게 임대하는 서비스)할 수 있는 대표적 사이트로 Github 이 있다. github는 Public은 무료, Private는 유료 서비스를 통해 수익을 얻는 구조를 가지고 있다. 대부분의 개인 github 사용자는 Public 버전을 사용하겠지만 오픈소스 정책으로 github의 모든 Repository를 공개하도록 하고 있다.

공동 프로젝트 또는 비공개 프로젝트를 원하는 단체 또는 개인은 Private 버전을 사용할 것이다. 그렇지만 https://github.com/pricing 에서 보다시피 팀을 단위로 Private을 이용할 시 시작 월 25달러 부터 해서 5인이 넘을 시 인원이 추가됨에 따라 월 9달러씩 추가가 된다. 다른 git 호스팅 사이트인 Bitbucket 또한 Private으로 일정 규모 이상의 팀은 사용자 수에 따라 월 요금을 청구한다.(https://ko.atlassian.com/software/bitbucket/pricing?tab=cloud)

그렇다면 무료로 git 호스팅을 Private 하게 할 수 있는 대안은 어떤 것 일까?

Gitlab

Gitlab은 서버 설치를 목적으로 나온 호스팅 서비스로 다른 호스팅 사이트와 다르게 Community 버전으로 설치한다면 Private 서비스를 무료로 인원 제한 없이 이용할 수 있다. 또한 모든 Repository의 코드는 개인 서버에 저장이 된다.

다만, Community 버젼은 오픈소스 라이센스로 설치하는 과정이 길지만, 오픈소스 문서가 잘 정리되어 큰 문제는 없다. 물론 관리에 어려움이 따른 다면 웹 호스팅으로 이용이 가능하고 이 또한 무료로 Private 서비스를 제공하며, 협업자 수에 제한을 두지 않는다(단, 무료는 기술지원이 없다).

우리는 개인 서버에 코드를 저장하며, 무료로 Private Repository를 이용할 수 있는 Git server(원격 저장소) 구축을 목표로 하기에 Git Lab 기반으로 Git server를 구축해보고자 한다.

GitLab 설치

설치 환경은 우분투 14.04.5 LTS 64비트 기준 입니다.우분투 및 다른 환경 설치 파일

설치

git lab community 버젼 gitlab -ce 설명서

Install 문서Gitlab ce 버전 문서현재 막혀있는 우분투 ce 개발진 문서

1) 기초 소프트웨어 설치

$sudo apt-get install curl openssh-server ca-certificates postfix
  • postfix 선택 옵션은 우선 No configuration 선택
  • 메일 발신 관련 내용으로 여기서는 다루지 않음
  • sudo dpkg-reconfigure postfix 으로 변경 가능

2) Gitlab 패키지 프로그램 저장소 추가

$curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
  • 약간의 시간이 걸릴 수 있다.

3) 저장소 목록 업데이트

$apt-get update

4) Gitlab Community Edition 설치

$sudo apt-get install gitlab-ce
  • 설치가 다 되었다면, 노란 별 기호로 GitLab 로고가 뜰 것이다.

5) GitLab 초기 설정

$sudo gitlab-ctl reconfigure
  • Gitlab을 구성하는 gitlab.rb 루비 형식의 파일로 초기 설정을 하는 명령어 이다.

Gitlab 설정

Gitlab과 관련한 설정(메일,외부 url …)은

$cd / etc/gitlab/gitlab.rb

파일을 수정함으로 이뤄진다.

$sudo vi cd /etc/gitlab/gitlab.rb

반드시 sudo 권한으로 에디터를 통해 파일을 열어야 루비 파일을 열고 수정 할 수 있다.

대표적으로 바꿀 곳은 3가지로 external_url, gitlab_workhorse[‘auth_backend’], unicorn[‘port’] 이다. 서버에 80, 8080포트가 비어있다면 크게 다루지 않아도 되나. 서버 80, 8080포트에 웹페이지, Apache 서버를 구동 하고 있는 경우가 있기에 수정하는 것을 권장한다. Gitlab은 추가 설정을 하지 않을 시 80 포트를 설정한다. 따라서 만약 수정을 하지 않을 시 포트 내부에서 충돌이 일어나 502 에러가 뜨게 될 것이다.

1) external_url – external_url 변경 전

  ## external_url 'http://localhost'

이 부분을 수정하는데 이 부분은 gitlab 페이지의 웹사이트 주소이다. 반드시 앞 부분의 주석 처리(##)를 제거 하고 입력해야 루비 파일이 적용된다.

  • external_url 변경 후
  external_url 'http://ip(입력):포트번호(입력)'
  external_url 'http://localhost(입력):포트번호(입력)'

ip 또는 localhost 둘 중 하나를 입력 후 포트 번호는 80번, 8080을 피해서 하기를 바란다.

2) gitlab_workhorse & unicorn

gitlab_workhorse는 Gitlab의 역방향 프록시를 담당한다. 즉, 우리가 일반적으로 볼 수 있는 git의 push/ pull, Repository 다운로드, 업로드와 같은 HTTP 요청을 처리한다. 화면에서 esc를 누른 후 / 누르고 8080 을 입력하면 쉽게 찾을 수 있다.

  • 주의 이 부분과 아래의 unicorn 부분의 포트는 80, 8080 포트를 피하여, 반드시 위의 external_url에서 설정한 포트와 다르게 설정하도록 한다. 웹 페이지와 http, 인증 관련된 내용이 충돌 할 수 있다. gitlab_workhorse 과 unicorn 의 포트 번호는 동일하다.

  • gitlab_workhorse 변경 전

  ## gitlab_workhorse['auth_backend'] = "http://localhost:8080"
  • gitlab_workhorse 변경 후
  gitlab_workhorse['auth_backend'] = "http://localhost(수정안함):포트번호(입력)"
  • unicorn 변경 전
  ## unicorn['port'] = 8080
  • unicorn 변경 후
  unicorn['port'] = 포트번호(입력)

Gitlab 적용 및 재시작

$sudo gitlab-ctl reconfigure
$sudo gitlab-ctl restart

위에서 처럼 루비파일을 수정하고 나면 Gitlab 재설정 명령어와 재시작 명령어를 통해 Gitlab을 적용 후 구동 할 수 있다.

$sudo gitlab-ctl status

또한 status를 통해 gitlab 구동 상태 여부를 볼 수 있다.

이제 Gitlab의 틀은 완성했다. 접속을 해보도록 하겠다.

Gitlab

이제 웹 브라우저를 키고 external_url로 설정한 주소를 입력하면 구축된 Gitlab 화면이 나온다.

http://external_url
git_lab 초기 접속

초기 화면에서 root 계정(Administrator)의 비밀번호를 설정하고 ID는 root 패스워드는 방금 설정한 패스워드로 로그인한다.

Gitlab 실 사용

Gitlab은 Github와 같이 GUI 환경을 잘 구현해 놓았다. 따라서 사용에 있어 큰 문제가 없을 것이다. 기본적인 명령어 또한 Github와 동일하기 때문이다. 그렇지만 Github를 사용한 적이 없을 수 도 있기에 Gitlab의 Administrator를 통한 유저 추가, 권한 설정, 프로젝트 생성, 로컬 컴퓨터에서 사용을 다뤄보도록 하겠다.

유저추가

유저를 추가 하기 위해서는 2가지 방법이 있다. 1. Administrator 계정이 직접 유저를 생성하고 유저가 메일을 통해 접속 및 패스워드 설정 2. 유저가 접속 링크를 통해 들어가서 계정 가입

1번 방법은 gitlab 루비 파일의 smtp 영역과 postfix 설정을 통해 가능하다. 그렇지만 이 부분은 다음에 다루도록 하고 가장 베이직한 2번 방법으로 다뤄 보겠다.

git_lab 회원 가입

유저가 직접 정보들을 입력하고 Register하면 가입이 완료된다. 매우 간단하다.

유저 관리 및 권한 설정

GitLab의 유저를 관리하기 위해서는 상단의 Admin area(스패너 모양)을 누르고

git_lab Admin erea

왼쪽 Overview 부분의 User에 들어가서 해당 유저를 클릭 후 차단, 제거 그리고 우측의 Edit에 들어가서 권한 설정을 바꿀 수 있다.

git_lab user setting
git_lab user setting_2

프로젝트 생성

프로젝트 생성에서는 Visibility Level 이 조정 가능하다. Private으로 깃랩 내부에서 자신만의 Reop를 만들거나 초대된 사람만 가능하게도 가능하고, Internal로 Gitlab의 유저만 접근 가능하게 할 수 있다.

git_lab project_1
git_lab project_2

원격 Repo 생성 이후 README 파일이나 License 파일을 추가할 수 있다.

<figcaption>git_lab project_3</figcaption>

 

로컬에서 사용

이번에는 로컬 클라이언트 컴퓨터에서 Gitlab의 원격 Repo를 clone 해오고 수정 후 다시 원격 Repo에 push 하는 것을 설명하겠다. git 명령어에 익숙하다면 이 부분은 생각해도 무관하다.

먼저 git을 설치

$sudo apt-get install git
git clone

서버의 프로젝트 URL을 카피 하여 git clone 명령어 뒤에 붙이면 폴더에 서버에서 만든 프로젝트가 복사된다.

$cd '다운 위치 폴더'
$git clone http://'gitlab주소 : 포트'/ID/프로젝트명
$cd 프로젝트명
git push

로컬의 클라이언트 컴퓨터에서 작업을 완료한 후 서버에 있는 프로젝트에 합치는 방법은 git add, git commit, git push의 순서로 이루어진다. 예시로 로컬에서 test.txt 파일을 생성 후 push하는 것으로 하겠다.

$echo "Gitlab is easy">test.txt
$git add test.txt
$git commit -m "테스트 문서 추가"
$git push -u origin master

git push가 이뤄질 때 계정과 패스워드를 입력하면 git push가 진행된다.

Gitlab 백업

정리

Gitlab은 Git 서버를 직접 구축하여 코드를 직접 보관하고 Private Repository를 경제적으로 이용하기에 적합한 대안이다. 인원수에 따른 비용이 없고, 오픈 소스로 부가적으로 크게는 Jenkins, Maven, Tomcat을 통한 빌드 관리 부터 배포까지의 기능을 부가할 수 있고 작게는 postfix, gitlab 루비파일의 smtp를 수정하여 메일관련 기능을 부가할 수 있다. 그리고 Gitlab은 Github에서 제공하는 이슈 관리, 프로젝트 진행상황을 다루는 마일스톤 기능을 제공한다.

나만의 서버를 구축함에 있어 당장에 큰 서버가 필요한 것이 아니라면 가벼운 대안으로 라즈베리 파이 기반의 서버도 만들수 있고, 클라우드 기반의 서버도 만들 수 있다. 이 모든 것을 Gitlab은 다 지원한다. 다만, Gitlab은 5인까지 10G 용량의 Private 호스팅 서비스를 제공하기는 한다.

 

WMI 손상 – 복구 / 다시 설치하는 방법

mssql을 복구설치하는과정에서 wmi관련 오류로 더이상 접근할 수 없는 문제가 발생했다.

sql을 완전히 제거하는과정에서 레지스트리를 잘못 조작한 결과 발생한 오류로 보이는데.. 계정접근 권한을 포함해서 심각한 문제를 일으키고 있다.

한단계식 복구해보자.

wmi 다시설치□

이전 백업을 가지고 있다면, 해당 백업으로 복원 시도하는 것이 좋습니다.
또는 아래와같이 시도 부탁드립니다.

1.WMI 서비스를 사용하지 않도록 설정하고 중지합니다.
     sc config winmgmt start= disabled
     net stop winmgmt

2. 다음 명령을 실행합니다.
      WINMGMT / salvagerepository % WINDIR % \ SYSTEM32 \ WBEM
      WINMGMT / resetrepository % WINDIR % \ SYSTEM32 \ WBEM

3.WMI 서비스를 다시 활성화 한 다음 어떻게되는지 확인하기 위해 서버를 다시 부팅합니다.
     sc config winmgmt start= auto

문제가 해결되지 않으면 다음 다시 빌드하는 단계를 다은과같이 수행해 보시기 바랍니다.

1.WMI 서비스를 사용하지 않도록 설정하고 중지합니다.
     sc config winmgmt start= disabled     (note that there is a blank between ‘=’ and ‘disabled’)
     net stop winmgmt

2. repository.old에 저장소 폴더 (%windir%\System32\wbem\repository) 이름을 바꿉니다.

3.WMI 서비스를 다시 활성화합니다.
       sc config winmgmt start= auto

4.문제가 남아 있는지 확인하기 위해 서버를 재부팅합니다.

위의 단계가 도움이되지 않는다면, 일부 디스크 섹터 또는 시스템 파일이 손상되었는지 확인해야합니다.
파일 손상 여부 확인을 위해서 “CHKDSK”와 “SFC / scannow를”명령을 시도 부탁드립니다.
그후에도 불가능한 경우 전체 서버를 다시 설치 또는 기술지원받으시기 바랍니다.

SQL 날짜별 평균

SQL에서 DateTime Type으로 생성된 Field를 기준으로 년도, 월,날짜별로 평균을 구하는 방법을 생각해보았다,

이런 저런 연산이 귀찮아서 Format문을 활용하여 구현해 보았는데 Format문의 수정으로 년,월,일,분 기준으로 쉽게 평균을 구할 수 있어서 좋긴한데 속도가 너무 느리다.
예)select Top 10 format(DateTime,’yyyy-MM-dd’),avg(fldV0),avg(fldV1)) from tbldl group by format(DateTime,’yyyy-MM-dd’);

좀 귀찮기는 하지만 DATEPART를 사용해서 속도를 높일수 있다.
select DATEPART(YEAR,DateTime) ,DATEPART(MONTH,DateTime) ,avg(fldV0),avg(fldV1) from mytable group by DATEPART(YEAR,DateTime) , DATEPART(MONTH,DateTime) order by DATEPART(YEAR,DateTime) DESC , DATEPART(MONTH,DateTime) DESC;

또 다른 방법으로 

select CONCAT(DATENAME(yyyy,DateTime), ‘-‘, DATENAME (mm,DateTime)) as m ,avg(fldV0),avg(fldV1) from mytable group by CONCAT(DATENAME(yyyy,DateTime), ‘-‘, DATENAME (mm,DateTime) order by m DESC; 
과 같이  좀더 간략하게 사용 할 수 있다.

ASP.NET MVC에서 요청매개변수 넘기기

WEBAPI 매개변수처리

이전 ASP나 ASP.NET 웹폼 모델에서는 URL의 꼬리표에 붙여 있는 매개변수를
Request 객체를 통해전달 받을 수 있었다

즉 다음과 같이 두 개의 매개변수를 URL 에 붙여서 매개변수를 전달하게 되면,
요청 URL: http://yourdomain/main.aspx?param1=value1&param2=value2

아래처럼 매개변수 정보를 취할 수 있다(ASP.NET 기준)
string value1 = Request.QueryString[“param1”].ToString();
string value2 = Request.QueryString[“param2”].ToString();

그렇다면 ASP.NET MVC 모델에서는 매개변수를 어떻게 전달하고 받는지 알아보도록 하자

기본은 동일하다
ASP.NET MVC 역시 이전 웹폼 모델과 동일한 형태로 매개변수를 넘기고 받을 수 있다

즉 아래와 같이 요청 URL 에 ? 꼬리표로 매개변수를 전달하면
HomeController 의 Index 액션 메서드에서 다음과 같이 매개변수에 접근할 수 있게 된다

요청 URL: http://localhost:11102/Home/Index/?name=Park&age=10

public ActionResult Index()
{
    string name = Request.QueryString[“name”].ToString();
   string age = Request.QueryString[“age”].ToString(); 

    ViewData[“param”] = String.Format(“Hello, {0}, Your age {1}”, name, age);

    return View();
}


액센메서드의 매개변수로 전달 받기
URL 에 포함되어 있는 매개변수를 액션 메서드의 매개변수로 전달 받을 수도 있다
아래 코드는 Index 매개변수를 통해 URL로 전달되는 매개변수를 전달 받고 있다


요청 URL: http://localhost:11102/Home/Index/?name=Park&age=10

public ActionResult Index(string name, string age)

{

    ViewData[“param”] = String.Format(“Hello, {0}, Your age {1}”, name, age);

    return View();

}

액션 메서드를 통해 매개변수를 전달 받는 것은 ASP.NET MVC 프레임워크에서 제공해 주는 기능이며
이전 형태 보다는 조금 더 ASP.MVC 스럽다고 할 수 있겠다

액션 메서드로 매개변수를 전달 받을 경우 URL 에 정의된 매개변수 명과 액션메서드에 정의된
매개변수 명이 동일해야 한다는 규칙이 있다(순서는 상관 없다. 변수 이름이 중요하다)



참고로 URL 에 매개변수가 있다고 해서 반드시 액션 메서드에 매개변수를 정의 해야 하는 것은 아니다
그리고 그 반대의 경우, 즉 액션메서드에 매개변수가 정의 되었다고 해서 반드시 URL에 매개변수를 넘겨야 하는 것은 아니다 (물론 이 두 경우는 매개변수를 사용하지 않을 경우이다)

예를 들어 URL 에 매개변수가 생략되었을 경우 액션메서드로는 null 을 전달하게 될 것이다


URL 스키마 사용자 정의
앞서 Request.QueryString 으로 매개변수를 가져오는 방식에 비해 액션 메서드의 매개변수로 가져오는 것이 보다 깔끔하고 직관적이라는하다는 것을 느낄 수 있다.
이것은 매개변수를 가져오는 측면에서 ASP.NET MVC 가 지원해 주는 부분이 되겠다

이번에는 매개변수를 전달하는 측면에서의 ASP.MVC 의 장점을 살펴 보자

앞서 요청 URL은 다음과 같은 스키마로 이루어 졌었다
http://localhost:11102/Home/Index/?name=Park&age=10

전통적인 방식으로 URL에 ? 꼬리표를 통해 매개변수를 전달하고 있다
우리는 이러한 요청 URL을 보다 깔끔하게 변경하고 싶다

ASP.NET MVC 에서는 URL 스키마를 개발자의 입맛대로(?) 재 구성할 수 있는 방법을 제공해 준다.

이는 ASP.NET MVC의 라우팅 엔진이 제공해 주는 기능인데,
Global.asax 의 RegisterRoutes 메서드의 커스트마이징을 통해 구현할 수 있다

우선 매개변수를 어떤 형태의 URL 스키마로  정의할 지 결정해야 하는데,
다음과 같이 ‘/(슬래쉬)‘를 계속 이어가고 싶다고 가정해 보자

http://localhost:11102/Home/Index/매개변수1/매개변수2

이와 같은 URL 스키마를 실현하기 위해 Global.asax 파일에 정의된
RegisterRoutes 메서드를 약간 수정해 보자

public static void RegisterRoutes(RouteCollection routes)

{

    routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);

 

    routes.MapRoute(

        “Default”,

 

        “{controller}/{action}/{name}/{age}”, // URL with parameters

 

              new { controller = “Home”, action = “Index”,

name = UrlParameter.Optional,

                         age = UrlParameter.Optional }

  );

}


MapRoute 메서드의 두 번째 정보에 URL 스키마를 정의한다
우리가 결정한 URL 스키마를 실현하기 위해 /(슬래시)로 매개변수를 취할 수있도록 하였다
컨트롤러/액션메서드/name매개변수/age매개변수 형태로 정의함
=> “{controller}/{action}/{name}/{age}”

그리고 다음과 같이 각 매개변수의 옵션 여부를 지정하였다
이는 name, age 정보가 URL에서 생략될 수 있다는 의미이다
name = UrlParameter.Optional, 
age = UrlParameter.Optional

이제 구성이 완료 되었으니 다음과 같은 요청에 정상적으로 반응하게 될 것이다
http://localhost:11102/Home/Index/Park/10


만일 다음과 같은 URL을 원한다면,
http://localhost:11102/Home/Index/Park-10

다음과 같이 정의하면 된다
“{controller}/{action}/{name}-{age}

참고로 이런 식으로 URL 스키마 재정의로 매개변수 정보를 구성하였다면,
더 이상 Request.QueryString 로 받을 수 없다는 것에 주의하자
———————————————————————————–

마지막으로 URL 재구성된 상태에서 전통적인 ? 매개변수 전달을 같이 혼용하면 어떻게 될까?
다시 말해 다음과 같은 URL 요청은 어떻게 되는지 살펴 보자

요청 URL: http://localhost:11102/Home/Index/Park/10?name=Kim&age=20

액션메서드:
public ActionResult Index(string name, string age)

{

    ViewData[“param”] = String.Format(“Hello, {0}, Your age {1}”, name, age);

    return View();

}

이를 경우 URL 로 재구성된 매개변수 정보가 먼저 참조 된다
즉 URL 요청으로 부터 전달되는 name, age 라는 매개변수가 각각 두 개씩 이지만
URL 재구성에 의한 name=Park, age = 10 이 전달되는 것이다

그러나 만일 URL 스키마에서 매개변수 정보를 생략하고 다음과 같이 요청 된다면,
http://localhost:11102/Home/Index/?name=Kim&age=20

결과는 ?  매개변수가 전달되게 된다

ASP.NET MVC 는 라우팅 구성 정보에 의거한 적절한 매개변수를 가져올 수 없는 경우
전통적인 ? 질의 문자열에서 매개변수를 가져오게 되는 것이다



출처: https://m.mkexdev.net/51 [박종명의 아름다운 개발 since 2010.06]

 

QNAP Virtual Machine Window7 Korean Key

QNAP 에서 가상윈도우를 구동하는데 한글키보드 전환이 되지 않는다 .
물론 tray Icon에서 환영전환이 가능하지만 키보드이 한/영 전환키로 동작되지 않는 문제가 있다.
이를 해결하는 방법을 찾아보자.

윈도우7
키보드 설정에서 “텍스트 서비스 및 입력 언어”에서 “추가”를 눌러 한국어를 추가 한다.

일렇게 등록하고 나면 한/영 전환이 가능한다.
고급 키 설정에서 키 시퀀스 변경을 눌러 키조합을 지정하여 사용할 수 있다.
나만 그런지 모르겠지만 기본 시퀀스가 Alt+Shift라고 되어 있는데 불구 하고 ctr_shift 로 동작한다.
어떠한 이유인지 모르겠지만 동작은 한다.
한결 편해졌다.

 

워드프레스 보안 플러그인 Force Login

워드프레스로 홈페이지를 만들고 사용하는 경우 홈페이지를 노출하기 위한 방법을 고민한다.
그런데 반대의 경우 로그인한 사용자에게 만 Page를 노출하도록 사용하는 경우도 있다.
이런 경우 사용하는 유용한 플러그인중에  User Access Manager(UAM)이란 것이 있다.

User Access Manager ..자세히


UAM은 사용자 등급 및 그룹을 만들어서 접근권한을 관리할 수 있다는 장정이 있다.
특정 Page와 post를 특정사용자들에게 노출하거나, 접근을 차단 할 수 있다.

그런데 UAM의 경우 몇가지 문제를 노출 시킨다. 엄밀히 말하면 UAM으로 차단하지 못하는 영역이 있다는 것이다.
예를 들면 ‘http://esy.es/xx’ 와 같이 잘못된 주소를(url)을 입력하면 오류를 해결하도록
친절하게도 워드프레스가 검색 페이지로 자동으로 이동된다. 여기서 치명적 오류가 발생한다.

이 검색 페이지에서 예측가능한 검색어를 입력하면 숨겨지 페이지가 그대로 누출 되는 문제가 있다.
특히 미디어 파일의 경우 UAM이 접근차단을 하지 못하는 듯 하다.

Force Login ..자세히

위 과정을 처리 하더라도 문제점이 하나 남아있다.
이 문제는 인터넷 검색 기록과 관련된 문제이며  ‘도메인/wp-content/uploads’으로 고정된 폴더의 내용을 열어본 경우 즉 첨부 문서 또는 이미지 파일의 경우 url을 입력하면 파일이 그대로 노출 된다.
“…/uploads/mangboard/2018/08/31/20180727_001855-768×1024.jpg” 과 같이 주소전체가 온전히 입력되면 문제가 된다.
이문제를 풀기위해 “All In One WP Security & Firewall” 을 설치하여 시험 해봤는데 , 실제 효과는 없는 듯 하다.

 

 

 

해결방벙:

이문제가 해결되기 위해서는 UAM에서 미디어 노출을 차단해야 한다.

미디어를 등록할 때 특정그룹에만 노출 되도록 지정한 다음. 사진을 올려 보면 그림과 같이

캐쉬 지우기: 또하나의 가정에서 내가 로그오프 했는데에도 불구 하고, 인터넷 history 파일을 열어서 이전에 열었던 미디어 파일또는 폴더를 찾을수 있기 때문에
로그오프 한 경우 캐쉬를 지우도록 설정해야한다.