본문 바로가기

전체 글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.
[Book] 객체지향의 사실과 오해 - 7장. 함께 모으기 마틴 파울러는 객체지향 설계 안에 존재하는 세 가지 상호 연관된 관점에 관해 설명한다. 파울러는 세 가지 관점을 각각 개념 관점, 명세 관점, 구현 관점이라고 부른다. 개념 관점(Conceptual Perspective)에서 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다. 도메인: 사용자들이 관심을 가지고 있는 특정 분야나 주제를 말함 소프트웨어는 도메인에 존재하는 문제를 해결하기 위해 개발된다. 명세 관점(Specification Perspective)은 도메인의 개념이 아니라 실제로 소프트웨어 안에서 살아 숨쉬는 객체들의 책임에 초점을 맞추게 된다. 즉 객체의 인터페이스를 바라보게 된다. 명세 관점에서 프로그래머는 객체가 협력을 위해 '무엇'을 할 수 있는가에 초점을 맞춤 인터페이.. 2023. 4. 4.
[Book] 객체지향의 사실과 오해 - 6장. 객체 지도 객체 지도 지도는 실세계의 지형을 기반으로 만들어진 추상화된 모델 지도 은유의 핵심은 기능이 아니라 구조를 기반으로 모델을 구축하는 편이 좀 더 범용적이고 이해하기 쉬우며 변경에 안정적이라는 것이다. 자주 변경되는 기능이 아니라 안정적인 구조를 따라 역할, 책임, 협력을 구성하라 기능 설계 대 구조 설계 모든 소프트웨어 제품의 설계에는 두 가지 측면이 존해한다. 하나는 기능(function) 측면의 설계이고 다른 하나는 구조(structure) 측면의 설계이다. 기능 측면의 설계는 제품이 사용자를 위해 무엇을 할 수 있는지에 초점을 맞춘다. 구조 측면의 설계는 제품의 형태가 어떠해야 하는지에 초점을 맞춘다. 좋은 설계는 나중에라도 변경할 수 있는 여지를 남겨 놓는 설계다. 지도 은유를 통해 살펴본 것처럼.. 2023. 4. 4.
[Book] 객체지향의 사실과 오해 - 5장. 책임과 메시지 자율적인 책임 설계의 품질을 좌우하는 책임 객체지향 공동체를 구성하는 기본 단위는 '자율적'인 객체 객체들은 애플리케이션의 기능을 구현하기 위해 협력하고 협력 과정에서 각자 맡은 바 책임을 다하기 위해 자율적으로 판단하고 행동함 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로부터 요청을 수신했기 때문 요청을 처리하기 위해 객체가 수행하는 행동을 책임이라고 한다. 따라서 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체를 의미 자신의 의지에 따라 증언할 수 있는 자유 객체가 책임을 자율적으로 수행하기 위해서는 객체에게 할당되는 책임이 자율적이어야 한다. 재판 과정을 예시로 들면 판사는 목격자에게 '증언하라'는 요청을 전송한다. 요청은 수신자의 책임을 암시하므로 목격자는 재판이.. 2023. 4. 4.
[Book] 객체지향의 사실과 오해 - 4장. 역할, 책임, 협력 역할, 책임, 협력 객체지향에 갓 입문한 사람들의 가장 흔한 실수는 '협력'이라는 문맥을 고려하지 않은 채 객체가 가져야할 상태와 행동부터 고민하는 것이다. 중요한 것은 개별 객체가 아니라 객체들 사이에 이뤄지는 협력이다. 객체지향 설계의 전체적인 품질을 결정하는 것은 개별 객체들의 품질이 아니라 여러 객체들이 모여 이뤄내는 협력의 품질이다. 협력 협력의 예시: ex) 재판 협력은 다수의 '요청'과 '응답'으로 구성되며 전체적으로 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다. 객체지향의 세계: 동일한 목적을 달성하기 위해 협력하는 객체들의 공동체 어떤 객체가 특정한 요청을 받아들일 수 있는 이유는 그 요청에 대해 적절한 방식으로 응답하는데 필요한 지식.. 2023. 3. 30.
[Book] 객체지향의 사실과 오해 - 3장. 타입과 추상화 타입과 추상화 추상화의 예시 ex) 해리 벡의 지하철 노선도 지하철 노선도는 불필요한 지형 정보를 제거함으로써 단순함을 달성한 추성화의 훌륭한 예 지하철 노선도를 통해 알 수 있는 것처럼 훌륭한 추상화는 목적에 부합하는 것이어야 한다. 추상화 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법 복잡성을 다루기 위해 추상화는 두 차원에서 이뤄진다. 첫번째 차원은 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만드는 것 두번째 차원은 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거함으로써 단순하게 만드는 것 모든 경우에 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이라는.. 2023. 3. 29.
[Book] 객체지향의 사실과 오해 - 2장. 이상한 나라의 객체 객체지향과 인지 능력 인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다. 많은 사람들이 객체지향을 직관적이고 이해하기 쉬운 패러다임이라고 말하는 이유는 객체지향이 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 기본적인 인지 능력에 기반을 두고 있기 때문이다. 그러나 인간의 인지 능력은 물리적인 한계를 넘어 개념적으로 경계지을 수 있는 추상적인 사물까지도 객체로 인식할 수 있게 한다. 주문과 계좌 이체는 비록 물리적인 실체는 존재하지 않더라도 인간이 쉽게 구분하고 하나의 단위로 인지할 수 있는 개념적인 객체의 일종이다. 즉 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다. "객체지향 패러다임은 인간이 인지할 수 있는 다양한.. 2023. 3. 29.
[Spring In Action] 11. 리액티브 API 개발하기 Chapter 11. REST API를 리액티브하게 사용하기 스프링 5가 RestTemplate의 리액티브 대안으로 WebClinet를 제공 WebClient는 외부 API로 요청을 할 때 리액티브 타입의 전송과 수신 모두를 한다. 리소스 얻기(GET) RestTemplate의 경우는 getForObject() Mono ingredient = WebClient.create() .get() .uri("http://localhost:8080/ingredients/{id}", ingredientId) .retrieve() .bodyToMono(Ingredient.class); ingredient.subscribe(i -> { ... }) 컬렉션에 저장된 값들을 반환하는 요청 Flux ingredients = .. 2023. 3. 24.
[알고리즘] DFS, BFS 개념 BFS와 DFS 두가지 모두 그래프를 탐색하는 방법 그래프: 정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조의 일종 그래프 탐색: 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한번씩 방문하는 것 DFS 깊이 우선 탐색 (Depth-First Search) 루트 노드(혹은 다른 임의의 노드)에서 시작해서 다음 분기로 넘어가기전에 해당 분기를 완벽하게 탐색하는 방식 예를 들어 미로찾기를 할 때 최대한 한 방향으로 갈 수 있을 때까지 쭉 가다가 더이상 갈 수 없게되면 다시 가장 가까운 갈림길로 돌아와서 그 갈림길로부터 다시 다른 방향으로 탐색을 진행하는 방식 BFS 너비 우선 탐색 (Breadth-First Search) 루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한.. 2023. 2. 24.
@Transaction(readOnly = true) 스프링 프레임워크에서 @Transaction(readOnly = true)로 트랜잭션을 읽기 전용 모드로 설정할 수 있다. @Transaction(readOnly = true)트랜잭션에 readOnly = true 옵션을 주면 스프링 프레임워크가 하이버네이트 세션 플러시 모드를 MANUAL로 설정한다. 이렇게 하면 강제로 플러시를 호출하지 않는 한 플러시가 일어나지 않는다. 따라서 트랜잭션을 커밋하더라도 영속성 컨텍스트가 플러시 되지 않아 엔티티의 등록, 수정, 삭제가 동작하지 않고 또한 읽기 전용으로 영속성 컨텍스트는 변경 감지를 위한 스냅샷을 보관하지 않으므로 성능이 향상된다. 즉 엔티티를 읽기 전용으로 조회하면 변경 감지를 위한 스냅샷을 유지하지 않아도 되고 영속성 컨텍스트를 플러시 하지 않아도 돼.. 2022. 11. 21.
[데이터베이스] RDBMS vs NoSQL 이번 포스팅에서는 RDBMS 와 NoSQL의 차이점에 대해 알아보겠습니다. 차이점을 알아보기에 앞서 기본적인 개념부터 정리해보겠습니다. Database와 DBMS 그리고 SQL - Database: 여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리하는 데이터 집합 - DBMS: DataBase Management System의 약자로서 사용자와 데이터베이스 사이에서 사용자의 요청을 해석하여 데이터베이스에 저장된 정보를 관리할 수 있도록 해주는 소프트웨어 - SQL: Structured Query Language의 약자로서 관계형 데이테베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이며 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성.. 2022. 10. 9.
[Spring] 스프링 트랜잭션 트랜잭션이란 트랜잭션은 완전히 성공 하거나 완전히 실패하는 일련의 논리적 작업 단위 입니다. @Transactional 애노테이션 스프링 트랜잭션은 프로그래밍 방식과 선언적 방식의 두가지 방식으로 구분할 수 있습니다. 프로그래밍 방식 TransactionTemplate 직접 PlatformTransactionManager 구현하기 트랜잭션 관리가 비즈니스 로직과 함께 사용되기 때문에 프로그래밍 방식으로는 널리 사용되지 않음 하지만 기능이 몇가지 밖에 없는 애플리케이션에서는 트랜잭션 프록시를 통한 부하가 중한 작업으로 느껴질 수 있어서 프로그래밍 방식이 사용될 수 있음 선언적 방식 (@Transactional) 메서드 혹은 구현체 클래스 상단에 @Transactional 애노테이션을 사용합니다. 클래스 수.. 2022. 9. 30.
[Spring] @Bean vs @Component @Bean과 @Component 차이 안녕하세요. 이번 시간에는 빈과 컴포넌트의 차이에 대해 알아보겠습니다. 먼저 스프링은 개발의 제어권이 스프링 컨테이너(IoC 컨테이너)에 있습니다. 그래서 이를 IoC (Inversion Of Control), 제어의 역전이라고 합니다. 스프링이 개발자 대신 객체를 제어하기 위해 객체들이 빈(Bean)으로 등록되어 있어야 합니다. 과거에는 객체를 빈으로 등록하기 위해 XML로 지정했어야 하는데 요즘은 애노테이션으로 간단하게 등록할 수 있습니다. @Bean @Bean은 메서드 레벨에서 선언하며, 반환되는 객체(인스턴스)를 개발자가 수동으로 빈으로 등록하는 애노테이션 입니다. @Configuration public class AppConfig { @Bean public .. 2022. 9. 28.
[JAVA] 추상 클래스와 인터페이스의 차이 개요 이번 포스팅에서는 추상 클래스와 인터페이스의 차이점에 대해 알아보겠습니다. 차이점에 대해 알아보기에 앞서 추상 클래스와 인터페이스의 개념에 대해 설명드리겠습니다. 추상 클래스 (abstract class) 추상 클래스(abstract class)란 하나 이상의 추상 메서드 (abstract method)를 포함하는 클래스 입니다. 추상 메서드는 선언만 있고 본체는 없는 함수이며 선언부에 'abstract'라는 키워드를 붙입니다. 추상 메서드가 포함되어 있다면 클래스도 추상 클래스이므로 클래스명 앞에도 'abstract' 키워드를 붙여야 합니다. abstract class Animal { public String sName; public void move() { } abs.. 2022. 9. 22.
[JAVA & Kotlin] Java 메모리 구조 (JVM Memory Structure) JVM JVM(Java Virtual Machine)은 자바 가상 머신으로 자바 프로그램을 실행시키기 위해서 반드시 실행되어야 하는 소프트웨어 입니다. 자바 프로그램을 실행시키는 것은 JVM을 실행시키고 그 위에서 자바 프로그램을 실행시킨다는 의미입니다. 즉 JVM은 운영체제(OS)와 자바 프로그램 사이를 연결해주는 중계자 역할을 합니다. 자바 코드를 컴파일하여 .class 바이트 코드(.class 파일은 바이트 코드라고 하는데 사람이 쓰는 자바 코드에서 컴퓨터 읽는 기계어의 중간 단계라고 할 수 있습니다)로 만들면 이 코드가 자바 가상 머신 환경에서 실행됩니다. 이러한 특징으로 인해 자바 프로그램에서 오류가 발생해도 JVM만 다운될 뿐 전체 시스템에 데미지를 주지 않습니다. 또한 JVM 덕분에 플랫폼에.. 2022. 9. 14.
[Network] Cookies vs Sessions 개요 Cookies vs Sessions HTTP의 특징과 쿠키와 세션을 사용하는 이유 사용자가 로그인 페이지에서 로그인 서버에서 사용자가 보낸 정보가 존재하는 사용자인지 확인 존재하는 사용자인 경우 유일한 세션 ID를 생성하고 사용자 ID와 매핑정보를 저장 클라이언트에 세션 ID를 쿠키로 저장하도록 전달 이후에 클라이언트에서 서버로 요청을 할 때 서버는 request header의 쿠키 정보(세션 ID)를 확인하고 세션 ID와 매핑되는 ID의 사용자로 인식함 기본적으로 HTTP 프로토콜 환경은 connectionless, stateless한 특성을 가집니다. 따라서 서버는 클라이언트가 누구인지 매번 확인해야 합니다. 이러한 HTTP 프로토콜의 특성을 보완하여 서버가 클라이언트를 식별하게 하기 위해 쿠키.. 2022. 9. 7.
[AWS] NAT Gateway / Transit Gateway란? NAT Gateway NAT 게이트웨이는 NAT(Network Address Translation, 네트워크 주소 변환) 서비스 프라이빗 서브넷의 인스턴스가 VPC 외부의 서비스에 연결할 수 있지만 외부 서비스에서 이러한 인스턴스와 연결을 시작할 수 없도록 NAT 게이트웨이를 사용할 수 있음 즉 외부 서비스에서 프라이빗 서브넷의 인스턴스로 접근할 수 없게 하지만 프라이빗 서브넷의 인스턴스에서는 외부 서비스로 접근할 수 있게 해주는 서비스 VPC (Virtual Private Cloud) 란? 먼저 VPC 개념을 알아보면 AWS에는 VPC라는 가상의 사설 네트워크망을 구축할 수 있는 서비스가 있음 VPC를 이용하면 기존 온프레미스 형태와 마찬가지로 외부에서 접근할 수 없는 사설(Private) 네트워크 망.. 2022. 9. 2.
[AWS] Global Accelerator 란 Global Accelerator(글로벌 액셀러레이터) AWS의 글로벌 네트워크 인프라를 통해 사용자 트래픽을 전송하여 인터넷 사용자 성능을 최대 60% 개선하는 네트워킹 서비스 Global Accelerator는 사용자와 가장 가까운 위치의 사용 가능한 정상 엔드포인트로 트래픽을 자동으로 재라우팅하여 엔드포인트 장애를 완화함 Global Accelerator의 자동 라우팅 최적화 기능은 인터넷이 혼잡할 때 패킷 손실, 지터 및 지연 시간을 일관적으로 낮게 유지함 Global Accelerator는 2개의 글로벌 정적 고객용 IP를 제공함. 트래픽이 도착하는 최종 엔드포인트는 AWS 특정 리전의 ELB(Application Load Balancer 또는 Network Load Balancer), 탄력적 .. 2022. 8. 31.
[JPA] 테스트 코드 실행 후 데이터 rollback 설정하기 상황 CRUD (데이터 저장/조회/수정/삭제) 로직을 구현한 후 JUnit을 이용하여 테스트 코드를 작성하는 경우 @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String username; } @Repository public class MemberRepository { @PersistenceContext private EntityManager em; public Long save(Member member) { em.persist(member); return member.getId(); } public Member find(Long id) { return em.find(Member.cla.. 2022. 8. 15.
[GCP] Google Cloud API Google Cloud API API = Application Programming Interface Google Cloud Service와 통신하기 위한 프로그래밍 인터페이스 프로젝트를 새로 생성 후 처음 서비스를 사용하면 해당 서비스의 API를 Enable(활성화)해야함 2022. 8. 15.
[Thought] 성장하는 개발자가 되는 5가지 팁 성장하는 개발자가 되는 5가지 팁 1. 다음은 오지 않는다. '이번만, 다음에!' 하지 않기 지금 직면했을 때! 지금이 가장 최적기! 2.깨어있기 (사고하기) 의식을 깨우자! 사고하며 공부하고 일하자! 3. 메모하기: 내가 필요한 지식들 정리하기 4. 우선 순위 정하기 (T자로 공략해나가기) 주력나무, 튼튼 토양, 깊은 토양으로 세분화 5. 일정관리: 균형 있게 공부하기 2022. 7. 29.