Go언어에서 사용할 수 있는 GORM을 사용하다 보면, 자연스럽게 Soft Delete라는 개념을 마주치게 된다. 나에게는 좀 색다른 개념이였는데, DB에 데이터를 저장하는 한 가지 패턴이라는 것을 알게 되었고 오늘은 이에 대해 정리해보고자 한다. Go, GORM을 기준으로 정리할 것이다. import "gorm.io/gorm" type Users struct { gorm.Model Name string `gorm:"size:255"` Email string Password string } GORM의 Entity는 위와 같이 선언할 수 있다. 여기서 gorm.Model이라는 필드가 보이는데, 이는 GORM 측에서 제공하는 기본적인 모델 스키마이다. 그래서 이를 선언하면, 기본적으로 아래의 4가지 colu..
회사에서 Go를 주 언어로 밀고 있고, 배정받은 팀에서도 Go로 개발을 진행하고 있기에 Go 언어를 학습하기 시작했다. 그러던 중 Goroutine을 마주치게 되었다. Goroutine이란? 고루틴은 Go 언어의 동시성 프로그래밍을 가능하게 해주는 경량 스레드이다. 좀더 쉽게 풀어서 얘기하면, 가벼운 스레드라고 생각하면 된다. Multi Thread와 Goroutine의 차이 멀티 스레드와 고루틴은 모두 '병행성(Concurrency)'을 위한 기술이지만, 몇가지 차이점이 존재한다. 첫째로, 스레드는 OS 수준에서 관리되며, 많은 자원을 사용하여 생성하고 관리된다. 반면 고루틴은 Go 언어 런타임에서 관리되기에 더 적은 메모리를 사용한다. 두 번째로, 스레드는 OS에서 스케줄링 되어 작업을 수행한다. 반..
Promise의 목적 Promise는 JavaScript를 사용하면 마주치게 되는 콜백지옥 문제를 해결하기 위해 등장했다. Promise는 비동기 연산이 종료된 이후, 연산의 결과 값이나 실패에 대한 처리기를 연결할 수 있는데, 비동기 메서드가 마치 동기 메서드처럼 값을 반환하는 것처럼 사용할 수 있다. 다만 최종 결과를 반환하는 것이 아니고, 미래의 어떤 시점에 결과를 제공하겠다는 '약속'을 하는 것처럼 사용한다. async function calculate(flag: boolean, successCallback: any, failureCallback: any) { if (flag) { successCallback(); } else { failureCallback(); } } function succe..
Java의 Garbage Collector는 다 쓴 객체를 알아서 회수해줍니다. 그래서 자칫 메모리 관리를 더 이상 신경쓰지 않아도 된다고 오해할 수 있는데, 이는 사실이 아닙니다. 스택 자료구조를 간단히 구현한 아래의 코드를 보겠습니다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; }..
똑같은 기능의 객체를 매번 생성하기보다는 하나의 객체를 재사용하면 분명히 성능적으로 이점을 얻을 수 있습니다. 예를들면 이전에 봤던 Boolean.valueOf를 생각해보면 됩니다. 좀더 와닿는 설명을 위해 아래와 같은 코드를 작성했습니다. 이 코드는 매우 극단적인 예시를 보여줍니다. public static void main(String[] args) { long bef; long aft; bef = System.currentTimeMillis(); for(int i=0; i 기본 타입을 언박싱이라고 부릅니다. JDK 1.5부터 이 연산을 자동으로 처리해주는데요, 이 두가지 박싱은 컴파일러가 처리해주며 내부적으로 구현 되어있습니다. 음.. 박싱과 언방식이 뭔지는 어렵지가 않은데, 굳이? 이 과정이 있어..
하나 이상의 자원에 의존하는 클래스를 만들때는 주의할 점이 있는데요, 예시로 간단하게 아래와 같은 코드를 작성해봤습니다. public class Delivery { private String type; private String area; public Delivery(String type, String area) { this.type = type; this.area = area; } public String getType() { return type; } public String getArea() { return area; } } 배달과 관련된 class를 작성해봤습니다. 필드로는 어떤 type의 음식을 판매하는지 나타내고 싶었고, area는 어떤 지역에 있는지 나타내고 싶었습니다. public clas..
'정적 메서드와 정적 필드만'을 담은 클래스를 만들라는 요구사항이 들어온다고 생각해봅시다. '객체 지향의 사실과 오해'를 당연히 읽은(?) 우리에게는 말도 안되는 요구사항입니다. 객체 지향의 세계에서는 모든 객체가 역할을 가지고 협력하는데, 역할을 수행할 객체가 없는 상황에서 역할을 기대하는 것은 더이상 객체지향을 지킨다고 볼 수 없습니다. 이런 생각을 가진 상태에서 아래의 코드를 봅시다. public static void main(String[] args) { Integer mini = Math.min(1, 2); System.out.println("mini = " + mini); } 자바가 제공하는 Math class의 min 메서드를 사용하는 간단한 코드입니다. 하지만, 우리는 Math 인스턴스를 ..
'싱글톤(Singleton)'이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말합니다. 싱글톤을 만드는 방식은 일반적으로 두 가지를 사용하는데, 두 방식 모두 생성자를 private로 감춰두고, 생성된 유일한 인스턴스에 접근할 수 있는 수단을 만들어 놓습니다. 하나씩 살펴봅시다. public class Hello { public static final Hello INSTANCE = new Hello(); private Hello() {} public void print() { System.out.println("Hello World!"); } } 매우 일반적인 방법으로, private 생성자는 public static final 필드인 INSTANCE를 초기화할 때 딱 한번만 호출됩니다. 그리고 p..
- Total
- Today
- Yesterday
- java
- paging
- cs
- go
- Database
- OS
- fiber
- 공지
- spring
- soft delete
- algorithm
- effective
- GORM
- network
- Operating System
- ARP
- Effective Java
- mmu
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |