JPA에서 변경 감지와 병합(Merge) 이해하기
·
Spring
1. 영속성 컨텍스트와 준영속 엔티티란?영속성 컨텍스트(Persistence Context)JPA에서는 엔티티(Entity)를 관리하는 환경을 영속성 컨텍스트(Persistence Context)라고 합니다. 영속성 컨텍스트는 엔티티의 생명 주기를 관리하며, 데이터베이스와의 동기화를 자동으로 처리하는 중요한 역할을 합니다.준영속 엔티티(Detached Entity)준영속 엔티티(Detached Entity)란, 한 번 영속 상태(Persistent State)였다가 현재는 영속성 컨텍스트에서 관리되지 않는 엔티티를 의미합니다.예를 들어, 데이터베이스에서 조회된 Book 객체가 존재하는데, 트랜잭션이 종료되거나 영속성 컨텍스트에서 분리되면 해당 객체는 준영속 상태가 됩니다. 이러한 객체를 다시 수정하려면 ..
OOP(Object-Oriented Programming)의 4대 원칙과 SOLID 5대 원칙 정리
·
Java
OOP의 4대 원칙 1. 캡슐화 (Encapsulation)데이터 보호를 위해 클래스의 속성을 private으로 설정하고, getter와 setter 메서드를 통해 데이터에 접근하도록 한다. 이를 통해 객체의 내부 상태를 외부에서 직접 변경하지 못하게 하여 데이터 무결성을 유지할 수 있다.2. 추상화 (Abstraction)추상화는 복잡한 시스템의 세부 사항을 숨기고, 필요한 부분만을 드러내는 개념이다. 이를 통해 코드 재사용성을 높일 수 있다. abstract class와 interface를 활용하여 공통적인 기능을 정의하고, 이를 구현하는 다양한 클래스에서 재사용할 수 있다.3. 다형성 (Polymorphism)다형성은 같은 인터페이스나 부모 클래스의 메서드를 다양한 방식으로 구현할 수 있게 해주는 ..
H2 Database란? 빠르고 가벼운 테스트 DB의 모든 것
·
Java
📌 H2 Database란?H2 Database는 Java 기반의 경량 인메모리 데이터베이스로, 빠른 속도와 쉬운 설정이 장점인 RDBMS(Relational Database Management System)이다. Spring Boot 및 다양한 Java 애플리케이션에서 테스트용 데이터베이스로 많이 활용된다.🔹 H2 Database의 특징✅ 경량 데이터베이스: 파일 기반 또는 인메모리 모드로 동작하며, 설치가 간단하고 가볍다.✅ 빠른 속도: 인메모리 모드에서는 높은 성능을 제공하여 테스트 및 개발 환경에서 효과적이다.✅ ANSI SQL 지원: 표준 SQL을 지원하여 MySQL, PostgreSQL 등과 유사한 쿼리 작성이 가능하다.✅ Java 기반: Pure Java로 작성되어 있어 플랫폼 독립적이다..
JPA란? 개념, 영속성 컨텍스트, JPQL까지 한번에 정리
·
Spring
JPA(Java Persistence API)는 자바 애플리케이션에서 관계형 데이터베이스를 쉽게 다룰 수 있도록 도와주는 ORM(Object-Relational Mapping) 기술이다. 즉, SQL을 직접 작성하지 않고 자바 객체를 통해 데이터베이스와 상호작용할 수 있도록 해준다.✅ JPA의 주요 개념1. ORM(Object-Relational Mapping)JPA는 ORM 기술을 기반으로 동작하며, 객체와 관계형 데이터베이스 테이블을 매핑하는 역할을 한다. 이를 통해 SQL을 직접 다루지 않아도 객체를 활용하여 데이터를 저장하고 조회할 수 있다.2. 엔티티(Entity)JPA에서 데이터베이스 테이블과 매핑되는 자바 객체를 "엔티티"라고 한다. 엔티티 클래스는 @Entity 어노테이션을 사용하여 정의한..
[OneStack]팀 프로젝트 개발 과정 - WebSocket 실시간 채팅
·
OneStack
본 프로젝트 개발자 과정 학원의 파이널 프로젝트 기획, 개발, 배포 과정을 담고 있습니다.   OneStack원스택회원 너무 좋아요 작성자 : 서윤달콤 ⭐️ ⭐️ ⭐️ ⭐️ ⭐️www.onestack.store📌 WebSocket이란?WebSocket은 클라이언트와 서버 간의 양방향 통신을 가능하게 하는 프로토콜입니다. HTTP와 달리 연결을 유지하면서 실시간으로 데이터를 주고받을 수 있는 장점이 있습니다.✅ WebSocket의 장점실시간 양방향 통신: 서버와 클라이언트가 자유롭게 데이터를 주고받을 수 있음낮은 지연 시간: 기존 HTTP 요청/응답 방식보다 빠른 데이터 전송효율적인 서버 리소스 사용: 연결 유지로 인한 반복적인 요청 오버헤드 감소최적화된 데이터 전송: 헤더 크기가 작아 네트워크 비용 절..

Project

[OneStack]팀 프로젝트 개발 과정 - WebSocket 실시간 채팅
·
OneStack
본 프로젝트 개발자 과정 학원의 파이널 프로젝트 기획, 개발, 배포 과정을 담고 있습니다.   OneStack원스택회원 너무 좋아요 작성자 : 서윤달콤 ⭐️ ⭐️ ⭐️ ⭐️ ⭐️www.onestack.store📌 WebSocket이란?WebSocket은 클라이언트와 서버 간의 양방향 통신을 가능하게 하는 프로토콜입니다. HTTP와 달리 연결을 유지하면서 실시간으로 데이터를 주고받을 수 있는 장점이 있습니다.✅ WebSocket의 장점실시간 양방향 통신: 서버와 클라이언트가 자유롭게 데이터를 주고받을 수 있음낮은 지연 시간: 기존 HTTP 요청/응답 방식보다 빠른 데이터 전송효율적인 서버 리소스 사용: 연결 유지로 인한 반복적인 요청 오버헤드 감소최적화된 데이터 전송: 헤더 크기가 작아 네트워크 비용 절..
[OneStack]팀 프로젝트 개발 과정 - JavaMailSender 비밀번호 재설정
·
OneStack
본 프로젝트 개발자 과정 학원의 파이널 프로젝트 기획, 개발, 배포 과정을 담고 있습니다.   OneStack예린더쿠 최고였어요! 작성자 : Kyle ⭐️ ⭐️ ⭐️ ⭐️ ⭐️www.onestack.store 📧 JavaMailSender란?JavaMailSender는 Spring Framework에서 제공하는이메일 발송 기능을 쉽게 구현할 수 있도록 지원하는 인터페이스입니다.SMTP 설정을 활용하여 메일 서버에 연결하고 HTML 템플릿을 적용할 수 있으며, 비동기 메일 발송도 가능합니다.✅ JavaMailSender의 주요 기능SMTP 서버를 이용한 메일 발송HTML 템플릿 지원 (Thymeleaf 등 활용 가능)첨부 파일 전송 기능 제공비동기 메일 발송 가능🛠 비밀번호 재설정 기능 구현비밀번호 재..
[OneStack]팀 프로젝트 개발 과정 - OAuth2 소셜 로그인
·
OneStack
본 프로젝트 개발자 과정 학원의 파이널 프로젝트 기획, 개발, 배포 과정을 담고 있습니다.   OneStack예린더쿠 최고였어요! 작성자 : Kyle ⭐️ ⭐️ ⭐️ ⭐️ ⭐️www.onestack.store 1. 소셜 로그인이 필요한 이유소셜 로그인은 사용자의 편의성을 높이고 보안을 강화하는 중요한 기능이다. 이를 통해 다음과 같은 장점을 얻을 수 있다.사용자 편의성: 별도의 회원가입 없이 기존 계정으로 빠르게 로그인할 수 있다.신뢰성 향상: 검증된 플랫폼의 인증 시스템을 활용할 수 있다.개발 효율성: 보안 인증 로직을 외부 플랫폼에 위임할 수 있어 유지보수가 용이하다.2. 전체 로그인 프로세스소셜 로그인 구현에 앞서 전체적인 로그인 프로세스를 살펴보자.사용자가 카카오 또는 구글 계정을 이용해 로그인 ..
[OneStack]팀 프로젝트 개발 과정 - 기획
·
OneStack
본 프로젝트 개발자 과정 학원의 파이널 프로젝트 기획, 개발, 배포 과정을 담고 있습니다.  OneStack원스택회원 너무 좋아요 작성자 : 서윤달콤 ⭐️ ⭐️ ⭐️ ⭐️ ⭐️www.onestack.store IT 전문가 외주 매칭 플랫폼 선정 과정우리 팀은 초기 프로젝트 주제로 소개팅 플랫폼을 선정했다. 그러나 첫 팀 프로젝트였던 만큼, 참고할 만한 기존 서비스를 분석하는 과정이 필요했다. 하지만 대부분의 소개팅 플랫폼은 모바일 환경에 최적화되어 있어, 이를 웹 기반으로 구현하는 데 한계가 있었다. 따라서 유사한 매칭 시스템을 유지하면서도, 더 적합한 주제를 찾기로 결정했다.이에 따라 기존에 성공적으로 운영되고 있는 숨고, 크몽과 같은 외주 매칭 플랫폼을 분석했다. 해당 서비스들은 웹 기반으로 운영되며..

Web

Git Flow 완벽 정리: 협업과 배포를 위한 Git 브랜치 전략
·
🌐 Web
Git Flow는 기능 개발, 배포, 유지보수 등의 작업을 효율적으로 관리할 수 있도록 설계된 Git 브랜치 전략입니다. 특히, 팀 프로젝트나 지속적인 배포(CI/CD) 환경에서 유용하게 활용됩니다. 1. Git Flow의 핵심 개념Git Flow에서는 총 5가지 주요 브랜치를 사용하여 코드 변경을 효과적으로 관리합니다.✅ Main 브랜치 (main or master)배포(Release)된 최종 안정적인 코드가 있는 브랜치직접 수정하지 않으며, develop 브랜치에서 검증된 코드만 병합됨✅ Develop 브랜치 (develop)기능 개발을 진행하는 브랜치feature 브랜치에서 개발된 코드가 머지되며, 이 브랜치를 기준으로 release 브랜치가 생성됨✅ Feature 브랜치 (feature/)새로운 ..
JWT (JSON Web Token)란? 쉽게 이해하기
·
🌐 Web
웹 애플리케이션을 개발하다 보면, 로그인한 사용자의 정보를 유지해야 할 때가 많다.과거에는 세션(session)을 사용했지만, 최근에는 JWT (JSON Web Token)이 널리 사용되고 있다.그렇다면 JWT가 무엇이고, 어떻게 동작하는지 정리해보자.1. JWT란 무엇인가?JWT(JSON Web Token)는 사용자의 인증 정보를 안전하게 전송하기 위한 토큰 기반 인증 방식이다.쉽게 말해, 로그인하면 사용자의 정보를 암호화된 토큰 형태로 발급하여 클라이언트가 저장하고,이후 요청할 때마다 토큰을 보내 인증을 처리하는 방식이다.✅ JWT는 자체적으로 사용자 정보를 포함하기 때문에, 별도의 세션 저장소가 필요 없음✅ RESTful API와 잘 맞는 인증 방식 → 서버가 사용자의 상태를 유지하지 않아도 됨 (..
RESTful API란? 개념부터 설계 원칙, 구현 정리
·
🌐 Web
1. RESTful API란?RESTful API는 REST(Representational State Transfer) 아키텍처 스타일을 따르는 API를 의미한다.REST는 2000년 로이 필딩(Roy Fielding)이 논문에서 소개한 개념으로,웹의 장점을 극대화하는 네트워크 아키텍처 원칙을 기반으로 한다.RESTful API는 클라이언트와 서버 간의 통신을 REST의 원칙에 맞게 설계한 API를 의미한다.쉽게 말해, RESTful API는 "규칙을 지키는 HTTP API"라고 볼 수 있다.규칙을 따르지 않으면 RESTful하지 않은 API가 될 수 있다.2. REST의 기본 원칙RESTful API를 설계하기 위해서는 REST의 기본 원칙을 이해해야 한다.REST는 다음과 같은 주요 원칙을 따른다.1..
[HTTP]HTTP 헤더2 - 캐시와 조건부 요청
·
HTTP 웹 기본 지식
캐시 기본 동작 캐시가 없으면 웹 브라우저는 서버에게 star.jpg라는 이미지 파일을 요청하고 다운로드하는 과정을 요청을 할때마다 계속 반복될 것이다. 이것은 사용자의 입장으로 매우 느리고 답답한 경험이 될 것이다. 캐시가 없을 때 · 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드하여야 한다. · 인터넷 네트워크는 매우 느리고 비싸다 · 브라우저 로딩 속도가 느리다. · 느린 사용자 경험 캐시를 적용하면 웹 브라우저에서 서버에게 star.jpg 이미지 파일을 요청하면 서버는 응답 메시지의 헤더 태그에 예를 들어 cache-control: max-age=60이라고 응답을 한다. 그러면 해당 이미지 파일은 브라우저의 캐시를 저장하는 곳에서 60초 동안 유효된다. 그리고 두 번째 요청을 ..
[HTTP]HTTP 헤더1 - 일반 헤더
·
HTTP 웹 기본 지식
HTTP 헤더 헤더 필드 · header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용) · field-name은 대소문자 구문 없음 위 이미지는 HTTP 요청 메시지와 응답 메시지이다. 노란색 테두리가 있는 부분은 헤더 필드이다. HTTP 헤더 용도 · HTTP 전송에 필요한 모든 부가정보 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보... · 표준 헤더가 너무 많음 → https://en.wikipedia.org/wiki/List of HTTP header fields · 필요시 임의의 헤더 추가 가능 예) helloworld:hihi RFC2616(과거) · General 헤더: 메시..

Java

OOP(Object-Oriented Programming)의 4대 원칙과 SOLID 5대 원칙 정리
·
Java
OOP의 4대 원칙 1. 캡슐화 (Encapsulation)데이터 보호를 위해 클래스의 속성을 private으로 설정하고, getter와 setter 메서드를 통해 데이터에 접근하도록 한다. 이를 통해 객체의 내부 상태를 외부에서 직접 변경하지 못하게 하여 데이터 무결성을 유지할 수 있다.2. 추상화 (Abstraction)추상화는 복잡한 시스템의 세부 사항을 숨기고, 필요한 부분만을 드러내는 개념이다. 이를 통해 코드 재사용성을 높일 수 있다. abstract class와 interface를 활용하여 공통적인 기능을 정의하고, 이를 구현하는 다양한 클래스에서 재사용할 수 있다.3. 다형성 (Polymorphism)다형성은 같은 인터페이스나 부모 클래스의 메서드를 다양한 방식으로 구현할 수 있게 해주는 ..
H2 Database란? 빠르고 가벼운 테스트 DB의 모든 것
·
Java
📌 H2 Database란?H2 Database는 Java 기반의 경량 인메모리 데이터베이스로, 빠른 속도와 쉬운 설정이 장점인 RDBMS(Relational Database Management System)이다. Spring Boot 및 다양한 Java 애플리케이션에서 테스트용 데이터베이스로 많이 활용된다.🔹 H2 Database의 특징✅ 경량 데이터베이스: 파일 기반 또는 인메모리 모드로 동작하며, 설치가 간단하고 가볍다.✅ 빠른 속도: 인메모리 모드에서는 높은 성능을 제공하여 테스트 및 개발 환경에서 효과적이다.✅ ANSI SQL 지원: 표준 SQL을 지원하여 MySQL, PostgreSQL 등과 유사한 쿼리 작성이 가능하다.✅ Java 기반: Pure Java로 작성되어 있어 플랫폼 독립적이다..
Spring WebSocket과 STOMP, 그리고 Kafka를 활용한 실시간 통신
·
Java
1. 웹소켓(WebSocket)이란?1.1 웹의 기본 통신 방식: HTTP의 한계웹 애플리케이션에서 서버와 클라이언트 간의 데이터 교환은 일반적으로 HTTP를 사용한다. 하지만 HTTP는 비연결성(stateless) 프로토콜로, 클라이언트가 요청을 보내야만 서버가 응답하는 단방향 통신 방식이다.이 방식은 실시간성이 중요한 애플리케이션(예: 채팅, 주식 거래, 알림 서비스 등)에서는 비효율적이다. 주기적으로 서버에 요청을 보내는 폴링(Polling), 롱 폴링(Long Polling), 서버 센트 이벤트(Server-Sent Events, SSE) 같은 기술이 사용되지만, 성능과 확장성에서 한계가 있다.1.2 웹소켓(WebSocket)의 등장웹소켓은 클라이언트와 서버 간에 지속적인 연결을 유지하며 양방향 ..
[Java] 컬렉션 프레임웍 (6) - HashMap, Collections클래스
·
Java
HashMap HashMap은 Map인터페이스를 구현한 클래스이다. Map인터페이스를 구현했기에 순서는 없고, 중복은 키는 허용하지 않지만 값은 허용한다. → 키 X, 값 O 데이터를 키와 값의 쌍으로 저장을 하는 것이 특징이다. Hashtable은 옛날 버전이고, HashMap은 신버전이다. 두 차이점은 Hashtable은 동기화가 되어있고, HashMap은 동기화가 되어있지 않은 것이 차이이다. TreeMap은 TreeSet과 같은 특징을 가지고 있다. TreeSet에 대해서는 다음 더보기를 확인하면 된다. 더보기 [Java] 컬렉션 프레임웍 (5) - HashSet, TreeSet HashSet HashSet과 TreeSet은 이름 그대로 Set인터페이스를 구현하였기 때문에 순서가 없고 중복을 허용..
[Java] 컬렉션 프레임웍 (5) - HashSet, TreeSet
·
Java
HashSet HashSet과 TreeSet은 이름 그대로 Set인터페이스를 구현하였기 때문에 순서가 없고 중복을 허용하지 않는다. 일반적으로는 HashSet을 사용하는 것이 가장 일반적이다. 또한, 순서를 유지하려면 LinkedHashSet클래스를 사용하면 된다. TreeSet은 범위 검색과 정렬에 유리한 컬렉션 클래스이다. 그렇기에 HashSet보다 데이터 추가나 삭제에 시간이 더 소요된다. HashSet의 주요 메서드 생성자 int initialCapacity는 HashSet의 초기 용량을 지정해주는 것이다. float loadFactor은 언제 HashSet의 용량을 두배 증가할지 지정해주는 것이다. 예를 들어 loadFactor에 0.8을 입력하면 HashSet의 용량이 80프로 차면 용량이 두..
Kyle99
Kyle Developer Story