전체 글 89

[데이터분석]GTM 개념(+변수,트리거,태그)

1.GTM연동이 우선내 프로젝트에서 프론트는 리액트로 이루어져있다.그리고 향후 사용자들에 대한 데이터 분석을 위해 GA4(구글 애널리틱스4) 연동을 했다.우선 나는 리액트와 GA4를 다이렉트로 연결하지 않고 리액트>GTM(구글 태그 매니저)>GA4 이렇게 구성했다.중간에 GTM이라는 매개체를 둔 것이다.만약 GTM을 중간에 두지않고 GA4를 직접 연결한다면 데이터 분석을 위한 프론트 코드의 확정성이 매우 떨어지게 된다.예를 들어, GA4 뿐만 아니라 다른 데이터 분석 도구를 추가한다면 그때그때마다 각 데이터 분석도구를 위한 전용 코드를 그때그때마다 추가하면서 복잡해지게 되기 때문이다.그러나 중간에 GTM을 두면 데이터 분석을 위한 이벤트가 발생했을 때 구글 태그 매니저가 받아서 이걸 GA뿐만 아니라 원하..

씬커넥트 2026.04.12

Presigned URL을 통한 S3 업로드

보통, AWS S3에 최종적으로 파일을 저장시킬 때 사용자(클라이언트)->서버->S3 이 구조를 통해 업로드가 된다.예를 들어, 채용플랫폼이 있고 구직자가 자신의 이력서와 함께 구직 신청을 하는 API가 있다고 해보자.그러면 아래처럼 resume를 MultipartFile로 받아서 s3Client.putObject를 통해 S3에 업로드 되는 로직이다. public void createJobApplication(Long id, CreateReqDto dto, MultipartFile resume){ String objectKey = UUID.randomUUID(); PutObjectRequest putObjectRequest = Pu..

[리눅스] 깃랩 디스크 폭증(+컨테이너 로그)

도커이미지를 사용해 깃랩 서버를 만들었는데 사용자가 거의 없는 수준임에도 불구하고 디스크 사용량이 빠르게 찼다.(거의 하루에 1GB가 넘게?) 처음에는 논리적 볼륨 디스크 확장을 시도했음에도 불구하고 빠르게 꽉 찼다.*LVM 기반 디스크 확장 https://gotopm.tistory.com/169 [리눅스] 서버 디스크 확장하기(+LVM)사내에 깃랩 서버를 구축했다.그런데 사내에 또 다른 깃랩 서버가 이미 구축이 되어있는데, 같은 사양(4CPU,8GB)의 서버임 에도 불구하고 내가 구축한 깃랩 서버에서 가끔가다 깃랩이 다운되는 문gotopm.tistory.com 워낙 처음에 서버 요량을 30GB로 작게 잡았으니 LVM기반 확장을 해도 부족하니 아예 근본적인 디스크 확장을 해야겠다 싶었다.그런데 디스크를..

리눅스 2026.01.19

[리눅스] 서버 메모리 확장하기(+Swap)

메모리란?메모리란?현재 실행중인 프로그램이 사용하도록 OS가 제공하는 공간이다.그리고 메모리의 주 작업 공간은 RAM(Random Access Memory)이다.(*RAM을 간단하게 메모리라고도 부르지만 여기서는 그 개념을 분할하여 사용하고자 한다.)리눅스에서 현재 시스템의 메모리 상태를 요약해서 보여주는 명령어는 free -h다.free -h그러면 아래와 같은 상태를 확인할 수 있다.(Swap설정을 아직 하지 않았다면 0으로 표기된다) total used free shared buff/cache availableMem: 3.8Gi 2.9Gi 120Mi 24Mi 780Mi ..

리눅스 2026.01.12

[Gitlab] Gitlab Runner 설치하기

1.서버에 Gitlab-Runner 설치하기Docker를 통해 gitlab을 설치한 상태에서 gitlab-runner까지 등록하는 절차다.먼저 아래 명령어로 따로 gitlab-runner를 설치한다. ① 패키지 저장소 추가curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash② Runner 설치sudo apt install gitlab-runner -y 설치가 다 되면 잘 설치 되었는지 확인해본다.sudo systemctl status gitlab-runner 서버에 깃랩 러너 설치가 잘 되었고 이제 다시 깃랩 UI(관리자 계정)로 들어간다. 2.UI에서 러너 인스턴스 만들기..

리눅스 2026.01.09

[리눅스] 서버 디스크 확장하기(+LVM)

사내에 깃랩 서버를 구축했다.그런데 사내에 또 다른 깃랩 서버가 이미 구축이 되어있는데, 같은 사양(4CPU,8GB)의 서버임 에도 불구하고 내가 구축한 깃랩 서버에서 가끔가다 깃랩이 다운되는 문제가 발생했다. 그 원인을 찾던 중 내가 구축한 서버의 램 메모리가 부족했다.그런데 다른 서버도 같은 메모리인데?더 찾아보니 다른 서버는 Swap설정이 되어있었고, 내가 만든 서버는 Swap설정이 되어있지 않았다.그래서 Swap설정 하려하는데 디스크가 꽉 차 불가하다는 메세지를 확인했다.그래서 디스크를 확장하는 것까지 이르러 그 과정을 정리하고 이 글을 쓴다. *swap : RAM이 부족할 때를 대비해, 디스크의 일부를 '임시 메모리' 처럼 쓰도록 만든 공간디스크란?운영체제가 데이터를 영구적으로 저장하기 위해 ..

리눅스 2026.01.08

[리눅스]logrotate(로그로테이트)란?

Logrotate란?리눅스에서 사용할 수 있는 로그 관리 프로그램이다.그렇다면 왜 Logrotate가 필요할까?예를 들어 리눅스에서 nginx를 실행중이라면 /var/log/nginx/access.log 에 계속해서 로그가 쌓일 것이다.그러다 보면 어느순간 디스크가 꽉 차는 상황이 발생하게 되고 이로 인해 장애가 발생하게 된다.이를 방지하기 위해 로그를 자동으로 관리하게 하는 프로그램이 Logrotate다. Logrotate의 기능은 아래와 같다.회전(rotate)새 로그 파일 생성압축보관 개수 제한주기 관리(daily,weekly,monthly)logrotate의 이름에서 알 수 있듯이 가장 핵심이 되는 기능이 rotate다.예를 들어 access.log에 계속해서 쌓이는 로그를 access.log-2..

리눅스 2025.12.29

[Spring] 커스텀 어노테이션 만들기 - 2.메서드 실행시간 측정 어노테이션

이전 포스트를 통해 spring-aop-starter의존성을 추가했을 것이다.이제는 메서드 실행 시간을 측정하는 커스텀 어노테이션을 만들어보자. 먼저 아래처럼 쓰일 수 있는 어노테이션을 만들 것이다.이 어노테이션은 어노테이션이 붙은 메서드가 실행될 때 실행시간을 측정하는 동작을 수행하는 것을 목적으로 한다.@LogExecutionTimepublic void updatePost() { ...} 1.커스텀 어노테이션 정의@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface LogExecutionTime {} 1-1.@interface 사용자바에서 어노테이션은 java.lang.annotation.Annotation..

[Spring] 커스텀 어노테이션 만들기- 1.AOP란?

어노테이션?어노테이션은 메서드처럼 실행되는 로직이 아니다. 단순히 특정 위치(ex.클래스,메서드,파라미터)에 부착된 메타데이터다.어노테이션으로 인해 수행되는 동작은 해당 어노테이션을 탐색하고 해석하는 프레임워크 컴포넌트에 의해서 결정된다. 위 표에서 보듯이 어노테이션을 해석하는 주체는 다양하지만, 실무에서 자주 만들어지는 커스텀 어노테이션의 상당수는 메서드 실행 전/후에 공통 로직을 적용하기 위한 목적을 가진다.이러한 경우, 메서드 실행 흐름에 개입할 수 있는 Spring AOP가 해석 주체로 선택되는 경우가 많다. Spring AOP?먼저 AOP는 프로그래밍 방식이고, Spring AOP는 이 AOP라는 프로그래밍 방식을 구현한 스프링의 AOP엔진(여러 컴포넌트들의 묶)이다. *정확히 말하자면, Sp..

Ngrok이란?(엔그록 원리, 엔그록 사용법)

개발을 시작하다보면 보통 처음 localhost환경에서 코드를 작성하고,웬만한 개발이 다 끝났다 싶으면 본격적인 배포를 시작하여 테스트를 하게된다.그런데 어떨 때는 어떤 기능 테스트를 위해 잠시만 짧게만 배포를 하고 싶을 때가 있는데,그럴때 실제 배포를 진행하기에는 너무 번거롭다.이를 임시적으로 아주 간단하게 해주는 것이 바로 이 ngrok이다. 원리?일반적인 배포를 통해 외부에서 접근하는 것과 엔그록을 사용해서 외부에서 접근을 허용하는 것은 차이가 있다. 일반적으로 서버에 배포하는 것은 외부에서 내 공인 IP에 접근하는 것을 허용하도록 하는 것이다.AWS나 NCP를 통해 배포했다면 서버 자체가 공인 IP를 직접 가지게 되고 그 공인 IP에 대한 접근을 허용하도록 한다.만약 내 집 PC에 직접 서버를 ..