분류 전체보기 28

[JAVA] 자바의 Object 클래스와 메서드 정리

자바의 Object 클래스Object 클래스는 자바의 모든 클래스가 기본적으로 상속 받는 최상위 클래스이다.이 클래스는 equals, hashCode, toString과 같은 메서드를 제공한다. equals 메서드현재 객체와 매개 변수로 넘겨받은 객체가 같은지 확인하여, 같으면 true, 다르면 false를 반환한다.기본 타입의 int형, char형등은 Call by Value 형태로 기본적으로 대상에 주소값을 가지지 않는 형태로 사용하기 때문에 equals 메서드 사용 시 값을 전제로 비교한다. 하지만 객체의 동등성 비교에서는 이 메서드를 재정의 해주지 않으면, 같은 값을 가진 두 객체를 비교할 때 equlas()는 객체타입의 주소 값을 비교하기 때문에 서로 다른 메모리에 할당된 두 객체는 다르다고 인..

JAVA 2025.04.18

[OS] 프로세스? 프로그램?

프로그램과 프로세스일상생활에서 프로그램이라는 말은 많이 사용한다. 그렇다면 프로세스는 무엇을 뜻하는 것일까?어떠한 일의 흐름.과정. 일반적인 뜻으로는 그렇게 쓰이지만 프로그래밍 세계에서 프로세스의 의미는 약간 다르다.그렇다면, 프로그램과 프로세스는 각각 어떤 의미를 가지고 있으며, 프로그램과 프로세스의 차이점은 무엇일까?프로그램은 실행 시킬 수 있는 코드들이 들어있는 정적 상태의 파일이다.컴퓨터에서 프로그램은 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 수행절차를 표현해놓은 명령어들의 집합으로,그에 필요한 데이터들을 모아놓은 파일들이 보조 기억장치에 저장 되어있다. 프로세스는 이런 프로그램이 실행 되고 있는 상태 를 말한다. 프로그램을 실행하면, 운영체제로부터 실행에 필요한 자원을 ..

CS/OS 2025.04.15

선착순 쿠폰 발급 시 동시성 문제 해결 과정 Chap.1 (SQL 락과 Redis 락)

쿠폰 발급 시 일정 기간에 쿠폰을 발급 할 수 있고 발급 수량이 정해져 있다고 가정해보자.선착순으로 이벤트 쿠폰을 발급해준다고 했을 때, 한 번에 많은 사용자들이 동시에 쿠폰 발급 버튼을 누르면 어떻게 될까? 발급 가능한 수량보다 더 많은 쿠폰이 발급 될 것이다. ⚠️  왜 이런 상황이 발생할까? 바로 데이터 정합성이 깨지기 때문이다. 데이터 정합성이란 무엇인가 하면, 데이터가 논리적으로 모순없이 올바르게 유지되는 상태를 말한다. 즉, 시스템 내의 데이터가 항상 정확하고 신뢰할 수 있도록 보장하는 개념이다.모든 트랜잭션 이후에도 데이터가 규칙(rule), 제약조건(constraint), 비즈니스 로직에 맞게 유지되는 성질을 의미한다. 쿠폰 총 수량이 100개 인데, 150명이 동시에 발급 요청을 보내서 ..

JAVA 2025.04.08

[Partnerd] API 요청 시 초기연결이 1분이상 지연되는 현상 해결

성능 개선을 한 후 API 를 요청했을 때, 서버 응답은 확연히 빨라졌으나 ( prometheus 와 grafana 를 통해 해당 요청 응답시간을 봐도 빨라진 걸 알 수 있었다.) 초기 연결에서 평균 1.3분이 걸리는 이상한 현상이 발생했다.  서버측의 연결풀 부족으로 인한 것인가 해서, HikariCP 대시보드를 확인해보았지만  Pending: 0→ 커넥션을 기다리는 요청도 없음 (병목 없음)Connection Timeout Count: 0→ 커넥션 획득에 실패한 적도 없음Connection Acquire Time: 7~13ms 수준→ 커넥션 획득 속도도 매우 양호함Usage Time: 1.2초 이하→ 사용 시간도 짧은 편위 이유로 DB 커넥션 풀은 병목 원인이 아닌 것을 알 수 있었다. 그럼 CPU ..

Project/Partnerd 2025.04.07

[Partnerd] docker 환경에서 컨테이너간 연결 문제 ( Redis 컨테이너 접속 문제 해결 )

org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379  도커로 스프링과 레디스를 컨테이너로 띄워서 운영하는 데, 스프링과 레디스 연결에서 connection refused 에러가 발생하였다.컨테이너는 별도의 IP를 가지고 있기 때문에 localhost로 작성을 하면 다른 컨테이너로 접근할 수 없기 때문에, application.yml 에서 레디스 환경설정과 RedisConfig에서 host 를..

Project/Partnerd 2025.03.25

[Git&GitHub] 브랜치 및 커밋 메세지 컨벤션

👥 커밋 메시지 컨벤션1.  커밋 메세지 구조헤더는 필수이며, 범위(scope), 본문(body), 바닥글(footer)은 선택 사항(): -- 헤더 -- 본문 -- 바닥글 ex)  커밋 메세지 예시Feat: 카카오 로그인 기능 추가(#1)소셜 로그인 기능 추가를 위해 카카오 로그인 기능을 추가함2. 커밋 유형커밋 유형은 영어 대문자로 작성하기type은 해당 커밋의 성격을 나타내며 아래 중 하나여야 함커밋 유형 의미 Feat새로운 기능 추가Fix버그 수정Docs문서 작성 및 수정Style코드 formatting, 세미콜론 누락, 코드 자체의 변경이 없는 경우Refactor코드 리팩토링T..

git&github 2025.03.12

[DOCKER] Docker 이미지 및 컨테이너 정리

1️⃣ 실행 중인 컨테이너 정리현재 실행중인 컨테이너 확인docker ps특정 컨테이너 중지docker stop 모든 실행 중인 컨테이너 중지docker stop $(docker ps -q)2️⃣ 컨테이너 삭제중지된 컨테이너 목록 확인 (전체 컨테이너 확인)docker ps -a특정 컨테이너 삭제docker rm 모든 중지된 컨테이너 삭제docker rm $(docker ps -aq)실행 중인 컨테이너 강제 삭제 (-f 옵션)docker rm -f  3️⃣ Docker 이미지 삭제현재 Docker 이미지 목록 확인docker images특정 이미지 삭제docker rmi 사용되지 않는 모든 이미지 삭제 (dangling 이미지)docker image prune -a 4️⃣ Docker 네트워크 및 볼륨 ..

Docker 2025.03.12

CQRS 에 관해서 정리

CQRS Command Query Responsibility Segregation 의 약자로 명령과 쿼리의 책임을 분리하라는 의미를 가지고 있다. 예를 들어, 영화를 예매 하거나 예매를 취소하는 것은 Command(명령)이고 영화 예매 내역을 조회하는 것은 Query(조회)이다. 이를 분리하는 이유는 변경시점의 차이, 요구하는 성능의 차이 때문이다. 두 작업이 분리되지 않으면 명령처리를 한 후 데이터를 조회해서 보여줘야할 때, 즉시 데이터를 조회한다.이는 데이터베이스에서 동시에 읽기와 쓰기가 발생하게 되면서 명령 처리로 인한 데이터 베이스의 락(lock) 이나 트랙잭션 처리로 인해 조회 성능이 저하될 수 있다. 또한, 이렇게 동기화된 상태에서 조회를 처리하면 각각의 요구 사항에 맞는 최적화 모델을 사용할..

SpringBoot 2025.01.03

[CI&CD] Github Action +Docker + EC2 + self hosted runner 로 React (front-end) CI&CD 구축하기

놀러가실 프로젝트는 Ec2 에서 jenkins + docker를 통해서 CI&CD 구축을 했었다. 하지만 젠킨스를 이용해서 배포했기 때문에 여러개의 인스턴스 사용이 불가피 했고, 이를 계속 유지하기에는 비용측면과 유지관리하는 데에 번거로움이 있었다. (젠킨스 서버 용량이 커서 한 개의 인스턴스에서 도커와 젠킨스를 함께 사용할 수 없었다. swap 도 사용하고, 프리티어 최대용량을 써도 계속 서버가 다운됐음. 그리고 비용문제로 프리티어 사용을 위해 각 인스턴스마다 팀원들 계정을 썼기 때문에 문제가 생겼을 때 해당 서버에 아이디랑 비번을 계속 찾아야하는 것도 번거로운 문제였음) 따라서, 배포 후에 서버 유지가 어려워서 바로 서버를 닫았다. 그런데 취준을 위해 따로 코드 리팩토링을 진행하던 중에 도메인으로 접..

CI&CD 2025.01.02