<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>woo._.02.log</title>
        <link>https://velog.io/</link>
        <description>개발자</description>
        <lastBuildDate>Mon, 01 Aug 2022 15:14:04 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>woo._.02.log</title>
            <url>https://velog.velcdn.com/images/kanozo_0202/profile/3acf0010-e68d-42c0-93d0-48b680480ff4/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. woo._.02.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/kanozo_0202" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Windows Server 2016 AD 구축 - 1 ]]></title>
            <link>https://velog.io/@kanozo_0202/Windows-Server-2016-AD-%EA%B5%AC%EC%B6%95-1</link>
            <guid>https://velog.io/@kanozo_0202/Windows-Server-2016-AD-%EA%B5%AC%EC%B6%95-1</guid>
            <pubDate>Mon, 01 Aug 2022 15:14:04 GMT</pubDate>
            <description><![CDATA[<p>회사에서 솔루션 인사연동 테스트때 AD 서버를 구축해본 기억을 되살려 AD 서버에 대한 소개와 구축 방법을 소개 하고자 합니다!</p>
<h1 id="📌-🤷♀️ad가-뭐죠">📌 🤷‍♀️AD가 뭐죠??</h1>
<blockquote>
<p><em>액티브 디렉터리(Active Directory, 줄여서 AD)는 마이크로소프트가 윈도우용 환경에서 사용하기 위해 개발한 LDAP 디렉터리 서비스의 기능이다. 주 목적은 윈도우 기반의 컴퓨터들을 위한 인증 서비스를 제공하는 것이다. 주로 윈도우 환경에서 동일한 데이터베이스를 사용하여 다음을 비롯한 다양한 네트워크 서비스를 제공한다. -위키백과-</em></p>
</blockquote>
<p>AD는 Active Directory의 줄임말로  기업이나 기관에서 직원들의 인사정보(PC 이름, 이름, 전화번호 ..) 등을 기록하고 관리하는 일종의 데이터베이스 입니다. </p>
<p><img src="https://velog.velcdn.com/images/kanozo_0202/post/ad4a7d04-80af-4367-b7b4-2f4fdd9c618b/image.png" alt="">
대표적으로 AD를 통한 사용자의 중앙 인증, 계정 및 정책 관리등 다양한 기능을 제공합니다. 그렇기에 규모가 있는 회사에선 AD를 쓰지 않는 기업을 찾기 힘들 정도로 많은 곳에 활용되고 있습니다.</p>
<h1 id="📌-🎯-ad의-주요-용어">📌 🎯 AD의 주요 용어</h1>
<p>아래 AD의 구조가 간결하고 보기 쉽게 정리된 사진에서 볼 수 있듯이 AD는 <strong>Domain</strong>, <strong>Organization Unit(줄여서 OU)</strong>, <strong>Object로</strong> 구성되어 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/kanozo_0202/post/d95114f0-0e9a-4e63-b442-618d4de73e9d/image.png" alt=""></p>
<p>AD의 모든 정보는 Domain(도메인) 이라는 Name Space라는 공간에 위치하고 있습니다. 그 하위로 OU라는 것이 있는데 이는 각각의 Object를 관리할 목적으로 만들어진 그룹입니다. 또 그 하위로 Object라는 작은 단위의 객체로 구성되어있습니다.</p>
<p>저도 AD에 대해 자세하게 아는 것은 아니니 간단하게 AD의 대한 설명은 이쯤에서 마치고 구축을 해보도록 하겠습니다.</p>
<h1 id="📌-ad-server-구축-준비">📌 AD Server 구축 준비</h1>
<p>우선 AD를 구축할 Windows 서버를 준비합니다. 저는 Windows Server 2016에 AD를 구축하도록 하겠습니다. </p>
<h2 id="🔗-구축-환경">🔗 구축 환경</h2>
<blockquote>
<p> <strong>Server</strong>
Windows Server 2016 
<strong>Client</strong>
Windows 10 </p>
</blockquote>
<p>AD Server랑 테스트 환경은 위 처럼 준비했습니다. AD Server 구축 후 Client PC를 Domain에 Join 한후 사용자로 로그인하는 것 까지 해볼 생각입니다.</p>
<p>-- 작성중 --</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SonarQube 구축]]></title>
            <link>https://velog.io/@kanozo_0202/SonarQube-%EA%B5%AC%EC%B6%95</link>
            <guid>https://velog.io/@kanozo_0202/SonarQube-%EA%B5%AC%EC%B6%95</guid>
            <pubDate>Fri, 22 Jul 2022 06:20:19 GMT</pubDate>
            <description><![CDATA[<p>회사에서 프로젝트 관리 중 취약점 분석과 리포팅까지 자동으로 해준다는 쏠쏠한 플랫폼이 있다고 해서 겸사겸사 도입한 SonarQube(소나큐브)에 대해 소개하고자 합니다.</p>
<h1 id="📌-🤷♀️sonarqube소나큐브가-뭐죠">📌 🤷‍♀️SonarQube(소나큐브)가 뭐죠?</h1>
<blockquote>
<p><em>소나큐브(SonarQube)는 20개 이상의 프로그래밍 언어에서 버그, 코드 스멜, 보안 취약점을 발견할 목적으로 정적 코드 분석으로 자동 리뷰를 수행하기 위한 지속적인 코드 품질 검사용 오픈 소스 플랫폼이다. 소나큐브는 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지, 코드 복잡도, 주석, 버그 및 보안 취약점의 보고서를 제공한다. - 위키백과 -</em></p>
</blockquote>
<p>간단히 말하면 실행상태가 아닌 환경에서 소스코드의 버그, 보안 취약점 등을 분석하고 리포팅 해주는 <strong>정적 분석도구(static code analysis)</strong> 중 하나입니다.
<br>
SonarQube(소나큐브) 구성에 대해서 간단하게 살펴보고 넘어가겠습니다.
 <p align="center"><img src="https://docs.sonarqube.org/9.5/images/SQ-instance-components.png" width="600px"></p></p>
<p>SonarQube 공식문서에서는 총 3가지의 인스턴스로 분류합니다. </p>
<h2 id="🎯-sonarqube-server">🎯 SonarQube Server</h2>
<blockquote>
<p>SonarQube 사용자 인터페이스를 제공하는 웹 서버.
Elasticsearch를 기반으로 하는 검색 서버.
코드 분석 보고서를 처리하고 SonarQube 데이터베이스에 저장하는 컴퓨팅 엔진. </p>
</blockquote>
<h2 id="🎯-scanner">🎯 Scanner</h2>
<blockquote>
<p>프로젝트를 분석하기 위해 빌드 또는 지속적 통합 서버에서 실행되는 하나 이상의 스캐너.</p>
</blockquote>
<h2 id="🎯-database-server">🎯 Database Server</h2>
<blockquote>
<p>코드 스캔 중에 생성된 코드 품질 및 보안에 대한 메트릭 및 문제점 기록.</p>
</blockquote>
<br>
공식 문서에서는 SonarQube 서버와 데이터베이스가 별도의 호스트에 설치되어야 한다고 가이드 하고 있으나 저는 SonarQube 서버에 데이터베이스까지 설치해서 진행하도록 하겠습니다.

<br>

<hr>
<h1 id="📌-sonarqube-server-설치-환경-준비">📌 SonarQube Server 설치 환경 준비</h1>
<h3 id="🔗-구축-환경">🔗 구축 환경</h3>
<blockquote>
<p>CentOS 7
 OpenJDK 11
 PostgreSQL 13
 SonarQube Server 9.5</p>
</blockquote>
<p>설치하고자 하는 SonarQube 버전에 따라 지원하는 JDK 및 데이터베이스 버전이 다르니까 꼭 공식 문서에서 지원하는 버전을 확인해주세요.</p>
<h3 id="🔗-sonarqube-server-95-호환-버전">🔗 SonarQube Server 9.5 호환 버전</h3>
<img src="https://velog.velcdn.com/images/kanozo_0202/post/73224060-5ba9-4bde-a48f-cc3759066b6c/image.png">
<img src="https://velog.velcdn.com/images/kanozo_0202/post/08fce565-c4ee-44be-ab0a-75c7b8d065d3/image.png">

<br>

<h3 id="💻-데이터베이스postgresql-설치">💻 데이터베이스(PostgreSQL) 설치</h3>
<ol>
<li><p>PostgreSQL Repository 설치와 yum Update</p>
<pre><code class="language-bash">sudo yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum -y update</code></pre>
</li>
<li><p>다운 가능한 Repository 리스트 확인</p>
<pre><code class="language-bash">sudo yum repolist</code></pre>
</li>
<li><p>PostgreSQL 설치</p>
<pre><code class="language-bash">sudo yum -y install postgresql13 postgresql13-server</code></pre>
</li>
<li><p>PostgreSQL 초기화</p>
<pre><code class="language-bash">sudo /usr/pgsql-13/bin/postgresql-13-setup initdb</code></pre>
</li>
<li><p>PostgreSQL 서비스 시작</p>
<pre><code class="language-bash">sudo systemctl start postgresql-13</code></pre>
</li>
<li><p>PostgreSQL 서비스 상태 확인</p>
<pre><code class="language-bash">sudo systemctl status postgresql-13</code></pre>
</li>
<li><p>재부팅 시 PostgreSQL 서비스 자동 활성화</p>
<pre><code class="language-bash">sudo systemctl enable postgresql-13</code></pre>
</li>
<li><p>DB 접속</p>
<pre><code class="language-bash">su - postgres   #DB 설치 시 자동으로 OS 계정 생성
psql            #DB CLI 접속
\q              #DB ClI 종료</code></pre>
</li>
<li><p>DB 접근 계정 생성
저는 패스워드를 sonarqube로 설정했습니다.</p>
<pre><code class="language-sql">su - postgres
psql
CREATE USER sonarqube WITH ENCRYPTED password &#39;sonarqube&#39;;
CREATE DATABASE sonarqube WITH ENCODING &#39;UTF8&#39; OWNER sonarqube TEMPLATE=template0;
\q</code></pre>
</li>
</ol>
<h3 id="💻-openjdk-11-설치">💻 OpenJDK 11 설치</h3>
<pre><code class="language-bash">#OpenJdk 11 설치
yum install -y java-11-openjdk-devel.x86_64

#OpenJdk 11 설치 확인
java --version

#javac설치 경로 확인
which javac
&gt; /bin/javac

#/bin/javac에 연결된 원본파일 위치 확인
readlink -f /bin/javac
&gt; /usr/lib/jvm/java-11-openjdk-11.0.15.0.9-2.el7_9.x86_64/bin/javac

#JAVA 환경변수 설정
vi /etc/profile

#파일 최하단에 추가 
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.11.0.9-1.el7_9.x86_64

#설정 후 반영
source /etc/profile

결과 확인
echo $JAVA_HOME
&gt; /usr/lib/jvm/java-11-openjdk-11.0.15.0.9-2.el7_9.x86_64</code></pre>
<hr>
<h1 id="📌-sonarqube-server-설치">📌 SonarQube Server 설치</h1>
<p>설치를 하기에 앞서 SonarQube는 root 계정으로는 실행이 불가능하므로 실행을 위해 OS 계정을 추가합니다.</p>
<h3 id="✍-os-계정-추가">✍ OS 계정 추가</h3>
<pre><code class="language-bash">adduser -M -r sonarqube</code></pre>
<blockquote>
</blockquote>
<p><em>If you&#39;re running on Linux, you must ensure that:</em></p>
<p>Linux에서 SonarQube를 설치하기 위해선 다음과 같은 설정이 필요합니다.</p>
<blockquote>
</blockquote>
<p><em>vm.max_map_count is greater than or equal to 524288
fs.file-max is greater than or equal to 131072
the user running SonarQube can open at least 131072 file descriptors
the user running SonarQube can open at least 8192 threads
You can see the values with the following commands:</em>
<a href="https://docs.sonarqube.org/latest/requirements/requirements/">Platform notes</a></p>
<pre><code class="language-bash">vm.max_map_count 값 &gt;= 524288
fs.file-max 값 &gt;= 131072
SonarQube 실행 유저는 최소 131072 이상의 File descriptors를 열 수 있어야함
SonarQube 실행 유저는 최소 8192 이상의 Threads를 열 수 있어야 함</code></pre>
<h3 id="✍-os-설정-확인">✍ OS 설정 확인</h3>
<p>위와 같은 설정은 다음 명령어로 확인 할 수 있습니다.</p>
<pre><code class="language-bash">sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u</code></pre>
<h3 id="✍-os-설정">✍ OS 설정</h3>
<p>설정을 위해 명령어를 입력합니다.</p>
<pre><code class="language-bash">sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192</code></pre>
<h3 id="💡os-설정을-하였는데도-이슈가-발생할-때">💡OS 설정을 하였는데도 이슈가 발생할 때</h3>
<pre><code class="language-bash"># vm.max_map_count / fs.file-max 값 설정
# 다음과 같이 에디터로 파일 생성
sudo vi /etc/sysctl.d/99-OS계정.conf

# 명령어 입력 후 저장 
vm.max_map_count=524288
fs.file-max=131072

# 설정 리로드
sudo sysctl --system

# 변경된 값 확인
sysctl vm.max_map_count
sysctl fs.file-max


# Open File descriptors / Threads 값 설정
# 다음과 같이 에디터로 파일 생성
sudo vi /etc/security/limits.d/99-OS계정.conf

# 명령어 입력 후 저장 
OS계정 - nofile 131072
OS계정 - nproc 8192

# 변경된 값 확인
ulimit -n
ulimit -u</code></pre>
<h3 id="⚙️-sonarqube-server-설치-및-실행">⚙️ SonarQube Server 설치 및 실행</h3>
<p><a href="https://www.sonarqube.org/downloads/">https://www.sonarqube.org/downloads/</a></p>
<pre><code class="language-bash">#/opt 경로에 다운로드 받은 zip 파일 업로드
pwd
&gt; /opt
# 압축 해제
unzip sonarqube-9.5.0.56709.zip

#unzip 패키지가 없을 경우 설치
sudo yum install -y unzip 


# OS계정으로 소유자 및 그룹 권한 변경
sudo chown sonarqube:sonarqube -R sonarqube-9.5.0.56709.zip
sudo chown sonarqube:sonarqube -R sonarqube</code></pre>
<p>저와 동일하게 작업을 하신 분들은 /opt/sonarqube-9.5.0.56709/bin/linux-x86-64/bin/sonar.sh를 실행하시면 바로 SonarQube Server가 실행됩니다.</p>
<pre><code class="language-bash">su - sonarqube
-bash-4.2$ cd /opt/sonarqube-9.5.0.56709/bin/linux-x86-64/bin
-bash-4.2$ ./sonar.sh console
Running SonarQube...
wrapper  | --&gt; Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
jvm 1    | 2022.07.22 17:07:45 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube-9.5.0.56709/temp
jvm 1    | 2022.07.22 17:07:46 INFO  app[][o.s.a.es.EsSettings] Elasticsearch listening on [HTTP: 127.0.0.1:9001, TCP: 127.0.0.1:35894]
jvm 1    | 2022.07.22 17:07:46 INFO  app[][o.s.a.ProcessLauncherImpl] Launch process[ELASTICSEARCH] from [/opt/sonarqube-9.5.0.56709/elasticsearch]: /opt/sonarqube-9.5.0.56709/elasticsearch/bin/elasticsearch
</code></pre>
<h3 id="💡저와-설정을-다르게-하신-경우">💡저와 설정을 다르게 하신 경우</h3>
<p>DB 이름이나 사용자 이름을 저와 다르게 하신 분들은 아래 설정을 추가로 해주세요.
<strong>/{SonarQube Server Path}/conf/sonar.properties</strong> 파일 수정</p>
<p>저는 /opt 경로에 sonarqube 서버를 설치했으므로 경로는 아래와 같습니다.
<strong>/opt/sonarqube-9.5.0.56709/conf/sonar.properties</strong></p>
<pre><code class="language-bash">
## DB
# DB 접근 계정 암호
sonar.jdbc.username=DB계정명
sonar.jdbc.password=DB계정암호

# JDBC URL 설정
# PostgreSQL의 경우 포트를 입력 안할 경우, 기본값인 5432포트로 인식함
sonar.jdbc.url=jdbc:postgresql://IP:Port/DB명


## (옵션) SonarQube Web Port 변경
SonarQube는 기본값으로 9000 포트를 사용하며, 아래 값 주석해제하여 변경할 수 있음
sonar.web.port=9000</code></pre>
<hr>
<h1 id="📌-sonarqube-server-접속">📌 SonarQube Server 접속</h1>
<p>설치와 설정이 완료 되었으면 다음과 같이 sonarqube 서버를 실행합니다.</p>
<p><strong>실행은 반드시 root 계정이 아닌 sonarqube용 계정으로 실행시켜주세요. root 계정으로 실행시 오류가 발생합니다.</strong></p>
<pre><code class="language-bash">cd /opt/sonarqube-9.5.0.56709/bin/linux-x86-64  
ls
&gt; lib  sonar.sh  wrapper  wrapper.log
./sonar.sh console
&gt;
Running SonarQube...
wrapper  | --&gt; Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
jvm 1    | 2022.07.25 10:52:10 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube-9.5.0.56709/temp
jvm 1    | 2022.07.25 10:52:11 INFO  app[][o.s.a.es.EsSettings] Elasticsearch listening on [HTTP: 127.0.0.1:9001, TCP: 127.0.0.1:43068]
jvm 1    | 2022.07.25 10:52:11 INFO  app[][o.s.a.ProcessLauncherImpl] Launch process[ELASTICSEARCH] from [/opt/sonarqube-9.5.0.56709/elasticsearch]: /opt/sonarqube-9.5.0.56709/elasticsearch/bin/elasticsearch
jvm 1    | 2022.07.25 10:52:11 INFO  app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running</code></pre>
<p>별 다른 오류 로그 없이 실행되었다면 <a href="http://IP:9000%EC%9C%BC%EB%A1%9C">http://IP:9000으로</a> 접속합니다.
<img src="https://velog.velcdn.com/images/kanozo_0202/post/8da6a989-5ba0-469b-a6ad-82a3105a16d3/image.png" alt=""></p>
<p>초기 관리자 Id/Password는 <strong>admin/admin</strong> 입니다!</p>
<p><img src="https://velog.velcdn.com/images/kanozo_0202/post/319fbc16-649c-4547-883e-c87dd5bb3042/image.png" alt="">
sonarqube 서버 접속에 성공했습니다 :D</p>
<p>다음 포스트에선 sonarqube scanner 연동방법과 실행방법, sonarqube 한글 플러그인 설치까지 진행해보겠습니다. </p>
<p>긴 글 읽으시느라 고생 많으셨습니다 👏</p>
<br>


<h3 id="참고-사이트">참고 사이트</h3>
<ul>
<li><a href="https://ko.wikipedia.org/wiki/%EC%86%8C%EB%82%98%ED%81%90%EB%B8%8C">위키백과</a></li>
<li><a href="https://docs.sonarqube.org/latest/">SonarQube 공식홈페이지</a></li>
<li><a href="https://confluence.curvc.com/pages/releaseview.action?pageId=6160585">Curve</a> </li>
</ul>
]]></description>
        </item>
    </channel>
</rss>