본문 바로가기

Back

(30)
서비스 디스커버리, 서비스 레지스트리 패턴이란? 마이크로서비스를 공부하다 보면, 서비스 자체보다 그 기반 서비스에 대한 다양한 패턴이 이해가 안 될 때가 많다. 그 중에서 가장 시작점이 되는 서비스 레지스트리 및 서비스 디스커버리 패턴에 대해서 간단하게 알아보고자 한다. 1. 서비스 디스커버리 패턴 클라우드 기반 마이크로서비스 패턴에서는 다양한 클라이언트에 대응하는 단 하나의 진입점을 생성하는 API GATEWAY 패턴을 사용한다. API GATEWAY는 어떤 서비스를 호출하라는 요청을 받는다면, 그 서비스를 호출하기 위한 두 가지 절차가 필요하다. 최적 경로를 찾기 위한 라우팅. 부하 분산을 위한 로드밸런싱. 두 가지를 활용하여 서비스 호출에 대한 요청을 응답하는 것이 서비스 디스커버리 패턴이다. 2. 서비스 레지스트리 패턴 최적 경로를 찾기 위해서..
strcmp() 같은, 0과 1을 반환하는 함수를 이용한 테크닉 어떤 값이, 프로그래머가 생각한 값이 맞는지 확인하는 수없이 많은 함수가 존재한다. 간단하게 true / false로 값을 반환하는 경우도 많지만, 일부 함수는 0과 1, 혹은 -1과 0, -1과 1등 숫자를 이용하여 값을 검증하는 경우도 많다. TRUE / FALSE를 이용하는 함수는 그 자체로 매우 직관적이라서 따로 눈여결 볼 건덕지가 없다. 하지만 숫자를 반환하여 참과 거짓을 판단하는 함수는 몇 가지 테크닉이 존재한다. 예를 들어, 일반적으로 TRUE는 1, FALSE는 0으로 표현할 수 있다. 어떤 값을 검증하는 함수가 0과 다른 숫자를 반환한다면, 오히려 !
Java transient 사용하는 이유가 뭘까? 심심해서 눈에 띈 Exception 클래스를 하나하나 까보다가 특이한 것을 발견했다. transient 처음 보는 용어였다. 클래스도 아니고 접근제어자도 아닌데 떡하니 적혀있다. private transient Object backtrace; 이런 식으로 말이다. 정말 특이한 녀석이라서 궁금증이 생겨서 찾아봤다. 생각보다 결론은 간단하다. 직렬화 과정(Serialize)에서 특정한 정보를 배제하여 null 값을 출력하도록 하는 녀석이다. 비밀번호 같은 민감한 개인정보를 노출할 우려가 있다면 직렬화시 배제하도록 명령하는 것이다. 따지고 보면 접근제어자 느낌인데 그런 놈은 배운 적이 없다. 신기방기. 직접 사용처가 보고 싶다면, Exception 클래스를 찾아보면 된다. 예시는 다음과 같다. public c..
자바독을 간단하게 알아보자 (JavaDoc) 자바를 사용하면 주석을 자연스럽게 활용하게 된다. 그런데 주석에도 종류가 있고 그 중에는 JavaDoc이라고 불리는 주석도 존재한다. /** * * */ 이런 형태로 작성된 주석을 JavaDoc, 자바 문서화라고 부른다. 실제로 저런 클래스, 메서드 위에 자바독 어노테이션과 함께 작성하면 해당 내용을 HTML로 바꿔서 자동으로 문서로 제작해준다. 문서화가 필수인 기업용 어플리케이션에서는 자주 사용하는 기능이다. 자바독 어노테이션에서 알아두면 좋은 어노테이션은 다음과 같다. serializable 관련된 어노테이션은 자주 안 쓰는 것 같아서 배제했다. /** * * @author : 작성자 * * @deprecated : 지원 중단 * * @exception : 예외 처리 * * @param : 매개변수 ..
[Spring] MediaType에 text/plain; utf=8;은 어떻게 적용할까? MediaType을 사용하여 consumes, produces에 오타없이 상수를 적용할 수 있다. 하지만 text/plain;charset=UTF-8; 이건 해당하는 상수가 없다. 반드시 적용해야 한다면 찾아보니 현실적으로 쓸 이유가 있는 건 하나 밖에 보이지 않았다. MediaType의 valueOf() 메서드를 사용하는 것이다. MediaType.valueOf("text/plain;charset=UTF-8;") 하지만... 굳이 저렇게 쓰라고 할 이유가 있을까? 단순히 패턴을 통일한다는 점 외에는, MediaType을 반드시 붙여야하는 근거를 말하기 어렵다. 설득하기 어려우니 아마도 안 쓸 것 같다.
[에러-잡기] @ExceptionHandler를 통한 예외 처리 에러 핸들링에 대해서 공부하는 와중에 정말로 이해하고 쉬운 예시를 보여주는 블로그를 찾았다. 이론 정리도 할 겸 해당 블로그 주소와 함께 예시를 가져와 봤음. 스프링 공식 문서를 정리한 것이라고 한다. @ExceptionHandler를-통한-예외처리 [스프링부트] @ExceptionHandler를 통한 예외처리 @ExceptionHandler는 Controller계층에서 발생하는 에러를 잡아서 메서드로 처리해주는 기능이다.Service, Repository에서 발생하는 에러는 제외한다.간단한 예시부터 살펴보자.이렇게 @Controller로 선언된 클 velog.io 큰 틀에서 보자면 기존 방식 >> 새로운 방식으로 전환하는 방향으로 예시가 적혀있다. 컨트롤러 내부에서 발생한 에러를 컨트롤러에서 매번 처리..
JDK를 왜 변수에 추가해야 할까? 시간이 나서 처음부터 올라가자보자는 마음에 메모장에서 자바 파일 만들기부터 시작해봤다. 그런데 은근히 절차가 기억이 안 나더라... 이런 게 기초가 부실하다는 걸까? 마음을 다 잡고 과정을 천천히 되새겨 봤다. 1. 메모장에 메인 클래스와 메인 메서드를 작성한다. 2. 내용을 적고 사용할 기능이 담긴 라이브러리를 추가한다. 3. 파일 확장자를 모든 파일로 설정한 뒤, 파일이름.java 형식으로 저장한다. 4. 저장한 파일을 JDK의 bin 폴더에 넣는다. 5. 자바 컴파일러를 활용해 바이트 파일을 생성한다. 6. 자바 런타임을 활용해 바이트 파일을 읽어 프로그램을 실행한다. 런타임 과정을 보다 세부적으로 본다면, 7. 바이트 파일을 자바 클래스 로더에 담아서 자바 클래스 라이브러리를 로딩한다. 8. 메모..
[로직-프로젝트] 표현식 관련된 로직들 다양한 언어에 적용할 수 있도록 보편적인 정규표현식으로 적어봄. 너무 정리가 잘된 곳이 있어서... 참고함. https://hamait.tistory.com/342 이메일 /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i 전화번호 /^\d{3}-\d{3,4}-\d{4}$/ 핸드폰 번호 /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/ URL ^(https?):\/\/([^:\/\s]+)(:([^\/]*))?((\/[^\s/\/]+)*)?\/?([^#\s\?]*)(\?([^#\s]*))?(#(\w*))?$ ^(https?):\/\/ ([^:\/\s]+) (:([^\/..
[로직-프로젝트] 보편적인 로직을 모아놓자 다양한 웹사이트, 어플리케이션에서 흔히 볼 수 있는 보편적이지만 핵심적인 로직을 간단하게 정리해놓고자 본 카테고리를 열었다. 생각날 때 마다 추가하는 방향으로 하겠음. 내가 간단하게 찾아볼 수 있도록 로직-프로젝트라는 명칭으로 지속적으로 올리도록 함.
자바 시그니처? 간단하게 알아보자 자바 입문 단계에서는 마주칠 일이 없는 단어가 시그니처다. 하지만 스프링을 배우면 각종 영역에서 signature라는 메서드를 콜하는 경우도 종종 있고, 메서드 시그니처라는 용어도 가끔씩 볼 수 있다. 대체 무엇이길래 은근히 쓰이는 것일까? 간단하게 알아봤다. signature. 서명을 뜻한다. 자바에서는 서명을 하는 의미를 가져와서 시그니처라고 부른다. 서명은 무엇인가? 공통된 여러 필적 혹은 그에 준하는 것을 비교하고 대조하여 동일성을 입증하는 방식이다. 자바에서는 동일성을 입증한다, 그 부분에 해당하는 의미를 따와서 사용한다. 자바에서 시그니처란 특정한 것을 구분하는 데 필요한 요소의 집합을 뜻한다. 그렇다면 메서드 간 서로 같다는 것을 어떻게 증명하는가? 간단하게, 식별자와 매개변수가 동일하면 같..