전체 글 159

[데이터분석]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

[AWS]도커 이미지로 백엔드 배포하기

이전에 학원에서 팀프로젝트를 할 때는 EKS에 RDS, ElastiCache 를 사용해서 배포한 적이 있다.그러나 이번 내 개인 프로젝트의 배포의 목적은 자원의 최소화다.실제로 사이트를 계속해서 열어두는 것을 목표로 하고 있기 때문에 비용적인 부분을 무시할 수 없기 때문이다.그래서 이번에는 EC2 한대에 스프링서버, DB, REDIS를 같이 돌리려고 한다. 먼저 프론트엔드는 Vercel을 사용해서 배포했다.Vercel의 장점은 매우 간편하다. https 적용은 물론 git main에 푸시하면 자동으로 적용된다.(단, 실제로 트래픽이 많이 몰리면 서비스가 중단되고 유료 요금제를 사용해야 한다. 그러나 현재 배포는 일단 테스트 목적이 크기에 프론트는 간단하게 Vercel로 진행했다.) 내가 진행한 배포 과정..

네트워크 2026.01.05

[리눅스]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..