본문 바로가기

분류 전체보기139

[Spring] The best way to use the Spring Transactional annotation 안녕하세요. 이번 포스팅에서는 스프링의 @Transactional 애노테이션의 적절한 사용 방법에 대해 좋은 글이 있어서 해당 글을 번역하고 추가적인 설명을 작성해보았습니다. 해당 포스팅에서 참조한 원문은 여기를 참조하실 수 있습니다. 우선 Spring에서 사용하는 @Transaction 에 대해 알아보겠습니다. @Transactional @Transactional은 스프링에서 제공하는 애노테이션으로, 트랜잭션 경계를 정의하는데 사용됩니다. 트랜잭션은 여러 데이터베이스 연산을 한 단위로 묶어, 모든 연산이 성공적으로 완료되거나 아무것도 실행되지 않도록 하는 것 (All or Nothing)을 의미합니다. 스프링은 1.0 버전부터 개발자가 트랜잭션 경계를 선언적으로 정의할 수 있도록 AOP 기반의 트랜잭션.. 2023. 8. 12.
[Spring In Action] 14. 클라우드 구성 관리 요약 스프링 클라우드 구성 서버는 중앙 집중화된 구성 데이터 소스를 마이크로서비스 기반의 더 큰 애플리케이션을 구성하는 모든 마이크로서비스에 제공한다. 구성 서버가 제공하는 속성들은 백엔드 Git이나 Vault 리퍼지터리에서 유지, 관리된다. 모든 구성 서버 클라이언트에 제공되는 전역적인 속성들에 추가하여 구성 서버는 프로파일에 특정된 속성과 애플리케이션에 특정된 속성도 제공할 수 있다. 보안에 민감한 속성들은 백엔드 Git 리퍼지터리에 암호화하여 저장하거나 Vault 백엔드의 보안 속성으로 저장하여 보안을 유지할 수 있다. 구성 서버 클라이언트는 새로운 속성으로 리프레시할 수 있다. 이때 액추에이터 엔드포인트를 통해 수동으로 리프레시하거나, 스프링 클라우드 버스와 Git 웹훅을 사용해서 자동으로 리프레.. 2023. 8. 6.
[Spring In Action] 12. 리액티브 데이터 퍼시스턴스 요약 스프링 데이터는 카산드라, 몽고DB, 카우치베이스, 레디스 데이터베이스의 리액티브 리퍼지터리를 지원한다. 스프링 데이터의 리액티브 리퍼지터리는 리액티브가 아닌 리퍼지터리와 동일한 프로그래밍 모델을 따른다. 단, Flux나 Mono와 같은 리액티브 타입을 사용한다. JPA 리퍼지터리와 같은 리액티브가 아닌 리퍼지터리는 Mono나 Flux를 사용하도록 조정할 수 있다. 그러나 데이터를 가져오거나 저장할 때 여전히 블로킹이 생긴다. 관계형이 아닌 데이터베이스를 사용하려면 해당 데이터베이스에서 데이터를 저장하는 방법에 맞게 데이터를 모델링하는 방법을 알아야 한다. 2023. 6. 5.
대용량 처리를 위한 MySQL 이해 대용량 서버를 구축하기 위해서는 어떤 것들을 알아야할까 Spring, MySQL, MongoDB, Redis, Kafka, MSA, ... 서버 개발자의 핵심은 데이터다. 대용량 시스템이 어려운 이유는 결국 많은 양의 데이터에서 시작된다. 어떻게 많은 양의 데이터를 안정적으로 삽입, 갱신, 조회할 것이냐? 정규화, 인덱스, 트랜잭션, 동시성 제어 웹의 기본 아키텍처 클라이언트 서버 데이터베이스 웹의 요구 사항이 점점 복잡해짐 클라이언트 웹 서버 웹 애플리케이션 서버 데이터베이스 웹 서버, 웹 애플리케이션 서버는 왜 나누어져 있을까? 태초에는 웹 서버만 있는 형태에서 웹의 복잡도가 증가함에 따라... 관심사의 분리 / 관측 가능한 시스템 / 효율적인 리소스 사용 대용량 시스템의 모습 왜 데이터베이스가 병목.. 2023. 5. 25.
[인프런] 5월 수강 일기 (기출로 대비하는 개발자 전공 면접[CS완전정복]) 지난 4월부터 디프만에서 기출로 대비하는 개발자 전공면접[CS 완전정복] - 개발남노씨 스터디를 참여하면서 5월에 수강 하였던 일기를 작성해보려고 합니다. 커리큘럼 1.자료구조 2.운영체제 3.데이터베이스 4.네트워크 5.모의면접 커리큘럼은 총 5가지의 섹션으로 나누어져 있으며, 4월에 자료구조 파트를 끝내고 5월부터 운영체제, 데이터베이스, 네트워크, 모의면접을 진행했습니다. 운영체제 해당 강의에서 운영체제 파트는 꼭 필요한 Process, Thread, DeadLock, Memory 관리 기법, 가상 메모리 등등 꼭 알아야 할 필수 내용들을 잘 정리해주셔서 이해하기 쉬웠습니다. 데이터베이스 데이터베이스의 경우는 Key에 관한 기본적인 개념들, 관계형 데이터베이스에서의 관계, outer join과 in.. 2023. 5. 23.
Microservice와 Spring Cloud 소개 Cloud Native Architecture 확장 가능한 아키텍처 시스템의 수평적 확장에 유연 확장된 서버로 시스템의 부하 분산, 가용성 보장 시스템 또는 서비스 애플리케이션 단위의 패키지 (컨테이너 기반 패키지) 모니터링 탄력적 아키텍처 서비스 생성 - 통합 - 배포, 비즈니스 환경 변화에 대응 시간 단축 분할된 서비스 구조 무상태 통신 프로토콜 서비스의 추가와 삭제 자동으로 감지 변경된 서비스 요청에 따라 사용자 요청 처리 (동적 처리) 장애 격리 (Fault isolation) 특정 서비스에 오류가 발생해도 다른 서비스에 영향 주지 않음 Cloud Native Application Cloud Native Application - CI/CD 지속적인 통합 CI (Continuous Integrati.. 2023. 5. 5.
[인프런 수강일기] 01. 운영체제 - 프로세스란 무엇인가 인프런 수강일기란? 해당 글은 인프런에서 제공하는 후원 강의 및 할인 쿠폰으로 결제한 강의들을 수강하고 후기를 작성한 것입니다 오늘은 인프런에서 기출로 대비하는 개발자 전공 면접 [CS 완전 정복] 강의를 수강하였습니다. 강의는 총 6개의 섹션(합격률 높이는 개발자 면접 TIP, 자료구조, 운영체제, 데이터베이스, 네트워크, 기출로 보는 모의 면접)으로 구성되어 있고, 오늘은 운영체제 섹션을 수강하였습니다. 운영체제 (OS, Operation System) 실행파일(program)이 memory에 적재되어 CPU를 할당받아 실행되는 것을 프로세스라고 한다. 운영체제를 관통하는 핵심적인 단어 하나를 뽑는다면 그건 바로 process이다. 운영체제가 작동하는 다양한 원리들이 바로 process를 위해 존재한.. 2023. 4. 30.
아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩터리와 생성자에는 똑같은 제약이 하나 있다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 예를 들어 식품 포장의 영양정보를 표현하는 클래스를 생각해보자. 영양 정보는 1회 내용량, 총 n회 제공량, 1회 제공량당 칼로리같은 필수 항목 몇 개와 총 지방, 트랜스지방, 포화지방, 콜레스테롤, 나트륨 등 총 20개가 넘는 선택 항목으로 이뤄진다. 그런데 대부분 제품은 이 선택 항목 중 대다수의 값이 0이다. 점층적 패턴 프로그래머들은 이럴 때 점층적 생성자 패턴을 즐겨 사용했다. 필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개까지 받는 생성자, ... 형태로 선택 매개변수를 전부 다 받는 .. 2023. 4. 23.
아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자다. 하지만 모든 프로그래머가 꼭 알아둬야 할 기법이 하나 더 있다. 클래스는 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드말이다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 이 방식에는 장점과 단점이 모두 존재한다. 장점 1. 이름을 가질 수 있다. 하나의 시그니처로는 생성자를 하나만 만들 수 있다. 입력 매개변수들의 순서를 다르게 한 생성자를 새로 추가하는 방식으로 이 제한을 피해볼 수도 있지만 좋지 않은 발상이다. 이름.. 2023. 4. 13.
[Book] 객체지향의 사실과 오해 - 최종편 (부록) 추상화 기법 추상화는 도메인의 복잡성을 단순화하고 직관적인 멘탈 모델을 만드는 데 사용할 수 있는 가장 기본적인 인지 수단이다. 특성을 공유하는 객체들을 동일한 타입으로 분류하는 것은 객체지향 패러다임에서 사용하는 추상화 기법의 한 예다. 중요한 추상화 기법의 종류 분류와 인스턴스화 분류는 객체의 구체적인 세부 사항을 숨기고 인스턴스 간에 공유하는 공통적인 특성을 기반으로 범주를 형성하는 과정 분류의 역은 범주로부터 객체를 생성하는 인스턴스화 과정이다. 일반화와 특수화 일반화는 범주 사이의 차이를 숨기고 범주 간에 공유하는 공통적인 특성을 강조 일반화의 역을 특수화라고 한다. 집합과 분해 집합은 부분과 관련된 세부 사항을 숨기고, 부분을 사용해서 전체를 형성하는 과정을 가리킨다. 집합의 반대 과정은 전체.. 2023. 4. 12.