전체 글

저의 지식이 세상에 가치를 더하길 바라는 백엔드 지망생입니다.
Redis 인메모리 데이터이기 때문에 RDBMS에 비해 접근 속도가 빠르다. 사용방법 EC2 메모리 직접 사용 레디스 클라우드로 원격 사용 사용하기 좋은 곳 I/O 작업이 빈번한 곳 (실시간 조회수를 계속 COUNT 해야하는 서비스) 사용자 세션 관리 Springboot에 redis 간편 적용 spring: cache: type: redis redis: time-to-live: 10000 cache-null-values: true redis: host: localhost port: 6379 application.yml 설정법 @EnableCaching // 추가해주기 @EnableJpaAuditing @SpringBootApplication public class JpaToyprojectApplicati..
· Dev Book
나쁜 코드와 좋은 코드란? 🚫 나쁜 코드의 특징 필수적인 로직 외의 코드들이 추가되어서 성능이 저하된다. 제 3자가 볼때 사용 용도, 의미를 알 수 없는 모호한 표현(네이밍) 중복으로 인한 코드의 재활용성 저하 😊 깨끗한 코드의 특징 성능이 보장되는 코드 가독성이 좋은 코드, 즉 잘 쓴 문장처럼 술술 읽히는 코드 중복을 최대한 줄여서 코드의 재활용성을 극대화한 코드 한가지 기능에 집중하는 코드(SOLID의 SRP 원칙) 보이스카우트 룰 내가 코드를 건드리기 전보다 더욱 깨끗한 상태로 만들어야 한다. 네이밍을 잘 하기 String a; int b; public void printMyData(String a, int b) { System.out.println("my name is " + a + " and m..
· Database
트랜잭션이란? 트랜젝션은 데이터베이스의 상태를 변화시키기 위한 작업 수행의 논리적 단위를 의미한다. 우리는 데이터베이스로 SQL 쿼리를 보냄으로써 데이터베이스의 상태를 변화시킨다. 그렇다면 작업 단위라는 것은 무엇을 말하는 것일까? 작업 단위는 사용자가 특정 기능의 수행을 위해 SQL 작업을 묶은 단위를 의미한다. 송금 서비스를 예로 들어보자. 송금 서비스는 1. A가 돈을 보내고, 2. B가 그 돈을 안전하게 받았을때 완전히 실행이 됐다고 할 수 있다. 두 과정이 다른 트랜젝션, 즉 다른 작업으로 분리되었다고 생각해보자. A가 돈을 10000원 송금하면 A의 돈 데이터에서 10000원이 차감될 것이다. 그에 맞춰서 B의 잔고는 10000원이 추가 될 것이다. 만약 A의 로직에서 오류가 발생해 트랜젝션 ..
· Spring/JPA
기본적으로 트랜젝션과 영속성 컨텍스트는 범위를 같게 한다. 순서는 → 스프링 트랜젝션 AOP 동작 → 트랜젝션 내 메서드 호출 → 트랜젝션 커밋 직전 영속성 컨텍스트 플러시 → 트랜젝션 종료 → 그 이후 엔티티는 준영속 상태 여러 쓰레드가 하나의 엔티티 매니져에 접근 할 수 있지만, 쓰레드마다 트랜젝션이 별개로 할당되기 때문에 영속성 컨텍스트도 따로 할당된다. 근데 이 상태에서는 변경 감지나 지연로딩을 사용하지 못한다. 이것들은 모두 영속성 컨텍스트가 살아있을때만 가능하다. 지연로딩은 트랜젝션과 상관없이 영속성 컨텍스트만 살아있으면 된다. 지연로딩은 즉시로딩의 N+1 문제를 해결해준다. 하지만 지연로딩 자체도 DTO로 변환할때 N+1문제를 가질 수 있다. 즉시로딩에서의 N+1 문제 과정 -> JPQL은 ..
· Dev Book
5장은 객체지향 설계에 있어서 메세지의 중요성과 책임의 자율성을 강조한다. 손님이 바리스타에게 커피를 주문하는 과정을 협력의 예시로 들어보자. 이 협력에서는 '커피를 만들어라' 라는 말이 메세지가 된다. 저자는 객체 지향 설계가 이 메세지를 정하는 것으로부터 시작되어야 한다고 말한다. 메세지의 송/수신자의 관점에서 수신자인 바리스타는 오직 '커피를 만들어라' 라는 메세지가 수신될때만 행동을 하게 된다. 인터페이스 이번장에서는 인터페이스의 개념이 등장한다. 인터페이스는 객체들이 협력하는 통로가 되어준다. 실생활의 예시 중 노트북을 예시로 들었을때 우리는 키보드에 타자를 침으로써 노트북과 의사소통 한다. 책에서 소개하는 인터페이스의 특징을 살펴보자. 인터페이스의 사용법을 익히기만 하면 내부 구조나 동작 방식..
· AWS
퍼블릭 IP 퍼블릭 IP는 인터넷 상에서 개개인의 로컬 네트워크를 구분하기 위해 ISP에서 제공하는 IP 주소이다. 주소의 구성은 255.255.255.255 총 4개의 클래스로 구성되어 있으며 이로 인해 생성된 IP의 총 개수는 전세계 약 37억개이다. 얼핏 들으면 충분하고도 남을 개수이지만, 현시점 퍼블릭 IP의 개수는 부족한 상황이라고 한다. 퍼블릭 IP는 인터넷 상에서 주소 하나하나가 고유함으로 절대 중복되는 일이 없다. 또한 외부에 공개가 되어있어서 다른 인터넷 사용자들이 나에게 접속 할 수 있다. 프라이빗 IP 네트워크 중에는 외부로의 공개를 금지하는 것들도 있을 것이다. 예를 들어 회사 내부의 PC를 연결하는 네트워크는 외부로 공개된다면 회사 기밀이 모두 빠져나갈 것이다. 따라서 외부에서는 ..
· Dev Book
4장은 이기적이고 합리적이라 가정된 인간도 타인과의 협력의 관점에서는 행동 양식이 달라질 수 있다는 이야기로 시작된다. 객체지향의 세상에서도 이 원리는 똑같이 적용될 수 있다. 우리는 객체 하나하나의 독립성에 집중할 것이 아니라 객체들간의 협력에 초점을 맞춰야 한다. 협력은 객체들이 요청과 응답의 메세지를 주고 받는 과정에서 일어난다. 응답을 해주어야 하는 메세지의 수신자는 자신이 해결하지 못하는 작업을 능력이 있는 다른 객체에게 요청한다. 객체들끼리 유기적으로 요청과 응답의 연쇄작용이 일어나고 이를 협력이라고 할 수 있다. 4장에서는 재판 과정을 예시로 든다. 재판장은 재판을 진행해야 한다는 책임이 있고, 토끼는 증인을 출석시켜야할 책임이 있으며 증인은 거짓없이 증언을 해야할 책임이 있다. 각자의 책임..
1. 임의의 클래스를 하나 만든다. 2. RuntimeExeption을 extends 해준다 3. alt + insert 눌러서 override 클릭 4. 상단의 메서드 모두 불러온다. public class NotEnoughStockException extends RuntimeException{ public NotEnoughStockException() { super(); } public NotEnoughStockException(String message) { super(message); } public NotEnoughStockException(String message, Throwable cause) { super(message, cause); } public NotEnoughStockExcept..
Jemlog
깊게 자라기