728x90

분류 전체보기 166

HTTP Trace Method 와 취약점(XST)

Trace Method 란? HTTP Method 중 하나인 Trace Method 는 Client - Server Side 간 Loop back Test 를 진행할 수 있게 도와준다. 아래 실제로 TraceMethod 를 날린 결과값을 보자. 위의 메소드의 결과물을 보면 TLS Handshake 가 잘 맺어졌고, CERT 도 통과하고 등등 서버에서 어떤 일이 일어나는지 확인할 수 있다. HTTP2 를 이용해서 multiplexing 이용하고 있음을 알 수 있다. 이렇듯이 내가보낸 통신이 어느지점에서 에러가 났는지 Trace 하기 위해서 사용하는 메소드이다. 주로 Via 나 X-Forward-For 와 함께 사용하여 추적도 가능하나, 두개의 헤더는 사실상 조작하는 경우도 많아서 완전히 신뢰해서는 안된다...

카테고리 없음 2022.05.29

[EffectiveKotlin-Item02] 변수의 스코프를 최소화 해라

변수의 스코프를 최소화 해라 만약 loop 안에서만 변수가 쓰인다면 loop 안으로 변수를 넣어서 scope 를 최소화 해라. 보통의 언어 에서 변수의 scope 는 보통 curly braces 안으로 생성지만, Kotlin 에서는 외부의 변수에도 접근 가능하다. 음, 내가 생각해도 뭔가 잘 읽기 힘들게 적은거 같아 코드로 적어보려고 한다. val a = 1 fun fizz() { val b = 2 print(a+b) } val buzz = { val c = 3 println(a + c) } 위의 예시를 보면, buzz 와 fizz 의 curly braces 지역 scope 에서 외부 변수인 a 에 접근할 수 있음을 알 수 있다. 반대로 모두 알고 있겠지만 Outer area 에서 inner functi..

Kotlin 2022.05.29

TypeORM DistinctQuery 가 원치 않는데도 나는 문제

현재 팀내 Legacy Code 에서는 TS 기반의 TypeORM 이 존재하는데 걷어내야 될 존재라 Flow 만알고, 이 프레임워크가 어떻게 돌아가는지는 잘 공부하진 않았다. Migration 대상에 시간을 투자하는건 별로 효율적이지 못하다고 생각해서이다. 최근에 SlowQuery 를 개선하며 DBA 분과 이야기하는데, 왜 이부분에서 distinct query 가 예전부터 날라오는지 잘 모르겠다. 라며 이야기를 해주셨고, 그 코드를 한번 파헤쳐봤는데 distinct 가 될만한 거리는 보이지 않았다. TypeORM 에서 distinct 를 하기 위해서는 .disctinct(true) 를 하거나 .select('select distinct a') 이런식으로 적어줘야 한다고 알고 있었다. 하지만 우리의 코드에..

TypeScript 2022.05.27

Effective Kotlin - Item01

가변성을 제한해라 들어가기에 앞서 이건 완전한 번역글이 아닙니다. 원서를 읽고 느낀점을 적은 글 입니다. 본문 일단 첫장 부터 가변성을 제한하라고 적혀있다. 책에서 나온 글귀중 이런 글이 있다. When an element holds state, the way it behaves depends not only on how you use it, but also on its history 나는 이뜻을 이렇게 해석했는데 element 가 상태를 지니고 있을때 상태를 다루는 방법은 오직 어떻게 사용하는 것에만 의존하는 것이 아니라 그것의 History(객체의 변화 상태를 보여주는 것이라고 나는 해석했다) 에도 관련있다. 그래서 아래 예시가 나오는데 같이 한번보자. class BankAccount { var ba..

Kotlin 2022.05.25

GC 분석해보기

이번에 새로 진행하는 신규 프로젝트를 작업중이였는데 모니터링을 하던 도중 의도치 않게 MinorGC 가 자주 발생하고, 시간 또한 긴것을 발견하였다. 그래서 이를 어떻게 개선했는지 그 방법에 대해서 적어보려고 한다. 탐색 일단 Spring Application Proccess 의 번호를 알아야 한다. jps 프로세스를 알았다면 현재 HeapDump 를 떠서 확인해야 한다. (내 프로세스 번호는 6485번 이였다.) jmap -dump:format=b,file=heapdump.hprof 6485 잘 dump 가 떠졌다면 아래와 같이 heapdump.hprof 라는 파일을 확인할 수 있을 것이다. 이 파일을 열기 위해서 GC 를 Monitoring 할 수 있는 도구인 VisualVM 을 이용했다. Dump ..

Kotlin 2022.05.24

AWS LogInsight 를 통해 RDS 하루마다 발생하는 SlowQuery 개수 검색하기

AWS LogInsight Query 를 사용하다보면 이런 생각이 문득든다. @message field 안에 들어있는 메세지들을 어떻게 분리하여 검색조건으로 사용할 수 있을까? 혹은 @message 안에 텍스트들을 내가 특별하게 변수로 활용할 수 있을까? AWS LogInsight Query 를 공부해보거나 많이 사용해봤다면 알수도 있겠지만 이런 방법에 대해 설명해보려고 한다. 이제 어떻게 @message 내부를 검색의 조건으로 사용할 수 있는지 알아보도록 하자 예시 위의 사진을 보라 @message 본문의 내용들이다. 밑에 SELECT * FROM 뭐시기와 같은 field 도 적혀있다. 다만 보안상 쿼리는 보여줄 수 없어서 적지 않았지만 생김새는 RDS 의 slowQuery log 를 생각하면 된다. ..

AWS 2022.05.23

HTTP Pipelining

HTTP Pipelining 기존 HTTP/1.0 에서는 여러개의 Request 와 Response 를 순차적으로 받기 위해 아래와 같은 방식으로 Transaction 에서 요청과 응답을 처리했다. 위와 같은 형테이므로 여러건의 요청이 오게됬을때 하나의 과정 (요청을 보내고 응답을 받기까지) 이 마치고 난뒤에야 다음 요청에 대한 과정을 진행할 수 있는 구조였다. 그래서 여러건의 요청을 보내야 하는 요청-응답의 구조가 순차적이므로 상황에서는 시간이 오래걸릴수 밖에 없었다. 또한, 한가지 문제가 더 있었는데 똑같은 도메인에 대해 요청건을 많이 보내게 될 경우가 대다수인 브라우저 환경에서 새로운 요청을 보낼때 다시 TCP Connection 을 맺게 되는 경우 TCP 의 Slow Start 나, 다시 3-Wa..

CS 2022.05.22

End-To-End Header / Hob-by-Hob Header

End-To-End Header / Hob-by-Hob Header End-To-End Header end-to-end Header 는 마지막 Receiver 에게 전달되어야 하는 Header 입니다. 따라서 Proxy 서버에서 이를 임의로 변경해서는 안됩니다. Cache-Entry 의 일부로 저장되어야 Hob-By-Hob Header 현재 Transaction 에서 사용되는 Header 입니다. Hob-By-Hob Header 가 Final Receiver 에게 갔을때 Client 는 Nginx(Web Server) 와 Keep-Alive Connection 을 맺고 싶어 Connection: keep-alive 헤더를 넘겨주었는데, Nginx 에서 이를 해석하지 못하고 Application Serve..

CS 2022.05.22

AutoScailing Group 만들어보기

Auto Scailing Group 이란? Auto Scailing Group 은 AWS 에서 제공하는 다중 서버 서비스이다. Auto Scailing Group 에 묶인 인스턴스들은 같은 성능과 같은 코드를 가지고 있다. 따라서 우리는 ASG 를 통해 우리가 원하는 서버의 인스턴스를 다수로 늘리거나 줄이는 것을 관리할 수 있다. 실습 일단 ASG(AutoScailing Group) 을 만들기 위해 하나의 인스턴스가 필요한데, 이건 각자 알아서 만들어 오길 바란다. Spring 으로 뛰어와도 좋고 어떤 방식으로던 Server 를 뛰어오면 된다. 이미지 생성 일단 준비해온 인스턴스를 이미지(Amazone Machine Image?) 로 만들어야 한다. 이미지로 만들어야 하는 이유는 우리가 ASG 로 운용할..

AWS 2022.05.18

Kotlin Delegation

Delegation 은 코틀린에서 지원하는 문법적 기능 중 하나인데, 이는 Delegation Pattern 의 Boiler Plate 를 줄여주는 Sugar Syntex 중 하나이다. Delegation Pattern 은 쉽게 말해 상속이 아닌 다른 객체에게 세부 구현을 위임하는 것이다. 공식문서의 예제를 한번 살펴보자. interface Base { fun print() } class BaseImpl(val x: Int) : Base { override fun print() { print(x) } } class Derived(b: Base) : Base by b fun main() { val b = BaseImpl(4) Derived(b).print() } 위의 예제는 Derived 의 내부 인터페이..

Kotlin 2022.05.16
728x90