728x90

공부 24

템플릿 메소드 패턴

템플릿 메소드 패턴에 대해서 알아보자! 템플릿 메소드 패턴(Template Method Pattern)은 행동(Behavioral) 디자인 패턴 중 하나로, 알고리즘의 뼈대를 상위 클래스에서 정의하고, 일부 단계는 하위 클래스에서 구현하도록 만드는 구조. ✅ 핵심 개념 요약상위 클래스: 알고리즘 전체 구조(순서)를 정의 하위 클래스: 구체적인 단계만 재정의 (hook method 또는 abstract method) 의도: 공통 로직 재사용 + 유연한 확장 제공 ✅ 구조 예시 (Java 스타일)abstract class AbstractTask { // 템플릿 메소드 (알고리즘 전체 흐름 정의) public final void execute() { start(); ..

개발/ETC 07:29:00

NoSQL DB 종류 알아보기

NoSQL 데이터베이스의 종류에 대해서 알아보자! 1. 개념NoSQL은 "Not Only SQL"의 약자로, 전통적인 관계형 데이터베이스(RDBMS)와 달리 정해진 스키마 없이 유연한 데이터 저장 방식을 지원하는 데이터베이스 유형이다. NoSQL은 일반적으로 대규모 분산 시스템, 빅데이터, 실시간 웹앱 등에 사용된다. 2. 종류- 문서형(Document-based) 대표 DB: MongoDB, CouchDB, Amazon DocumentDB 데이터 형식: JSON, BSON, XML 형태의 "문서" 특징: > 각 문서는 유연한 구조를 가짐 > 컬렉션 단위로 문서 관리 > RDB의 테이블+레코드 개념과 유사하지만 문서 간 구조가 달라도 됨 사용 예: 블로그 글, 사용자 프로필, 전자상거..

개발/ETC 2025.05.18

[Gradle] Gradle을 알아보자!

1. Gradle이란? Gradle은 오픈소스 빌드 도구로, 다음과 같은 특징이 있다. Groovy 또는 Kotlin DSL을 사용해서 빌드 스크립트를 작성의존성 관리: 외부 라이브러리 쉽게 다운로드하고 관리빌드 캐시, 병렬 빌드 지원: 빠른 빌드 가능유연성: 사용자 정의 태스크 추가 가능다양한 언어 지원: Java, Kotlin, Scala, Android 등 2. Gradle 주요 개념 📦 프로젝트와 태스크(Task)Gradle은 기본적으로 프로젝트 단위로 구성됨각 프로젝트에는 여러 개의 태스크(task)가 있음예: 컴파일, 테스트, 패키징, 배포 등예시// build.gradle (Groovy DSL)task hello { doLast { println '..

[Gin] Gin 시작해보자!

타입스크립트를 go로 만든다는데, 그 기념으로 go로 백엔드를 구성해보자. Go 언어를 오랜만에 공부하는데,기존 Fiber 대신 Gin을 시작해보자. 1. Gin 설치go mod init my-gin-appgo get -u github.com/gin-gonic/gin 2. 최소 실행 코드(main.go)package mainimport ( "github.com/gin-gonic/gin" "net/http")func main() { r := gin.Default() // 간단한 GET 라우터 r.GET("/ping", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"message": "pong"}) }) // 실행 r.Run(":8080") /..

개발/Go 2025.05.14

[Spring] 트랜잭션 롤백하는 예외

예외 종류에 따라서 트랜잭션 롤백이 다르게 동작한다. Spring Framework 기준으로 트랜잭션이 롤백되는 예외는 다음과 같은 규칙을 따른다. ✅ 기본 롤백 규칙예외타입트랜잭션 롤백 여부RuntimeException (또는 그 하위 클래스)O (롤백됨)ErrorO (롤백됨)Checked ExceptionX (롤백 안 됨) ❗ 예시@Transactionalpublic void someMethod() throws IOException { // IOException은 Checked Exception이므로 기본적으로 롤백되지 않음 throw new IOException("checked exception");} 위의 경우 트랜잭션은 롤백되지 않는다. @Transactionalpublic..

결합도 공부

1. 개념 결합도(Coupling)는 소프트웨어 설계에서 모듈 간의 의존성 정도를 나타내는 개념이다. 쉽게 말해, 한 모듈(또는 클래스, 함수)이 다른 모듈에 얼마나 많이 의존하고 있는지를 나타내며, 이는 시스템의 유지보수성, 확장성, 재사용성에 직접적인 영향을 준다. 2. 종류결합도는 일반적으로 다음과 같은 7가지 수준으로 분류된다.(낮은 결합도 → 높은 결합도 순)결합도 종류설명자료 결합(Data Coupling)한 모듈이 다른 모듈에게 단순한 데이터를 전달. 가장 바람직함.스탬프 결합(Stamp Coupling)구조체나 객체처럼 데이터 묶음을 전달, 하지만 전체가 아닌 일부만 사용.제어 결합(Control Coupling)한 모듈이 다른 모듈에 어떻게 동작할지 지시 (ex. 플래그).외부..

개발/ETC 2025.05.08

이진 트리 공부

이진트리에 대해서 공부해보자 1. 개념 이진 트리는 각 노드가 최대 두 개의 자식 노드를 가지는 트리(Tree) 자료구조를 말한다. 여기서 두 개의 자식 노드는 각각 왼쪽 자식(left child), 오른쪽 자식(right child) 이라고 부른다. 트리는 그래프 이론의 한 형태인데, 방향성이 있고 순환(cycle)이 없는 연결 구조를 가지며, 이 중 이진 트리는 특별히 자식이 둘 이하라는 제약 조건이 붙은 것이다. 2. 이진 트리의 기본 용어 루트(root): 트리의 가장 꼭대기 노드. 부모가 없다. 리프(leaf): 자식이 없는 노드. (즉, 말단 노드) 내부 노드(internal node): 자식이 하나 이상 있는 노드. 서브트리(subtree): 어떤 노드를 루트로 하는 작은 트..

개발/ETC 2025.04.30

페이지 교체 알고리즘 공부

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

개발/ETC 2025.04.28

단일 프로세스 시스템 알아보기!

단일 프로세스 시스템에 대해서 알아보자 ! 단일 프로세스 시스템은 한 번에 하나의 프로그램만 실행한다. 또 다른 프로그램을 실행하려면, 먼저 실행 중이던 프로그램을 종료시키고 그 다음 프로그램을 실행해야 한다. 단일 프로세스 시스템의 단점❌ 1. 병렬 처리 불가 한 번에 하나의 작업만 처리 가능해서 여러 작업을 동시에 수행할 수 없어. 예: 사용자가 작업 중에 파일 다운로드나 음악 재생을 동시에 할 수 없음. ❌ 2. 응답성 저하 하나의 작업이 오래 걸리면 전체 시스템이 멈춘 것처럼 느껴질 수 있어. 예: 무한 루프나 I/O 대기 중이면 시스템 전체가 반응이 없음. ❌ 3. 확장성 한계 다중 CPU나 멀티코어 환경을 활용할 수 없음. 현대 시스템에서는 CPU 코어가 많아도 하나만 ..

개발/ETC 2025.04.16

[Spring] 의존성 주입 간단히 알아보자

1. 개념A 객체가 어떤 작업을 수행하기 위해 B 객체를 필요로 하는 경우에 두 객체 사이에 의존성이 존재한다고 표현한다. 이때, A 객체가 아닌 외부의 C 객체가 B를 생성한 뒤에 이를 전달해서 의존성을 해결하는 방법을 의존성 주입(Dependency Injection) 이라고 한다. 유연하고 재사용할 수 있는 설계를 만들기 위해서는 코드의 변경 없이 다양한 실행 구조를 만들 수 있어야 한다. 의존성 주입은 이를 돕는다. 예를 들어, A 객체 내부에서 B를 직접 생성하는 경우에는 B에 대한 결합도가 높아진다. 반면, B에 대한 생성 책임을 C에게 위임하고, C가 A에게 다시 전달해 주는 방식(의존성 주입)을 통해서 A는 B에 대한 결합도를 낮추고 유연한 설계를 만들 수 있다.       2. 의존성 주..

728x90