목록전체 글 (54)
우리네 장

서비스에서 gateway 도메인으로 접근 시, 특정 endpoint 도메인으로 리다이렉트 시켜주는 alb 구성을 지켜보다가, redirect에 대한 이해가 조금 부족한 듯 싶어 정리해본다. Http Status Code http 프로토콜에 정의된 상태 코드 중 리다이렉트를 의미하는 상태코드는, 301과 302 그리고 308 이 있다. 브라우저에서는 해당 상태 코드에 대해서 리다이렉트가 되도록 처리가 되어있어서, 사용자는 네트워크 탭을 열어서 확인하지 않는 이상 알아채긴 힘들다. 그래서 나도 자동으로 위 상태코드가 나오면 자동으로 리다이렉트가 처리되는 거라고 생각했다...ㅎ 일단 상태 코드 특징에 대해서 먼저 알아보면, 301 과 302 해당 코드가 나오면 웹 브라우저나 spring의 restTemplat..

byteBuddy 라이브러리를 이용해서 바이트 코드를 조작하는 실습을 해보았다. 일단, 기본으로 클래스의 바이트 코드를 변경하는 예제를 확인해보자. try{ new ByteBuddy().redefine(Moja.class) .method(ElementMatchers.named("pop")) .intercept(FixedValue.value("Rabbit!")) .make() .saveIn(new File("D:/study/boot/ModiByteCd/target/classes")); }catch( IOException ) { } Moja라는 클래스를 재정의 할 것인데, pop이라는 이름의 메소드와 일치하는 메소드를 찾아서 처리 중간에 가로채, 고정 값인 Rabbit!을 출력해준다는 의미이다. 그런데, 위..

자바 강의를 듣다가 pom.xml에 작성된 plugin이 갑자기 이해가 되지 않아 적어보는 goals와 phases 개념... 정말 좋은 글을 찾아서, 해당 글을 간략히 정리하는 포스팅을 올린다! 출처 : https://tomgregory.com/maven-phases-vs-goals/ Maven phases vs. goals Get a full understanding of the difference between Maven phases and goals, and learn how to execute each of them tomgregory.com Build 란? 빌드란 소스 파일을 컴파일하고 validation과 테스트 과정을 거쳐 하나의 jar 및 war 등의 형태의 package 형태의 결과물을..
이번에 유지보수를 맡게 된 프로젝트가 있다. STG에서 수기로 해당 프로젝트의 was을 스크립트를 이용해 shutdown과 startup만 해주었을 뿐인데, 아주 무수히 많은 에러가 나왔다....ㅎ 일단, 서버 재기동 시에 크게 2가지 Exception이 발생하였다. 1. java.net.KnownHostException 이 발생하면서 GUID 생성을 못한다는 에러 2. FATAL : remaining connection slots are reserved for non-replication superuser and rds_superuser connections 1. java.net.KnownHostException 가 발생하면서 GUID 생성을 못한다는 에러 위 에러는 ehcahe 라이브러리에서 발생하는..
습관적으로 사용하던 static final을 왜 쓰는지 적절한 static practice에 대해 알아보자! 여러 자료를 바탕으로 작성한 글이기에 이의 제기는 아주 좋습니다 Static 변수 정의에 대해서 먼저 말해보자면, 임의의 클래스 A의 인스턴스들이 공유하여 접근하는 공유자원 이라고 말할 수 있다. 즉 그 인스턴스 들이 해당 변수에 대하여 모두 같은 주소 값을 가지는 것을 의미한다. static 변수는 인스턴스 변수와 달리 인스턴스에 속하지 않고, 클래스에 더 가까운 변수이다. 그래서 클래스가 load 될 때 메모리를 할당 받으며 초기화 된다. 즉, 클래스의 생성자 실행 여부와 상관 없이 위 과정이 진행된다는 의미이다. 그럼 제목처럼 static 변수를 사용하기에 적절한 방법은 무엇일까...? 언제..

스프링 프레임워크를 사용하면 다양한 xml 파일을 통해 빈 설정을 하게 되는데, 이때 어플리케이션이 올라가는 환경마다 설정파일을 변경해서 적용해야 하는 경우, 환경 변수를 통해 동적으로 관리하곤 한다. 스프링에서는 profile 이라는 설정을 통해 환경마다 생성 될 빈을 관리할 수 있는데, 톰캣 환경 변수에 " spring.profiles.active " 라는 값을 설정해놓고 사용한다. ( 예시. -Dspring.profiles.active=dev ) 요 값을 이제 xml 스프링 설정 파일에서

동기화 기법을 소개하며 보았던 Thread.join().. Thread 클래스의 메소드들은 뭔가 명칭이랑 실 기능이 매칭되지 않는 것들이 있는 거 같다.. 며칠 지났다고 그새 까먹은 동기화 ㅠ-ㅠ.. 다시 재적립 해보쟈! 일단, 매우 간단한 예시를 보며 설명하겠다. 예시로 들기도 민망한 코드..^^! Thread 클래스를 상속받은, 1~100까지를 출력해주는 역할을 하는 스레드 3개를 만들었다. 일단 간략하게 Thread 메소드에 대해 짚고 넘어가자면, interrupt() : 실행 중간에 끼어드는 느낌인데, 놀랍게도 thread 실행을 멈추는 메소드. start() : 스레드를 실행시키는 메소드이다. run()과 다른 점은? start는 스레드 객체를 생성하여 실행한다는 것. run은 일회성으로 스레드..

모니터... 그 모니터가 아니었다...!^^ 이전에 작성했던 스핀락 + 뮤텍스 + 세마포어 의 개념을 모니터를 이해한 후 그 쓰임에 대해 확실히 알게 되었다! 모니터 ( Monitor ) 일단 모니터 또한 동기화 기법 중 하나이다. 기본 동기화 기법을 좀 더 응용한 메카니즘...? 모니터가 중요하게 느껴지는 이유는 Java에서 사용하고 있음일 것이다! 모니터를 이루는 구성 요소는 다음과 같다. : Mutex ( 뮤텍스 lock ) + Condition Variable 뮤텍스는 전 게시글에서 보았으나, Condition Variable은 무엇일까?? 모니터의 사용 목적을 먼저 보자! 1. 상호 배제 (mutual exclusion)을 보장한다. 2. 조건에 따라 스레드를 대기 상태 ( sleep )로 전환..