본문 바로가기

분류 전체보기

(196)
[Java 기초 #1] 객체란 무엇인가? (클래스, 인스턴스의 차이) 자바에서 ‘객체’란 무엇인가? – 객체지향 프로그래밍의 핵심 개념을 이해해보자1. 개요"자바는 객체지향 언어입니다."라는 말을 한 번쯤은 들어보셨을 겁니다.그렇다면 이 ‘객체’란 대체 무엇일까요?처음 자바를 배울 때 가장 많이 듣고, 가장 많이 헷갈리는 단어가 바로 이 '객체'입니다.이번 글에서는 객체지향 프로그래밍(OOP)에서 자바의 객체란 어떤 개념인지, 그리고 왜 중요한지를 실용적인 관점으로 살펴보려 합니다.2. 핵심 개념 설명✅ 객체란 무엇인가?자바에서 객체(Object)란 데이터와 그 데이터를 처리하는 기능이 하나로 묶여 있는 메모리상의 실체입니다.즉, 변수와 함수가 하나의 단위로 결합된 존재라고 볼 수 있습니다.이러한 객체는 클래스(Class)를 바탕으로 생성되며, 클래스는 말 그대로 설계도 ..
GitLab → GitHub로 레포 이사 (잔디 심기) ✅ 목표GitLab → GitHub로 레포 이사커밋 기록(=기여 내역, 잔디) 그대로 유지GitHub 잔디에 심기게 하기✅ 전체 흐름 요약GitLab에서 기존 프로젝트를 전체 cloneGitHub에 새 레포 생성GitLab 레포를 GitHub로 push (이력 포함)커밋에 쓰인 이메일을 GitHub 계정에 등록GitHub에서 잔디 반영 확인🛠️ 1. GitLab 레포 clonebash복사편집git clone --mirror https://gitlab.com/your-name/your-repo.git cd your-repo.git --mirror 옵션은 모든 브랜치, 태그, 히스토리 포함해서 완전 복제합니다.🛠️ 2. GitHub에 새 레포 생성GitHub에서 새로운 repository 생성예: htt..
N+1 문제 해결을 통한 와인 목록 조회 성능 개선 1. 문제 상황 파악하기먼저 기존 코드에서 발생하는 N+1 문제를 정확히 파악했습니다. 로그 분석 결과, 다음과 같은 문제점이 확인되었습니다:와인 목록을 조회하는 초기 쿼리 1회각 와인마다 위시리스트 확인을 위한 쿼리 N회 (existsByUserIdAndWineId)각 와인마다 와인 타입 정보를 가져오기 위한 쿼리 N회 (wine.getWineType())2. 성능 측정을 위한 AOP 설정먼저 성능 측정을 위해 AOP를 설정하여 메서드 실행 시간과 SQL 쿼리 수를 측정했습니다.@Componentpublic class PerformanceAspect { private static final Logger log = LoggerFactory.getLogger(PerformanceAspect.class..
AOP와 Redis 캐싱을 활용한 OpenAI API 호출 성능 측정 및 최적화 사례 Spring AOP(Aspect-Oriented Programming)와 Redis 캐싱을 활용하여 OpenAI API 호출 성능을 측정하고 최적화한 경험을 공유하고자 합니다. 와인 추천 서비스에서 OpenAI API를 사용하여 유사 음식을 찾거나 와인 설명을 생성하는 과정에서 성능을 개선하기 위한 여정을 소개합니다.1. 문제 정의: OpenAI API 호출 시 성능 이슈우리 서비스에서는 사용자에게 맞춤형 와인을 추천하기 위해 다음과 같은 OpenAI API 호출을 사용합니다:유사 음식 검색: 사용자가 입력한 음식과 유사한 음식을 데이터베이스에서 찾기 위해 OpenAI의 텍스트 유사성 분석 사용와인 설명 생성: 추천된 와인에 대한 매력적인 설명문 생성이 과정에서 몇 가지 이슈가 발생했습니다:응답 시간 지..
한 리포지토리에서 Back, Front CI/CD 배포하기 (Feat. Gitlab, Jenkins, Docker, NginX, React, Springboot) 우선 EC2 인스턴스가 생성되있다고 가정을 하고 진행해보겠다. 만약 인스턴스가 없다면 AWS에 가입을 하고 인스턴스를 생성해야되는데 다음 글에 자세히 나와있다. https://velog.io/@kyj311/AWS-EC2-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0 [AWS] EC2 알아보기 + 인스턴스 생성하기AWS EC2 알아보기velog.io  또한 나는 기존에 AWS 해킹이 빈번하게 일어난다는 얘기를 들어서 다음 글을 보고 많이 참고하였다. https://www.lgcns.com/blog/cns-tech/aws-ambassador/56822/ 해킹과 과다 요금 발생을 방지하는 AWS 계정 보안 강화 노하우 - LG CNSIntro 최근 AWS Account 탈취로 인한 AWS ..
[JPA] Entity 설계 시 ID 값을 Integer 대신 Long 타입으로 지정하는 이유 JPA 공부 중 많은 코드들이 Entity 설계 시 ID 값을 Long 타입으로 지정해주는 것을 보았다. NULL값을 처리해주기 위해 원시 타입인  int, long 대신 wrapper 클래스를 사용하는것은 알고 있었지만 Integer 을 써도 될것같은데 굳이 Long을 쓰는 이유를 알아보았다. Long과 Integer의 주요 차이점값의 범위Integer: -2,147,483,648 ~ 2,147,483,647 (약 21억)Long: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (약 922경)ID 값으로 Long을 선호하는 이유:확장성: 데이터가 증가해도 ID 값이 부족할 걸정이 없음안정성: Integer 최대값 도달 시 오버플로우 발생 가능일관성: ..
데이터베이스 무결성과 키 개념 정리 데이터베이스 무결성 (Database Integrity)데이터베이스에서 데이터의 정확성과 일관성을 유지하기 위해 적용되는 규칙입니다. 주요 무결성 제약 조건은 다음과 같습니다.1. 개체 무결성 (Entity Integrity)조건 1: 기본 키(Primary Key)를 구성하는 속성은 NULL 값을 가질 수 없습니다.조건 2: 기본 키는 다른 레코드와 중복될 수 없습니다.예시: 회원 테이블에서 회원 아이디가 기본 키인 경우, 중복되거나 비어 있을 수 없습니다.2. 참조 무결성 (Referential Integrity)외래 키(Foreign Key)는 참조하는 테이블의 기본 키 값을 가져야 합니다.예시: 장바구니 테이블의 주문자 속성(외래 키)은 회원 테이블의 회원 아이디(기본 키)를 참조해야 하며, 존재..
Proxy Server 클라이언트에서 서버로 접속 시 직접적으로 접속하지 않고 중간에 대신 전달해주는 서버 1. 동작 원리요청 : 사용자가 웹 브라우저에서 도메인을 입력한다.전달 : 요청에 대하여 캐시 역할을 하는 프록시 서버로 전달한다.확인 : 프록시 서버 내에 도메인 홈페이지의 페이지를 가지고 있는지 체크한다.가지고 있는 경우 :홈페이지가 있는 서버에 자신이 가진 페이지가 최신 버전인지 체크필요한 경우 갱신할 부분만 가져옴가지고 있지 않을 경우 :홈페이지가 있는 서버와 연결하여 페이지를 가져온다.2. Proxy Server는 왜 필요할까?보안 : 요청과 응답의 필터링프록시 서버를 이용하지 않으면 서버의 주소가 쉽게 노출되고 다른 익명의 사용자가 서버로 접근하기 쉬워짐프록시 서버가 중간에 경유하게 되면 서버의 IP 숨기는 것..