; engineering & philosophy

  • GC (가비지콜렉션) 을 왜 알아야 해?

    GC는 왜 알아야할까? 학생 때는 의문이 있었다. ‘나는 그냥 코드레벨만 구현하면 되는거 아닌가?’‘JVM 이 알아서 GC해주고 그런거 아님?’ 근데 일을 하다보니, JVM 기반으로 구동되는 Springboot을 사용하게 되었는데 메모리 릭이 발생한다면 탐지해야되고, 원인을 알아내야하고 해결해야하는 상황이 생긴다.그래서 기본 개념을 알고 있어야 한다. 왜냐면 각 회사의 그라파나에 모니터링 지표도 Eden, Old Gen 과 같은 구분으로 각각 지표가…

  • 메모리 유실 알아보기

    JVM 기반의 어플리케이션을 운영하다보면 메모리 문제를 겪을 때가 있다.그럴 때, heapMemory 를 확인해봐야 하는데, threadDump 를 떠서 추출한 후에 Eclipse의 Memory Analyzer 프로그램으로 열어보면 된다. 요번에 팀원께 보는 방법을 알아내서 기록한다 ㅎㅎ 나는 이번 케이스의 경우, dominator_tree에서 percentage 순으로 내림차순 정렬 후에 메모리를 가장 많이 차지하고 있는 요소를 트리를 타고 내려가보니 queryPlanCache 가 문제가 되고…

  • [스프링공부 5/100] ThreadLocal 사용하기

    [스프링공부 5/100] ThreadLocal 사용하기

    ThreadLocal을 사용하기 위한 예시 어떤 예시가 적합할까? HTTP 요청이 왔을 때, Header 에서 UserId 를 가져온 다음 ThreadLocal 에 넣어주기동일 쓰레드 내에서는 어디서나 꺼내서 사용할 수 있도록(물론 HTTP 헤더는 어떤 값이든 넣을 수 있기 때문에 내부 gateway 에서 넣어주거나 등 보장되지 않는 값이라면 이렇게 사용하는건 위험) ThreadLocal 역할의 클래스를 생성 및 등록 일단 유저의 맥락…

  • [스프링공부 4/100] Annotation 으로 로깅하기

    [스프링공부 4/100] Annotation 으로 로깅하기

    @LogAround 라는 어노테이션을 내가 커스텀하게 생성하고 그 어노테이션이 있으면 실행전과 후에 로깅을 하고 싶다 일단 LogAround 라는 이름의 어노테이션을 생성해보자 Annotation 생성 그 다음 Aspect 정의 파일에 다음과 같이 추가했다. Pointcut 22라인: ‘이 어노테이션일 때’ 를 정의한다 (PointCut) Around 27라인: 그 때, @Around 를 실행하도록 정의한다 결과: 로그가 잘 찍혔다.

  • [스프링공부 3/100] Aspect 와 Pointcut 으로 log 찍기

    [스프링공부 3/100] Aspect 와 Pointcut 으로 log 찍기

    아래 코드는Pointcut 을 사용해서 컨트롤러 패키지 하위에 있는 모든 컨트롤러 클래스의 모든 메소드에서 특정 로직을 실행시킨다 그놈의 Aspect @Aspect 는 왜 다는걸까 싶었는데 ‘이 클래스가 Aspect 역할을 한다’는 것을 표기하기 위한 마킹 역할만 있고 자체로는 기능이 없다. 허무하다.. Pointcut pointcut 은 어떤 상황에서 코드가 실행될지 ‘때’를 정의하는 어노테이션이다. 그것 말고는 역할이 없다. 파라미터로 전달받는것도 없기…

  • [스프링공부 2/100] json 을 응답해보자

    일단은 이렇게 컨트롤러 샘플을 만들었고 json 으로 응답이 오는 것 까지 확인했다. ResponseEntity 를 명시적으로 사용하려고 하니까 거추장스러워서 조금 더 좋은 방법을 찾아봐야겠다

  • [ 스프링공부 1/100 ] 개발 세팅

    처음부터 너무 거창한 것을 기준으로 잡고 공부를 하면 안될 것 같다. 그럼 시작하기가 너무 힘들고 시작하기 전에 지치게 된다. 첫번째 목표는 springboot 를 로컬에 띄우는 것이다. 앞으로의 로드맵을 구체적으로 만들면 좋겠지만.. 그것도 욕심이라고 생각한다. 일단 해야한다. 어디까지 토이 프로젝트를 발전시킬지는 모르겠다. 다만, 안해야할 것들을 세우고 지켜야 한다.시간은 금이다. not to do – 인프라 레벨까지 학습하지…

  • [EPISODE-1] 장애가 났다

    서버 개발자는 서버에 문제가 생겼을 때를 대비해서 항상 신경을 써야 하죠.서버 개발자의 숙명인 것 같습니다. 장애가 났을 때 대응하는 팁과 저의 생각을 공유합니다. 커뮤니케이션 문제가 생겼을 때는 메신저에 등장한 후에 ‘내가 확인중’이라는 메세지를 전달해야 합니다. 말로 하든 이모지를 표시하든 말이죠. 그렇게 해야하는 이유는 장애 상황을 알게 된 모든 팀원들은 문제가 해결중임을 모를때 계속해서 추가 액션을…

  • [워드프레스] wordpress 를 설치해서 사용하기

    aws 로 설치 할 때 주의할 점이 있다 ip 다 aws 의 서버는 기본적으로 static ip (혹은 elastic ip) 를 가지고 있지 않다. 별도로 지정을 해줘야 고정 IP 가 생긴다. 따라서 처음에 생긴 public ip 는 서버가 재부팅될 때마다 바뀌게 된다. 따라서 고정 IP 를 지정해주는 것이 좋은데 문제는 이걸 할당을 해주고 나면 public ip…