I spend some times over to create spring boot web app from the ground up.

Discoholic ๐ชฉ

No title available

izzy's playlists!
Mike Driver
trying on a metaphor
No title available

JVL
hello vonnie
Stranger Things
"I'm Dorothy Gale from Kansas"

No title available
taylor price
DEAR READER

tannertan36

Kiana Khansmith
dirt enthusiast

pixel skylines
NASA

PR's Tumblrdome
almost home

seen from Switzerland
seen from Croatia

seen from Kazakhstan
seen from United States

seen from Tรผrkiye
seen from United Kingdom

seen from Canada

seen from India
seen from United States
seen from United States

seen from United Arab Emirates
seen from United States
seen from United States

seen from Belgium
seen from Malaysia

seen from United States

seen from Germany

seen from Australia

seen from Canada

seen from Australia
@sangpire
I spend some times over to create spring boot web app from the ground up.
spring boot ๋ vm ๊ฐ์ ํ ํ๋ฆฟ Resource๋ JAR์ ํฌํจํด์ผ ํ๊ธฐ ๋๋ฌธ์, resources/templates ๋ฑ์ ๋ฃ์ด์ ๊ด๋ฆฌํจ. ๊ทธ๋ฆฌ๊ณ ResourceLoader ๋ก class path ๊ธฐ์ค์ผ๋ก ๊ฐ์ ธ์ด,
Velocity ์๋์ค์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ResourceLoader ๋ฅผ ClasspathResourceLoader ์ ์ฌ์ฉ.
// VelocityConfigurer.java @Override protected void postProcessVelocityEngine(VelocityEngine velocityEngine) { // ์๋ต ... velocityEngine.setProperty( SPRING_MACRO_RESOURCE_LOADER_CLASS, ClasspathResourceLoader.class.getName()); // ์๋ต ... }
Velomacro ๋ autoload ์ต์ ์ ์ฃผ๋ฉด, ํ์ผ์ด ์์ ๋ ๊ฒฝ์ฐ ์๋ฒ ์ฌ์์ ์์ด ๋งคํฌ๋ก๋ฅผ ๋ค์ ์ฝ์ด์ฃผ๋๋ฐ, ๋ฌธ์ ๋ ClasspathResourceLoader ๋ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ์ด ์๋๋ค๊ณ ๊ฐ์ฃผ๋์ด ์์.
// ClasspathResourceLoader.java /** * @see org.apache.velocity.runtime.resource.loader.ResourceLoader#isSourceModified(org.apache.velocity.runtime.resource.Resource) */ public boolean isSourceModified(Resource resource) { return false; } /** * @see org.apache.velocity.runtime.resource.loader.ResourceLoader#getLastModified(org.apache.velocity.runtime.resource.Resource) */ public long getLastModified(Resource resource) { return 0; }
์ฆ, ์คํ๋ง ๋ถํธ์์ autoload ์ต์ ์ด ๋จน์ง ์์.;;
Java Spring ์์ @RequestMapping ์ผ๋ก ํ์ํ๋ ๋ฉ์๋์ ์๊ทธ๋์ณ(signatures) ๊ฐ ๋ค์ํด์ ์ด๋ ์ ๋ฆฌํด ๋์ ๊ณณ์ด ์๋ ํ๊ณ ์ฐพ์๋ดค๋๋ฐ JavaDoc ์ ์ ์ ๋ฆฌ๋์ด ์๋ค์.
Ruby ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ํ์ธ์ฉ์ผ๋ก SimpleCov ๋ฅผ ์ฌ์ฉ์ค์ธ๋ฐ, ์ค๋ ์์ธํ ์ดํด๋ณด๋, ์ปค๋ฒ๋ฆฌ์ง๊ฐ ํจ์ ๋ด์ฉ์ ์ ๋๋ก ๋ํ๋์ง ์๊ณ ์๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์์ต๋๋ค.
๊ทธ๋์ SimpleCov ํ์ด์ง๋ฅผ ์ฒ์ฒํ ์ฝ๋ ๋์ค, ์๋ ๋ด์ฉ์ ์ฝ๊ณ ,
Note: If SimpleCov starts after your application code is already loaded (via require), it won't be able to track your files and their coverage! The SimpleCov.start must be issued before any of your application code is required!
SimpleCov ์ฝ๋๋ฅผ ์์ค ์ฝ๋ ์ ์ผ ์ ์ค๋ก ์ฌ๋ ธ๋๋,
require 'simplecov' SimpleCov.start
์ ๋๋ค์, ์ญ์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ผผ๊ผผํ ์ฝ์ด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ๋ค์ํ๋ฒ ํ๋ค์.
Ruby IRB ๋์ฉ์ธ Pry์ ๋๋ฒ๊ฑฐ๋ MRI 2.0.0 ์์ ๋์ํ์ง ์์ต๋๋ค. MRI 2.0.0 ์ด์์ ๋ฒ์ ์์ ๋์ pry-byebug๋ก ๋๋ฒ๊น ์ ํ ์ ์์ต๋๋ค.
ํ์ฌ ํ๋ก์ ํธ์์ ๋๋ฒ๊น ํ ์ผ์ด ์์ด, pry-byebug ํ์ด์ง์์ ์ฌ์ฉ๋ฒ๋ ์ฝ์ด๋ณผ ๊ฒธ ์์ฃผ ๋ณผ ๊ฒ ๊ฐ์ ๋ด์ฉ์ ์ข ๊ธ์ด ์์ต๋๋ค.
๋๋ฒ๊น ์ ์์์ ์ฝ๋์ ์๋ ๋ด์ฉ์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
binding.pry
์คํ ๋ช ๋ น
step: ํ์ฌ ์ค ์ฝ๋๋ฅผ ์คํํ๊ณ ๋ค์์ค ๋๋ ํจ์๋ก ์ด๋, ์ซ์ ์ธ์๋ฅผ ์ค ๊ฒฝ์ฐ, ์ฌ๋ฌ๋ฒ ๋ฐ๋ณตํจ.
next: ํ์ฌ ์ค ์ฝ๋๋ฅผ ์คํํ๊ณ , ํ์ฌ ํ๋ ์์ ๋ค์์ค๋ก ์ด๋(ํจ์ ์์ผ๋ก ์ด๋ํ์ง ์์.) ๋ง์ฐฌ๊ฐ์ง๋ก ์ซ์๋ฅผ ์ธ์๋ก ์ค ๊ฒฝ์ฐ ์ฌ๋ฌ๋ฒ ๋ฐ๋ณต ์คํํจ.
finish: ํ์ฌ ์คํ ํ๋ ์์ด ๋ฆฌํดํ ๋๊น์ง ์คํ, ํ์ฌ ํจ์๋ผ๋ฉด, ํจ์ ์คํ์ ๋ง์น๊ณ , ํด๋น ํจ์๋ฅผ ํธ์ถํ ๋ค์์ค๋ก ์ด๋.
continue: ํ๋ก๊ทธ๋จ์ ๊ณ์ ์คํํ๊ณ ํ์ฌ Pry ์ธ์ ์ ๋๋.
up: ์คํ ํ๋ ์ ์๋จ๊ณ๋ก ์ด๋.
down: ์คํํ๋ ์ ์๋ซ ๋จ๊ณ๋ก ์ด๋.
frame ํน์ ํ๋ ์์ผ๋ก ์ด๋, ์ธ์๊ฐ ์์ ๊ฒฝ์ฐ ํ์ฌ ํ๋ ์์ ๋ณด์ฌ์ค.
break: ํ์ฌ ํ์ผ์ ์ค ๋ฒํธ ๋๋ ๋ฉ์๋ ๋ก ์๋ก์ด ์ค๋จ์ ์ค์ . ์กฐ๊ฑด์ ๋ฐ๋ฅธ ์ค๋จ ์ค์ ๊ฐ๋ฅ, ๋ค์ํ ํ๋๊ทธ(flags)๋ก ๊ธฐ์กด์ ์ค๋จ์ ํธ์ง
break ์
break SomeClass#run # Break at the start of `SomeClass#run`. break Foo#bar if baz? # Break at `Foo#bar` only if `baz?`. break app/models/user.rb:15 # Break at line 15 in user.rb. break 14 # Break at line 14 in the current file. break --condition 4 x > 2 # Change condition on breakpoint #4 to 'x > 2'. break --condition 3 # Remove the condition on breakpoint #3. break --delete 5 # Delete breakpoint #5. break --disable-all # Disable all breakpoints. breaks # List all breakpoints. (Same as `breakpoints`) break --show 2 # Show details about breakpoint #2.
MiniTest::Spec After Spec
ruby minitest spec ๋ beforeAll ์ด๋ AfterAll ์ด ์์ต๋๋ค. beforeAll ์ ๊ทธ๋ฅ ๋จผ์ ์คํํ๋ฉด ๋๋๋ฐ, AfterAll ์ฒ๋ผ ๋๋ฆฌ๊ธฐ ์ํด์ ์ด๋ป๊ฒ ํด์ผ ํ๋ ๊ณ ๋ฏผํ๋ ์ค์, ObjectSpace.define_finalizer ๋ผ๋ ๋ ์์ ์๊ฒ ๋์์ต๋๋ค.
require_relative 'spec_helper' require 'something' describe Something do before do p "before" end # AfterAll ObjectSpace.define_finalizer self do p "Afterall" end let :msg do Something.instance end describe "desc1" do specify do p "spec_1" end specify do p "spec_2" end describe "desc2" do specify do p "spec_3_1" end specify do p "spec_3_2" end describe "desc3" do specify do p "spec_4_1" end specify do p "spec_4_2" end end end end end
์คํ ๊ฒฐ๊ณผ๋,
Coverage report generated for RSpec to /Users/sangpire/playground/runway/integration/controller/coverage. 53 / 96 LOC (55.21%) covered. Run options: --seed 9024 # Running: "before-spec" "start" "spec_1" ."before-spec" "spec_2" ."before-spec" "spec_4_1" ."before-spec" "spec_4_2" ."before-spec" "spec_3_2" ."before-spec" "spec_3_1" . Fabulous run in 0.748178s, 8.0195 runs/s, 0.0000 assertions/s. 6 runs, 0 assertions, 0 failures, 0 errors, 0 skips "AfterAll"
ใ ใ ๊ตณ.
Bash commands
์์ฆ ํฐ๋ฏธ๋ ๋ค๋ฃฐ ์ผ์ด ๋ง์์ก๋๋ฐ, ์ด๋ฒ ๊ธฐํ์ Bash ๋จ์ถํค๋ฅผ ์ตํ๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
์ปค์ ์ด๋.
CTRL-A: ์ฒ์์ผ๋ก ์ด๋
CTRL-E: ๋์ผ๋ก ์ด๋
CTRL-F: ์ผ์ชฝ ํ ๊ธ์ ์ด๋
CTRL-B: ์ค๋ฅธ์ชฝ ํ ๊ธ์ ์ด๋
ALT-F: ์ผ์ชฝ ํ ๋จ์ด ์ด๋
ALT-B: ์ค๋ฅธ์ชฝ ํ๋จ์ด ์ด๋
CTRL-L: clear ๋ช ๋ น๊ณผ ๋์ผ
์์
CTRL-D: ํ์ฌ ๋ฌธ์ ์ญ์
CTRL-T: ์ปค์๋ฌธ์์ ์ปค์ ์ ํ๋ฌธ์์ ์์น ๋ณ๊ฒฝ, ์ปค์ ํฌ์ปค์ค๋ ํจ๊ป ์ด๋.
ALT-T: ์ปค์ ์ ๋จ์ด๋ฅผ ์ปค์ ๋จ์ด ๋ค์์ผ๋ก ๊ฐ์ ธ์ด. ์ปค์ ํฌ์ปค์ค๋ ํจ๊ป ์ด๋.
ALT-L: ์ปค์๊ฐ ์๋ ๋จ์ด ์ค ์ปค์ ๋ถํฐ ๋จ์ด ๋๊น์ง ์๋ฌธ์๋ก ๋ณ๊ฒฝ.
ALT-U: ์ปค์๊ฐ ์๋ ๋จ์ด ์ค ์ปค์ ๋ถํฐ ๋จ์ด ๋๊น์ง ๋๋ฌธ์๋ก ๋ณ๊ฒฝ.
๋ณต์ฌ ๋ถํ๋ฃ๊ธฐ.
CTRL-K: ์ปค์๋ถํฐ ์ค ๋๊น์ง ์ญ์ .
CTRL-U: ์ปค์๋ถํฐ ์ค ์์๊น์ง ์ญ์ .
ALT-D: ์ปค์ ๋ถํฐ ๋จ์ด ๋๊น์ง ์ญ์ .
ALT-BACKSPACE: ์ปค์๋ถํฐ ๋จ์ด ์ฒ์๊น์ง ์ญ์ , ๋จ์ด ์ฒ์์ ์์นํ ๊ฒฝ์ฐ, ์ด์ ๋จ์ด ์ญ์ .
CTRL-Y: ์ญ์ ํ๊ฒ ๋ถํ๋ฃ๊ธฐ(=Yank)
tmux ์์๋ ์ฌ๋ฌ pane ์ ๋์ผํ ์ปค๋งจ๋๋ฅผ ์ ๋ ฅํ ์ ์์ต๋๋ค.
๋ค์ ๋ช ๋ น์ด๋ก,
:setw synchronize-panes
on, off ๋ฅผ ์ถ๊ฐํด๋ ๋๊ณ , ๊ทธ๋ฅ ์คํํ๋ฉด ํ์ฌ ์ค์ ์ด ํ ๊ธ(toggle) ๋ฉ๋๋ค.
์ถ์ฒ: Arabesque - Sync tmux panes
Pry
Ruby์ IRB ๋ ์ข์ง๋ง Pry ๋ผ๋ ๋ ์์ ์๊ณ ๋ญ๊ฐ ๊ฐ๋ ค์ด ๋ถ๋ถ์ ๊ธ์ด์ค ์ ์๋ REPL ์ด๋ ๋๋์ด ๋ค์์ต๋๋ค. ๊ทธ๋์ pryrepl.orgํ์ด์ง์ Introductory screencast ์ ๋ณด๋ฉด์ ํ๋ฉด์์ ์ ๋ ฅํ ๋ช ๋ น์ด๋ฅผ ๋ฐ๋ก ์ ๋ฆฌํด ๋ณด์์ต๋๋ค.
Install
gem install pry pry-doc --no-ri --no-rdoc
Customization์ ~/.prerc ํ์ผ ์์ .
Features
help gist-method -h s = "pry" show-doc s.each_line show-doc String#each_line show-method s.each_line show-method s.each_line -l gist-method s.each_line require 'hello_world' ls HelloWorld -M ls HelloWorld -m ls HelloWorld -mj HelloWorld.say_hello cd HelloWorld ls HelloWorld -mj ls -mj self show-method say_hello say_hello say_hello; # ๋ฆฌํด๊ฐ ์๋ต. gem-cd hello_world .pwd .tree .cd lib .cat hello_world.rb show-method say_hello cd 12 cd String cd Regexp nesting cd .. jump-to 0 def helo(name) show-input ! def hello(name) "Hello, #{name} show-input amend-line 2 "Hello, #{name}" end hello "Viewer"
As a debugger
$ pry -r ./stack.rb stack = Stack.new show-doc stack.each stack.push 5 stack.push "abc" a = [] stack.each { |e| a << e } cd stack show-method each edit-method each # ์ด๊ณณ์์ ๋ฉ์๋ ์์ . `binding.pry` ์ถ๊ฐ. show-method each # ์์ ๋ ๋ฉ์๋๊ฐ ๋ํ๋จ. a = [] each { |e| a << e } # binding.pry ๊ตฌ๋ฌธ์์ ๋ฉ์ถค. whereami crnt.data # => "abc" cd .. crnt.data # => 5 cd .. crnt.data # => NoMethodError edit-method each # ๋ฒ๊ทธ ์์ . show-method each a = [] each { |e| a << e } a # => ["abc", 5]
Adding to Rails
Gemfile ์ ์๋ ์ถ๊ฐ
gem "pry", :group => :development
๊ทธ๋ฆฌ๊ณ bundle install ์คํ.
development.rb ํ์ผ์ ๋ค์ ๋ด์ฉ ์ถ๊ฐ
silence_warnings do require 'pry' IRB = Pry end
๊ทธ๋ฆฌ๊ณ rails consoel ์คํ.
cd Category ls -m ls -M ls -i @_destroy_callbacks
Your Turn
pre ์ํค๋ฅผ ์ดํด๋ณด์. irc ๋..
Add Pry to your app
Discover with Pry
Swat that bug!
๋๊ณ ๋๊ณ ๋ณด๊ธฐ ์ํด์, ์ ์์ผ ์ด์ผ๊ธฐ ์ ์ง๊ธ ํ๋ ์ผ๋ค์ ์ ๋ฐ์ ์๊ฐ ์์ ํด์ผ ํ๋ค๋ฉด? ์์ ๊ตต์ ๊ธ์จ๋ง ๊ฐ์ ธ์์ต๋๋ค.
1์๊ฐ ๋จ์๋ก(์ฌ๋์ ๋ฐ๋ผ, ์ํฉ์ ๋ฐ๋ผ ์ด ๋จ์์๊ฐ์ ๋ฌ๋ผ์ผํ ํ ๋ฐ, ๋ณดํต์ 1์๊ฐ์ ๋์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค) ์ผ์ ๊ณํํด์ ํ๊ณ ์, 1์๊ฐ ๋ผ์ ์๋ ์ธ๋ฆฌ๋ฉด ๋ฌด์กฐ๊ฑด ์คํฑํฉ๋๋ค.
๋ค๋ฅธ ์ผ์ 1์๊ฐ ๋์ ํ๋ค. ๋ ์ฐ์ ์์๊ฐ ๋์ ์ผ๋ก ์ ํ
์ฑ์ทจํ๊ณ ์ ํ๋ ๊ฒฐ๊ณผ(outcome)๋ฅผ ์๊ฐํด์ ์ ํ ๋ค๋ฅธ ์ ๊ทผ๋ฒ์ ์๋ํ๋ค.
๋ค๋ฅธ ์ฌ๋๊ณผ ์์ํ๋ค.
1์๊ฐ์ด ๋์ด์ง๋ ๋ง๋๋ง๋ค, ๊ทธ๋ฆฌ๊ณ ์ข ๋ ํฐ ๋ง๋(์์ปจ๋ ํ๋ฃจ, 1์ฃผ์ผ ๋จ์)๋ง๋ค ๋ค์ ์ง๋ฌธ์ ์ค์ค๋ก์๊ฒ ๋ฌป์ต๋๋ค.
์ด ์ผ ์ ๋ง ๊ผญ ํด์ผํ๋๊ฐ?
์ด ์ผ ๋ด๊ฐ ๊ผญ ํด์ผํ๋๊ฐ?
์ด ์ผ๋ก ์ฑ์ทจํ๋ ค๋ ๋ชฉํ(outcome)๊ฐ ๋ฌด์์ธ๊ฐ? ๋ ๊ฐ์ธ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ์๋?
๋ค์ง
๋์ ๋ค์ง๊ณผ ์๊ฐ๋ค์ ๊ธ๋ฐฉ ๋๋๋ค. ๊ทธ๋์ ๊ทธ๊ฒ๋ค ์๊ฐ๋๋ฉด ๋ฐ๋ก ์ ๊ณ ์์ฃผ ์ฝ์ด๋ด์ผ ๊ฒ ๋ค.
vim ๋ช ๋ น๋ชจ๋์์ ์๋ฌธ ํค๋ณด๋๋ก ์๋์ผ๋ก ์ ํ๋๊ฒ ๋ง๋ค๊ธฐ
๋ฌธ์
vim์ insert mode ์์ ํ๊ธ์ ์ ๋ ฅํ๋ค๊ฐ
<ESC> ๋ก ๋น ์ ธ๋์ค๋ฉด ์๋ฌธ ํค๋ณด๋ ๋ ์ด์์์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํด ํญ์ ํ/์ ์ ํ ํค๋ฅผ ๋๋ฌ์ผ ํ๋ค.
์๋ํ๋ฉด, insert mode ๋ฅผ ์ ์ธํ๊ณ ๋ ํ๊ธ ํค๋ณด๋๋ ์ธ๋ชจ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ insert mode ๊ฐ ์๋๋ฉด ํญ์ ์๋ฌธ ํค๋ณด๋ ๋ ์ด์์ ์ผ๋ก ์ ํ๋๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ฒ ๋์๋ค.
windows ์ฉ gvim ์์๋ ๊ธฐ๋ณธ์ผ๋ก ๋๋ ๊ธฐ๋ฅ์ด๋ค.
ํ์ง๋ง osx ์๋์์ ์คํ๋๋ vim์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ด ์๋ค.
ํด๊ฒฐ
๋ช ์๊ฐ ๋์์ ์ฝ์ง์ ํ์ง๋ง. ์ฝ์ง์ ์๋ตํ๊ณ . ๊ฒฐ๋ก ์ ์ผ๋ก๋ ์๋์ ์์๋ก input-source-switcher ๋ฅผ ๋น๋ํด์ ์ค์นํ๋ค.
git clone https://github.com/vovkasm/input-source-switcher.git cd input-source-switcher mkdir build cd build cmake .. make make install
๊ทธ๋ฆฌ๊ณ .vimrc ์ ์๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
if has('mac') && filereadable('/usr/local/lib/libInputSourceSwitcher.dylib') autocmd InsertLeave * call libcall('/usr/local/lib/libInputSourceSwitcher.dylib', 'Xkb_Switch_setXkbLayout', 'com.apple.keylayout.US') endif
p.s,
์ํด๋ค.
๋๋ ์ํด๋ถํฐ ์ด๋ฐ ๋น์์ฐ์ ์ธ ์ผ์ ์ง์ฐฉํ๊ณ ์์๋ค.
์ ๋ฉฐ์น ๋์ vimrc๋ฅผ ์ ๋ฆฌํ๊ณ , ์๋ก์ด ํ๋ฌ๊ทธ์ธ๋ค์ ์ฐพ์๋ค๋๋ฉฐ
๋ง์ฝ๊ณผ๋ ๊ฐ์ ๊ฐ๋ฐํ๊ฒฝ์ธํ ์ผ๋ก ์๊ฐ์ ํ๋นํ๊ณ ์์๋ค.
์ ์๋ฆฌ๋ก ๋์์์ผ์ง.
๋ชจ๋ฅด๋ฉด ๋ฌผ์ด์ ์๋ฉด ๋๊ณ , ํ๋ฆฌ๋ฉด ๊ณ ์น๋ฉด ๋๊ณ , ์๋ชปํ์ผ๋ฉด ๋์ฐ์น๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ธ์์ ์ด ๋ ๊ฒ๋ ๊ฒ์ด ์์ด์. ์ด๊ฒ์ด ๋ด๊ฐ ๋ด ์ธ์์ ์ฃผ์ธ์ผ๋ก ์ฌ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ฒ๋ฅ์ค๋ ํฌ๋งํธ์ง 2015. 03. 03
ํ๊ต์์ ๋ฒ์คํ๊ณ ์ง์ผ๋ก ๊ฐ๋ คํ๊ฒ ์๋ชป์ธ๋ฏ.
20๋ถ ๊ฑธ๋ฆฌ๋ 2007๋ฒ์ ๋์๊ฐ ์งธ ํ๊ณ ์๋ ์ค.
๋ฒ์ค์ ์ฉ์ฐจ์ ๋ค ํ์์์ ์์ผ๋ก ์งํ์ฒ ๋ง ํ์ผ์ง ใ ใ
ํ๊ต ์ถ๊ทผ ์ ์งธ๋ , ์ค๋์ ํ์ฌ ์ ํ๋ฒ์ค๋ฅผ ์ด์ฉํด๋ณด์.
์ ํ์ ์ฅ์ ์
- ๋ฌด๋ฃ. - ์๋ฆฌ๊ฐ ์๋ ํธ์ด๋ผ๊ณ ํจ. - ํ๊ฐํ ์งํ์ฒ ๊ตฌ๊ฐ ์ด์ฉ. - ์ฌ๋๋ค์ด ์ค ์์ ๋ฒ์ค๋ฅผ ํ.
ํ๊ต ์ถ๊ทผ ์ดํ์งธ ์ค๋์ 9007๋ฒ ๋ฒ์ค์ ๋์ ํ์ ๋ฐ๋ฌ๋ ์๋ ์กฐ๊ฑด์ ์ถฉ์กฑ์ํค๊ธฐ ๋๋ฌธ์ ํ๋ฒ ํ ๋ณด๊ธฐ๋ก.
- 7ํธ์ ๋ผ์ธ์ ์ ๋ฅ์ฅ(๊ณ ์ํฐ๋ฏธ๋ ์ญ) - ๊ฒฝ๋ถ๊ณ ์๋๋ก(๋ฒ์ค ์ ์ฉ์ฐจ๋ก)๋ฅผ ์ด์ฉ - ๋ฐฐ์ฐจ ๊ฐ๊ฒฉ์ด 10๋ถ ์ ๋
์ด๋ฒ์ ์ฝ์ ์ฑ ์ '์บ๋๋ฒก์ ๊ตฌํ ํจํด'