728x90

Study 14

[Gin] GORM 고급 기능 완전 정복 - Soft Delete, Hook, 트랜잭션까지!

Go 언어에서 ORM으로 GORM을 쓰다 보면 관계 설정 말고도 놓치기 쉬운 고급 기능들이 있다. 이번 글에서는 실무에서 정말 유용하게 쓰이는 Soft Delete, Hooks, 트랜잭션을 정리해보자. 📌 목차 Soft Delete란? GORM Hooks란? 트랜잭션 다루기 마무리 및 다음 예고 1. Soft Delete란?Soft Delete는 데이터를 물리적으로 삭제하지 않고, 삭제된 것처럼 다루는 기능이다. 🧾 사용법import "gorm.io/gorm"type User struct { ID uint Name string DeletedAt gorm.DeletedAt `gorm:"index"`} DeletedAt 필드를 추가하면 GORM이 자동으로 Soft D..

개발/Go 2025.05.28

[Gin] GORM 관계 설정 완전 정복 - 1:N, N:1, N:M 예제로 배우기

Go 언어의 대표적인 ORM인 GORM을 쓰다 보면 꼭 마주치게 되는 기능이 바로 관계 설정(Association)이다. 이번 글에서는 실제 예제와 함께 GORM의 다양한 관계 설정을 정리해보고, 실전에서 어떻게 쓰는지까지 알아보자. 📌 목차 관계 설정이란? 1:N (has many & belongs to) N:M (many to many) Preload로 관계 데이터 로딩하기 팁 & 실수 방지 포인트 마무리 및 다음 예고 1. 관계 설정이란?관계 설정(Association)은 모델 간의 연결 관계를 표현하는 기능이다. 대표적으로 다음과 같은 관계가 있다- 1:N: 하나의 유저가 여러 개의 게시글을 가질 수 있음 - N:1: 게시글은 하나의 유저에 속함 - N:M: 유저는 여러 역할(Ro..

개발/Go 2025.05.26

[Gin] Go + Gin + GORM으로 백엔드 만들기 (기초부터 CRUD까지)

Go로 웹 백엔드를 만들 때 가장 많이 사용되는 조합 중 하나가 바로 Gin + GORM이다. Gin은 가볍고 빠른 웹 프레임워크이고, GORM은 Go 언어에서 가장 널리 쓰이는 ORM(Object Relational Mapping) 라이브러리다. 이번 글에서는 Gin + GORM을 사용해 MySQL 기반의 간단한 백엔드 서버를 만드는 방법을 초보자도 이해할 수 있도록 하나하나 설명해보려 한다. 📌 목차 GORM이란? 프로젝트 설정 및 설치 데이터베이스 연결 모델 정의 마이그레이션 (자동 테이블 생성) CRUD 예제 Gin과 연동하여 REST API 만들기 마무리 및 참고 자료 1. GORM이란?GORM은 Go 언어용 ORM(Object-Relational Mapping) 라이브러리로..

개발/Go 2025.05.24

페이지 교체 알고리즘 공부

개념페이지 교체 알고리즘(page replacement algorithm)은 가상 메모리 시스템에서 사용되는 핵심 기술로, 메모리에 올라와 있는 페이지 중 어떤 것을 제거하고 새로운 페이지를 불러올지 결정하는 방법. 운영체제가 사용하는 메모리 관리 방식에서 물리 메모리는 한정적이기 때문에, 필요한 페이지가 없을 경우 디스크에서 가져와야 하고, 이때 기존 페이지 중 하나를 제거해야 한다. 이때 어떤 페이지를 제거할지를 정하는 기준이 바로 페이지 교체 알고리즘이다. 페이지 교체가 필요한 상황: 페이지 부재(Page Fault)1. 프로세스가 어떤 페이지에 접근하려고 한다. 2. 그 페이지가 현재 물리 메모리에 없으면 페이지 폴트(page fault) 발생. 3. 새 페이지를 디스크에서 불러와야 함. ..

개발/ETC 2025.04.28

[JPA] JPA에서 양방향 @OneToOne 관계와 Lazy Loading의 한계

JPA에서 @OneToOne 양방향 관계를 사용할 때, 연관 관계의 주인이 아닌 엔티티를 조회하는 경우 Lazy Loading이 제대로 동작하지 않는 이유와 그 해결책에 대해 살펴보자.   1. Lazy Loading의 동작 원리 Lazy Loading은 엔티티를 실제로 사용할 때 데이터베이스에서 해당 연관된 데이터를 조회하는 전략이다. 이때 JPA는 연관된 엔티티가 실제로 필요할 때만 쿼리를 실행하여 데이터를 가져오는데, 이를 통해 성능을 최적화할 수 있다.@Entitypublic class User { @OneToOne(fetch = FetchType.LAZY) private Profile profile;}@Entitypublic class Profile { @OneToOne(mapp..

[Spring] 스프링 트랜잭션 전파 속성

1. 트랜잭션 전파란?스프링에서 트랜잭션 전파(Transaction Propagation) 는 트랜잭션의 경계에서 이미 진행 중인 트랜잭션이 있을 때 또는 없을 때 어떻게 동작할 것인가를 결정하는 기능.@Transactional 어노테이션이 존재하는 메서드를 호출했을 때, 기존에 트랜잭션이 존재하면 재사용할지, 예외를 던질지 등 행동을 결정할 수 있다. 트랜잭션 전파 속성에는 REQUIRED, REQUIRED_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NESTED, NEVER가 존재하며, @Transactional 어노테이션의 propagation 속성에 값을 설정할 수 있다.   2. 설명REQUIRED: 트랜잭션이 존재하는 경우 해당 트랜잭션 사용하고, 트랜잭션이 없는 ..

[Dart] Built in Types

다트의 기본 타입에 대해서 알아보자!!  1. Numbers 다트에서 Numbers는 두 가지이다.- int플랫폼에 따라 64비트 이하의 정수 값을 갖는다. 기본 플랫폼에서 int값은 -2^64에서 2^63 - 1 사이일 수 있다. 웹에서 정수 값은 JavaScript 숫자(소수 부분이 없는 64비트 부동 소수점 값)으로 표시되며 -2^53에서 2^53 - 1일 수 있다.  - doubleIEEE 754 표준에서 지정한 64비트(배정밀도) 부동 소수점 숫자.  int와 double은 모두 num의 하위 타입. num 타입에는 +, -, / 및 *와 같은 기본 연산자가 포함되며 사용할 수 있는 다른 메소드로는 abs(), ceil() 및 floor() 등이 있다. (>>와 같은 비트 연산자는 int 클래스..

[Dart] Dart 언어 가이드 살펴보기

플러터를 이용해 앱개발을 할 수 있는데, 플러터는 dart 언어로 개발해야한다.기초를 알아보자!  1. Basic Dart Programvoid studyPrint(int num) { print('이것은 $num'); // 콘솔 출력}void main() { var num = 111; studyPrint(num);} 다른 언어와 매우매우매우 비슷하다.  void는 return해줄 값이 없는 경우 사용.int는 정수를 나타내는 자료형print는 콘솔에 내용을 출력할 때 사용.main은 앱이 시작되기 위한 최상위 함수이다.var는 자료형을 지정하지 않고 변수를 선언하는 방법이다.  거의 java나 javascript와 유사하다.    2. Keywordsabstract else importshow as..

[Kotlin] 코틀린 + 스프링부트로 단숨에 완성하는 초강력 JWT 인증 시스템!💡 보안과 성능을 모두 잡아라!🔥

코틀린 스프링부트로 JWT구현해봤다. 제목은 어그로 ㅎㅎ GPT가 만들어준..   1. 코틀린으로 프로젝트 생성한다.라이브러리는dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-security") implementation("org.springframework.boot:spring-boot-starter-validation") implementati..

DB 동시성 제어하는 방법 알아보기

DB 시스템에서 동시성을 제어하는 방법에 대해서 알아보자 !!!   대표적인 동시성 제어 방식은 MVCC(Multi Version Concurrency Control)Lock-Based Concurrency Control이 있다.  1. MVCCMVCC는 데이터의 여러 버전을 유지하여 트랜잭션이 동시에 데이터를 읽고 쓸 수 있도록 하는 방식이다.각 트랜잭션은 자신만의 일관된 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항에 영향을 받지 않는다. 데이터의 각 버전을 유지하여 읽기 작업이 쓰기 작업과 독립적으로 이루어질 수 있다.트랜잭션은 시작 시점의 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항을 보지 못한다. 읽기 작업 시 잠금을 사용하지 안항 높은 동시성을 제공한다.읽기 작업..

개발/ETC 2025.01.06
728x90