[AWS] Amazon web service 의 서비스 간단 정리

AWS 서비스 정리

AWS를 공부해야겠다고 마음먹고 AWS를 막상 시작하려고 하면,
그 방대한 사이즈에 지래 겁을 먹게 됩니다.
또한 AWS의 어떤 특정 기능에 대해 찾아보려고 하면 또다른 AWS서비스들이 연계되어서 다시 리서치를 해야하는 번거로움에 빠지게 됩니다.

이에 저의 고생을 경험삼아 다른분들의 고생을 미리 방지하고자 사람들을 위해 AWS 서비스를 간단하게 정리했습니다.

EC2(Amazon Elastic Compute Cloud)

VM기반의 컴퓨팅 자원을 제공하는 서비스
일반적인 클라우드 서버 인스턴스를 의미

Instance Family Current Generation Instance Types
General purpose t2.nano, t2.micro, t2.small, t2.medium, t2.large, t2.xlarge, t2.2xlarge, m4.large, m4.xlarge, m4.2xlarge, m4.4xlarge, m4.10xlarge, m4.16xlarge, m3.medium, m3.large, m3.xlarge, m3.2xlarge
Compute optimized c4.large, c4.xlarge, c4.2xlarge, c4.4xlarge, c4.8xlarge, c3.large, c3.xlarge, c3.2xlarge, c3.4xlarge, c3.8xlarge
Memory optimized r3.large, r3.xlarge, r3.2xlarge, r3.4xlarge, r3.8xlarge, r4.large, r4.xlarge, r4.2xlarge, r4.4xlarge, r4.8xlarge, r4.16xlarge, x1.16xlarge, x1.32xlarge
Storage optimized d2.xlarge, d2.2xlarge, d2.4xlarge, d2.8xlarge, i2.xlarge, i2.2xlarge, i2.4xlarge, i2.8xlarge, i3.large, i3.xlarge, i3.2xlarge, i3.4xlarge, i3.8xlarge, i3.16xlarge
Accelerated computing p2.xlarge, p2.8xlarge, p2.16xlarge, g2.2xlarge, g2.8xlarge
  1. T2는 웹서버, 데이터 베이스에 사용하기 좋음, 순간 확장용으로 적합
  2. M3는 SSD 스토리지 사용
  3. C4는 CPU를 많이 쓰는 서비스에 적합 -> ssd도 필요하면 C3
  4. X1, R3은 메모리가 많이 필요한 서비스에 적합(빅데이터 치리 엔진, Apache Spark, Presto)
  5. P2, G2는 GPU 계산에 특화 (머신러닝)
  6. I3는 스토리지에 최적화 (높은 I/O가 필요한 작업)

EBS(Elastic Block Store)

EC2 인스턴스에 사용할 영구 블록 스토리지 볼륨을 제공
Amazon EBS 볼륨은 워크로드 실행에 필요한 지연 시간이 짧고 일관된 성능을 제공 -> S3와의 큰 차이점

그러나 S3에 비해 비쌈

EIP(Elastic IP)

EC2인스턴스를 생성하고 주는 IP는 고정IP가 아닌 유동IP
인스턴스를 재시작하면 IP가 변경됨
고정아이피 서비스 -> EIP

ELB(Elastic Load Balancing)

EC2를 대상으로한 요청을 여러대의 EC2 인스턴스로 자동으로 분배해주는 기능
이전엔 L4/L7 로드 밸런서를 이용하던 기능을 간단한 WEB UI로 손쉽게 이용가능

로드 밸런서는 EC2의 작동 상태를 확인하여 정상적으로 작동하고 있는 인스턴스만을 대상으로 요청을 분배함

Sticky Session을 이용하면 로드밸런싱을 해줄 때 사용자의 쿠키 세션을 이용해여 요청 분배작업을 수행, 초기 접속 인스턴스로 연결 시켜줌

Key Pairs

AWS ssh접속public/private 키를 이용하여 접속
각각의 key pair에는 이름이 필요하고, 이름은 publickey와 연결됨

Security Group

EC2에서 일종의 방화벽 처럼 사용됨
inbound/outbound traffic에 대해 port별로 접근 제어할 수 있는 기능 제공
호스팅 환경에서 DMZ와 같은 개념 구현 가능

S3 (Simple Storage Service)

웹 인터페이스를 통해 데이터를 저장 및 검색할 수 있는 스토리지
RRS(Reduced Redundancy Storage) 옵션으로 데이터 손실 위험도를 더 올리고 가격을 저렴하게 사용가능

Bucket

데이터를 저장하기 위한 Amazon S3의 기본 컨테이너
버킷에 데이터를 무한정으로 저장 가능

Snapshot

EBS 볼륨 전체의 내용 중 특정 시점을 파일로 저장한 형태 (EBS 볼륨 백업)

VPC(Virtual Private Cloud)

AWS에서 가상사설망을 만들어줄수 있게 해주는 서비스
이 서비스 전에는 EIP이외에는 정적 서비스를 사용할 수 없었음(ex> 10.x.x.x같은 사설 ip 사용하지 못했으나, VPC를 통해 가능해짐)

Lambda

서버없이 특정 이벤트 발생시 코드 실행을 시켜주고, 이에 대한 비용만을 지불하는 AWS의 서비스
런타임으로 Java, nodejs, python, C# 사용가능

Blue Print라는 코드 템플릿을 선택해서 사용가능하다

Route 53

AWS의 Domain Name Service 이다.
ELB(로드 밸런서)를 사용할 때 함께 사용하는 서비스

라우팅 정책

  1. 단순 라우팅
    하나의 인스턴스 사용
  2. 가중치 기반 라우팅
    다수의 리소스를 하나의 DNS와 연동 가능하나, 각 리소스에 가중치 부여 가능

    리소스 3개 -> 가중치 1,1,3 부여했을 경우
    DNS요청시 1로 설정된 리소스는 5번중 한번, 3으로 설정된 리소스는 5번중 3번 반환

  3. 지연 시간 라우팅
    지연시간이 가장 낮은 인스턴스 선택

  4. 지리적 라우팅
    사용자의 지역에 따라 인스턴스 선택 -> Localization 가능

ElastiCache

클라우드에서 In Memory Data Store로 사용 하거나, 캐시를 손쉽게 배포, 운영, 확장할 수 있게 해주는 웹서비스

  1. Redis
    RedisElastiCache는 확장 가능(최대 15개의 샤드 클러스터 지원 3.55TiB)
  2. Memcached
    ElastiCacheMemcached와 프로토콜 호환. 기존 환경에서 사용하는 도구를 손쉽게 사용 가능

CloudFront

AWS에서 제공하는 CDN서비스
이미지, 오디오, 비디오 및 일반 웹 페이지 등을 최종 사용자에게 빠르게 제공
에지 로케이션(Edge Location)이라는 일종의 캐시서버를 이용하여 지연시간 단축

IAM(Identity and Access Management)

AWS 계정의 암호나 액세스 키 공유없이 다른 계정에 권한 부여 가능

  1. 리소스에 따른 계정 권한
  2. 읽기 쓰기 권한 등.. -> 차등 권한 부여 가능

사용자

AWS의 서비스 계정으로 간주하면 됨

윈도우즈를 사용할 때 여러 계정을 만들 수 있는 것과 같은 이치

ARN(Amazon Resource Name)

아래 형태로 사용

arn:aws:iam::account-ID-without-hyphens:user/Bob

그룹

IAM사용자들의 집합체
but 리눅스의 group개념과는 다른 그냥 여러 사용자들에게 한번에 정책을 연결하는 수단일 뿐

역할

사용자와 유사
_but 역할은 한 사람과만 연관되지 않고 그 **역할이 필요한 사람이면 누구든지 맡을 수 있도록 고안**_

CodeCommit

프라이빗 Git 리포지토리를 손쉽게 운영할 수 있는 서비스
가격이 싸다

SNS(Simple Notification Service)

푸시 알림 서비스로서, 개별 메시지를 전송하거나 대규모의 수신자에게 메시지를 전송 가능
Baidu Cloud Push를 통해 Android, Apple, Google, Fire OS, Windows 디바이스에도 알림 전송 가능
Amazon Simple Queue Service(SQS), AWS Lambda 함수 또는 모든 HTTP 엔드포인트에도 메시지를 전송 가능

토픽(Topic)

여러 개의 엔드포인트를 그룹으로 만든 것. 토픽을 구독한 모든 엔드포인트로 알림 전송

SQS(Simple Queue Service)

메시지를 저장하는 대기열에 대한 액세스를 제공하는 웹 서비스

메시지 큐

대기열 유형

  1. 표준 대기열
    기본 대기열, 메시지가 1개 이상 전달될 수 있으며 순서 또한 바뀔 수 있음
    무제한의 초당 트랜잭션 수 제공
  2. FIFO 대기열
    순서 및 메시지 단일 전달 보장
    초당 트랜잭션 수가 300개 제한

CloudWatch

AWS 클라우드 리소스와 AWS에서 실행되는 애플리케이션을 위한 모니터링 서비스
자동으로 EC2 인스턴스를 모니터링
1. Auto Scaling Group
2. Elastic Load Balancer
3. Route 53

메트릭(Metric)

AWS 시스템의 퍼포먼스에 관한 데이터들을 뜻함

기본적으로 제공하는 CloudWatch의 모니터링 기능은 이 메트릭을 이용해서 보여진다(EC2, ELB등의 기본 서비스 관련 정보등..)
사용자가 커스텀 메트릭 생성가능

상태는 3가지

  1. OK
    정의된 임계치 안, 현재 정상
  2. Alarm
    정의된 임계치 상회, 비정상
  3. Insufficient
    데이터 불충분으로 상태 판독 불가

Auto Scaling

Auto Scaling이란?

EC2 인스턴스를 자동으로 생성하고 삭제해주는 서비스

Launch Configuration

Auto Scaling을 할 때 사용하는 설정값

어떤 이미지(AMI)를 어떤 인스턴스 타입(EC2)으로 스토리지(EBS) 및 보안설정(SG)과 함께 사용할 것인가를 선택

ex> Linux AMI 이미지를 t2.micro로 EBS 20G와 함께 port 80번만을 열어서 실행한다.

AutoScaling Groups

위의 설정값을 사용해서 실제 Auto Scaling을 수행하기 위한 Grouping

어떤 설정값으로, 어떤 네트워크에, 어떤 정책(인스턴스를 추가하고 제거하는 방법 등의 정책)을 이용해서 오토 스케일링을 할 것 인가에 대한 설정

ex> ASG을 통해서 생성된 EC2 인스턴스들의 CPU 점유율이 평균 80%가 5분동안 넘을 때 EC2 인스턴스를 현재의 2배씩 증가 시킨다

OpsWorks

서버 구성을 자동화 플랫폼 Chef를 사용해서 하는 관리 서비스
어플리케이션과 서버 관리를 용의하게 해줌

  1. OpsWorks Stacks
  2. AWS OpsWorks for Chef Automate

OpsWorks Stacks

OpsWorks 개념도

위의 개념도를 참고.

Stack > Layer > Instance > App

Stack

스택은 OpsWorks에서 최상위 단위
스택안에 여러 개의 레이어가 포함가능함

Layer

EC2 인스턴스 생성을 위한 틀(탬플릿의 개념)
OpsWorks 내장으로 Rails with Passenger, Java with Tomcat, Nodejs, RDS 등을 기본으로 지원하고, Custom하게 만들 수도 있음

내장 탬플릿으로 레이어를 생성하면 AWS에서 지원하는 Chef 레시피(Recipe)들이 기본적으로 들어가있다.(Chef 12의 경우는 없다고 하는데 실행해보지는 않음)

Opsworks Lifecycle Events

Layer들은 5개의 이벤트를 가지고 있음, 이벤트 발생시 각 이벤트마다 등록된 레시피(Recipe)가 실행됨

  1. Setup
    인스턴스 부팅이 완료된 후 발생
    수동으로 이벤트 발생 가능
    명렁 참고

  2. Configure
    스택의 모든 인스턴스들 중 어느 하나라도 아래 상황 중 하나의 경우에 해당할 경우, 모든 인스턴스에게 발생함

    • 인스턴스가 온라인 상태가 되었거나, 온라인 상태에서 벗어날때(leave the online)
    • 인스턴스가 EIP가 할당되거나, 할당이 취소될 때
    • ELB를 레이어에 연결하거나, 연결해제 할때
  3. Deploy
    Deploy Command를 실행했을 때 발생
    Setup이 완료된 후에 Deploy 레시피가 실행됨

  4. Undeploy
    앱을 지웠거나 Undeploy 명령을 실행 했을 때 발생

  5. Shutdown
    Opsworks에서 인스턴스를 종료하고, 실제로 EC2인스턴스가 종료하기전에 발생
    인스턴스를 리부팅할때는 어떤 이벤트도 발생하지 않음

AWS OpsWorks for Chef Automate

Chef Automate를 AWS에서 손쉽게 이용할 수 있는 서비스
현재(2017년 5월) US East (Northern Virginia), US West (Oregon) 및 Europe (Ireland) 지역에서만 이용 가능

Habitat(앱 빌드 및 패키징 자동화), InSpec(컴플라이언스 자동화)과 Chef를 함께 사용하는 CI(지속적 통합)서비스

Chef Automate AWS 블로그

KMS (Key Management Service)

데이터를 암호화할 때 사용하는 암호화 키를 쉽게 생성하고 제어할 수 있게 해주는 관리형 서비스

AWS product category AWS services integrated with KMS
Compute Amazon Lightsail*, Amazon EC2 SSM*, AWS Lambda
Storage & Content Delivery Amazon S3, Amazon EBS, AWS Import/Export Snowball, AWS Storage Gateway
Databases Amazon RDS, Amazon Redshift, AWS Database Migration Service
Developer Tools AWS CodeCommit*
Management Tools AWS CloudTrail
Analytics Amazon EMR, Amazon Kinesis Firehose
Application Services Amazon Elastic Transcoder, Amazon SES
Enterprise Applications Amazon WorkSpaces, Amazon WorkMail

KMS는 AWS SDK, the AWS Command Line Interface, RESTful API와 통합해서 사용

CloudTrail

  • CLoudTrail은 AWS 계정 사용에 대한 관리, 운영 감사, 취약점 감사등을 도와주는 서비스
  • AWS상의 서비스에 대한 로그, 지속적 모니터링, api사용 관련 이벤트등 제공

결론

AWS에는 훨씬 더 많은 서비스들이 존재하고 앞으로도 계속 생길 것입니다.
이번 AWS Summit 2017 in Seoul 도 참여 했었는데 새로운 서비스들이 등장하더군요.

AWS 자격증도 있던데 2년마다 갱신되고 상당히 힘들어보였습니다.
관심있으시면 한번 도전해보세요.

[adsense2]

[centos] svn server(subversion) 아파치 https 연동하기

예전부터 종종 해오면서 “해야지, 해야지”했던 svn 서버 설정에 대해 블로깅하려 한다.

지금은 git가 대세라서 git도 좀 써보려하지만 일단 친숙한 svn서버 설정부터 해놓으려는게 목적이다.

서버 환경은 Centos 6.5 이고 minimun을 다운받아서 기본만 설치한 상태이다.

1. 아파치 설치

$> sudo yum install httpd

a. 정상설치 확인

$> rpm -qa httpd
httpd-2.2.15-39.el6.centos.x86_64

b. 아파치 iptables 예외 설정

$>sudo vi /etc/sysconfig/iptables

아래 내용 추가

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

아파치 svn연동 모듈 설치

$> sudo yum install mod_dav_svn mod_ssl

 

2. 아파치 https 설정

https 키생성(self signing)

$> openssl genrsa -des3 -out cert.key 1024
$> openssl req -new -key cert.key -out cert.csr
$> openssl x509 -req -days 3650 -in cert.csr -signkey cert.key -out cert.crt

키를 특정 경로에 저장, 여기서는 /etc/httpd폴더에 cert폴더를 만듬

$> mkdir /etc/httpd/cert

httpd-svn.conf파일을 /etc/httpd/conf.d/ 경로에 생성 한 뒤,

$> vi /etc/httpd/conf.d/httpd-svn.conf

 

아래 내용을 자신에게 맞도록 설정을 변경한다.

ServerName: 본인의 서버 이름

ServerAlias: 서버의 약칭

AuthUserFile: svn의 repository의 유저 패스워드 파일(뒤에 생성)

AuthzSVNAccessFile: svn의 repository 각 프로젝트의 권한 설정 파일(뒤에 생성)

SSLCertificateFile: 생성한 인증서파일

SSLCertificateKeyFile: 생성한 개인키

<VirtualHost *:443>

ServerName weeppp.com
ServerAlias weeppp.com
DocumentRoot "/var/www/svn"

<Location /test>
    DAV                svn
#   SVNPath             "/repository/sample"
    SVNParentPath      "/repository"
    SVNListParentPath  On
    SVNIndexXSLT       "/repos-web/view/repos.xsl"

    AuthType           Basic
    AuthName           "SVN Repository"
    AuthUserFile       "/repository/.passwd"
    AuthzSVNAccessFile "/repository/.authz"
    Require            valid-user
</Location>

# Use separate log files for the SSL virtual host; note that LogLevel
# is not inherited from httpd.conf.
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

#   SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect.  Disable SSLv2 access by default:
SSLProtocol all -SSLv2

#   SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

#   Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate.  If
# the certificate is encrypted, then you will be prompted for a
# pass phrase.  Note that a kill -HUP will prompt again.  A new
# certificate can be generated using the genkey(1) command.
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/cert/server.crt

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/cert/server.key

#   Server Certificate Chain:
#   Point SSLCertificateChainFile at a file containing the
#   concatenation of PEM encoded CA certificates which form the
#   certificate chain for the server certificate. Alternatively
#   the referenced file can be the same as SSLCertificateFile
#   when the CA certificates are directly appended to the server
#   certificate for convinience.
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt

#   Certificate Authority (CA):
#   Set the CA certificate verification path where to find CA
#   certificates for client authentication or alternatively one
#   huge file containing all of them (file must be PEM encoded)
#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt

#   Client Authentication (Type):
#   Client certificate verification type and depth.  Types are
#   none, optional, require and optional_no_ca.  Depth is a
#   number which specifies how deeply to verify the certificate
#   issuer chain before deciding the certificate is not valid.
#SSLVerifyClient require
#SSLVerifyDepth  10

#   Access Control:
#   With SSLRequire you can do per-directory access control based
#   on arbitrary complex boolean expressions containing server
#   variable checks and other lookup directives.  The syntax is a
#   mixture between C and Perl.  See the mod_ssl documentation
#   for more details.
#<Location />
#SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
#            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
#            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
#            and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
#            and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20       ) \
#           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
#</Location>

#   SSL Engine Options:
#   Set various options for the SSL engine.
#   o FakeBasicAuth:
#     Translate the client X.509 into a Basic Authorisation.  This means that
#     the standard Auth/DBMAuth methods can be used for access control.  The
#     user name is the `one line' version of the client's X.509 certificate.
#     Note that no password is obtained from the user. Every entry in the user
#     file needs this password: `xxj31ZMTZzkVA'.
#   o ExportCertData:
#     This exports two additional environment variables: SSL_CLIENT_CERT and
#     SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
#     server (always existing) and the client (only existing when client
#     authentication is used). This can be used to import the certificates
#     into CGI scripts.
#   o StdEnvVars:
#     This exports the standard SSL/TLS related `SSL_*' environment variables.
#     Per default this exportation is switched off for performance reasons,
#     because the extraction step is an expensive operation and is usually
#     useless for serving static content. So one usually enables the
#     exportation for CGI and SSI requests only.
#   o StrictRequire:
#     This denies access when "SSLRequireSSL" or "SSLRequire" applied even
#     under a "Satisfy any" situation, i.e. when it applies access is denied
#     and no other module can change it.
#   o OptRenegotiate:
#     This enables optimized SSL connection renegotiation handling when SSL
#     directives are used in per-directory context.
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

#   SSL Protocol Adjustments:
#   The safe and default but still SSL/TLS standard compliant shutdown
#   approach is that mod_ssl sends the close notify alert but doesn't wait for
#   the close notify alert from client. When you need a different shutdown
#   approach you can use one of the following variables:
#   o ssl-unclean-shutdown:
#     This forces an unclean shutdown when the connection is closed, i.e. no
#     SSL close notify alert is send or allowed to received.  This violates
#     the SSL/TLS standard but is needed for some brain-dead browsers. Use
#     this when you receive I/O errors because of the standard approach where
#     mod_ssl sends the close notify alert.
#   o ssl-accurate-shutdown:
#     This forces an accurate shutdown when the connection is closed, i.e. a
#     SSL close notify alert is send and mod_ssl waits for the close notify
#     alert of the client. This is 100% SSL/TLS standard compliant, but in
#     practice often causes hanging connections with brain-dead browsers. Use
#     this only for browsers where you know that their SSL implementation
#     works correctly.
#   Notice: Most problems of broken clients are also related to the HTTP
#   keep-alive facility, so you usually additionally want to disable
#   keep-alive for those clients, too. Use variable "nokeepalive" for this.
#   Similarly, one has to force some clients to use HTTP/1.0 to workaround
#   their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
#   "force-response-1.0" for this.
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

#   Per-Server Logging:
#   The home of a custom SSL log file. Use this when you want a
#   compact non-error SSL logfile on a virtual host basis.
CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

 

 

아파치 설정 폴더로 이동

$> cd /etc/httpd/conf

설정 파일 오픈 및 내용 변경

  • 서버이름은 해당 도메인이나 아이피등으로 변경
  • User와 Group은 아래와 같이 아파치로 변경
ServerName weeppp.com
User apache
Group apache

/etc/httpd/conf 디렉토리에 extra 폴더 생성 및 파일 생성

$> mkdir extra
$> cd extra
$> vi httpd-svn.conf

httpd-svn.conf 파일안에 아래 내용 복사

##############################################################
# SVN
##############################################################

LoadModule dav_svn_module   modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

<VirtualHost *:443>
    ServerName  weeppp.com
    ServerAlias  weeppp.com
    DocumentRoot "/data/webapps/svn/public_html"
    ServerAdmin  admin@gmail.com

    SetEnvIf Request_URI "\.(gif)|(jpg)|(swf)|(png)$" image_log

    CustomLog    "logs/svn_access_log.log"       common env=!image_log
    CustomLog    "logs/svn_access_image_log.log" common env=image_log
    ErrorLog     "logs/svn_error_log.log"

    <Location /svn>
        DAV                svn
        #SVNPath             "/repository/svn/repo/devsample"
        SVNParentPath /repository
#        SVNParentPath      "/repository/svn/devsample"
#        SVNListParentPath  On
        SVNIndexXSLT       "/repos-web/view/repos.xsl"

        AuthType           Basic
        AuthName           "Weep SVN Repository"
        AuthUserFile       "/repository/.passwd"
        AuthzSVNAccessFile "/repository/.authz"
        Require            valid-user
    </Location>
</VirtualHost>

여기서는 SVNParentPath를 설정해줘서 루트아래의 모든 프로젝트를 접근 가능하도록 함

3. SVN 설정

svn 저장소를 원하는 경로에 생성 및 이동

$> mkdir /repository
$> cd /repository

svn 저장소 소유자 변경

$> chown -R apache.apache /repository

sample프로젝트 생성

$> svnadmin create /repository/sample

프로젝트 소유자 및 권한 변경

$> chown -R apache.apache sample
$> chcon -R -t httpd_sys_content_t sample

svn 계정생성

$> htpasswd -c -m .passwd USER

.authz파일 생성

$> vi /repository/.authz

.authz파일에 하단 내용 추가

admin 그룹에 속한 계정(현재는 weeppp)에게 sample 프로젝트의 read/write 권한을 모두 주는것을 의미한다.

[groups]
admin=weeppp

[sample:/]
@admin = rw

 

.passwd 파일과 .authz파일 소유자를 apache로 변경한다

$> chown apache.apache .passwd
$> chown apache.apache .authz

problems with SELinux context/lables 요 문제가 있으므로 아래 명령을 실행한다.

$> chcon -t httpd_sys_content_t .authz
$> chcon -t httpd_sys_content_t .passwd

위의 명령어들을 잊지 않도록 /repository 폴더안에 ReadMe 파일로 저장해둔다.

#user create
htpasswd -c -m .passwd USER
#user add
htpasswd -m .passwd USER

#create svn repository
svnadmin create /repository/sample
chown -R apache.apache sample
chcon -R -t httpd_sys_content_t sample

subversion 재시작

$> /etc/init.d/svnserve stop
$> /etc/init.d/svnserve start

아파치 재시작

$> /etc/init.d/httpd restart

svn client를 이용해서 서버에 접근해본다.

https://weeppp.com/test/sample

checkout 하고 인증 받은 뒤에 svn을 이용하면 된다.

 

 

 

[tip] jquery input text에 숫자나 알파벳만 입력 받기

jquery 를 이용해서 html input tag에 숫자와 알파벳만 입력받도록 만든다.

웹 개발을 하다보면 인풋태그에 원하는 값만을 입력 받고 싶을 때가 있다.

현재 게임 운영툴을 개발하면서 숫자만 입력 받고 싶은 경우가 생겼다.

라이브러리를 찾아보았으나 한글이 입력되거나 특수문자가 입력되는 경우가 발생했다.

그래서 기존 라이브러리에 코드를 추가해서 한글이나 특수문자를 막고 숫자만 입력받는 로직을 만들었다.

필요하신분은 참고 하시길.

참고로 숫자입력만 허용하는 로직만 테스트된 상태며, 테스트는 구글 크롬에서만 하였다. (현재 운영툴이 크롬을 대상으로 개발하고 있기 때문)
익스플로러에서는 안됐던 듯 싶다.

사용법은 아래 링크타고 가서 원래 라이브러리파일을 다운 받으면 index.html에 상세히 있다.

https://github.com/johnantoni/jquery.alphanumeric

수정한 코드.

(function($){

	$.fn.alphanumeric = function(p) { 

		p = $.extend({
			ichars: "!@#$%^&*()+=[]\\\';,/{}|\":<>?~`.-_ ",
			nchars: "",
			allow: ""
		  }, p);	

		return this.each
			(
				function() 
				{

					if (p.nocaps) p.nchars += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
					if (p.allcaps) p.nchars += "abcdefghijklmnopqrstuvwxyz";

					s = p.allow.split('');
					for ( i=0;i<s.length;i++) if (p.ichars.indexOf(s[i]) != -1) s[i] = "\\" + s[i];
					p.allow = s.join('|');

					var reg = new RegExp(p.allow,'gi');
					var ch = p.ichars + p.nchars;
					ch = ch.replace(reg,'');

					$(this).keydown
						(
							function (e)
								{

									if (!e.charCode) k = String.fromCharCode(e.which);
										else k = String.fromCharCode(e.charCode);
									// Korean filtering,  modified by ktg. 
									// if (k.charCodeAt(0) == 229) e.preventDefault();
									// exception not ascii code, and shift + number keys
									if (33 <= e.which && e.which <= 40) return;
									// 컨트롤 c,v,x,a는 허용
									if (e.ctrlKey && (k.match(/(c|v|x|a)/i) != null)) return;
									// 아스키코드 이외의 글자는 막기
									if (k.charCodeAt(0) > 127) e.preventDefault();
									// 특수문자 막기
									if (e.shiftKey&&k.match(/\d+/g)!=null) e.preventDefault();

									if (ch.indexOf(k) != -1) e.preventDefault();
									if (e.ctrlKey&&k=='v') e.preventDefault();

								}

						);

					$(this).bind('contextmenu',function () {return false});

				}
			);

	};

	$.fn.numeric = function(p) {

		var az = "abcdefghijklmnopqrstuvwxyz";
		az += az.toUpperCase();

		p = $.extend({
			nchars: az
		  }, p);	

		return this.each (function()
			{
				$(this).alphanumeric(p);
				// 복사 붙여넣기 방지 로직
				$(this).keyup
					(
						function (e)
							{
								var newVal = $(this).val().replace(/[^0-9\s]/gi,"");
								if (newVal != $(this).val()) {
									$(this).val( $(this).val().replace(/[^0-9\s]/gi,"") );
								}
							}
					);
			}
		);

	};

	$.fn.alpha = function(p) {

		var nm = "1234567890";

		p = $.extend({
			nchars: nm
		  }, p);	

		return this.each (function()
			{
				$(this).alphanumeric(p);
			}
		);

	};	

})(jQuery);