본문 바로가기

분류 전체보기255

JCF와 스레드 - JCF 기초 Java를 통해 개발을 하다 보면 반드시 한 번쯤은 사용하게 될 라이브러리가 있다. ArratList, HashSet, ... 등이 있는데, 이들은 JCF라고 부르는 Java에서 제공하는 데이터 구조와 알고리즘의 표준 라이브러리이다.  JCF에 대해 자세히 알아보자. | JCF(Java Collection Framework) 란? Java에서 제공하는 데이터 구조와 알고리즘의 표준 라이브러리 데이터 저장, 검색, 정렬, 조작 등의 작업을 효율적으로 수행할 수 있도록 설계된 컬렉션 클래스와 인터페이스의 집합   JCF는 크게 Collection 인터페이스와 Map 인터페이스로 나뉜다. Map 인터페이스 컬렉션들은 2개의 데이터를 묶어 한쌍으로 다루기 때문에 Collection 인터페이스와 따로 분리되어 있.. 2024. 12. 4.
Chapter 6. 스프링이 사랑한 디자인 패턴 이번에는 디자인 패턴에 대해서 알아보자.  디자인 패턴은 설계 패턴이다. 실제 개발 현장에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 베스트 프랙티스를 정리한 것이다. 디자인 패턴은 당연히 객체 지향 특성과 설계 원칙을 기반으로 구현돼 있다.  스프링 프레임워크는 많은 개발자들이 사랑한 개발 프레임워크이다. 스프링 프레임워크 : 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크 책의 필자는 스프링 프레임워크를 OOP 프레임워크라고 표현했다. (객체 지향의 특성과 설계 원칙을 극한까지 적용한 프레임워크이다.) 디자인 패턴은 객체 지향의 특성 중 상속(extends), 인터페이스(interface/implements), 합.. 2024. 12. 3.
12/2 - TIL : Fallback Resilience은 시스템이 예기치 않은 장애, 오류, 네트워크 문제 등의 상황에서 안정적으로 작동하거나 복구할 수 있는 능력이다.  Resilience design pattern 중 하나로 Fallback이 있다.  Fallback은 시스템에서 오류 상황이나 예외적인 상태를 처리하기 위해 준비된 대체 동작이다. 시스템의 안정성과 신뢰성을 보장하기 위해 자주 사용되며, 특히 마이크로 서비스 아키텍처나 분산 시스템에서 중요한 역할을 한다. 시스템 안정성 확보: 다른 서비스나 시스템으로 장애가 전파되지 않도록 방지한다. 사용자 경험 개선: 오류를 숨기고 사용자에게 유용한 대안을 제공한다.  Fallback은 다양한 시나리오에서 활용될 수 있다:외부 API 호출 실패: 외부 시스템이 응답하지 않을 경우, 캐.. 2024. 12. 2.
Java 모의 면접 후기 Java에 대한 공부와 동시에 모의면접을 하면 좋겠다라는 생각을 했었다. 그때, 우연히 JSCODE 모의면접이라는 것을 알게되었다. 올해 6월, 7월에 걸쳐서 기업 면접을 봤던 경험이 있었지만, 감이 조금 흐려진 것 같아 면접 경험을 되살리고 Java 공부도 함께 할 수 있을 것 같아 신청하게 되었다.   매주 모의면접 질문에 답변을 준비하며, 단순히 답변을 작성하는 데 그치지 않고 Java를 깊이있게 공부하는 것을 기본으로 삼고, 그 위에 면접 답변을 쌓아 올리는 것을 목표로 했다.  따라서, 매주 나오는 면접 질문들에 대해 질문들의 흐름을 파악하려고 했었다. 왜 이 질문이 나오게 되었고, 어떤 질문과 연관이 되어있을까? 를 항상 의식하면서 공부를 했었던 것 같다. 이런 방식으로 공부를 해보니, 매주 .. 2024. 12. 1.
12/1 - TIL : 모듈이란? 공부를 하던 도중 모듈이라는 용어가 나와 궁금했다.  모듈에 대해 알아보자.  | 모듈(Module)모듈은 프로그래밍에서 코드의 재사용성과 관리 효율성을 높이기 위해 논리적으로 관련된 코드들을 하나의 단위로 묶은 것을 말한다. 프로그램을 구성하는 시스템을 기능 단위로 독립적인 부분으로 분리한 것이기 때문에 하나 이상의 논리적인 기능을 수행하기 위한 명령어의 집합이다. 모듈은 독립적인 프로그램 그 자체일 수 있고, 함수나 메서드일 수도 있다.  모듈의 특징은 다음과 같다. 독립적인 기능 : 모듈은 다른 것들과 구분되는 명확하고 독립적인 역할이나 기능을 가져야 한다. 고유한 이름 : 모듈은 고유한 이름을 가져야 하며, 다른 모듈과 충돌하지 않도록 네이밍이 중요하다. 호출 가능성 : 모듈은 다른 프로그램이나 .. 2024. 12. 1.
11/30 - TIL : MongoDB 지난 번에, NoSQL 중 하나인 Redis에 대해 알아보았다.  이번에는 NoSQL 중 가장 많이 사용되는 데이터베이스인 MongoDB에 대해 알아보고자 한다.   NoSQL에 대해서 간단하게 설명을 해보자면, NoSQL은 Not Only SQL로 관계형 데이터베이스와는 달리 스키마(데이터 구조, 제약 조건을 정의한 설계도) 없이 사용 가능하거나, 느슨한 스키마를 제공하는 저장소이다.  NoSQL은 저장 방식에 따라 나뉘는데, MongoDB는 Document 모델의 데이터베이스이다. Document : Key-Value 모델을 개념적으로 확장한 구조, 하나의 키(문서에 대한 ID로 표현)에 하나의 구조화된 문서를 저장하고 조회, 저장된 문서를 컬렉션으로 관리하며, 문서 저장과 동시에 문서 ID에 대한 .. 2024. 11. 30.
11/29 - TIL : MSA에서의 트랜잭션 모놀리식 환경에서는 일반적으로 하나의 중앙 집중식 데이터베이스를 사용하며, 이를 통해 트랜잭션 관리가 이루어진다.  하지만, MSA에서는 하나의 기능이 여러 마이크로 서비스에 걸쳐 수행된다.전체 트랜잭션이 마이크로 서비스의 물리적인 로컬 트랜잭션 여러개가 묶여서 만들어진다. 만약 일부 마이크로 서비스가 실패하면 데이터 일관성이 깨진다.  그럼 마이크로 서비스일 때는 트랜잭션을 어떻게 관리해야 할까? 마이크로 서비스일 때는 분산 트랜잭션이 필요하다. 각 서비스가 독립적인 데이터베이스를 가지고, 네트워크 지연 및 실패 가능성이 크기 때문이다.  MSA 환경에서의 트랜잭션 관리 방법에는 크게 2가지가 있다. 이 2가지 방법에 대해 알아보자. | 2PC(Two-Phase Commit)2PC는 2단계에 걸쳐서 영.. 2024. 11. 29.
11/28 - TIL : 이벤트 소싱과 CQRS 이벤트 소싱과 CQRS에 대해 알아보자. 이벤트 소싱과 CQRS를 사용하면, 데이터 저장과 조회를 분리하여 시스템의 성능과 확장성을 향상시키는 데 도움을 준다고 한다.  | 이벤트 소싱이벤트 소싱은 데이터 상태를 변경할 때, 변경된 최종 상태만 저장하는 것이 아니라, 변경 과정을 기록한 이벤트(Event)를 저장하는 방식이다. 데이터 상태 변화를 이벤트로 기록하고, 해당 이벤트들을 순차적으로 재생하여 현재 상태를 파악하는 방법이다. 이벤트 소싱에서는 데이터 변경 자체가 아닌 변경 이벤트(상태 변화)를 저장한다. 주문 생성: 사용자가 주문을 생성했다는 기록.결제 완료: 사용자가 결제를 완료했다는 상태 변화.주문 취소: 사용자가 주문을 취소했다는 기록. 이벤트 소싱에서 사용되는 개념들은 다음과 같다. 이벤트.. 2024. 11. 28.
11/27 - TIL : JDBC, MyBatis, Hibernate Application 개발에 있어서 가장 대표적인 아키텍처는 Layered Architecture이다. 애플리케이션을 논리적으로 분리된 계층(layers)으로 나누어 설계하는 방법이다. 각 계층은 특정 역할과 책임을 가지며, 계층 간 상호작용은 명확히 정의된 인터페이스를 통해 이루어진다.  Layered Architecture로 개발을 하다 보면, n-tier(application을 물리적 또는 논리적 계층으로 나누기)로 구성을 하게 되는데, 흔히 3-tier 혹은 4-tier로 구성을 한다. 3-tier : Presentation Tier (UI Layer) - Application Tier (Business Logic Layer) - Data Tier (Database Layer) 4-tier : P.. 2024. 11. 27.
1장 : SQL 처리 과정과 I/O SQL을 튜닝하기 전에, 옵티마이저가 SQL을 어떻게 처리하는지, 서버 프로세스는 데이터를 어떻게 읽고 저장하는지 살펴보자.  | 구조적, 집합적, 선언적 질의 언어SQL은 Structured Query Language의 줄임말로, 구조적 질의 언어이다. SQL은 기본적으로 구조적이고, 집합적이고, 선언적인 질의언어이다. 원하는 결과집합을 구조적, 집합적으로 선언하지만, 결과집합을 만드는 과정은 절차적이다. 데이터베이스 내부에서는 이 선언적인 쿼리를 기반으로 데이터를 가져오는 과정을 절차적으로 처리한다.사용자가 입력한 쿼리를 분석(Parsing)하고,실행 계획을 최적화(Optimization)하며,데이터를 필터링(Filtering)하고 정렬(Sorting)하여 결과를 반환한다. 데이터베이스 내부에서 데이.. 2024. 11. 27.
Chapter 5. 객체 지향 설계 5원칙 - SOLID 객체 지향 언어를 통해 객체 지향 프로그램을 올바르게 설계해 나가는 방법이나 원칙에 대해 알아보자.  SOLID에 대해 간략하게 보면 다음과 같다. SRP(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open Closed Principle) : 개방 폐쇄 원칙 LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 DIP(Dependency Inversion Principle) : 의존 역전 원칙 위의 원칙들은 응집도는 높이고, 결합도는 낮추라(개인적으로 개발을 하면서 머리에 늘 새기는 것이다..🥸)는 고전 원칙을 객체 지향의 관점에서 재정립.. 2024. 11. 26.
11/26 - TIL : 분산 트랜잭션과 CQRS 데이터의 일관성을 유지하는 방법에는 여러가지가 있다. 그 중 분산 트랜잭션과 CQRS에 대해 알아보자. 분산 트랜잭션여러 독립적인 시스템등에서 데이터를 일관성 있게 처리하기 위해 하나의 트랜잭션처럼 동작하도록 설계된 트랜잭션이다.단일 트랜잭션이 여러 시스템에 걸쳐 발생할 때, 모든 시스템이 해당 트랜잭션을 성공적으로 완료하거나, 모든 시스템이 트랜잭션을 실패로 처리하도록 보장한다.  +) 트랜잭션더보기트랜잭션은 데이터베이스의 상태를 변환하는 작업 단위, ACID를 만족해야 한다.  원자성(Atomicity) : 트랜잭션은 전부 성공하거나 전부 실패하여, 부분적인 작업 수행이 없는 것을 보장한다. 일관성(Consistency) : 트랜잭션이 완료된 후에도 데이터베이스는 모든 무결성 제약 조건을 유지한다. .. 2024. 11. 26.