공부 일기

·JAVA
개요객체 지향 프로그래밍에서 추상 클래스(Abstract Class)와 인터페이스(Interface)는 중요한 개념이다. 이 두 가지는 코드의 재사용성과 유지 보수성을 높이는 데 도움을 주지만, 사용 방법과 목적에서 차이가 있다. 이번 포스팅에서는 추상 클래스와 인터페이스의 개념과 차이점을 명확히 하고, 언제 어떤 것을 사용해야 하는지에 대해 알아보겠다. 추상 클래스추상 클래스는 클래스 간의 공통적인 기능을 정의하기 위한 미완성 설계도이다.abstract 키워드를 사용하여 선언하며, 완성되지 않은 추상 메서드와 일반 메서드를 모두 포함할 수 있다.public abstract class 추상클래스명 {}예를 들어, 다음과 같이 LibraryItem이라는 추상 클래스를 선언할 수 있다.추상메서드가 없어도 추..
·WEB
JUnit이란?JUnit은 자동화된 테스트를 쉽게 작성하고 실행할 수 있게 해 주며, 테스트 결과를 빠르게 피드백받을 수 있어 개발자들이 선호하는 프레임워크이다.현재 많이 사용되는 건 JUnit 5이며, 자바 8 이상을 필요로 한다.단위 테스트단위란 엄격하게 정해져 있지는 않지만, 일반적으로 클래스 또는 메서드 수준으로 정해진다.그래서 구현 목표에 맞게 잘 동작하는지 확인하는 것이 중요하다. 단위 테스트의 장점단위 테스트는 주로 하나의 메서드를 단위로 테스트하기 때문에, 코드를 변경해도 기존에 작성한 테스트 코드만 돌려보면 변경 사항이 기존 기능에 영향을 미쳤는지 빠르게 확인할 수 있다. 이렇게 하면 새로운 기능을 추가하거나 기존 코드를 수정할 때 더 안전하게 작업할 수 있는 장점이 있다. Annotat..
·WEB
데이터베이스는 현대 소프트웨어 개발에서 데이터를 저장하고 관리하는 핵심 요소이다. 오늘은 가장 많이 사용되는 데이터베이스 유형인 관계형 데이터베이스(RDB)와 비관계형 데이터베이스(NoSQL)에 대해 깊이 있게 알아보고, 각각의 특징, 장단점을 다뤄볼 것이다.RDB (Relational Database)란?사전에 엄격하게 정의된 DB schema를 가진 테이블 기반형식으로 저장하는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스이다. 장점엄격한 데이터 구조데이터가 구조화되어 있고, 외래 키(foreign key)와 같은 제약 조건(constraints)을 통해 데이터 간의 일관성을 유지할 수 있다. 트랜잭션 지원원자성, 일관성, 격리성, 지속성(ACID)이라는 ..
·WEB
영속성 컨텍스트란? 영속성 컨텍스트는 JPA(Java Persistence API)에서 엔티티의 생명주기를 관리하고 저장소처럼 엔티티를 캐싱하는 역할을 하는 메모리 공간이다. 이 컨텍스트는 엔티티 매니저(EntityManager)에 의해 관리되고, 애플리케이션에서 데이터베이스로의 접근을 효율적으로 제어한다. 카페로 예를 들어 보겠다.매일 같은 시간에 A는 아이스 아메리카노를 시킨다고 가정하자. 카페에 가서 A가 "아이스 아메리카노 한 잔 주세요"라고 주문한다. 이때 바리스타는 주문한 것을 기억하기 위해 메모를 하거나 POS 시스템에 입력한다. 다음 날 같은 카페에 다시 갔는데 지난번과 같은 바리스타가 일하고 있다. A가 또 "아이스 아메리카노 한 잔 주세요"라고 주문하려고 하니까, 바리스타가 "아, 지난..
·WEB
Thread란 무엇일까?스레드는 프로세스 내에서 실행되는 독립적인 흐름을 의미한다. 하나의 프로그램(프로세스)이 여러 작업을 동시에 할 수 있게 해주는 기능이다. 예를 들어, 음악을 들으면서 문서 작업을 할 때 각각의 작업이 스레드로 실행된다고 생각할 수 있다. 애플리케이션이 하나의 프로세스가 되고, 그 안에서 여러 개의 스레드가 할당받은 자원을 이용하여 실행 단위로 존재할 수 있다. 즉 스레드는 하나의 프로세스 안에서 여러 실행의 흐름이라고 생각하면 된다. 자바에서 Thread란?자바에서 스레드는 Thread 클래스나 Runnable 인터페이스를 사용해 구현할 수 있다. Thread 클래스를 상속받아 직접 스레드를 생성하거나, Runnable 인터페이스를 구현한 클래스를 Thread 생성자에 넘겨서 스..
B-Tree 인덱스란?B-Tree 인덱스는 MySQL에서 가장 널리 사용되는 인덱스 타입이다. B-Tree는 데이터가 정렬된 상태로 저장되어 있다. 그래서 삽입과 삭제 시 정렬이 필연적으로 발생하게 된다. 노드의 자식들의 위치가 정해져 있어서 범위 검색에 유리하다. B-Tree의 구조는 루트노드, 브랜치 노드, 리프 노드로 구성되며, 각 노드는 여러 개의 키를 가질 수 있다. B-Tree 인덱스는 특히 범위 검색이 자주 필요한 경우에 적합하다. 예를 들어, 날짜 범위 내의 데이터를 검색하거나 특정 값보다 크거나 작은 값을 찾을 때 효과적이다. 또한, B-Tree 인덱스는 기본적으로 정렬된 상태를 유지하기 때문에, ORDER BY 절이나 GROUP BY 절을 포함한 쿼리에서도 이점을 가질 수 있다. 하지만..
·WEB
프로젝트를 하며 yml과 같은 민감한 정보들을 안전하게 관리하도록 서브모듈을 사용하기로 결정하였다.1. SubModule이란?SubModule은 Git에서 제공하는 기능으로, 외부 라이브러리나 다른 프로젝트를 현재 레포지토리에 포함시킬 수 있는 기능이다. 덕분에 코드 중복 없이 다른 프로젝트의 코드를 가져다 쓸 수 있다.2. 왜 SubModule을 사용했을까?다양한 프로젝트를 진행하면서, 데이터베이스 설정 정보 같은 민감한 정보를 여러 레포지토리에서 중복 없이 관리하고 싶을 때가 있다. 이럴 때 SubModule을 사용하면, 중요한 정보들을 Private 레포지토리에 저장해 두고 필요한 메인 레포지토리에서 쉽게 가져와 쓸 수 있다. 이렇게 하면 실수로 중요한 정보를 공개하는 상황을 방지할 수 있다.3. ..
·WEB
저희 곽두철 프로젝트에는 카카오 소셜 로그인만을 이용하기로 결정했었습니다.하지만 추후에 네이버, 구글 등등 다양한 플랫폼이 추가될 것을 고려해 추상화를 하도록 결정이 났습니다.이번 포스트에서는 카카오를 중심으로 글을 써보겠습니다.1. 왜 전략 패턴을 사용할까?소셜 로그인을 구현할 때, 카카오, 네이버, 구글 등 여러 제공자의 로그인 방식이 각각 다릅니다. 각기 다른 로그인 로직을 하나의 서비스에 담아두면 코드가 복잡해지고 유지보수가 어렵습니다. 전략 패턴을 사용하면 각 소셜 로그인 로직을 별도의 클래스로 분리하여 코드의 확장성과 유지보수성을 높일 수 있습니다.1-1. 전략 패턴의 장점?전략 패턴을 사용하면 런타임에 다른 소셜 로그인 로직으로 쉽게 교체할 수 있어 유연한 구조를 가질 수 있습니다.예를 들어..
·WEB
개발자로서 엔티티 클래스를 생성할 때, 저는 습관적으로 @NoArgsConstructor 어노테이션을 사용해 왔습니다.하지만 왜 사용하는지, 그리고 액세스 레벨을 왜 특정 값으로 설정하는지 명확히 알지 못한 채 사용해 왔습니다.이번 글에서는 @NoArgsConstructor의 역할과 액세스 레벨을 PROTECTED로 설정하는 이유를 정리해 보겠습니다. @NoArgsConstructor란?@NoArgsConstructor 어노테이션은 Lombok 라이브러리에서 제공하는 기능으로, 기본 생성자를 자동으로 생성해 주는 역할을 합니다. @NoArgsConstructor의 액세스 레벨@NoArgsConstructor 어노테이션에는 다양한 액세스 레벨을 설정할 수 있습니다. 이들은 다음과 같습니다:PUBLICPRO..
·WEB
지금까지 저는 Redis는 Single Thread라고 알고 있었습니다.그리고 Single Thread라 Atomic 해 동시성을 보장할 수 있다고 생각하였습니다. 하지만 여러 글들을 보니 Redis는 Single Thread로만 이루어진 게 아니라고 합니다왜냐하면 Redis 6.0부터 추가된 ThreadedIO가 추가되면서 사용자 명령이 Multi Thread로 동작하기 때문입니다.  ThreadedIO가 적용되는 부분은 다음과 같습니다.클라이언트가 전송한 명령을 네트워크로 읽어서 파싱 하는 부분명령이 처리된 결과 메시지를 클라이언트에게 네트워크로 전달하는 부분 이제, Redis 내부 사진을 보며 하나하나씩 이해해 보겠습니다.  먼저 클라이언트의 Socket이랑 Redis의 Socket이랑 연결을 한다..
유선준
'분류 전체보기' 카테고리의 글 목록 (3 Page)