SlideShare a Scribd company logo
1 of 53
Pinpoint
๋Œ€๊ทœ๋ชจ๋ถ„์‚ฐํ™˜๊ฒฝ์ถ”์ ํ”Œ๋žซํผ
๊ฐ•์šด๋•
2015-04-18
2
๋ฐœํ‘œ์ž
โ€ข Backend Java developer
โ€ข 2006~
โ€ข JAVA FRAMEWORK ๊ฐœ๋ฐœ/์ง€์›
โ€ข ๋น„๋™๊ธฐ JAVA ๋„คํฌ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โ€ข JAVA ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…
โ€ข Heap dump, thread dump
โ€ข Open source patch, Debugging
โ€ข Multi Thread, Concurrency
โ€ข Pinpoint Technical Leader
3
๋ฐœํ‘œ์ž
4
๋ชฉ์ฐจ
โ€ข Why
โ€ข ์†Œ๊ฐœ
โ€ข ๊ธฐ์ˆ  ๊ฐœ์š”
โ€ข ์–ด๋ ค์šด์ 
โ€ข ๋กœ๋“œ๋งต
5
Why
A long time ago. in a galaxy far, far away
6
Why
NOW
7
Why
โ€ข ์ƒํ™ฉ
โ€ข ์ˆ˜์‹ญ ์ˆ˜๋ฐฑ๋Œ€์˜ ์„œ๋ฒ„
โ€ข ๋งŽ์€ ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ
โ€ข ๋ณต์žกํ•˜๊ฒŒ ์—ฐ๋™๋œ ์„œ๋น„์Šค
โ€ข ๋ฌธ์ œ
โ€ข ์–ด๋–ป๊ฒŒ ์—ฐ๋™๋˜๊ณ  ์žˆ๋Š”์ง€ ํŒŒ์•…์•ˆ๋จ
โ€ข ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์˜ํ•ด ์žฅ์• ๊ฐ€ ๋ฐœ์ƒ
โ€ข ๊ฐœ๋ณ„ ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์œผ๋กœ๋Š” ์—ฐ๊ด€๊ด€๊ณ„ ํŒŒ์•…์ด ์•ˆ๋จ.
โ€ข ์ƒˆ๋กœ์šด ํ•ด๊ฒฐ์ฑ…์ด ํ•„์š”
8
Why
9
Why
10
Why
11
Why
12
Why
13
Why
โ€ข ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์ด ํž˜๋“ค๋‹ค.
โ€ข ์ฝ˜์†” ๋“ค์–ด๊ฐ€๊ธฐ ์‹ซ๋‹ค
โ€ข ์ˆ˜์‹ญ๊ธฐ๊ฐ€์˜ ๋กœ๊ทธ
โ€ข ํ™˜๊ฒฝ, ์˜ต์…˜
โ€ข ์ˆ˜๋งŽ์€ ์ข…๋ฅ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ + ๋‹ค์–‘ํ•œ ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โ€ข ์•ผ๊ทผํ•˜๊ธฐ ์‹ซ๋‹ค
โ€ข ์ž์‹ ์„ ์ž๋™ํ™”
โ€ข ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์‹œ ์ƒ๊ฐํ•˜๋˜ ๋ฐ”, ๊ด€์ฐฐํ•˜๋˜ ๋ทฐ๋ฅผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ๋„ ์ œ๊ณต
โ€ข ๊ธ€๋กœ ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋ ค๋‹ˆ ์–ด๋ ต๋”๋ผ
โ€ข ์ž˜๋ชป๋œ ๋ถ„์„์œผ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ์žฌ๋ฐœ
14
Why
โ€ข ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์„ ๊ณ„์† ํ•˜๋‹ค๋ณด๋‹ˆ ์•ˆ์ •ํ™”๋˜์–ด ํ• ์ผ์ด ์ค„์Œ
15
Youโ€™re Fired!!!
16
์ง„์ •ํ•œ ํ•ด๊ฒฐ์ฑ…
โ€ข http://www.hanbit.co.kr/events/eventview.html?event_id=freebook
17
์†Œ๊ฐœ
http://github.com/naver/pinpoint
โ€ข ๋ถ„์‚ฐํŠธ๋žœ์žญ์…˜ ์ถ”์ 
โ€ข ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ† ํด๋กœ์ง€ ์ž๋™ ๋ฐœ๊ฒฌ
โ€ข ์ˆ˜ํ‰ํ™•์žฅ์„ฑ
โ€ข ์ฝ”๋“œ ์ˆ˜์ค€์˜ ๊ฐ€์‹œ์„ฑ
โ€ข ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์„ฑ๋Šฅ์ •๋ณด ์ˆ˜์ง‘
18
์†Œ๊ฐœ
19
ํ’€์–ด์•ผ ํ•  ๋ฌธ์ œ
RPC ์ถ”์ ์˜ ์˜๋ฏธ
Node1๊ณผ Node2 ์‚ฌ์ด์˜ RPC๊ฐ„์˜
๊ด€๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐพ์„๊ฒƒ์ธ๊ฐ€?
๋ฉ”์‹œ์ง€๋ฅผ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” TAG
20
TAG ๋™์ž‘
โ€ข Span : RPC ์ถ”์ ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ๋‹จ์œ„. RPC๊ฐ€ ๋„์ฐฉํ–ˆ์„ ๋•Œ ์ฒ˜๋ฆฌํ•œ ์ž‘์—…
โ€ข Trace : ์—ฐ๊ด€๋œ Span์˜ ์ง‘ํ•ฉ. Span์˜ ์ง‘ํ•ฉ์€ TransactionId๊ฐ€ ๊ฐ™์Œ.
Trace๋Š” SpanId์™€ ParaentSpanID๋ฅผ ํ†ตํ•ด ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ •๋ ฌ๋จ
โ€ข TraceId
โ€ข TrasantionId๋Š” message id๋กœ ์ „์ฒด ์„œ๋ฒ„๊ตฐ์—์„œ unique ํ•œ ์•„์ด๋””
โ€ข SpanId, ParentId๋กœ message์˜ ๊ด€๊ณ„๋ฅผ ์ •๋ ฌ
21
Bytecode instrumentation
22
์„ค์น˜
โ€ข Java ์‹คํ–‰์‹œ JavaAgent ์„ค์ •์ถ”๊ฐ€
-javaagent:$PINPOINT_PATH/pinpoint-bootstrap-$VERSION.jar
-Dpinpoint.applicationName=โ€œ$AGENT_GROUP_NAMEโ€
-Dpinpoint.agentId =โ€œ$AGENT_UNIQUEUE_IDโ€
23
ํ•ต์‹ฌ๊ฐ€์น˜
โ€ข ๋ถ„์‚ฐ RPC ์ถ”์ 
โ€ข ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ
24
TomcatA
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
โ€ข Hello world! sample
25
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
26
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
27
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
28
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
29
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
30
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
31
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
โ€ข Distributed Transaction TAG
โ€ข TraceId ์ƒ์„ฑ
TRANSACTION_ID : ์ „์ฒด RPC ํ˜ธ์ถœ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์„์ˆ˜ ์žˆ๋Š” Key
SPAN_ID : ๋‚˜์˜ ID
PARENT_SPAN_ID : ๋ถ€๋ชจ์˜ ID
๋‚ด๋ถ€๋™์ž‘
32
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
โ€ข Distributed Transaction TAG
โ€ข TraceId ์ƒ์„ฑ
TRANSACTION_ID : TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1
SPAN_ID : 10 (Random)
PARENT_SPAN_ID : -1 (ROOT)
๋‚ด๋ถ€๋™์ž‘
33
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
โ€ข Distributed Transaction TAG
โ€ข Spring Controller Method ๋ ˆ์ฝ”๋”ฉ
๋‚ด๋ถ€๋™์ž‘
34
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
โ€ข Distributed Transaction TAG
โ€ข HttpClient.execute()์˜ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„์„œ HttpGet์— TRACE_ID๋ฅผ ์„ธํŒ…ํ•œ๋‹ค.
โ€ข Child TraceId ์ƒ์„ฑ
TRANSACTION_ID : TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1 -> TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1
SPAN_ID : 10 -> 20
PARENT_SPAN_ID : -1 -> 10
โ€ข Child TraceId ๋ฅผ HttpGet์— ์„ธํŒ…
HttpGet.setHeader(PINPOINT_TRANSACTION_ID, โ€œTomcatA^์‹œ์ž‘์‹œ๊ฐ„^1โ€)
HttpGet.setHeader(PINPOINT_SPAN_ID, โ€œ20โ€)
HttpGet.setHeader(PINPOINT_PARENT_SPAN_ID, โ€œ10โ€)
๋‚ด๋ถ€๋™์ž‘
35
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
โ€ข Distributed Transaction TAG
โ€ข TAG๋œ Request๋ฅผ TomcatB๋กœ ์ „์†ก.
Tag
Request
๋‚ด๋ถ€๋™์ž‘
36
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
โ€ข Distributed Transaction TAG
โ€ข TomcatB accept
Check Header : HttpServletRequest.getHeader(PINPOINT_TRANSACTION_ID)
โ€ข Header์—์„œ TraceId ๋ฅผ ์ธ์‹ํ•˜์—ฌ Child๋กœ ๋™์ž‘
TRANSACTION_ID : TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1
SPAN_ID : 20
PARENT_SPAN_ID : 10
Tag
Request
๋‚ด๋ถ€๋™์ž‘
37
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
โ€ข Distributed Transaction TAG
HBase
TRANSACTION_ID : TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1
SPAN_ID : 20
PARENT_SPAN_ID : 10
Collector
RowKey
TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1
20
10
Hello() ํ˜ธ์ถœ์ •๋ณด
TraceData
๋‚ด๋ถ€๋™์ž‘
38
TomcatA
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public String test() throws IOException {
HttpGet get = new HttpGet("http://TomcatB/hello");
HttpResponse response = httpClient.execute(get);
return EntityUtils.toString(response.getEntity());
}
}
TomcatB
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "world!";
}
}
โ€ข Distributed Transaction TAG
HBase
TRANSACTION_ID : TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1
SPAN_ID : 10
PARENT_SPAN_ID : -1
Collector
RowKey
TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1
20 10
10
Hello() ํ˜ธ์ถœ์ •๋ณด
-1
Test() ํ˜ธ์ถœ์ •๋ณด
TraceData
๋‚ด๋ถ€๋™์ž‘
39
RowKey
TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1
20 10
10
Hello() ํ˜ธ์ถœ์ •๋ณด
-1
Test() ํ˜ธ์ถœ์ •๋ณด
HBase
UI
๋‚ด๋ถ€๋™์ž‘
40
ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…
โ€ข ์ธํ”„๋ผ์˜ ๊ฐ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ
๊ตฌ์ถ•์ด ๋˜์—ˆ๋Š”๊ฐ€?
โ€ข ํ•ด์™ธProxy์—์„œ ํ•œ๊ตญ์˜ ํŠน์ • ์„œ๋ฒ„๋กœ
์‚ฌ์šฉ์ž ์š”์ฒญ์˜ ํ๋ฆ„์ด ๊ธฐ๋Œ€ํ•œ ๋Œ€๋กœ ์ธ๊ฐ€?
โ€ข ์‘๋‹ต์‹œ๊ฐ„์ด ๋Š๋ฆฐ ๊ตฌ๊ฐ„๊ณผ API๊ฐ€ ์žˆ๋Š”๊ฐ€?
โ€ข ๋Š๋ฆฐ ๊ตฌ๊ฐ„์— ๋Œ€ํ•œ ํ”„๋กœํŒŒ์ผ๋ง ๋ฐ์ดํƒ€ ์ œ๊ณต
โ€ข ์„ฑ๋Šฅ ํŒจํ„ด ๋ฐ์ดํƒ€ ์ œ๊ณต
โ€ข ๊ฐœ๋ฐœ->QA->์šด์˜๋‹จ๊ณ„์—์„œ์˜ ์—ฐ์†์ ์ธ ํ™•์ธ
41
์–ด๋ ค์šด์ 
42
WARNING
โ€ข HBase๋„ ์ฃฝ๊ณ 
โ€ข HBASE-7711 https://issues.apache.org/jira/browse/HBASE-7711
โ€ข Hadoop ๋ฌดํ•œ๋ฃจํ”„๊นŒ์ง€
โ€ข HDFS-5225 https://issues.apache.org/jira/browse/HDFS-5225
โ€ข HBase, Hadoop ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์žฌ์‹œ์ž‘ํ•ด๋„ ํšŒ๋ณต์ด ์•ˆ๋จ
43
WARNING
44
WARNING
โ€ข ๊ฐ€๋Šฅํ•œ ์ตœ์‹  ๋ฒ„์ „์„ Hadoop ํŒจ๋ฐ€๋ฆฌ ์‚ฌ์šฉ
โ€ข ๊ด€๋ฆฌ๋˜๋Š” Cloudera(CDH), Hortonworks(HDP) ๊ถŒ์žฅ
โ€ข Pinpoint๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์€ Java ๊ฐœ๋ฐœ์ž
โ€ข ๊ฒธ์‚ฌ๊ฒธ์‚ฌ HBase, Hadoop๋„ ์‚ดํŽด๋ณด๊ณ , ๊ธฐ์™•์ด๋ฉด ์†Œ์Šค๋„ ๊นŒ๋ณด์ž
โ€ข ์‚ฌ์‹ค ์ €๋„ ๋‹ค ๋ชจ๋ฆ…๋‹ˆ๋‹ค.
- ๋ญ๋“ ์ง€ ์•„๋Š”๊ฑด ์•„๋‹ˆ์•ผ. ์•Œ๊ณ  ์žˆ๋Š”๊ฒƒ๋งŒ ์•Œ๋ฟ
45
WARNING
ํ˜น์‹œ ์•„๋‚˜์š”?
HBase, Hadoop, Zookeeper์˜ ์ „๋ฌธ๊ฐ€๊ฐ€ ๋ ์ง€
๋งํ• ๊ฑฐ ๊ฐ™์ง€๋Š” ์•Š์ž–์•„์š”
๊ฐœ์ธ์˜ ๋…ธ๋ ฅ์„ ํˆฌ์žํ•ด ๋ด…์‹œ๋‹ค
46
WARNING
์ง€๊ธˆ ์—ฌ๋Ÿฌ๋ถ„์ด ์ „๋ฌธ๊ฐ€๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์ง€ ์•Š์„๊นŒ์š”?
47
WARNING
์‚ฌ์‹ค ๊ทธ๊ฑธ ๋…ธ๋ฆฌ๊ณ  ์„ ํƒํ•œ Backend์ž…๋‹ˆ๋‹ค.
48
๋‹คํ–‰์ธ ์ 
โ€ข ์„ค๊ณ„ ์‚ฌ์ƒ
โ€ข Pinpoint์˜ backend๊ฐ€ ์ฃฝ์–ด๋„ Application์€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด
์•ˆ๋œ๋‹ค.
โ€ข Collector
โ€ข HBase
โ€ข Hadoop
โ€ข ์ตœ์šฐ์„  ์ˆœ์œ„๋Š” ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ์ˆ˜์ง‘ X
โ€ข Application์ด ์ •์ƒ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๋Š”๊ฒŒ ์ตœ์šฐ์„ 
49
๋‹คํ–‰์ธ ์ 
โ€ข ๋ญ๋“  ๊ทธ๋ ‡์ง€๋งŒ ๋ง๋กœ๋Š” ๋‹ค ๋จ
โ€ข ํฐ์†Œ๋ฆฌ ๋•…๋•…~~
โ€œ์•„! ๊ฑฑ์ •๋งˆ์‹œ๋ผ๊น์š”. ์ €๋ฅผ ๋ฏฟ์œผ์…ˆ.
๋ชจ๋“ ๊ฑด ๊ณ„ํš๋Œ€๋กœ~โ€
50
๋‹คํ–‰์ธ ์ 
51
๋‹คํ–‰์ธ ์ 
โ€ข ๊ฒ€์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
โ€ข ์ง์ ‘ ์ฒดํ—˜
โ€ข ํ•œ๊ณ„๋Š” ๋ถ„๋ช…. ๋ฒ„๊ทธ๋Š” ์ปค๋ฒ„ ๋ถˆ๊ฐ€๋Šฅ
โ€ข ๊ฐœ๋ฐœ์—์„œ ๊ฒ€์ฆ -> ์šด์˜
โ€ข ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์‹ ๊ณ ํ•ด์ฃผ์„ธ์š”. ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
โ€ข ๋ฒ„๊ทธ๋Š” ๊ณ„ํš์— ์—†์—ˆ๋˜ ์ผ
52
๋กœ๋“œ๋งต
โ€ข ์•Œ๋žŒ / Admin
โ€ข ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ
โ€ข EndUser ๋ชจ๋‹ˆํ„ฐ๋ง
โ€ข ์ง€์›๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€
โ€ข ๊ฐœ๋ฐœ๊ฐ€์ด๋“œ
โ€ข D2 Open Seminar (Java์„ฑ๋Šฅ + Pinpoint) 5์›”?
53
๋
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
http://github.com/naver/pinpoint
http://helloworld.naver.com/helloworld
/1194202

More Related Content

What's hot

JBoss RHQ์™€ Byteman์„ ์ด์šฉํ•œ ์˜คํ”ˆ์†Œ์Šค ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง
JBoss RHQ์™€ Byteman์„ ์ด์šฉํ•œ ์˜คํ”ˆ์†Œ์Šค ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‹ˆํ„ฐ๋งJBoss RHQ์™€ Byteman์„ ์ด์šฉํ•œ ์˜คํ”ˆ์†Œ์Šค ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง
JBoss RHQ์™€ Byteman์„ ์ด์šฉํ•œ ์˜คํ”ˆ์†Œ์Šค ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‹ˆํ„ฐ๋งTed Won
ย 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuatorChoonghyun Yang
ย 
์Šคํ”„๋ง๊ตฐ์‚ด์—†์ด์„ธํŒ…ํ•˜๊ธฐ(The way to setting the Spring framework for web.)
์Šคํ”„๋ง๊ตฐ์‚ด์—†์ด์„ธํŒ…ํ•˜๊ธฐ(The way to setting the Spring framework for web.)์Šคํ”„๋ง๊ตฐ์‚ด์—†์ด์„ธํŒ…ํ•˜๊ธฐ(The way to setting the Spring framework for web.)
์Šคํ”„๋ง๊ตฐ์‚ด์—†์ด์„ธํŒ…ํ•˜๊ธฐ(The way to setting the Spring framework for web.)EunChul Shin
ย 
Opensource APM SCOUTER in practice
Opensource APM SCOUTER in practiceOpensource APM SCOUTER in practice
Opensource APM SCOUTER in practiceGunHee Lee
ย 
แ„แ…ฉแ†ทแ„แ…ขแ†บ #11-แ„แ…ตแ†ธ
แ„แ…ฉแ†ทแ„แ…ขแ†บ #11-แ„แ…ตแ†ธแ„แ…ฉแ†ทแ„แ…ขแ†บ #11-แ„แ…ตแ†ธ
แ„แ…ฉแ†ทแ„แ…ขแ†บ #11-แ„แ…ตแ†ธGyuSeok Lee
ย 
Html5 performance
Html5 performanceHtml5 performance
Html5 performanceyongwoo Jeon
ย 
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]์Šค์นด์šฐํ„ฐ์—‘์Šค ์†Œ๊ฐœ
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]์Šค์นด์šฐํ„ฐ์—‘์Šค ์†Œ๊ฐœ[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]์Šค์นด์šฐํ„ฐ์—‘์Šค ์†Œ๊ฐœ
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]์Šค์นด์šฐํ„ฐ์—‘์Šค ์†Œ๊ฐœOpen Source Consulting
ย 
แ„แ…ฉแ†ทแ„แ…ขแ†บ #10-แ„†แ…ฉแ„‚แ…ตแ„แ…ฅแ„…แ…ตแ†ผ
แ„แ…ฉแ†ทแ„แ…ขแ†บ #10-แ„†แ…ฉแ„‚แ…ตแ„แ…ฅแ„…แ…ตแ†ผแ„แ…ฉแ†ทแ„แ…ขแ†บ #10-แ„†แ…ฉแ„‚แ…ตแ„แ…ฅแ„…แ…ตแ†ผ
แ„แ…ฉแ†ทแ„แ…ขแ†บ #10-แ„†แ…ฉแ„‚แ…ตแ„แ…ฅแ„…แ…ตแ†ผGyuSeok Lee
ย 
[Hello world ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]open api client๊ฐœ๋ฐœ
[Hello world ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]open api client๊ฐœ๋ฐœ[Hello world ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]open api client๊ฐœ๋ฐœ
[Hello world ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]open api client๊ฐœ๋ฐœNAVER D2
ย 
Tomcat ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„์ „ํ•˜๊ธฐ (Jins Choi)
Tomcat ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„์ „ํ•˜๊ธฐ (Jins Choi)Tomcat ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„์ „ํ•˜๊ธฐ (Jins Choi)
Tomcat ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„์ „ํ•˜๊ธฐ (Jins Choi)์‚ต (sarc.io)
ย 
์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ํ–ฅํ•œ ์—ฌ์ •
์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ํ–ฅํ•œ ์—ฌ์ •์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ํ–ฅํ•œ ์—ฌ์ •
์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ํ–ฅํ•œ ์—ฌ์ •Arawn Park
ย 
๋‹คํ•จ๊ป˜, FluxUtils ํ•œ๋ฐ”ํ€ด!
๋‹คํ•จ๊ป˜, FluxUtils ํ•œ๋ฐ”ํ€ด!๋‹คํ•จ๊ป˜, FluxUtils ํ•œ๋ฐ”ํ€ด!
๋‹คํ•จ๊ป˜, FluxUtils ํ•œ๋ฐ”ํ€ด!์šฐ์˜ ์ฃผ
ย 
Open source APM Scouter๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ์ž˜ ํ•˜๊ธฐ
Open source APM Scouter๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ์ž˜ ํ•˜๊ธฐOpen source APM Scouter๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ์ž˜ ํ•˜๊ธฐ
Open source APM Scouter๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ์ž˜ ํ•˜๊ธฐGunHee Lee
ย 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot introJae-il Lee
ย 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DIHyosang Hong
ย 
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Java Performance Tuning
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Java Performance Tuning[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Java Performance Tuning
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Java Performance TuningJi-Woong Choi
ย 
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Spring MVC
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Spring MVC [์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Spring MVC
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Spring MVC Ji-Woong Choi
ย 
แ„แ…ฉแ†ทแ„แ…ขแ†บ #08-แ„‹แ…ฐแ†ธแ„‰แ…ฅแ„‡แ…ฅ แ„‹แ…งแ†ซแ„ƒแ…ฉแ†ผ
แ„แ…ฉแ†ทแ„แ…ขแ†บ #08-แ„‹แ…ฐแ†ธแ„‰แ…ฅแ„‡แ…ฅ แ„‹แ…งแ†ซแ„ƒแ…ฉแ†ผแ„แ…ฉแ†ทแ„แ…ขแ†บ #08-แ„‹แ…ฐแ†ธแ„‰แ…ฅแ„‡แ…ฅ แ„‹แ…งแ†ซแ„ƒแ…ฉแ†ผ
แ„แ…ฉแ†ทแ„แ…ขแ†บ #08-แ„‹แ…ฐแ†ธแ„‰แ…ฅแ„‡แ…ฅ แ„‹แ…งแ†ซแ„ƒแ…ฉแ†ผGyuSeok Lee
ย 
JSP ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ
JSP ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐJSP ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ
JSP ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐPark JoongSoo
ย 
แ„แ…ฉแ†ทแ„แ…ขแ†บ #01-แ„‰แ…ฉแ„€แ…ข
แ„แ…ฉแ†ทแ„แ…ขแ†บ #01-แ„‰แ…ฉแ„€แ…ขแ„แ…ฉแ†ทแ„แ…ขแ†บ #01-แ„‰แ…ฉแ„€แ…ข
แ„แ…ฉแ†ทแ„แ…ขแ†บ #01-แ„‰แ…ฉแ„€แ…ขGyuSeok Lee
ย 

What's hot (20)

JBoss RHQ์™€ Byteman์„ ์ด์šฉํ•œ ์˜คํ”ˆ์†Œ์Šค ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง
JBoss RHQ์™€ Byteman์„ ์ด์šฉํ•œ ์˜คํ”ˆ์†Œ์Šค ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‹ˆํ„ฐ๋งJBoss RHQ์™€ Byteman์„ ์ด์šฉํ•œ ์˜คํ”ˆ์†Œ์Šค ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง
JBoss RHQ์™€ Byteman์„ ์ด์šฉํ•œ ์˜คํ”ˆ์†Œ์Šค ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง
ย 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
ย 
์Šคํ”„๋ง๊ตฐ์‚ด์—†์ด์„ธํŒ…ํ•˜๊ธฐ(The way to setting the Spring framework for web.)
์Šคํ”„๋ง๊ตฐ์‚ด์—†์ด์„ธํŒ…ํ•˜๊ธฐ(The way to setting the Spring framework for web.)์Šคํ”„๋ง๊ตฐ์‚ด์—†์ด์„ธํŒ…ํ•˜๊ธฐ(The way to setting the Spring framework for web.)
์Šคํ”„๋ง๊ตฐ์‚ด์—†์ด์„ธํŒ…ํ•˜๊ธฐ(The way to setting the Spring framework for web.)
ย 
Opensource APM SCOUTER in practice
Opensource APM SCOUTER in practiceOpensource APM SCOUTER in practice
Opensource APM SCOUTER in practice
ย 
แ„แ…ฉแ†ทแ„แ…ขแ†บ #11-แ„แ…ตแ†ธ
แ„แ…ฉแ†ทแ„แ…ขแ†บ #11-แ„แ…ตแ†ธแ„แ…ฉแ†ทแ„แ…ขแ†บ #11-แ„แ…ตแ†ธ
แ„แ…ฉแ†ทแ„แ…ขแ†บ #11-แ„แ…ตแ†ธ
ย 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
ย 
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]์Šค์นด์šฐํ„ฐ์—‘์Šค ์†Œ๊ฐœ
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]์Šค์นด์šฐํ„ฐ์—‘์Šค ์†Œ๊ฐœ[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]์Šค์นด์šฐํ„ฐ์—‘์Šค ์†Œ๊ฐœ
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]์Šค์นด์šฐํ„ฐ์—‘์Šค ์†Œ๊ฐœ
ย 
แ„แ…ฉแ†ทแ„แ…ขแ†บ #10-แ„†แ…ฉแ„‚แ…ตแ„แ…ฅแ„…แ…ตแ†ผ
แ„แ…ฉแ†ทแ„แ…ขแ†บ #10-แ„†แ…ฉแ„‚แ…ตแ„แ…ฅแ„…แ…ตแ†ผแ„แ…ฉแ†ทแ„แ…ขแ†บ #10-แ„†แ…ฉแ„‚แ…ตแ„แ…ฅแ„…แ…ตแ†ผ
แ„แ…ฉแ†ทแ„แ…ขแ†บ #10-แ„†แ…ฉแ„‚แ…ตแ„แ…ฅแ„…แ…ตแ†ผ
ย 
[Hello world ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]open api client๊ฐœ๋ฐœ
[Hello world ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]open api client๊ฐœ๋ฐœ[Hello world ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]open api client๊ฐœ๋ฐœ
[Hello world ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]open api client๊ฐœ๋ฐœ
ย 
Tomcat ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„์ „ํ•˜๊ธฐ (Jins Choi)
Tomcat ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„์ „ํ•˜๊ธฐ (Jins Choi)Tomcat ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„์ „ํ•˜๊ธฐ (Jins Choi)
Tomcat ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„์ „ํ•˜๊ธฐ (Jins Choi)
ย 
์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ํ–ฅํ•œ ์—ฌ์ •
์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ํ–ฅํ•œ ์—ฌ์ •์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ํ–ฅํ•œ ์—ฌ์ •
์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ํ–ฅํ•œ ์—ฌ์ •
ย 
๋‹คํ•จ๊ป˜, FluxUtils ํ•œ๋ฐ”ํ€ด!
๋‹คํ•จ๊ป˜, FluxUtils ํ•œ๋ฐ”ํ€ด!๋‹คํ•จ๊ป˜, FluxUtils ํ•œ๋ฐ”ํ€ด!
๋‹คํ•จ๊ป˜, FluxUtils ํ•œ๋ฐ”ํ€ด!
ย 
Open source APM Scouter๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ์ž˜ ํ•˜๊ธฐ
Open source APM Scouter๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ์ž˜ ํ•˜๊ธฐOpen source APM Scouter๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ์ž˜ ํ•˜๊ธฐ
Open source APM Scouter๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ์ž˜ ํ•˜๊ธฐ
ย 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot intro
ย 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
ย 
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Java Performance Tuning
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Java Performance Tuning[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Java Performance Tuning
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Java Performance Tuning
ย 
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Spring MVC
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Spring MVC [์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Spring MVC
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Spring MVC
ย 
แ„แ…ฉแ†ทแ„แ…ขแ†บ #08-แ„‹แ…ฐแ†ธแ„‰แ…ฅแ„‡แ…ฅ แ„‹แ…งแ†ซแ„ƒแ…ฉแ†ผ
แ„แ…ฉแ†ทแ„แ…ขแ†บ #08-แ„‹แ…ฐแ†ธแ„‰แ…ฅแ„‡แ…ฅ แ„‹แ…งแ†ซแ„ƒแ…ฉแ†ผแ„แ…ฉแ†ทแ„แ…ขแ†บ #08-แ„‹แ…ฐแ†ธแ„‰แ…ฅแ„‡แ…ฅ แ„‹แ…งแ†ซแ„ƒแ…ฉแ†ผ
แ„แ…ฉแ†ทแ„แ…ขแ†บ #08-แ„‹แ…ฐแ†ธแ„‰แ…ฅแ„‡แ…ฅ แ„‹แ…งแ†ซแ„ƒแ…ฉแ†ผ
ย 
JSP ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ
JSP ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐJSP ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ
JSP ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ
ย 
แ„แ…ฉแ†ทแ„แ…ขแ†บ #01-แ„‰แ…ฉแ„€แ…ข
แ„แ…ฉแ†ทแ„แ…ขแ†บ #01-แ„‰แ…ฉแ„€แ…ขแ„แ…ฉแ†ทแ„แ…ขแ†บ #01-แ„‰แ…ฉแ„€แ…ข
แ„แ…ฉแ†ทแ„แ…ขแ†บ #01-แ„‰แ…ฉแ„€แ…ข
ย 

Viewers also liked

Springcamp 2015 - xss๋Š” ๋„ค๊ฐ€ ๋งก์•„๋ผ
Springcamp 2015 - xss๋Š” ๋„ค๊ฐ€ ๋งก์•„๋ผSpringcamp 2015 - xss๋Š” ๋„ค๊ฐ€ ๋งก์•„๋ผ
Springcamp 2015 - xss๋Š” ๋„ค๊ฐ€ ๋งก์•„๋ผHyeong-Kyu Lee
ย 
แ„‚แ…ขแ„€แ…กแ„Šแ…ฅแ„‡แ…ฉแ†ซ nGrinder-SpringCamp 2015
แ„‚แ…ขแ„€แ…กแ„Šแ…ฅแ„‡แ…ฉแ†ซ nGrinder-SpringCamp 2015แ„‚แ…ขแ„€แ…กแ„Šแ…ฅแ„‡แ…ฉแ†ซ nGrinder-SpringCamp 2015
แ„‚แ…ขแ„€แ…กแ„Šแ…ฅแ„‡แ…ฉแ†ซ nGrinder-SpringCamp 2015Lim SungHyun
ย 
Pinpoint ๋„์ž…๊ธฐ - 2016 ์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜คํ”ˆ ์„ธ๋ฏธ๋‚˜
Pinpoint ๋„์ž…๊ธฐ - 2016 ์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜คํ”ˆ ์„ธ๋ฏธ๋‚˜Pinpoint ๋„์ž…๊ธฐ - 2016 ์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜คํ”ˆ ์„ธ๋ฏธ๋‚˜
Pinpoint ๋„์ž…๊ธฐ - 2016 ์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜คํ”ˆ ์„ธ๋ฏธ๋‚˜none
ย 
SpringCamp 2014 : ๋ฏธ๊ตญ์ธ์—๊ฒŒ ์˜์–ด ํ”„๋ฆฌ์  ํ…Œ์ด์…˜์„ ํ•ด๋ดค์–ด์š”
SpringCamp 2014 : ๋ฏธ๊ตญ์ธ์—๊ฒŒ ์˜์–ด ํ”„๋ฆฌ์  ํ…Œ์ด์…˜์„ ํ•ด๋ดค์–ด์š”SpringCamp 2014 : ๋ฏธ๊ตญ์ธ์—๊ฒŒ ์˜์–ด ํ”„๋ฆฌ์  ํ…Œ์ด์…˜์„ ํ•ด๋ดค์–ด์š”
SpringCamp 2014 : ๋ฏธ๊ตญ์ธ์—๊ฒŒ ์˜์–ด ํ”„๋ฆฌ์  ํ…Œ์ด์…˜์„ ํ•ด๋ดค์–ด์š”YongSik Jeong
ย 
TOAST Meetup2015 - TOAST Cloud XaaS framework architecture (๋ฌธ์ง€์‘)
TOAST Meetup2015 - TOAST Cloud XaaS framework architecture (๋ฌธ์ง€์‘)TOAST Meetup2015 - TOAST Cloud XaaS framework architecture (๋ฌธ์ง€์‘)
TOAST Meetup2015 - TOAST Cloud XaaS framework architecture (๋ฌธ์ง€์‘)TOAST_NHNent
ย 
์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ๋ชจ์ž„_๊ฐœ๋ฐœํ”„๋กœ์„ธ์Šค๊ฐœ์„ ๊ธฐ
์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ๋ชจ์ž„_๊ฐœ๋ฐœํ”„๋กœ์„ธ์Šค๊ฐœ์„ ๊ธฐ์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ๋ชจ์ž„_๊ฐœ๋ฐœํ”„๋กœ์„ธ์Šค๊ฐœ์„ ๊ธฐ
์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ๋ชจ์ž„_๊ฐœ๋ฐœํ”„๋กœ์„ธ์Šค๊ฐœ์„ ๊ธฐnone
ย 
[D2 fest 2014]yobi hands on lab
[D2 fest 2014]yobi hands on lab[D2 fest 2014]yobi hands on lab
[D2 fest 2014]yobi hands on labNAVER D2
ย 
Spring camp แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญ
Spring camp แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญSpring camp แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญ
Spring camp แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญ์ˆ˜ํ™ ์ด
ย 
์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - ํด๋กœ์ € ๊ฐœ๋ฐœํŒ€์„ ์œ„ํ•œ ์ง€์†์ ์ธ ํ†ตํ•ฉ
์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - ํด๋กœ์ € ๊ฐœ๋ฐœํŒ€์„ ์œ„ํ•œ ์ง€์†์ ์ธ ํ†ตํ•ฉ์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - ํด๋กœ์ € ๊ฐœ๋ฐœํŒ€์„ ์œ„ํ•œ ์ง€์†์ ์ธ ํ†ตํ•ฉ
์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - ํด๋กœ์ € ๊ฐœ๋ฐœํŒ€์„ ์œ„ํ•œ ์ง€์†์ ์ธ ํ†ตํ•ฉNAVER D2
ย 
์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - Graphics Programming in Clojure
์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - Graphics Programming in Clojure์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - Graphics Programming in Clojure
์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - Graphics Programming in ClojureNAVER D2
ย 
์Šคํ”„๋ง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฌธ์ œํ•ด๊ฒฐ์‚ฌ๋ก€์™€ ์•ˆํ‹ฐํŒจํ„ด
์Šคํ”„๋ง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฌธ์ œํ•ด๊ฒฐ์‚ฌ๋ก€์™€ ์•ˆํ‹ฐํŒจํ„ด์Šคํ”„๋ง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฌธ์ œํ•ด๊ฒฐ์‚ฌ๋ก€์™€ ์•ˆํ‹ฐํŒจํ„ด
์Šคํ”„๋ง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฌธ์ œํ•ด๊ฒฐ์‚ฌ๋ก€์™€ ์•ˆํ‹ฐํŒจํ„ดSanghyuk Jung
ย 
core.logic (Clojure)
core.logic (Clojure)core.logic (Clojure)
core.logic (Clojure)Seonho Kim
ย 
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
[D2 COMMUNITY] Open Container Seoul Meetup - Docker securityNAVER D2
ย 
[D2 CAMPUS] 2016 ํ•œ์–‘๋Œ€ํ•™๊ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
[D2 CAMPUS] 2016 ํ•œ์–‘๋Œ€ํ•™๊ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ[D2 CAMPUS] 2016 ํ•œ์–‘๋Œ€ํ•™๊ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
[D2 CAMPUS] 2016 ํ•œ์–‘๋Œ€ํ•™๊ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œNAVER D2
ย 
W3C Automotive ํ‘œ์ค€ ๊ฐœ๋ฐœ ํ˜„ํ™ฉ
W3C Automotive ํ‘œ์ค€ ๊ฐœ๋ฐœ ํ˜„ํ™ฉW3C Automotive ํ‘œ์ค€ ๊ฐœ๋ฐœ ํ˜„ํ™ฉ
W3C Automotive ํ‘œ์ค€ ๊ฐœ๋ฐœ ํ˜„ํ™ฉWonsuk Lee
ย 
[D2 CAMPUS] ์ˆญ์‹ค๋Œ€ SCCC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
[D2 CAMPUS] ์ˆญ์‹ค๋Œ€ SCCC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ[D2 CAMPUS] ์ˆญ์‹ค๋Œ€ SCCC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
[D2 CAMPUS] ์ˆญ์‹ค๋Œ€ SCCC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œNAVER D2
ย 
[ํ•˜์ฝ”์‚ฌ์„ธ๋ฏธ๋‚˜]๋ฏธ๋ฆฌ๋ณด๋Š” ๋Œ€๊ทœ๋ชจ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ
[ํ•˜์ฝ”์‚ฌ์„ธ๋ฏธ๋‚˜]๋ฏธ๋ฆฌ๋ณด๋Š” ๋Œ€๊ทœ๋ชจ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ[ํ•˜์ฝ”์‚ฌ์„ธ๋ฏธ๋‚˜]๋ฏธ๋ฆฌ๋ณด๋Š” ๋Œ€๊ทœ๋ชจ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ
[ํ•˜์ฝ”์‚ฌ์„ธ๋ฏธ๋‚˜]๋ฏธ๋ฆฌ๋ณด๋Š” ๋Œ€๊ทœ๋ชจ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ •์„ ์–‘
ย 
[D2 CAMPUS] ๋ถ€์‚ฐ๋Œ€ Alcall ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
[D2 CAMPUS] ๋ถ€์‚ฐ๋Œ€ Alcall ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ[D2 CAMPUS] ๋ถ€์‚ฐ๋Œ€ Alcall ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
[D2 CAMPUS] ๋ถ€์‚ฐ๋Œ€ Alcall ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œNAVER D2
ย 

Viewers also liked (20)

Springcamp 2015 - xss๋Š” ๋„ค๊ฐ€ ๋งก์•„๋ผ
Springcamp 2015 - xss๋Š” ๋„ค๊ฐ€ ๋งก์•„๋ผSpringcamp 2015 - xss๋Š” ๋„ค๊ฐ€ ๋งก์•„๋ผ
Springcamp 2015 - xss๋Š” ๋„ค๊ฐ€ ๋งก์•„๋ผ
ย 
แ„‚แ…ขแ„€แ…กแ„Šแ…ฅแ„‡แ…ฉแ†ซ nGrinder-SpringCamp 2015
แ„‚แ…ขแ„€แ…กแ„Šแ…ฅแ„‡แ…ฉแ†ซ nGrinder-SpringCamp 2015แ„‚แ…ขแ„€แ…กแ„Šแ…ฅแ„‡แ…ฉแ†ซ nGrinder-SpringCamp 2015
แ„‚แ…ขแ„€แ…กแ„Šแ…ฅแ„‡แ…ฉแ†ซ nGrinder-SpringCamp 2015
ย 
REST
RESTREST
REST
ย 
Pinpoint ๋„์ž…๊ธฐ - 2016 ์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜คํ”ˆ ์„ธ๋ฏธ๋‚˜
Pinpoint ๋„์ž…๊ธฐ - 2016 ์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜คํ”ˆ ์„ธ๋ฏธ๋‚˜Pinpoint ๋„์ž…๊ธฐ - 2016 ์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜คํ”ˆ ์„ธ๋ฏธ๋‚˜
Pinpoint ๋„์ž…๊ธฐ - 2016 ์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜คํ”ˆ ์„ธ๋ฏธ๋‚˜
ย 
SpringCamp 2014 : ๋ฏธ๊ตญ์ธ์—๊ฒŒ ์˜์–ด ํ”„๋ฆฌ์  ํ…Œ์ด์…˜์„ ํ•ด๋ดค์–ด์š”
SpringCamp 2014 : ๋ฏธ๊ตญ์ธ์—๊ฒŒ ์˜์–ด ํ”„๋ฆฌ์  ํ…Œ์ด์…˜์„ ํ•ด๋ดค์–ด์š”SpringCamp 2014 : ๋ฏธ๊ตญ์ธ์—๊ฒŒ ์˜์–ด ํ”„๋ฆฌ์  ํ…Œ์ด์…˜์„ ํ•ด๋ดค์–ด์š”
SpringCamp 2014 : ๋ฏธ๊ตญ์ธ์—๊ฒŒ ์˜์–ด ํ”„๋ฆฌ์  ํ…Œ์ด์…˜์„ ํ•ด๋ดค์–ด์š”
ย 
TOAST Meetup2015 - TOAST Cloud XaaS framework architecture (๋ฌธ์ง€์‘)
TOAST Meetup2015 - TOAST Cloud XaaS framework architecture (๋ฌธ์ง€์‘)TOAST Meetup2015 - TOAST Cloud XaaS framework architecture (๋ฌธ์ง€์‘)
TOAST Meetup2015 - TOAST Cloud XaaS framework architecture (๋ฌธ์ง€์‘)
ย 
์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ๋ชจ์ž„_๊ฐœ๋ฐœํ”„๋กœ์„ธ์Šค๊ฐœ์„ ๊ธฐ
์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ๋ชจ์ž„_๊ฐœ๋ฐœํ”„๋กœ์„ธ์Šค๊ฐœ์„ ๊ธฐ์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ๋ชจ์ž„_๊ฐœ๋ฐœํ”„๋กœ์„ธ์Šค๊ฐœ์„ ๊ธฐ
์‹ ๋ฆผํ”„๋กœ๊ทธ๋ž˜๋จธ๋ชจ์ž„_๊ฐœ๋ฐœํ”„๋กœ์„ธ์Šค๊ฐœ์„ ๊ธฐ
ย 
[D2 fest 2014]yobi hands on lab
[D2 fest 2014]yobi hands on lab[D2 fest 2014]yobi hands on lab
[D2 fest 2014]yobi hands on lab
ย 
Spring camp แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญ
Spring camp แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญSpring camp แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญ
Spring camp แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญ
ย 
Re frame
Re frameRe frame
Re frame
ย 
์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - ํด๋กœ์ € ๊ฐœ๋ฐœํŒ€์„ ์œ„ํ•œ ์ง€์†์ ์ธ ํ†ตํ•ฉ
์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - ํด๋กœ์ € ๊ฐœ๋ฐœํŒ€์„ ์œ„ํ•œ ์ง€์†์ ์ธ ํ†ตํ•ฉ์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - ํด๋กœ์ € ๊ฐœ๋ฐœํŒ€์„ ์œ„ํ•œ ์ง€์†์ ์ธ ํ†ตํ•ฉ
์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - ํด๋กœ์ € ๊ฐœ๋ฐœํŒ€์„ ์œ„ํ•œ ์ง€์†์ ์ธ ํ†ตํ•ฉ
ย 
์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - Graphics Programming in Clojure
์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - Graphics Programming in Clojure์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - Graphics Programming in Clojure
์ œ 5ํšŒ Lisp ์„ธ๋ฏธ๋‚˜ - Graphics Programming in Clojure
ย 
์Šคํ”„๋ง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฌธ์ œํ•ด๊ฒฐ์‚ฌ๋ก€์™€ ์•ˆํ‹ฐํŒจํ„ด
์Šคํ”„๋ง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฌธ์ œํ•ด๊ฒฐ์‚ฌ๋ก€์™€ ์•ˆํ‹ฐํŒจํ„ด์Šคํ”„๋ง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฌธ์ œํ•ด๊ฒฐ์‚ฌ๋ก€์™€ ์•ˆํ‹ฐํŒจํ„ด
์Šคํ”„๋ง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฌธ์ œํ•ด๊ฒฐ์‚ฌ๋ก€์™€ ์•ˆํ‹ฐํŒจํ„ด
ย 
core.logic (Clojure)
core.logic (Clojure)core.logic (Clojure)
core.logic (Clojure)
ย 
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
ย 
[D2 CAMPUS] 2016 ํ•œ์–‘๋Œ€ํ•™๊ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
[D2 CAMPUS] 2016 ํ•œ์–‘๋Œ€ํ•™๊ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ[D2 CAMPUS] 2016 ํ•œ์–‘๋Œ€ํ•™๊ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
[D2 CAMPUS] 2016 ํ•œ์–‘๋Œ€ํ•™๊ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
ย 
W3C Automotive ํ‘œ์ค€ ๊ฐœ๋ฐœ ํ˜„ํ™ฉ
W3C Automotive ํ‘œ์ค€ ๊ฐœ๋ฐœ ํ˜„ํ™ฉW3C Automotive ํ‘œ์ค€ ๊ฐœ๋ฐœ ํ˜„ํ™ฉ
W3C Automotive ํ‘œ์ค€ ๊ฐœ๋ฐœ ํ˜„ํ™ฉ
ย 
[D2 CAMPUS] ์ˆญ์‹ค๋Œ€ SCCC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
[D2 CAMPUS] ์ˆญ์‹ค๋Œ€ SCCC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ[D2 CAMPUS] ์ˆญ์‹ค๋Œ€ SCCC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
[D2 CAMPUS] ์ˆญ์‹ค๋Œ€ SCCC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
ย 
[ํ•˜์ฝ”์‚ฌ์„ธ๋ฏธ๋‚˜]๋ฏธ๋ฆฌ๋ณด๋Š” ๋Œ€๊ทœ๋ชจ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ
[ํ•˜์ฝ”์‚ฌ์„ธ๋ฏธ๋‚˜]๋ฏธ๋ฆฌ๋ณด๋Š” ๋Œ€๊ทœ๋ชจ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ[ํ•˜์ฝ”์‚ฌ์„ธ๋ฏธ๋‚˜]๋ฏธ๋ฆฌ๋ณด๋Š” ๋Œ€๊ทœ๋ชจ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ
[ํ•˜์ฝ”์‚ฌ์„ธ๋ฏธ๋‚˜]๋ฏธ๋ฆฌ๋ณด๋Š” ๋Œ€๊ทœ๋ชจ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ
ย 
[D2 CAMPUS] ๋ถ€์‚ฐ๋Œ€ Alcall ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
[D2 CAMPUS] ๋ถ€์‚ฐ๋Œ€ Alcall ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ[D2 CAMPUS] ๋ถ€์‚ฐ๋Œ€ Alcall ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
[D2 CAMPUS] ๋ถ€์‚ฐ๋Œ€ Alcall ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝ์‹œ๋Œ€ํšŒ ๋ฌธ์ œ
ย 

Similar to Pinpoint spring_camp 2015

Spring boot แ„€แ…ฉแ†ผแ„Œแ…กแ†จแ„‰แ…ฉ(1-4์žฅ)
Spring boot แ„€แ…ฉแ†ผแ„Œแ…กแ†จแ„‰แ…ฉ(1-4์žฅ)Spring boot แ„€แ…ฉแ†ผแ„Œแ…กแ†จแ„‰แ…ฉ(1-4์žฅ)
Spring boot แ„€แ…ฉแ†ผแ„Œแ…กแ†จแ„‰แ…ฉ(1-4์žฅ)Choonghyun Yang
ย 
Catalyst Framework ์‚ดํŽด๋ณด๊ธฐ
Catalyst Framework ์‚ดํŽด๋ณด๊ธฐCatalyst Framework ์‚ดํŽด๋ณด๊ธฐ
Catalyst Framework ์‚ดํŽด๋ณด๊ธฐcorund
ย 
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicknight1128
ย 
Spring test mvc แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญ
Spring test mvc แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญSpring test mvc แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญ
Spring test mvc แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญ์ˆ˜ํ™ ์ด
ย 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJavajigi Jaesung
ย 
Java 8 & Beyond
Java 8 & BeyondJava 8 & Beyond
Java 8 & BeyondJay Lee
ย 
.NET์—์„œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฐ์šฐ๊ธฐ
.NET์—์„œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฐ์šฐ๊ธฐ.NET์—์„œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฐ์šฐ๊ธฐ
.NET์—์„œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฐ์šฐ๊ธฐSeong Won Mun
ย 
GKAC 2015 Apr. - Battery, ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ์œ„ํ•œ ์‰ฌ์šด ์›น API ํ˜ธ์ถœ
GKAC 2015 Apr. - Battery, ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ์œ„ํ•œ ์‰ฌ์šด ์›น API ํ˜ธ์ถœGKAC 2015 Apr. - Battery, ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ์œ„ํ•œ ์‰ฌ์šด ์›น API ํ˜ธ์ถœ
GKAC 2015 Apr. - Battery, ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ์œ„ํ•œ ์‰ฌ์šด ์›น API ํ˜ธ์ถœGDG Korea
ย 
Springmvc
SpringmvcSpringmvc
SpringmvcHyungKuIm
ย 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajaxJinKyoungHeo
ย 
Clean code appendix 1
Clean code appendix 1Clean code appendix 1
Clean code appendix 1HyeonSeok Choi
ย 
vert.x ๋ฅผ ํ™œ์šฉํ•œ ๋ถ„์‚ฐ์„œ๋ฒ„ ๊ฐœ๋ฐœํ•˜๊ธฐ
vert.x ๋ฅผ ํ™œ์šฉํ•œ ๋ถ„์‚ฐ์„œ๋ฒ„ ๊ฐœ๋ฐœํ•˜๊ธฐvert.x ๋ฅผ ํ™œ์šฉํ•œ ๋ถ„์‚ฐ์„œ๋ฒ„ ๊ฐœ๋ฐœํ•˜๊ธฐ
vert.x ๋ฅผ ํ™œ์šฉํ•œ ๋ถ„์‚ฐ์„œ๋ฒ„ ๊ฐœ๋ฐœํ•˜๊ธฐJohn Kim
ย 
HTTP web server ๊ตฌํ˜„
HTTP web server ๊ตฌํ˜„HTTP web server ๊ตฌํ˜„
HTTP web server ๊ตฌํ˜„Javajigi Jaesung
ย 
[D2 ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]5.robolectric แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„แ…ฆแ„‰แ…ณแ„แ…ตแ†ผ
[D2 ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]5.robolectric แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„แ…ฆแ„‰แ…ณแ„แ…ตแ†ผ[D2 ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]5.robolectric แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„แ…ฆแ„‰แ…ณแ„แ…ตแ†ผ
[D2 ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]5.robolectric แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„แ…ฆแ„‰แ…ณแ„แ…ตแ†ผNAVER D2
ย 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jqueryJinKyoungHeo
ย 
Meteor React Tutorial ๋”ฐ๋ผํ•˜๊ธฐ
Meteor React Tutorial ๋”ฐ๋ผํ•˜๊ธฐMeteor React Tutorial ๋”ฐ๋ผํ•˜๊ธฐ
Meteor React Tutorial ๋”ฐ๋ผํ•˜๊ธฐJiam Seo
ย 
Scala, Spring-Boot, JPA์˜ ๋ถˆํŽธํ•˜๋ฉด์„œ๋„ ์ฆ๊ฑฐ์šด ๋™๊ฑฐ
Scala, Spring-Boot, JPA์˜ ๋ถˆํŽธํ•˜๋ฉด์„œ๋„ ์ฆ๊ฑฐ์šด ๋™๊ฑฐScala, Spring-Boot, JPA์˜ ๋ถˆํŽธํ•˜๋ฉด์„œ๋„ ์ฆ๊ฑฐ์šด ๋™๊ฑฐ
Scala, Spring-Boot, JPA์˜ ๋ถˆํŽธํ•˜๋ฉด์„œ๋„ ์ฆ๊ฑฐ์šด ๋™๊ฑฐJavajigi Jaesung
ย 
Rx java essentials
Rx java essentialsRx java essentials
Rx java essentialsByeongsu Kang
ย 
[์›น๊ธฐ๋ฐ˜์‹œ์Šคํ…œ 3์กฐ]e govframe ์ค‘๊ฐ„๊ณ ์‚ฌ ์ œ์ถœ ์ •๋ฆฌ
[์›น๊ธฐ๋ฐ˜์‹œ์Šคํ…œ 3์กฐ]e govframe ์ค‘๊ฐ„๊ณ ์‚ฌ ์ œ์ถœ ์ •๋ฆฌ[์›น๊ธฐ๋ฐ˜์‹œ์Šคํ…œ 3์กฐ]e govframe ์ค‘๊ฐ„๊ณ ์‚ฌ ์ œ์ถœ ์ •๋ฆฌ
[์›น๊ธฐ๋ฐ˜์‹œ์Šคํ…œ 3์กฐ]e govframe ์ค‘๊ฐ„๊ณ ์‚ฌ ์ œ์ถœ ์ •๋ฆฌ๊ตฌ ๋ด‰
ย 
Node.js ์‹œ์ž‘ํ•˜๊ธฐ
Node.js ์‹œ์ž‘ํ•˜๊ธฐNode.js ์‹œ์ž‘ํ•˜๊ธฐ
Node.js ์‹œ์ž‘ํ•˜๊ธฐHuey Park
ย 

Similar to Pinpoint spring_camp 2015 (20)

Spring boot แ„€แ…ฉแ†ผแ„Œแ…กแ†จแ„‰แ…ฉ(1-4์žฅ)
Spring boot แ„€แ…ฉแ†ผแ„Œแ…กแ†จแ„‰แ…ฉ(1-4์žฅ)Spring boot แ„€แ…ฉแ†ผแ„Œแ…กแ†จแ„‰แ…ฉ(1-4์žฅ)
Spring boot แ„€แ…ฉแ†ผแ„Œแ…กแ†จแ„‰แ…ฉ(1-4์žฅ)
ย 
Catalyst Framework ์‚ดํŽด๋ณด๊ธฐ
Catalyst Framework ์‚ดํŽด๋ณด๊ธฐCatalyst Framework ์‚ดํŽด๋ณด๊ธฐ
Catalyst Framework ์‚ดํŽด๋ณด๊ธฐ
ย 
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamic
ย 
Spring test mvc แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญ
Spring test mvc แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญSpring test mvc แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญ
Spring test mvc แ„‡แ…กแ†ฏแ„‘แ…ญแ„Œแ…กแ„…แ…ญ
ย 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
ย 
Java 8 & Beyond
Java 8 & BeyondJava 8 & Beyond
Java 8 & Beyond
ย 
.NET์—์„œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฐ์šฐ๊ธฐ
.NET์—์„œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฐ์šฐ๊ธฐ.NET์—์„œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฐ์šฐ๊ธฐ
.NET์—์„œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฐ์šฐ๊ธฐ
ย 
GKAC 2015 Apr. - Battery, ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ์œ„ํ•œ ์‰ฌ์šด ์›น API ํ˜ธ์ถœ
GKAC 2015 Apr. - Battery, ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ์œ„ํ•œ ์‰ฌ์šด ์›น API ํ˜ธ์ถœGKAC 2015 Apr. - Battery, ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ์œ„ํ•œ ์‰ฌ์šด ์›น API ํ˜ธ์ถœ
GKAC 2015 Apr. - Battery, ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ์œ„ํ•œ ์‰ฌ์šด ์›น API ํ˜ธ์ถœ
ย 
Springmvc
SpringmvcSpringmvc
Springmvc
ย 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajax
ย 
Clean code appendix 1
Clean code appendix 1Clean code appendix 1
Clean code appendix 1
ย 
vert.x ๋ฅผ ํ™œ์šฉํ•œ ๋ถ„์‚ฐ์„œ๋ฒ„ ๊ฐœ๋ฐœํ•˜๊ธฐ
vert.x ๋ฅผ ํ™œ์šฉํ•œ ๋ถ„์‚ฐ์„œ๋ฒ„ ๊ฐœ๋ฐœํ•˜๊ธฐvert.x ๋ฅผ ํ™œ์šฉํ•œ ๋ถ„์‚ฐ์„œ๋ฒ„ ๊ฐœ๋ฐœํ•˜๊ธฐ
vert.x ๋ฅผ ํ™œ์šฉํ•œ ๋ถ„์‚ฐ์„œ๋ฒ„ ๊ฐœ๋ฐœํ•˜๊ธฐ
ย 
HTTP web server ๊ตฌํ˜„
HTTP web server ๊ตฌํ˜„HTTP web server ๊ตฌํ˜„
HTTP web server ๊ตฌํ˜„
ย 
[D2 ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]5.robolectric แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„แ…ฆแ„‰แ…ณแ„แ…ตแ†ผ
[D2 ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]5.robolectric แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„แ…ฆแ„‰แ…ณแ„แ…ตแ†ผ[D2 ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]5.robolectric แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„แ…ฆแ„‰แ…ณแ„แ…ตแ†ผ
[D2 ์˜คํ”ˆ์„ธ๋ฏธ๋‚˜]5.robolectric แ„‹แ…กแ†ซแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ตแ„ƒแ…ณ แ„แ…ฆแ„‰แ…ณแ„แ…ตแ†ผ
ย 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
ย 
Meteor React Tutorial ๋”ฐ๋ผํ•˜๊ธฐ
Meteor React Tutorial ๋”ฐ๋ผํ•˜๊ธฐMeteor React Tutorial ๋”ฐ๋ผํ•˜๊ธฐ
Meteor React Tutorial ๋”ฐ๋ผํ•˜๊ธฐ
ย 
Scala, Spring-Boot, JPA์˜ ๋ถˆํŽธํ•˜๋ฉด์„œ๋„ ์ฆ๊ฑฐ์šด ๋™๊ฑฐ
Scala, Spring-Boot, JPA์˜ ๋ถˆํŽธํ•˜๋ฉด์„œ๋„ ์ฆ๊ฑฐ์šด ๋™๊ฑฐScala, Spring-Boot, JPA์˜ ๋ถˆํŽธํ•˜๋ฉด์„œ๋„ ์ฆ๊ฑฐ์šด ๋™๊ฑฐ
Scala, Spring-Boot, JPA์˜ ๋ถˆํŽธํ•˜๋ฉด์„œ๋„ ์ฆ๊ฑฐ์šด ๋™๊ฑฐ
ย 
Rx java essentials
Rx java essentialsRx java essentials
Rx java essentials
ย 
[์›น๊ธฐ๋ฐ˜์‹œ์Šคํ…œ 3์กฐ]e govframe ์ค‘๊ฐ„๊ณ ์‚ฌ ์ œ์ถœ ์ •๋ฆฌ
[์›น๊ธฐ๋ฐ˜์‹œ์Šคํ…œ 3์กฐ]e govframe ์ค‘๊ฐ„๊ณ ์‚ฌ ์ œ์ถœ ์ •๋ฆฌ[์›น๊ธฐ๋ฐ˜์‹œ์Šคํ…œ 3์กฐ]e govframe ์ค‘๊ฐ„๊ณ ์‚ฌ ์ œ์ถœ ์ •๋ฆฌ
[์›น๊ธฐ๋ฐ˜์‹œ์Šคํ…œ 3์กฐ]e govframe ์ค‘๊ฐ„๊ณ ์‚ฌ ์ œ์ถœ ์ •๋ฆฌ
ย 
Node.js ์‹œ์ž‘ํ•˜๊ธฐ
Node.js ์‹œ์ž‘ํ•˜๊ธฐNode.js ์‹œ์ž‘ํ•˜๊ธฐ
Node.js ์‹œ์ž‘ํ•˜๊ธฐ
ย 

Pinpoint spring_camp 2015

  • 2. 2 ๋ฐœํ‘œ์ž โ€ข Backend Java developer โ€ข 2006~ โ€ข JAVA FRAMEWORK ๊ฐœ๋ฐœ/์ง€์› โ€ข ๋น„๋™๊ธฐ JAVA ๋„คํฌ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ โ€ข JAVA ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… โ€ข Heap dump, thread dump โ€ข Open source patch, Debugging โ€ข Multi Thread, Concurrency โ€ข Pinpoint Technical Leader
  • 4. 4 ๋ชฉ์ฐจ โ€ข Why โ€ข ์†Œ๊ฐœ โ€ข ๊ธฐ์ˆ  ๊ฐœ์š” โ€ข ์–ด๋ ค์šด์  โ€ข ๋กœ๋“œ๋งต
  • 5. 5 Why A long time ago. in a galaxy far, far away
  • 7. 7 Why โ€ข ์ƒํ™ฉ โ€ข ์ˆ˜์‹ญ ์ˆ˜๋ฐฑ๋Œ€์˜ ์„œ๋ฒ„ โ€ข ๋งŽ์€ ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ โ€ข ๋ณต์žกํ•˜๊ฒŒ ์—ฐ๋™๋œ ์„œ๋น„์Šค โ€ข ๋ฌธ์ œ โ€ข ์–ด๋–ป๊ฒŒ ์—ฐ๋™๋˜๊ณ  ์žˆ๋Š”์ง€ ํŒŒ์•…์•ˆ๋จ โ€ข ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์˜ํ•ด ์žฅ์• ๊ฐ€ ๋ฐœ์ƒ โ€ข ๊ฐœ๋ณ„ ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์œผ๋กœ๋Š” ์—ฐ๊ด€๊ด€๊ณ„ ํŒŒ์•…์ด ์•ˆ๋จ. โ€ข ์ƒˆ๋กœ์šด ํ•ด๊ฒฐ์ฑ…์ด ํ•„์š”
  • 13. 13 Why โ€ข ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์ด ํž˜๋“ค๋‹ค. โ€ข ์ฝ˜์†” ๋“ค์–ด๊ฐ€๊ธฐ ์‹ซ๋‹ค โ€ข ์ˆ˜์‹ญ๊ธฐ๊ฐ€์˜ ๋กœ๊ทธ โ€ข ํ™˜๊ฒฝ, ์˜ต์…˜ โ€ข ์ˆ˜๋งŽ์€ ์ข…๋ฅ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ + ๋‹ค์–‘ํ•œ ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ โ€ข ์•ผ๊ทผํ•˜๊ธฐ ์‹ซ๋‹ค โ€ข ์ž์‹ ์„ ์ž๋™ํ™” โ€ข ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์‹œ ์ƒ๊ฐํ•˜๋˜ ๋ฐ”, ๊ด€์ฐฐํ•˜๋˜ ๋ทฐ๋ฅผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ๋„ ์ œ๊ณต โ€ข ๊ธ€๋กœ ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋ ค๋‹ˆ ์–ด๋ ต๋”๋ผ โ€ข ์ž˜๋ชป๋œ ๋ถ„์„์œผ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ์žฌ๋ฐœ
  • 14. 14 Why โ€ข ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์„ ๊ณ„์† ํ•˜๋‹ค๋ณด๋‹ˆ ์•ˆ์ •ํ™”๋˜์–ด ํ• ์ผ์ด ์ค„์Œ
  • 17. 17 ์†Œ๊ฐœ http://github.com/naver/pinpoint โ€ข ๋ถ„์‚ฐํŠธ๋žœ์žญ์…˜ ์ถ”์  โ€ข ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ† ํด๋กœ์ง€ ์ž๋™ ๋ฐœ๊ฒฌ โ€ข ์ˆ˜ํ‰ํ™•์žฅ์„ฑ โ€ข ์ฝ”๋“œ ์ˆ˜์ค€์˜ ๊ฐ€์‹œ์„ฑ โ€ข ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์„ฑ๋Šฅ์ •๋ณด ์ˆ˜์ง‘
  • 19. 19 ํ’€์–ด์•ผ ํ•  ๋ฌธ์ œ RPC ์ถ”์ ์˜ ์˜๋ฏธ Node1๊ณผ Node2 ์‚ฌ์ด์˜ RPC๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐพ์„๊ฒƒ์ธ๊ฐ€? ๋ฉ”์‹œ์ง€๋ฅผ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” TAG
  • 20. 20 TAG ๋™์ž‘ โ€ข Span : RPC ์ถ”์ ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ๋‹จ์œ„. RPC๊ฐ€ ๋„์ฐฉํ–ˆ์„ ๋•Œ ์ฒ˜๋ฆฌํ•œ ์ž‘์—… โ€ข Trace : ์—ฐ๊ด€๋œ Span์˜ ์ง‘ํ•ฉ. Span์˜ ์ง‘ํ•ฉ์€ TransactionId๊ฐ€ ๊ฐ™์Œ. Trace๋Š” SpanId์™€ ParaentSpanID๋ฅผ ํ†ตํ•ด ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ •๋ ฌ๋จ โ€ข TraceId โ€ข TrasantionId๋Š” message id๋กœ ์ „์ฒด ์„œ๋ฒ„๊ตฐ์—์„œ unique ํ•œ ์•„์ด๋”” โ€ข SpanId, ParentId๋กœ message์˜ ๊ด€๊ณ„๋ฅผ ์ •๋ ฌ
  • 22. 22 ์„ค์น˜ โ€ข Java ์‹คํ–‰์‹œ JavaAgent ์„ค์ •์ถ”๊ฐ€ -javaagent:$PINPOINT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.applicationName=โ€œ$AGENT_GROUP_NAMEโ€ -Dpinpoint.agentId =โ€œ$AGENT_UNIQUEUE_IDโ€
  • 23. 23 ํ•ต์‹ฌ๊ฐ€์น˜ โ€ข ๋ถ„์‚ฐ RPC ์ถ”์  โ€ข ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ
  • 24. 24 TomcatA ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } โ€ข Hello world! sample
  • 25. 25 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
  • 26. 26 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
  • 27. 27 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
  • 28. 28 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
  • 29. 29 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
  • 30. 30 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ ์˜ˆ
  • 31. 31 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } โ€ข Distributed Transaction TAG โ€ข TraceId ์ƒ์„ฑ TRANSACTION_ID : ์ „์ฒด RPC ํ˜ธ์ถœ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์„์ˆ˜ ์žˆ๋Š” Key SPAN_ID : ๋‚˜์˜ ID PARENT_SPAN_ID : ๋ถ€๋ชจ์˜ ID ๋‚ด๋ถ€๋™์ž‘
  • 32. 32 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } โ€ข Distributed Transaction TAG โ€ข TraceId ์ƒ์„ฑ TRANSACTION_ID : TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1 SPAN_ID : 10 (Random) PARENT_SPAN_ID : -1 (ROOT) ๋‚ด๋ถ€๋™์ž‘
  • 33. 33 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } โ€ข Distributed Transaction TAG โ€ข Spring Controller Method ๋ ˆ์ฝ”๋”ฉ ๋‚ด๋ถ€๋™์ž‘
  • 34. 34 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } โ€ข Distributed Transaction TAG โ€ข HttpClient.execute()์˜ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„์„œ HttpGet์— TRACE_ID๋ฅผ ์„ธํŒ…ํ•œ๋‹ค. โ€ข Child TraceId ์ƒ์„ฑ TRANSACTION_ID : TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1 -> TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1 SPAN_ID : 10 -> 20 PARENT_SPAN_ID : -1 -> 10 โ€ข Child TraceId ๋ฅผ HttpGet์— ์„ธํŒ… HttpGet.setHeader(PINPOINT_TRANSACTION_ID, โ€œTomcatA^์‹œ์ž‘์‹œ๊ฐ„^1โ€) HttpGet.setHeader(PINPOINT_SPAN_ID, โ€œ20โ€) HttpGet.setHeader(PINPOINT_PARENT_SPAN_ID, โ€œ10โ€) ๋‚ด๋ถ€๋™์ž‘
  • 35. 35 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } โ€ข Distributed Transaction TAG โ€ข TAG๋œ Request๋ฅผ TomcatB๋กœ ์ „์†ก. Tag Request ๋‚ด๋ถ€๋™์ž‘
  • 36. 36 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } โ€ข Distributed Transaction TAG โ€ข TomcatB accept Check Header : HttpServletRequest.getHeader(PINPOINT_TRANSACTION_ID) โ€ข Header์—์„œ TraceId ๋ฅผ ์ธ์‹ํ•˜์—ฌ Child๋กœ ๋™์ž‘ TRANSACTION_ID : TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1 SPAN_ID : 20 PARENT_SPAN_ID : 10 Tag Request ๋‚ด๋ถ€๋™์ž‘
  • 37. 37 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } โ€ข Distributed Transaction TAG HBase TRANSACTION_ID : TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1 SPAN_ID : 20 PARENT_SPAN_ID : 10 Collector RowKey TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1 20 10 Hello() ํ˜ธ์ถœ์ •๋ณด TraceData ๋‚ด๋ถ€๋™์ž‘
  • 38. 38 TomcatA @Controller public class TestController { @RequestMapping("/test") @ResponseBody public String test() throws IOException { HttpGet get = new HttpGet("http://TomcatB/hello"); HttpResponse response = httpClient.execute(get); return EntityUtils.toString(response.getEntity()); } } TomcatB @Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello() { return "world!"; } } โ€ข Distributed Transaction TAG HBase TRANSACTION_ID : TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1 SPAN_ID : 10 PARENT_SPAN_ID : -1 Collector RowKey TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1 20 10 10 Hello() ํ˜ธ์ถœ์ •๋ณด -1 Test() ํ˜ธ์ถœ์ •๋ณด TraceData ๋‚ด๋ถ€๋™์ž‘
  • 39. 39 RowKey TomcatA^์‹œ์ž‘์‹œ๊ฐ„^1 20 10 10 Hello() ํ˜ธ์ถœ์ •๋ณด -1 Test() ํ˜ธ์ถœ์ •๋ณด HBase UI ๋‚ด๋ถ€๋™์ž‘
  • 40. 40 ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… โ€ข ์ธํ”„๋ผ์˜ ๊ฐ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๊ตฌ์ถ•์ด ๋˜์—ˆ๋Š”๊ฐ€? โ€ข ํ•ด์™ธProxy์—์„œ ํ•œ๊ตญ์˜ ํŠน์ • ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ์ž ์š”์ฒญ์˜ ํ๋ฆ„์ด ๊ธฐ๋Œ€ํ•œ ๋Œ€๋กœ ์ธ๊ฐ€? โ€ข ์‘๋‹ต์‹œ๊ฐ„์ด ๋Š๋ฆฐ ๊ตฌ๊ฐ„๊ณผ API๊ฐ€ ์žˆ๋Š”๊ฐ€? โ€ข ๋Š๋ฆฐ ๊ตฌ๊ฐ„์— ๋Œ€ํ•œ ํ”„๋กœํŒŒ์ผ๋ง ๋ฐ์ดํƒ€ ์ œ๊ณต โ€ข ์„ฑ๋Šฅ ํŒจํ„ด ๋ฐ์ดํƒ€ ์ œ๊ณต โ€ข ๊ฐœ๋ฐœ->QA->์šด์˜๋‹จ๊ณ„์—์„œ์˜ ์—ฐ์†์ ์ธ ํ™•์ธ
  • 42. 42 WARNING โ€ข HBase๋„ ์ฃฝ๊ณ  โ€ข HBASE-7711 https://issues.apache.org/jira/browse/HBASE-7711 โ€ข Hadoop ๋ฌดํ•œ๋ฃจํ”„๊นŒ์ง€ โ€ข HDFS-5225 https://issues.apache.org/jira/browse/HDFS-5225 โ€ข HBase, Hadoop ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์žฌ์‹œ์ž‘ํ•ด๋„ ํšŒ๋ณต์ด ์•ˆ๋จ
  • 44. 44 WARNING โ€ข ๊ฐ€๋Šฅํ•œ ์ตœ์‹  ๋ฒ„์ „์„ Hadoop ํŒจ๋ฐ€๋ฆฌ ์‚ฌ์šฉ โ€ข ๊ด€๋ฆฌ๋˜๋Š” Cloudera(CDH), Hortonworks(HDP) ๊ถŒ์žฅ โ€ข Pinpoint๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์€ Java ๊ฐœ๋ฐœ์ž โ€ข ๊ฒธ์‚ฌ๊ฒธ์‚ฌ HBase, Hadoop๋„ ์‚ดํŽด๋ณด๊ณ , ๊ธฐ์™•์ด๋ฉด ์†Œ์Šค๋„ ๊นŒ๋ณด์ž โ€ข ์‚ฌ์‹ค ์ €๋„ ๋‹ค ๋ชจ๋ฆ…๋‹ˆ๋‹ค. - ๋ญ๋“ ์ง€ ์•„๋Š”๊ฑด ์•„๋‹ˆ์•ผ. ์•Œ๊ณ  ์žˆ๋Š”๊ฒƒ๋งŒ ์•Œ๋ฟ
  • 45. 45 WARNING ํ˜น์‹œ ์•„๋‚˜์š”? HBase, Hadoop, Zookeeper์˜ ์ „๋ฌธ๊ฐ€๊ฐ€ ๋ ์ง€ ๋งํ• ๊ฑฐ ๊ฐ™์ง€๋Š” ์•Š์ž–์•„์š” ๊ฐœ์ธ์˜ ๋…ธ๋ ฅ์„ ํˆฌ์žํ•ด ๋ด…์‹œ๋‹ค
  • 46. 46 WARNING ์ง€๊ธˆ ์—ฌ๋Ÿฌ๋ถ„์ด ์ „๋ฌธ๊ฐ€๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์ง€ ์•Š์„๊นŒ์š”?
  • 47. 47 WARNING ์‚ฌ์‹ค ๊ทธ๊ฑธ ๋…ธ๋ฆฌ๊ณ  ์„ ํƒํ•œ Backend์ž…๋‹ˆ๋‹ค.
  • 48. 48 ๋‹คํ–‰์ธ ์  โ€ข ์„ค๊ณ„ ์‚ฌ์ƒ โ€ข Pinpoint์˜ backend๊ฐ€ ์ฃฝ์–ด๋„ Application์€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์•ˆ๋œ๋‹ค. โ€ข Collector โ€ข HBase โ€ข Hadoop โ€ข ์ตœ์šฐ์„  ์ˆœ์œ„๋Š” ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ์ˆ˜์ง‘ X โ€ข Application์ด ์ •์ƒ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๋Š”๊ฒŒ ์ตœ์šฐ์„ 
  • 49. 49 ๋‹คํ–‰์ธ ์  โ€ข ๋ญ๋“  ๊ทธ๋ ‡์ง€๋งŒ ๋ง๋กœ๋Š” ๋‹ค ๋จ โ€ข ํฐ์†Œ๋ฆฌ ๋•…๋•…~~ โ€œ์•„! ๊ฑฑ์ •๋งˆ์‹œ๋ผ๊น์š”. ์ €๋ฅผ ๋ฏฟ์œผ์…ˆ. ๋ชจ๋“ ๊ฑด ๊ณ„ํš๋Œ€๋กœ~โ€
  • 51. 51 ๋‹คํ–‰์ธ ์  โ€ข ๊ฒ€์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค โ€ข ์ง์ ‘ ์ฒดํ—˜ โ€ข ํ•œ๊ณ„๋Š” ๋ถ„๋ช…. ๋ฒ„๊ทธ๋Š” ์ปค๋ฒ„ ๋ถˆ๊ฐ€๋Šฅ โ€ข ๊ฐœ๋ฐœ์—์„œ ๊ฒ€์ฆ -> ์šด์˜ โ€ข ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์‹ ๊ณ ํ•ด์ฃผ์„ธ์š”. ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. โ€ข ๋ฒ„๊ทธ๋Š” ๊ณ„ํš์— ์—†์—ˆ๋˜ ์ผ
  • 52. 52 ๋กœ๋“œ๋งต โ€ข ์•Œ๋žŒ / Admin โ€ข ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ โ€ข EndUser ๋ชจ๋‹ˆํ„ฐ๋ง โ€ข ์ง€์›๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ โ€ข ๊ฐœ๋ฐœ๊ฐ€์ด๋“œ โ€ข D2 Open Seminar (Java์„ฑ๋Šฅ + Pinpoint) 5์›”?

Editor's Notes

  1. Backend java developer ์ž…๋‹ˆ๋‹ค. Java ๊ธฐ๋ฐ˜์˜ ๋„คํฌ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ”„๋ ˆ์ž„์›Œํฌ, ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์„ ์ง€์›ํ–ˆ๊ณ , ํ˜„์žฌ๋Š” pinpiont์˜ TL์„ ํ•˜๊ณ  ์žˆ๊ตฌ. pinpoint๋ฅผ ์ง์ ‘๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ์ด ์ฑ…์˜ ์ €์ž์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ณผ๊ฑฐ์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์–ผ๋งˆ ์•ˆ๋˜๊ณ , ์„œ๋ฒ„๋„ ์–ผ๋งˆ ์•ˆ๋ฌ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ ๋Œ€์ˆ˜๋„ ์ž‘์•˜๊ณ , ๋‹จ์ˆœํ–ˆ์Šต๋‹ˆ๋‹ค.
  4. ํ˜„์žฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์ง€๊ณ , ์„œ๋น„์Šค๊ฐ€ ์ ์  ๋ณต์žกํ•ด์ง€๋ฉด์„œ, ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์˜† ํ™”๋ฉด์€ netflix์˜ ์„œ๋ฒ„๋ชจ์Šต์ธ๋ฐ. ๊ต‰์žฅํžˆ ๋ณต์žกํ•œ๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ์ƒํ™ฉ์„ ์‚ดํŽด ๋ณด๋ฉด ์‹œ์Šคํ…œ์ด ์ ์  ๋ณต์žกํ•ด ์ง€๋ฉด์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋Š”๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ๋Š”๋ฐ. ๋” ์ด์ƒ์€ ๊ธฐ์กด์˜ ๋ฐฉ์‹. ์ฆ‰ ๋กœ๊ทธ๋ฅผ ์‚ดํŽด ๋‹ค๋˜๊ฐ€? ๊ฐœ๋ณ„ ์‹œ์Šคํ…œ์„ ์‚ดํŽด๋ณธ๋‹ค๋“ ๊ฐ€ ํ•˜๋Š”๊ฒƒ์œผ๋กœ๋Š” ์‹œ์Šคํ…œ์˜ ๋ณต์žก๋„๋ฅผ ์ปค๋ฒ„ํ•˜๊ธฐ ํž˜๋“ค์–ด์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋Š๋‚„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ ์ด ์ƒํ™ฉ์„ ๊ฐœ์„ ํ• ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๋ฌด์—‡์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์„ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  6. ๊ตฌ๊ธ€์€ ์ด๋ฏธ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ dapper๋ž€๊ฒƒ์„ 2010๋…„์— ๋ฐœํ‘œ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„์‰ฝ๊ฒŒ ๋น„๊ณต๊ฐœ์ž…๋‹ˆ๋‹ค.
  7. Twitter๋Š” dapper๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ zipkin์ด๋ผ๋Š” ํ”Œ๋žซํผ์„ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.
  8. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒ์šฉ ์†”๋ฅ˜์…˜๋“ค๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ๊ตญ์—์„œ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ์ œ๋‹ˆํผ๋„ ์žˆ๊ตฌ์š”. ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ์ข‹๋‹ค๊ณ  ํ•˜๋Š” 3๊ฐœ์˜ ์ œํ’ˆ๊ตฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  9. ๋„ค์ด๋ฒ„๋„ ์ด๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•ด์„œ Pinpoint๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.
  10. ๋„ค์ด๋ฒ„์˜ ์‹œ์Šคํ…œ๋„ ์ •๋ง ๋ณต์žกํ•˜๊ฑฐ๋“ ์š”. ์šฐ๋ฆฌ ์‹œ์Šคํ…œ์˜ ๋ณด์žก๋„๋ฅผ ๋ชจ๋ฅด๊ณ  ์žˆ๋‹ค๊ฐ€, Pinpoint๋ฅผ ํ†ตํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ ‡๊ฒŒ ๋ณต์žกํ–ˆ๋‚˜๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
  11. ๊ฐœ์ธ์ ์œผ๋กœ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์„ ๋‹ด๋‹นํ–ˆ์ง€๋งŒ. ์‹œ์Šคํ…œ์ด ๋ณต์žกํ•˜๋‹ˆ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์ด ์ ์  ํž˜๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์•Œ์•„์•ผ ๋ ๊ฒƒ๋„ ๋งŽ๊ตฌ์š”. ์ผ์ผ์ด ์„œ๋ฒ„ ์ฝ˜์†”๋“ค์–ด๊ฐ€๊ธฐ๋„ ์‹ซ๊ณ , ์ˆ˜์‹ญ๊ธฐ๊ฐ€ ๋กœ๊ทธ ๋ณผ๋ ค๋‹ˆ ๋ˆˆ๋„ ์•„ํ”„๊ณ  ํž˜๋“ค๊ณ , ๊ฐœ๋ณ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค ์‚ดํŽด๋ณด๋ ค๋‹ˆ ํ”ผ๊ณคํ•˜๋”๋ผ๊ตฌ์š” ๊ทธ๋ฆฌ๊ณ  ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…ํ•˜๋Š๋ผ ์•ผ๊ทผํ•˜๊ธฐ๋„ ์‹ซ๊ตฌ์š”. ๋˜ ํ•˜๋‚˜๋Š” ์—ฌ๋Ÿฌ ์กฐ์ง์—์„œ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…ํ•˜๊ณ  ๊ณ„์‹ ๋ฐ, ์ด๊ฑธ ์ข€๋” ํŽธํ•˜๊ฒŒ ์ง€์›์„ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์ง€ ์ œ๊ฐ€ ๋ฉ”์ผ์„ ์“ฐ๊ณ  ๋ถ„์„์„ ํ•˜์ง€ ์•Š๋”๋ผ๋„, ์ œ๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ์ข€๋” ํŽธํ•˜๊ฒŒ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.
  12. ์•ž์—๋Š”๊บผ๋Š” ์•„๋ฌด๋ž˜๋„ ์ข€ ์ข‹์€ ๋™๊ธฐ๊ณ , ์‚ด์ž‘ ์• ๋งคํ•œ ๋™๊ธฐ๋Š” ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…๋„ ๊ณ„์†ํ•˜๋‹ค ๋ณด๋‹ˆ. ์‹œ์Šคํ…œ์ด ์•ˆ์ •ํ™”๋˜์„œ ํ• ์ผ์ด ์—†์–ด์ง€๋”๋ผ๊ตฌ์š”. ์ตœ์ดˆ ์‹œ์ž‘ํ• ๋•Œ๋Š” ๊ฑฐ์˜ 1๋…„ ๋‚ด๋‚ด ์žฅ์• ์ง€์›์„ ํ–ˆ๋Š”๋ฐ. ํ•ด๊ฐ€ ๊ฐˆ์ˆ˜๋ก ๋นˆ๋„๊ฐ€ ์ค„๊ฑฐ๋‚˜, ๊ธฐ์กด์— ํ•ด๊ฒฐํ•œ ๋ฐฉ์•ˆ์„ ๋Œ€์ž…ํ•˜๋ฉด ๋˜๋Š”๊ฑฐ๋ผ. ์‹œ๊ฐ„์ด ์ค„์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ฌดํŠผ ํ• ์ผ์ด ์ „๋ฐ˜์ ์œผ๋กœ ์ค„์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ• ์ผ์ด ์ค„๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?
  13. ๋ญ๊ธด ๋ญ๊ฐ€์š”. ํ•ด๊ณ ์ฃ .
  14. ์ง„์ •ํ•œ ํ•ด๊ฒฐ์ฑ…์ž…๋‹ˆ๋‹ค. ๋”๊ตฐ๋‹ค๋‚˜ ๊ณต์งœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๊ฒŒ ์งœ๋ฉด ํ‰์ƒ ๊ฐœ๋ฐœ์ž๋กœ ๋จน๊ณ ์‚ด์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ใ…Žใ…Ž. ์ด๊ฑด๋†๋‹ด์ธ๊ฑฐ ์•„์‹œ์ฃ . ์•„๋ฌดํŠผ ์ด๊ฑด ๋‚˜์œ๋ฐฉํ–ฅ์œผ๋กœ์˜ ํ•ด๊ฒฐ์ด์ฃ . ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํšŒ์‚ฌ๋„ ๋งํ•˜๊ณ  ์ž์‹ ์˜ ๋ฐœ์ „๋„ ์—†์–ด์ง‘๋‹ˆ๋‹ค. ์ข‹์€ ๋ฐฉํ–ฅ์˜ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํƒ€๊ณ„ํ• ์ˆ˜ ์žˆ๋Š” pinpint๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  15. Pinpoint์˜ github ๋‚ด์šฉ์ธ๋ฐ. ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด Pinpoint๋Š” APMํˆด์ด๊ณ , java์˜ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ•˜๋Š” ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ, APMํˆด์€ ๊ฑท์„ ๋ณด๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ , ์‹ค์ œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ˆ˜ํ–‰ํ•˜๋Š” ์ •๋ณด๋ฅผ ํ”„๋กœํŒŒ์ผ ํ• ์ˆ˜ ์žˆ๋Š” ํˆด์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง์ด ์‚ฌ์ง„๊ธฐ๋ผ๋ฉด, APMํˆด์€ X-ray ์ฒ˜๋Ÿผ ๋‚ด๋ถ€๋ฅผ ๋ณผ์ˆ˜ ์žˆ๋Š” ํˆด์ž…๋‹ˆ๋‹ค. ๋ง๋กœ ๋“ค์œผ๋ฉด ์–ด๋ ค์šฐ์‹ค๊ฑฐ๋‹ˆ. ์ง์ ‘ ํ™”๋ฉด์„ ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  16. ํ™”๋ฉด์„ ๋ณด๋ฉด ๋‹จ์ˆœํ•œ๋ฐ, ์ด์™€ ๊ฐ™์ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๋น„์ฃผ์–ผ ํ•˜๊ฒŒ ๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  17. ํ•€ํฌ์ธํŠธ๊ฐ€ ํ•ด๊ฒฐํ•œ ๋ฌธ์ œ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค ์ค‘์š”ํ•œ RPC ์ถ”์ ์— ๋Œ€ํ•œ ๋‚ด์šฉ์ธ๋ฐ์š”. ํ•ต์‹ฌ์˜ ๋ฉ”์‹œ์ง€์˜ ๊ด€๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ง๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•€ํฌ์ธํŠธ๋Š” ๋ฉ”์‹œ์ง€์— ์ถ”์ ์„ ์œ„ํ•œ tag๋ฅผ ๋‹ฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  18. ์ถ”์ ํƒœ๊ทธ ๋Š” ํ•ด๋‹น ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์ถ”์ ํ‚ค๋Š” transaction id ์ „์ฒด ๋ฅผ ๊ด€ํ†ตํ•˜๋Š” ์œ ๋‹ˆํฌ ์•„์ด๋””๊ฐ€ ์กด์žฌํ•˜๊ตฌ์š”. ์ด ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ€๋ชจ ์ž์‹๊ด€๊ณ„๋ฅผ ์ •๋ ฌํ• ์ˆ˜ ์žˆ๋Š” spanId์™€ parentSpan๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์ถ”์ ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ RPC๋ฉ”์‹œ์ง€๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
  19. ๊ทธ๋ฆฌ๊ณ  ์ด ์ถ”์  ํƒœ๊ทธ์— ์ฒ˜๋ฆฌ๋Š” bytecode instrumentation์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™์œผ๋กœ ํ•€ํฌ์ธ์—์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•œ๊ฒŒ. ์ถ”์ ํ•  ๋ฉ”์†Œ๋“œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ถ”์  ์ฝ”๋“œ๋ฅผ ์•ž๋’ค๋กœ ์‹ฌ๋Š”๊ฒƒ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  20. ๊ทธ๋ฆฌ๊ณ  ์ด ์ถ”์  ํƒœ๊ทธ์— ์ฒ˜๋ฆฌ๋Š” bytecode instrumentation์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™์œผ๋กœ ํ•€ํฌ์ธ์—์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•œ๊ฒŒ. ์ถ”์ ํ•  ๋ฉ”์†Œ๋“œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ถ”์  ์ฝ”๋“œ๋ฅผ ์•ž๋’ค๋กœ ์‹ฌ๋Š”๊ฒƒ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  21. Pinpoint์˜ ํ•ต์‹ฌ ๊ฐ€์น˜๋Š” ์ด ๋‘๊ฐ€์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์‚ฐ RPC์ถ”์ ์ด ์ค‘์š”ํ•œ ์ด์œ ๋Š” ๋„ค์ด๋ฒ„์˜ ์„œ๋น„์Šค๊ฐ€ ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ณ ๋“ฑ์ด ์š”์ฆ˜ ์œ ํ–‰ํ•˜๊ณ  ์žˆ๋Š”๋ฐ. ๋„ค์ด๋ฒ„์—์„œ๋Š” ์ด๋ฏธ ์œ ์‚ฌํ•œ ์Šคํƒ€์ผ๋กœ ์„œ๋น„์Šค๊ฐ€ ๊ตฌ์„ฑ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๊ฒƒ ๋˜ํ•œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋„ค์ด๋ฒ„์˜ ์„œ๋น„์Šค์ˆ˜๊ฐ€ ์—„์ฒญ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  22. ์ข€๋” ์‰ฝ๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ ์šฉ์˜ˆ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  23. ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— pinpoint๋ฅผ ์ ์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋”ฐ๋ผ๊ฐ€ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  24. Tomcat b๋กœ ์›๊ฒฉ ํ˜ธ์ถœ์ด ๋“ค์–ด๊ฐ„๊ฒƒ์„ ๋ชจ์Šต์ด๊ตฌ์š”.
  25. ์ด์™€ ๊ฐ™์€ ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ๋ฅผ ํ•€ํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ์–ป์„์ˆ˜ ์žˆ๊ตฌ์š”. ์ด๋Ÿฌํ•œ ์„ฑ๋Šฅ ์ •๋ณด๋ฅผ ํ•€ํฌ์ธํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ถ”์ ํ•˜์ง€๋Š” ๋‚ด๋ถ€๋™์ž‘์„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  26. ํ•€ํฌ์ธํŠธ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์œผ๋ฉด traceid๋ผ๊ณ  ์ถ”์ ํ‚ค์˜ ์ง‘ํ•ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  27. ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ์˜ˆ๋Š” ์ด์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  28. ์Šคํ”„๋ง ์ฝ˜ํŠธ๋กค๋Ÿฌ ๋ฉ”์†Œ๋“œ ์ •๋ณด๋ฅผ ๋ ˆ์ฝ”๋”ฉํ•˜๊ตฌ์š”
  29. ์›๊ฒฉ ํ˜ธ์ถœ์‹œ ํ•€ํฌ์ธํŠธ์—์„œ ์ž๋™์œผ๋กœ ์ถ”์ ์— ํ•„์š”ํ•œ traceId๋ฅผ Get๋ฉ”์‹œ์ง€์— ์„ธํŒ…ํ•ฉ๋‹ˆ๋‹ค.
  30. ํƒœ๊ทธ๋œ ๋ฆฌํ€˜์ŠคํŠธ๊ฐ€ ์›๊ฒฉ์ง€๋กœ ๊ฐ€๊ฒŒ๋ฉ๋‹ˆ๋‹ค.
  31. ํ†ฐ์บฃ b๋Š” ํƒœํฌ๋œ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋ณด๊ณ  ์ž์‹ ๋…ธ๋“œ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋˜๊ตฌ์š”.
  32. Tomcatb์˜ ๋กœ์ง์ด ์ข…๋ฃŒํ•˜๋ฉด ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ๋ฅผ collector๋กœ ๋ณด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  33. Tomcat a์˜ ๋กœ์ง์ด ์ข…๋ฃŒํ•˜๋ฉด ์—ญ์‹œ ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ๋ฅผ collector๋กœ ๋ณด๋‚ด๊ฒŒ ๋˜๊ตฌ์š”.
  34. ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ์ฝ์–ด์„œ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋˜๋ฉด ์ด์™€ ๊ฐ™์€ ์„ฑ๋Šฅ ์ •๋ณด๋ฅผ ์–ป์„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  35. ์ด๋ฅผ ํ™œ์šฉํ•œ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ์‚ฌ๋ž˜๋Š” ๋งŽ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๋Œ€๋ถ€๋ถ„์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ๋ฐ”๋กœ๋ฐ”๋กœ ์ง‘์–ด ๋‚ผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋งต ๋ฐ์ดํ„ฐ์™€, ๊ฐœ๋ณ„ request๋ฐ์ดํ„ฐ๋ฅผ ์‚ดํŽด ๋ณด์‹œ๋ฉด ๋Š๋ฆฐ ๊ตฌ๊ฐ„์„ ์ง๊ด€์œผ๋กœ ์žก์•„ ๋‚ผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  36. ํ•€ํฌ์ธํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์–ด๋ ค์šด ์ ์ด ์žˆ๋Š”๋ฐ์š”. ํ•€ํฌ์ธํŠธ์˜ ๋ฐฑ์•ค๋“œ๊ฐ€ ๋˜๋Š” ํ•˜๋‘กํŒจ๋ฐ€๋ฆฌ๋“ค์ด ๊ต‰์žฅํžˆ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋ถ„์‚ฐํ™˜๊ฒฝ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ์–ด์„œ ๋ณต์žกํ•˜๊ธฐ๋„ ํ•˜๊ตฌ์š”. ํ•€ํฌ์ธํŠธ ์งˆ๋ฌธ์ค‘์— ๊ฐ€์žฅ๋งŽ์ด ๋ฌผ์–ด๋ณด๋Š” ๋นˆ๋„๋„ ์ œ์ผ๋†’์€๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  37. ์‹ค์ œ๋กœ๋„ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. Hbase๋„ ์ฃฝ๊ณ , hadoop๋„ ๋ฌดํ•œ๋ฃจํ”„๋„ ๋Œ๊ตฌ์š”. ์žฌ์‹œ์ž‘ํ•ด๋„ ํšŒ๋ณต์ด ์•ˆ๋˜๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ต‰์žฅํžˆ ๋‚œ๊ฐํ•œ๋ฐ. ์ œ์‹ฌ์ •์€
  38. ์ด๋žฌ์Šต๋‹ˆ๋‹ค.
  39. ์ผ๋‹จ ์ด๋Ÿฐ ๋ฌธ์ œ๋Š” ์ด๋ฏธ ๋‹ค ํ•ด๊ฒฐ๋œ ์ƒํƒœ๊ณ , ์šด์˜์ค‘์ธ ๋ฒ„์ „์„ ๋„ˆ๋ฌด ๊ตฌ๋ฒ„์ „์„ ์จ์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „์—…์„ ๊ฒŒ์„๋ฆฌํ•œ๋ฐ์„œ ๋‚˜์˜จ ๋Œ€๊ฐ€๋„ค์š”. ๋งŒ์•ฝ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ์ ˆ๋Œ€ ๋‹นํ™ฉํ•˜์ง€ ๋งˆ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์„ฑ๋Šฅ๋ฐ์ดํ„ฐ์— ์ข€ ๋ฌธ์ œ ์ƒ๊ฒจ๋„ ๋น„์ฆˆ๋‹ˆ์Šค์—๋Š” ํฐ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋‹ˆ. ์‰ผํ˜ธํก์„ ํ•˜๊ณ  ํ•œ๊ฐœ์”ฉ ํ•ด๊ฒฐ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. Pinpoint๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์€ ์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋ถ„๋“ค์ด ๋งŽ์„๊ฑด๋ฐ. ๊ธฐํšŒ์‚ผ์•„์„œ ์ด๋ฒˆ๊ธฐํšŒ์— hbase๋„ ๋ณด๊ณ , ํ•˜๋‘ก๋„ ์‚ดํŽด๋ณด๊ณ , ๊ธฐ์™•์ด๋ฉด ์†Œ์Šค๋„ ๋ณด๋ฉด ์ข‹์ž–์•„์š”. ์ €๋„ ๋‹ค ์•„๋Š”๊ฒŒ ์•„๋‹ˆ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
  40. ๋ณด๋‹ค ๋ณด๋ฉด ์ „๋ฌธ๊ฐ€๊ฐ€ ๋ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ํ•œ๋ฒˆ ํ•ด๋Š”๊ฒƒ๋„ ๊ดœ์ฐฎ์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์‚ฌ๋žŒ๋„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ์ž–์•„์š”, ํ•ด๋ด์•ผ ์•„๋Š”๊ฒ๋‹ˆ๋‹ค. ํ•€ํฌ์ธํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๊ธฐํšŒ๊ฐ€ ๋˜๋ฉด ๊ฒธ์‚ฌ๊ฒธ์‚ฌ ํ•ด๋ณด๋Š”๊ฒŒ ๋‚˜์˜์ง€๋Š” ์•Š์„๊ฑฐ ๊ฐ™์•„์š”. ํ˜น์‹œ ์ œ๊ฐ€ ๋งํ•œ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜์‹ ๋ถ„ ์žˆ๋‚˜์š”? ๊ทธ๋ ‡๋‹ค๋ฉด
  41. ์„ธ์ƒ์ผ์€ ์ž˜ ๋ชจ๋ฅด๋Š”๊ฑด๋ฐ. ์—ฌ๊ธฐ ๋“ฃ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๋Œ€์ƒ์ผ์ˆ˜๋„ ์žˆ์–ด์š”.
  42. ๊ณ„ํš๋Œ€๋กœ๋„ค์š”. ์ตœ์ดˆ ๋งŒ๋“ค๋•Œ๋ถ€ํ„ฐ ๊ฐ€๋Šฅํ•œ ํ•€ํฌ์ธํŠธ ๊ธฐ์ˆ  ์„ ํƒ์„ ํ–ฅํ›„์— ์ถฉ๋ถ„ํžˆ ํ™œ์šฉํ• ์ˆ˜ ์žˆ์„ ๋งŒํ•œ๊ฒƒ์œผ๋กœ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ ๊ฐœ์ธ์˜ ๋ฐœ์ „์ด๋‚˜, ๋™๊ธฐ์œ ๋ฐœ์— ๊ธ์ •์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ์š”. ๊ทธ๋ฆฌ๊ณ  ํ•€ํฌ์ธํŠธ๋„ ์˜คํ”ˆ์†Œ์Šค์ž–์•„์š”. ์†Œ์Šค๊ฐ€ ์—ด๋ ค ์žˆ๊ตฌ์š”. ์ด๊ฒƒ๋„ ์ถฉ๋ถ„ํžˆ ํˆฌ์žํ•ด ๋ณผ๋งŒํ•˜์ง€ ์•Š์•„ ํ•ฉ๋‹ˆ๋‹ค.
  43. ํ•œํŽธ์œผ๋กœ๋Š” ๋‹คํ–‰์ธ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค ์ค‘์š”์„ค๊ณ„ ์‚ฌ์ƒ์ด ์žˆ๋Š”๋ฐ. ๋ฐฑ์•ค๋“œ๊ฐ€ ์ฃฝ์–ด๋„, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ •์ƒ์œผ๋กœ ๋Œ์•„๊ฐ€๋Š”๊ฒƒ์„ ์ตœ์šฐ์„  ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  44. ๊ทธ๋ ‡์ง€๋งŒ ์‚ฌ์ƒ์€ ์‚ฌ์ƒ์ด๊ณ , ์ด๋ก ๊ณผ ํ˜„์‹ค์€ ๋‹ค๋ฅด์ž–์•„์š”, ๋ง๋กœ๋Š” ๋‹ค๋˜์ฃ . ์‚ฌ์‹ค ์ œ๊ฐ€ ์•ž์—์„œ๋Š” ์ €๋ ‡๊ฒŒ ํฐ์†Œ๋ฆฌ๋ฅผ ์ณค๋Š”๋ฐ. ์•Œ๊ณ ๋ณด๋ฉด ๋’ค์—์„œ
  45. ์ด๋žฌ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋‚˜ ์ด๋ก ์œผ๋กœ๋Š” ๊ฒ€์ฆํ–ˆ์ง€๋งŒ. ์ง„์งœ๋กœ ๊ทธ๋ ‡๊ฒŒ ๋™์ž‘ํ• ์ง€๋Š” ๋ฆฌ์–ผํ™˜๊ฒฝ์—์„œ ์‹ค์ œ ๋™์ž‘ํ•ด๋ด์•ผ ์•„๋Š”๊ฑฐ๋ผ์„œ์š”.
  46. ๊ทธ๋Ÿฐ๋ฐ ๋‹คํ–‰์ด ํ˜„์‹ค์—์„œ ๊ฒ€์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์‹ฌํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ๋ฐฉ์‹ฌ์€ ํ•˜๋ฉด ์•ˆ๋˜๋‹ˆ. ๋ฐ˜๋“œ์‹œ ๊ฐœ๋ฐœ์—์„œ ๋จผ์ € ๊ฒ€์ฆํ•ด์„œ ์šด์˜์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š”๊ฑธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์— ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ €ํฌํ•œํ…Œ ๊ผญ ์•Œ๋ ค์ฃผ์…จ์œผ๋ฉด ํ•˜๊ตฌ์š”.
  47. ์•ž์˜ ๋กœ๋“œ๋งต์€ ์ด์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฝ”์–ด ๊ธฐ๋Šฅ์—๋งŒ ์ง‘์ค‘ํ•˜๋‹ค ๋ณด๋‹ˆ. ์ข€ ๋ฏธ๋ค„์ง„ ๊ฒฝํ–ฅ์ด ์žˆ๋Š”๋ฐ. ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๊ณ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ActiveThread์ •๋„ ํ•„์š”ํ•˜์‹œ์ž–์•„์š”. ์ด๊ฒƒ๋„ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ๋” ๋ฐœ์ „์‹œํ‚ฌ๊ฑฐ๋‹ˆ. ๊ธฐ๋Œ€ํ•ด์ฃผ์…” ์•„๋งˆ 5์›”์—๋„ D2 ์˜คํ”ˆ ์„ธ๋ฏธ๋‚˜๊ฐ€ ์žˆ์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ์žˆ์œผ์‹œ๋ฉด ์ฐธ์„ ๋ถ€ํƒ๋“œ๋ฆฌ๊ตฌ์š”.
  48. github์— ๋“ค์–ด๊ฐ€์…”์„œ ๋ณ„๋„ ๋ˆŒ๋Ÿฌ์ฃผ์‹œ๊ตฌ์š”. ๋“ค์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.