HTML5 이미지태그 사용하기 0



<Marquee> loop 반복!
   스크롤 반복 횟수를 지정

(결과)


<basefont size="5" />

스크롤을 한번만 함.

 

스크롤을 두번함.

 

스크롤을 세번함.



이미지 태그 사용하기
ㅁ 이미지 연결하기
 <형식>
    <img src="경로명/파일명">
    <속성>
    1) src="경로명/파일명"

     - 절대경로 또는 상대경로로 사용 가능.

 src = "C:\pic/dog.jpg"   (절대경로(그림이 있는곳의 경로를 상세하게 적어주는것))

 src = "pic/dog.jpg"  (상대경로(html 파일이 저장되있는곳을 기준으로 간략하게 적어줄수있음))

 

2) align = top or middle or bottom (이미지 옆 텍스트 위치)

   -이미지 옆에 텍스트를 보여줄 때 이미지 오른쪽 상산, 중간, 하단에 보여줌

   align = "top", align = "middle", bottome은 디폴트.

 

 3) align = left or right (텍스트 옆 이미지 위치)

   align = left 지정하면 텍스트 왼쪽에 이미지 위치함

   align = right 지정하면 텍스트 오른쪽에 이미지 위치함

 

 4) border = 숫자(픽셀수)

   - 이미지의 테두리선을 픽셀수로 지정

 

 5) alt="이미지 파일 설명"

   - 커서를 이지미 위에 올리면 말풍선 형식으로 보여줌.

 

Ex)


(결과)



6) vspace="픽셀수", hspace="픽셀수"

  - 이미지와 텍스트 사이에 여백을 줌.

(예)

   <img src="이미지명" vspace=30 hspace=50>

    <br clear=:left" or "right">

   - 이미지와 텍스트를 출력하고 다음 문자를 출력시 앞의 텍스트에 이어서 출력.

     이것을 벗어나기 위해 <br>태그를 여러개 사용 할 수 있으나 <br clear="left> 하면

     한번에 이전 이미지나 객체에서 벗어날 수 있음.

 

(Ex)

(결과)


7) 이미지 크기 조절하는 width, height 속성 

 <형식>

 <img src="이미지 파일명" width="픽셀수" or "숫자%" height="픽셀수" or "숫자%">

(예)

 <img src="피카추.jpg" width=100 height=100>

<img src="피카추.jpg" width=70% height=70%> 원래이미지 크기에 비례해 축소됨.

<img src="피카추.jpg" width=300> width 속성만 지정시 세로 크기는 자동으로 조정되서 보여짐.

 

(Ex)


(결과)



HTML5 DL태그 사용하기(움직이게) 0







<link rel="stylesheet" href="" />

<DL> 태그 

   - Definition List의 약자로 용어에 대한 설명 등을 나열할 때 사용

     1) <DL>의 포함된 목록 태그로

       ① <LH> - List Head, 목록의 제목

       ② <DT> - Definition Title, 용어(제목)

       ③ <DD> - Definition Data, 용어의 설명

 

    - <LH>, <DT>, <DD>는 자동으로 줄 바꿈이 이루어진다.

 

Ex)

 <dl>

          <lh>목록의 제목

          <dt> 용어

          <dd>용어의 설명 

</dl>

 

(Ex)





























(Ex)
















움직이는 텍스트 만들기

  <MARQUEE> ~ </MARQUEE> 차양이라는 뜻 글자가 수평방향으로 움직인다.

  <marquee> 태그의 속성은 다음과 같다.

    1) bgcolor - 영역의 바탕색 "색명(bgcolor="#ff0000", bgcolor="yellow"

    2) width, height - 넓이ㅡ 높이 (width=100, heightt= 50%)

    3) hspace, vspace - 텍스트 바깥쪽 좌우상하 영역내의 여백 처리

      (hspace=20, vspace=10)

    4) behavior - 문자열의 흐름을 제어한다.

         (1) behavior="scroll" 기본값으로 한 방향으로 계속 문자열이 흘러감

         (2) behavior="slide" 스크롤하던 문자열이 한 쪽 끝에서 멈춤.

         (3) behavior="alternate" 문자열이 상하좌우로 왔다 갔다 반복함.

    5) direction - 문자열의 흘러가는 방향을 지정.

         (direction="left" or "right" or "up" or "down") 으로 사용가능.

    

(Ex)


























(결과)

 

텍스트의 위치는 top, middle, bottom으로 지정할 수 있음. 

 

텍스트 바깥의 상하 좌우 여백 보기!텍스트의 기본 흐름.텍스트가 좌우로 왔다 갔다 함.텍스트가 끝에가서 멈춤. (Ex2)































(결과)

 

텍스트 왼쪽으로 가게하기!

 

텍스트 오른쪽으로 가게하기!

 

텍스트 위쪽으로 가게하기!

 

텍스트 아래쪽으로 가게하기!


<marquee> 태그의 scrolldelay, scrollamount 속성

   - scrolldelay=숫자 : 숫자가 클수록 속도가 느려짐.

   - scrollamount=픽셀수 : 숫자가 클수록 속도가 빨라짐


































(결과)

<basefont size="6" />


scrolldelay 속성은 스크롤 지연 속도를 지정.

scrolldelay 속성은 값이 클수록 느림.

scrollamount 속성은 한번에 스크롤 되는 픽셀 수를 지정.


Docker를 통한 grafana 설치 (1) (모니터링 서비스) 0







사내 모니터링 대쉬보드 서버 이전으로 Grafana, influxdb, kapacitor, chronograf 를 새로 구축 이전 작업을 진행하였다.
각 서버들은 telegraf를 통해 서버의 상태에 대한 정보를 Influxdb에 전달하고, Influxdb에 저장된 데이터를 Grafana 대쉬보드에 보여주는 형태가 된다.
서버가 비정상 상태일때 Slack을 통하여 알람 메세지를 받을 수 있도록 kapacitor와 chronograf를 연동 할 예정이다.

1. Grafana docker-compose 작성
  . 호스트와 컨테이너에서 파일을 같이 사용할 수 있게 볼륨을 지정해주었다.
  mkdir /home/docker/grafana
  vi /home/docker/grafana/docker-compose.yml
    grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: always
    ports:
       - 3000:3000
     volumes:
       - grafana:/var/lib/grafana
       - /home/docker/grafana/grafana.ini:/etc/grafana/grafana.ini
    user: "472"


2. grafana.ini 파일 작성
  아래 내용 중 노란색 부분만 설정 변경해주면 됨.

  vi /home/docker/grafana/grafana.ini

##################### Grafana Configuration Example #####################
#
# Everything has defaults so you only need to uncomment things you want to
# change

# possible values : production, development
; app_mode = production

# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty
; instance_name = ${HOSTNAME}

#################################### Paths ####################################
[paths]
# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
#
;data = /var/lib/grafana
#
# Directory where grafana can store logs
#
;logs = /var/log/grafana
#
# Directory where grafana will automatically scan and look for plugins
#
;plugins = /var/lib/grafana/plugins

#
#################################### Server ####################################
[server]
# Protocol (http or https)
protocol = http

# The ip address to bind to, empty will bind to all interfaces
#http_addr = 

# The http port  to use
http_port = 3000

# The public facing domain name used to access grafana from a browser
;domain = localhost

# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
;enforce_domain = false

# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
; root_url = http://localhost:3000
root_url = http://IP:3000

# Log web requests
;router_logging = false

# the path relative working path
static_root_path = public

# enable gzip
;enable_gzip = false

# https certs & key file
;cert_file =
;cert_key =

#################################### Database ####################################
[database]
# You can configure the database connection by specifying type, host, name, user and password
# as seperate properties or as on string using the url propertie.

# Either "mysql", "postgres" or "sqlite3", it's your choice
;type = sqlite3
;host = 127.0.0.1:3306
;name = grafana
;user = root
# If the password contains # or ; you have to wrap it with trippel quotes. Ex """#password;"""
;password =

# Use either URL or the previous fields to configure the database
# Example: mysql://user:secret@host:port/database
;url =

# For "postgres" only, either "disable", "require" or "verify-full"
;ssl_mode = disable

# For "sqlite3" only, path relative to data_path setting
;path = grafana.db

#################################### Session ####################################
[session]
# Either "memory", "file", "redis", "mysql", "postgres", default is "file"
;provider = file

# Provider config options
# memory: not have any config yet
# file: session dir path, is relative to grafana data_path
# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=grafana`
# mysql: go-sql-driver/mysql dsn config string, e.g. `user:password@tcp(127.0.0.1:3306)/database_name`
# postgres: user=a password=b host=localhost port=5432 dbname=c sslmode=disable
;provider_config = sessions

# Session cookie name
;cookie_name = grafana_sess

# If you use session in https only, default is false
;cookie_secure = false

# Session life time, default is 86400
;session_life_time = 86400

#################################### Analytics ####################################
[analytics]
# Server reporting, sends usage counters to stats.grafana.org every 24 hours.
# No ip addresses are being tracked, only simple counters to track
# running instances, dashboard and error counts. It is very helpful to us.
# Change this option to false to disable reporting.
;reporting_enabled = true

# Set to false to disable all checks to https://grafana.net
# for new vesions (grafana itself and plugins), check is used
# in some UI views to notify that grafana or plugin update exists
# This option does not cause any auto updates, nor send any information
# only a GET request to http://grafana.net to get latest versions
;check_for_updates = true

# Google Analytics universal tracking code, only enabled if you specify an id here
;google_analytics_ua_id =

#################################### Security ####################################
[security]
# default admin user, created on startup
;admin_user = admin

# default admin password, can be changed before first start of grafana,  or in profile settings
;admin_password = admin

# used for signing
;secret_key =

# Auto-login remember days
;login_remember_days = 7
;cookie_username = grafana_user
;cookie_remember_name = grafana_remember

# disable gravatar profile images
;disable_gravatar = false

# data source proxy whitelist (ip_or_domain:port separated by spaces)
;data_source_proxy_whitelist =

[snapshots]
# snapshot sharing options
;external_enabled = true
;external_snapshot_url = https://snapshots-origin.raintank.io
;external_snapshot_name = Publish to snapshot.raintank.io

# remove expired snapshot
;snapshot_remove_expired = true

# remove snapshots after 90 days
;snapshot_TTL_days = 90

#################################### Users ####################################
[users]
# disable user signup / registration
;allow_sign_up = true

# Allow non admin users to create organizations
;allow_org_create = true

# Set to true to automatically assign new users to the default organization (id 1)
;auto_assign_org = true

# Default role new users will be automatically assigned (if disabled above is set to true)
;auto_assign_org_role = Viewer

# Background text for the user field on the login page
;login_hint = email or username

# Default UI theme ("dark" or "light")
;default_theme = dark

[auth]
# Set to true to disable (hide) the login form, useful if you use OAuth, defaults to false
;disable_login_form = false

#################################### Anonymous Auth ##########################
[auth.anonymous]
# enable anonymous access
;enabled = false

# specify organization name that should be used for unauthenticated users
;org_name = Main Org.

# specify role for unauthenticated users
;org_role = Viewer

#################################### Github Auth ##########################
[auth.github]
;enabled = false
;allow_sign_up = true
;client_id = some_id
;client_secret = 
;scopes = user:email,read:org
;auth_url = https://github.com/login/oauth/authorize
;token_url = https://github.com/login/oauth/access_token
;api_url = https://api.github.com/user
;team_ids =
;allowed_organizations =

#################################### Google Auth ##########################
[auth.google]
;enabled = false
;allow_sign_up = true
;client_id = some_client_id
;client_secret = 
;scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
;auth_url = https://accounts.google.com/o/oauth2/auth
;token_url = https://accounts.google.com/o/oauth2/token
;api_url = https://www.googleapis.com/oauth2/v1/userinfo
;allowed_domains =

#################################### Generic OAuth ##########################
[auth.generic_oauth]
;enabled = false
;name = OAuth
;allow_sign_up = true
;client_id = some_id
;client_secret =
;scopes = user:email,read:org
;auth_url = https://foo.bar/login/oauth/authorize
;token_url = https://foo.bar/login/oauth/access_token
;api_url = https://foo.bar/user
;team_ids =
;allowed_organizations =

#################################### Grafana.net Auth ####################
[auth.grafananet]
;enabled = false
;allow_sign_up = true
;client_id = some_id
;client_secret =
;scopes = user:email
;allowed_organizations =

#################################### Auth Proxy ##########################
[auth.proxy]
;enabled = false
;header_name = X-WEBAUTH-USER
;header_property = username
;auto_sign_up = true
;ldap_sync_ttl = 60
;whitelist = 192.168.1.1, 192.168.2.1

#################################### Basic Auth ##########################
[auth.basic]
;enabled = true

#################################### Auth LDAP ##########################
[auth.ldap]
;enabled = false
;config_file = /etc/grafana/ldap.toml
;allow_sign_up = true

#################################### SMTP / Emailing ##########################
[smtp]
;enabled = false
;host = localhost:25
;user =
;password =
;cert_file =
;key_file =
;skip_verify = false
;from_address = admin@grafana.localhost

[emails]
;welcome_email_on_sign_up = false

#################################### Logging ##########################
[log]
# Either "console", "file", "syslog". Default is console and  file
# Use space to separate multiple modes, e.g. "console file"
;mode = console file

# Either "trace", "debug", "info", "warn", "error", "critical", default is "info"
;level = info

# optional settings to set different levels for specific loggers. Ex filters = sqlstore:debug
;filters =


# For "console" mode only
[log.console]
;level =

# log line format, valid options are text, console and json
;format = console

# For "file" mode only
[log.file]
;level =

# log line format, valid options are text, console and json
;format = text

# This enables automated log rotate(switch of following options), default is true
;log_rotate = true

# Max line number of single file, default is 1000000
;max_lines = 1000000

# Max size shift of single file, default is 28 means 1 << 28, 256MB
;max_size_shift = 28

# Segment log daily, default is true
;daily_rotate = true

# Expired days of log file(delete after max days), default is 7
;max_days = 7

[log.syslog]
;level =

# log line format, valid options are text, console and json
;format = text

# Syslog network type and address. This can be udp, tcp, or unix. If left blank, the default unix endpoints will be used.
;network =
;address =

# Syslog facility. user, daemon and local0 through local7 are valid.
;facility =

# Syslog tag. By default, the process' argv[0] is used.
;tag =


#################################### AMQP Event Publisher ##########################
[event_publisher]
;enabled = false
;rabbitmq_url = amqp://localhost/
;exchange = grafana_events

;#################################### Dashboard JSON files ##########################
[dashboards.json]
;enabled = false
;path = /var/lib/grafana/dashboards

#################################### Alerting ######################################
[alerting]
# Makes it possible to turn off alert rule execution.
;execute_alerts = true

#################################### Internal Grafana Metrics ##########################
# Metrics available at HTTP API Url /api/metrics
[metrics]
# Disable / Enable internal metrics
;enabled           = true

# Publish interval
;interval_seconds  = 10

# Send internal metrics to Graphite
[metrics.graphite]
# Enable by setting the address setting (ex localhost:2003)
;address =
;prefix = prod.grafana.%(instance_name)s.

#################################### Internal Grafana Metrics ##########################
# Url used to to import dashboards directly from Grafana.net
[grafana_net]
;url = https://grafana.net

#################################### External image storage ##########################
[external_image_storage]
# Used for uploading images to public servers so they can be included in slack/email messages.
# you can choose between (s3, webdav)
;provider =
provider = local

[external_image_storage.s3]
;bucket_url =
;access_key =
;secret_key =

[external_image_storage.webdav]
;url =
;username =
;password =

3. docker-compose 명령어를 통한 서비스 실행
  1) docker-compose.yml을 만든 디렉토리로 이동.
    cd /home/docker/grafana
    
  2) 서비스 실행
    docker-compose up -d
    

  



  3) 서비스 확인
    docker ps -a




4. Grafana Web page 접속 확인
  Grafana http://설치 서버 IP:3000


telegraf 설치 및 influxdb에 데이터 전송 (모니터링 서비스 구축) 0






telegraf를 통한 influxdb에 데이터 전송.

telegraf란 Go 언어로 쓰여진 agent로 주로 수집, 처리, 메트릭에 쓰기 위해 사용된다. 
서버의 상태 cpu, memory,disk, db 등등 다양한 정보들을 influxdb로 보내 grafana에 그래프를 그릴 수 있도록 설치하였다.


1. Docker-compose 파일 작성

  * 다른 서버들과 버전을 맞추기 위해 tel
  mkdir /home/docker/telegraf
  vi /home/docker/telegraf/docker-compose.yml

telegraf:
  image: telegraf:1.12.6
  container_name: default-telegraf
  privileged: true
  restart: always
  environment:
    - HOST_PROC=/rootfs/proc
    - HOST_SYS=/rootfs/sys
    - HOST_MOUNT_PREFIX=/rootfs
  net: host
  volumes:
    - /:/rootfs:ro
    - /proc:/rootfs/proc:ro
    - /sys:/rootfs/sys:ro
    - /var/run/docker.sock:/var/run/docker.sock
    - /home/docker/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf


2. telegraf.conf 파일 작성

   vi /home/docker/telegraf/telegraf.conf
  * 아래 노란색 부분은 수정하여 사용

[global_tags]

[agent]
  interval = "10s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = ""
  debug = false
  quiet = false
  logfile = ""
  hostname = "Server Hostname"
  omit_hostname = false


[[outputs.influxdb]]
  urls = ["http://influxdb IP:8086"]
  database = "COMMON"
  retention_policy = ""
  write_consistency = "any"
  timeout = "5s"

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false


[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs"]

[[inputs.diskio]]

[[inputs.kernel]]

[[inputs.mem]]

[[inputs.processes]]

[[inputs.swap]]

[[inputs.system]]

[[inputs.docker]]
   endpoint = "unix:///var/run/docker.sock"
   gather_services = false
   container_names = []
   container_name_include = []
   container_name_exclude = []
   timeout = "5s"
   perdevice = true
   total = false
   docker_label_exclude = []

[[inputs.net]]


3. 서비스 시작

  1) docker-compose 만든 디렉토리로 이동
   cd /home/docker/telegraf

  2) 서비스 시작
   docker-compose up -d

  3) 서비스 확인
   docker ps -a


4. Influxdb에서 데이터 확인

  1) 이전에 만든 Influx DB docker container 접속
    docker exec -it influxdb bash
  
  2) InfluxDB 접속
    influx

  3) 데이터 확인
    select * from cpu limit 1;


* 데이터베이스 및 테이블 확인은 아래와 같다.
데이터베이스 확인 : show databases;
테이블 확인 : show MEASUREMENTS;  (MEASUREMENTS 는 mysql에서 table과 같다고 보면 될것 같다.)




docker를 통한 Influxdb 설치(모니터링 서비스 DB) 0








사내 모니터링 대쉬보드 서버 이전으로 Grafana, influxdb, kapacitor, chronograf 를 새로 구축 이전 작업을 진행하였다.
각 서버들은 telegraf를 통해 서버의 상태에 대한 정보를 Influxdb에 전달하고, Influxdb에 저장된 데이터를 Grafana 대쉬보드에 보여주는 형태가 된다.
서버가 비정상 상태일때 Slack을 통하여 알람 메세지를 받을 수 있도록 kapacitor와 chronograf를 연동 할 예정이다.


Influxdb는 InfluxData 에서 개발한 오픈소스 시계열 데이터 베이스(TSDB)이다. GO 언어로 작성되었으며 운영 모니터링, 서버 메트릭 등 실시간 분석과 같은 필드에서 시계열 데이터를 신속하고 고 가용성으로 저장하고 검색 할 수 있도록 최적화 된 DB.


1. docker-compose 파일 작성
   mkdir /home/docker/influxdb/
   vi /home/docker/influxdb/docker-compose.yml

   influxdb:
  image: influxdb:latest
  container_name: influxdb
  restart: always
  ports:
    - "8086:8086"
  environment:
    - INFLUXDB_REPORTING_DISABLED=false
  volumes:
    - influxdb:/var/lib/influxdb
    - /home/docker/influxdb/influxdb.conf:/etc/influxdb/influxdb.conf:ro
    - /home/docker/influxdb/backup:/backup
 

2. influxdb.conf 파일 작성
  vi /home/docker/influxdb/influxdb.conf

reporting-disabled = false
bind-address = "127.0.0.1:8088"

[meta]
  dir = "/var/lib/influxdb/meta"
  retention-autocreate = true
  logging-enabled = true

[data]
  dir = "/var/lib/influxdb/data"
  index-version = "tsi1"
  wal-dir = "/var/lib/influxdb/wal"
  wal-fsync-delay = "0s"
  query-log-enabled = false
  cache-max-memory-size = 1073741824
  cache-snapshot-memory-size = 26214400
  cache-snapshot-write-cold-duration = "10m0s"
  compact-full-write-cold-duration = "4h0m0s"
  max-series-per-database = 1000000
  max-values-per-tag = 100000
  max-concurrent-compactions = 0
  trace-logging-enabled = false

[coordinator]
  write-timeout = "10s"
  max-concurrent-queries = 0
  query-timeout = "0s"
  log-queries-after = "0s"
  max-select-point = 0
  max-select-series = 0
  max-select-buckets = 0

[retention]
  enabled = true
  check-interval = "30m0s"

[shard-precreation]
  enabled = true
  check-interval = "10m0s"
  advance-period = "30m0s"

[monitor]
  store-enabled = true
  store-database = "_internal"
  store-interval = "10s"

[subscriber]
  enabled = true
  http-timeout = "30s"
  insecure-skip-verify = false
  ca-certs = ""
  write-concurrency = 40
  write-buffer-size = 1000

[http]
  enabled = true
  bind-address = ":8086"
  auth-enabled = false
  log-enabled = false
  write-tracing = false
  pprof-enabled = true
  https-enabled = false
  https-certificate = "/etc/ssl/influxdb.pem"
  https-private-key = ""
  max-row-limit = 0
  max-connection-limit = 0
  shared-secret = ""
  realm = "InfluxDB"
  unix-socket-enabled = false
  bind-socket = "/var/run/influxdb.sock"
  max-body-size = 25000000
  access-log-path = ""

[logging]
  format = "auto"
  level = "info"
  suppress-logo = false

[ifql]
  enabled = false
  log-enabled = true
  bind-address = ":8082"

[[graphite]]
  enabled = false
  bind-address = ":2003"
  database = "graphite"
  retention-policy = ""
  protocol = "tcp"
  batch-size = 5000
  batch-pending = 10
  batch-timeout = "1s"
  consistency-level = "one"
  separator = "."
  udp-read-buffer = 0

[[collectd]]
  enabled = false
  bind-address = ":25826"
  database = "collectd"
  retention-policy = ""
  batch-size = 5000
  batch-pending = 10
  batch-timeout = "10s"
  read-buffer = 0
  typesdb = "/usr/share/collectd/types.db"
  security-level = "none"
  auth-file = "/etc/collectd/auth_file"
  parse-multivalue-plugin = "split"

[[opentsdb]]
  enabled = false
  bind-address = ":4242"
  database = "opentsdb"
  retention-policy = ""
  consistency-level = "one"
  tls-enabled = false
  certificate = "/etc/ssl/influxdb.pem"
  batch-size = 1000
  batch-pending = 5
  batch-timeout = "1s"
  log-point-errors = true

[[udp]]
  enabled = false
  bind-address = ":8089"
  database = "udp"
  retention-policy = ""
  batch-size = 5000
  batch-pending = 10
  read-buffer = 0
  batch-timeout = "1s"
  precision = ""

[continuous_queries]
  log-enabled = true
  enabled = true
  query-stats-enabled = false
  run-interval = "1s"

3. 서비스 시작
  1) docker-compose 만든 디렉토리로 이동
   cd /home/docker/influxdb

  2) 서비스 시작
   docker-compose up -d
 





  3) 서비스 확인
    docker ps -a






다음장에서는 일반 서버에서 Telegraf를 통하여 Influxdb에 데이터를 넣고, 확인 할 예정.




1 2 3 4 5 6 7 8 9 10