no image
[Spring] Kafka 이용 시 __TypeId__ 에 대하여
Kafka 를 사용하다보면 __TypeId__ 이라는 Header 를 마주하는 경우가 있다. 이 Header 를 보았다면 아마도 JsonSerializer 를 사용하는 Kafka Producer 에서 생성된 메세지의 Header 를 보았을 가능성이 매우 높다. 이 __TypeId__ 라는 헤더는 메세지를 보낼 때의 데이터 객체 타입 이름을 가지고 있다. 아래처럼 Value 타입이 Object 인 JsonSerializer 를 사용하는 Kafka Producer 에서 send 메서드를 통해 메세지를 보낼 때, 메세지 파라미터의 데이터 타입에 따라 해당 데이터의 타입 이름이 들어가게 된다. @Override public ListenableFuture sendQueue(@NonNull final PostKaf..
2022.08.02
[ERROR] Could not write JSON: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?)
오류 내용 Could not write JSON: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?) 해결 방안 말 그대로 JSON 으로 변환할 때 Map 객체는 허용하지 않는 의미이다. 아래처럼 Map 인터페이스를 그대로 사용하면서 JSON 으로 직렬화할 때 위와 같은 오류가 생길 수 있다. @Builder @Getter @NoArgsConstructor @AllArgsConstructor public class PostKafkaProxyResponse { private String topic; private int partition; private long offset; private long timestamp; p..
2022.08.02
no image
[Network] Cookie - httpOnly / secure 차이점
직접 Cookie 의 httpOnly 와 secure 속성을 만들어가면서 어떤 차이점이 있는지 알아보았다. 소개 httpOnly - JavaScript 로 쿠키에 접근할 수 없으며, 브라우저의 통신이 일어날 때만 쿠키를 전달 secure - HTTPS 가 아닌 다른 프로토콜을 통해 쿠키를 전달하는 것을 방지 테스트 "teams_test" 라는 이름으로 httpOnly 와 secure 속성을 가진 쿠키를 사용했을 때와 안했을 때를 관찰하고, 그 차이점을 알아보는 것이 목적이다. SSL 인증서를 사용할 수 있는 환경에서 진행했으며, "test" Endpoint (일반 사용자 호스트) → "hack" Endpoint (공격자 호스트) 로 호출하면서 서로 다른 호스트라고 가정하고 실제로는 같은 호스트에서 진행하..
2022.08.02
no image
[Spring] @ModelAttribute 파라미터에서 사용 방법 및 원리
@ModelAttribute 는 클라이언트로부터 일반 HTTP 요청 파라미터나 multipart/form-data 형태의 파라미터를 받아 객체로 사용하고 싶을 때 이용된다. 사용 방법 @ModelAttribute 는 parameter, method 레벨로 두 가지의 방식을 지원하고 있다. @Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ModelAttribute { ... } @ModelAttribute 를 이용할 DTO 클래스에서는 아래처럼 생성자를 구현해도 사용할 수 있다. 단, 요청 파라미터와 매개변수 이름이 서로 같아야 한다. pack..
2022.07.30
no image
[Linux] Mac 에서 OpenJDK 17 설치하기 (Homebrew)
아래 명령어를 입력해서 다운로드한다. $ brew install openjdk@17 나타나는 화면에서 다운로드할 때 어떤 버전을 다운로드받고 있는지 확인할 수 있다. 또한 다운로드 후 사용자가 할 수 있는 작업들에 대해서 친절하게 명령어와 함께 설명을 해준다. 시스템에서 openjdk 17 을 찾을 수 있도록 아래 명령어를 입력하여 진행한다. $ sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk zsh 을 이용할 경우 아래처럼 명령어를 입력하여 PATH 에 대해서도 같이 추가해준다. $ echo 'export PATH="/opt/homebrew/opt/ope..
2022.07.27
no image
[GitLab] rsync 를 이용한 cicd 자동화 배포
2019년도에 회사 내에서 GITLAB 을 이용하여 배포 자동화 작업을 하면서 작성했던 내용입니다. 설치형 GitLab 기준으로 작성한 내용이며 gitlab-runner 사용에 대한 내용은 포함되어 있지 않습니다. Apache 내에서 특정 Document Root 를 바라보고 있을 때 rsync 를 이용하여 웹 서비스를 배포하는 내용을 담고 있습니다. 다른 방식으로 배포하는 것을 참고하려면 이 글과는 맞지 않으니 다른 글을 참고하세요. 배포 전략 rsync 를 통해 운영 서버에 업로드하며 롤링 배포를 심볼릭 링크를 이용하여 기존 버전을 교체하는 방식으로 진행할 것이다. 저장소에서 TAG Push 를 통해 배포를 한다. CI/CD 파이프라인 내에서 rsync 를 통해 업로드를 한다. CI/CD Variab..
2022.06.09
no image
[GIT] SVN 에서 GIT 으로 이전하기
회사 내에서 SVN 을 GIT 으로 이전할 때 정리하여 작성했던 내용입니다. GIT 저장소 준비 $ git clone SVN 으로부터 Clone $ git svn clone -s # ex) git svn clone svn://svn.somehost.com/some_repo some_repo_folder -s rev-parse --git-path svn: command returned error: 127 오류날 경우 git 저장소 폴더로 들어가서 아래 명령어를 실행한다. $ git svn gc 다시 clone 명령어 실행해서 이어서 진행한다. 브랜치 확인 로컬, 원격 저장소에 모두 다 제대로 불러왔는지 확인한다. $ git branch -a trunk 로 내용 가져오기 $ git checkout trunk..
2022.06.09
GIT
no image
[K8S] nodePort, port, targetPort 구분
NodePort - 외부에서 접속하기 위해 사용하는 포트 port - Cluster 내부에서 사용할 Service 객체의 포트 targetPort - Service객체로 전달된 요청을 Pod(deployment)로 전달할때 사용하는 포트 apiVersion: v1 kind: Service metadata: name: helloworld-service spec: ports: - nodePort: 31001 port: 8080 targetPort: 80 protocol: TCP selector: app: helloworld type: NodePort https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=freepsw&logNo=2219100..
2022.06.08
no image
[DB] Oracle 특정 값 max/min 에 대한 column 선택
SELECT -- 제일 큰 값 MAX(seqno) KEEP (DENSE_RANK FIRST ORDER BY cnt DESC) -- 제일 작은 값 MIN(seqno) KEEP (DENSE_RANK LAST ORDER BY cnt DESC) FROM some_table
2022.06.08
DB