전체 글
-
읽기 좋은 코드 작성하기 [2] 논리 사고 흐름개인 공부/읽기 좋은 코드 2024. 8. 5. 20:08
출처 인프런 Readable Code🔴 논리 사고 흐름인간의 뇌는 한번에 한가지만 처리할 수 있다. 멀티 태스킹을 잘한다는 것은 여러 업무를 번갈아 가면서 처리할때 빠르게 다른 업무를 처리할 준비를 할 수 있는 능력이 좋다는 것을 의미한다.이 말은 즉 우리의 뇌는 업무를 처리할때 업무 처리를 위한 준비 -> 업무 처리 -> 다른 업무 인지 -> 업무 처리를 위한 준비 형태로 진행된다는 것이다.이를 코드를 작성할때도 고려해볼만 하다.🟠 Early Retrun코드를 작성할때 빠른 리턴은 코드를 더 읽기 쉽게 해준다.public class Scribbling2 { @Test void earlyReturn() { int count = 3; if (count 다음 코드를 실..
-
읽기 좋은 코드 작성하기 [1] 추상개인 공부/읽기 좋은 코드 2024. 8. 5. 20:07
출처 인프런 Readable Code🔴 추상🟠 추상🟢 추상이란?추상의 사전적 의미는 사물을 정확하기 이해하기 위해 사물의 특정한 측면만을 가려내어 포착하고 다른 측면들은 버린다는 것이다.🟢 추상과 구체구체는 구체적으로 구현된 물체이고 추상은 반대로 구체적인 부분에서 특정한 측면만을 가지고 있는 것이다.예를 들어나는 어제 다른 업체의 API를 호출하여 우리 DB에 데이터를 밀어넣고 해당 데이터들을 다시 우리 데이터에 맞게 API에서 반환할 수 있는 작업을 진행해보았어.라는 말은 구체적으로 내가 어떤 일을 했는지 설명하고 있다. 이 말을 추상적으로 표현한다면나는 어제 ERP 연동을 했어.라고 표현할 수 있다.추상이란 추상 메서드, 추상 클래스와 같이 어려운 단어로 보기보다. 우리 인간이 어떠한 구체적..
-
동시성 제어 [3] Redis개인 공부/spring 2024. 8. 5. 19:54
🔴 분산 Lock동시성 제어 [1] java 처리동시성 제어 [2] DB Lock에 이어 Redis를 사용한 동시성 제어 방법을 학습해보자.분산된 서비스에서 사용할 수 있는 락 방법으로 DB를 사용하는 방법에 대해 알아봤었다. 하지만 DB의 경우 이미 insert와 select 등 다양한 처리를 진행하고 있기에 lock을 걸었을때 성능의 이슈와 DB 자체가 빠른 시스템이 아니라 처리 속도면에서도 좋은 결과를 보여주진 않는다.그래서 우리가 선택할 수 있는 동시성 제어 방법으로 in-memory의 캐시를 사용하는 Redis를 통해 Lock을 처리할 수 있다.🟠 Redis(lettuce) 설정Redis를 사용하기 위해서는 Redis 서버를 생성해야되기 때문에 설정부터 시작해보자.🟢 docker compo..
-
동시성 제어 [2] DB Lock개인 공부/spring 2024. 8. 5. 19:53
🔴 분산 Lock지난 번 글에 이어 동시성 문제를 해결해보려고 한다.java 동시성 제어 [1]java 처리분산된 여러 서버에서 서버마다 락을 처리해놔도 여러 서버가 존재한다면 동시성은 해결될 수 없다. 그래서 여러 서버가 DB 한곳으로 요청할때 DB에서 락을 걸어 동시성 이슈를 해결하는 방법에 대해 알아보자.🟠 DB Lock (비관적 락)데이터를 저장하고 있다면 당연히 DB를 사용하고 있을것이다. RDB를 사용하고 있는 경우 query를 통해 Lock을 걸어줄 수 있다.여기서 비관적 락이란 트랜잭션이 발생하면 DB에서 락을 걸어서 대기시키는 것이다.🟢 Service@Service@RequiredArgsConstructor@Transactional(readOnly = true)public class..
-
동시성 제어 [1] java 처리개인 공부/spring 2024. 8. 5. 19:51
🔴 동시성 제어란?회사 공고나 백엔드 개발자로써 성장하다 보면 가장 많이 듣게되는 부분 중 하나가 동시성 제어다. 특히 자바 개발자는 스프링의 멀티 쓰레드 특성상 해당 부분을 해결할 능력을 갖추는 것이 필수이다.여러 쓰레드가 동시에 요청을 처리하는 프로세스를 순서대로 처리되도록 개발자가 처리해주면 되는 것이다.🟠 고려할 점동시성을 처리하기 전에 환경, 프로젝트 규모를 먼저 고려해야 한다. 작은 프로젝트(=1개의 서버만 운영)작은 프로젝트라면 하나의 서버에서 처리하고 있기 때문에 서버 내에서 java의 Lock이나 Synchronize를 통해 처리할 수 있다.큰 프로젝트(=여러개의 서버 운영 =분산 시스템)프로젝트 당 쓰레드도 여러개지만 서버 자체도 여러개라 Lock을 처리해줄 외부 설정이 필요함. D..
-
Java17을 왜 고려해야 할까? (Java version(8~17) 별 특징 정리)개인 공부/java 2024. 8. 5. 19:42
Spring boot 3.0 부터는 java17부터 지원하고 있기 때문에 새로운 스프링부트를 사용하는 분들은 무조건 17 이상을 도입해야 한다!난 정리되어 있는 글들을 참고하여 정리한 글이기 때문에 이 보다 더 많은 내용이 추가되었을 것이다. 더 자세한 내용을 원하시는 분들은 다른 글을 참고하시면 좋을 것 같다.😂 Java11은 왜...Java8과 경쟁상대로 가장 많이 언급되었던 Java version은 11이였다. 그 이유는 우선 LTS였기 때문이였는데. Oracle 사에서 Java8을 사용한 레거시 프로젝트들(현재도 서비스하고 있기 때문에 새로운 기술에 계속해서 대응해줘야함!)이 너무 많음을 고려하여 Java8이 Java11보다 더 긴 지원기간을 갖게되었다.OracleJava 8 : 2030년 12..
-
final과 추상화, interface개인 공부/java 2021. 7. 6. 07:34
final 이란 final은 더 이상 확장이 불가능함을 알리는 예약어이다. 적용할 수 있는 범위는 변수, 메서드, 클래스이다. 변수에서 final 변수에 final을 적용시키면 프로그램이 종료되어질 때까지 값을 변경하지 못하는 상수화가 된다. 그리고 static 예약어와 함께 정적화하여 특정 클래스의 객체가 여러개 생성되는 것을 방지하는 것이 보통이다. 또한 상수화가 되므로 변수의 이름은 대문자로 하는것도 관례이다. 하지만 웹에서 개발을 할때 싱글톤으로 개발하기 위해 변수명에 final을 붙여 생성자를 생성하는 경우가 있다. 그때는 static이나 대문자로 표시하지 않고 'private final 변수명'으로 생성하는 경우도 있다. 메서드 final 메서드의 final은 더이상 오버라이드를..
-
API Gateway Service의 개념과 Spring Netflix Ribbon, Zuul개인 공부/MSA 2021. 7. 4. 10:32
API Gateway Service API Gateway Service란 사용자가 설정한 라우팅 설정에 따라서 각 EndPoint로 client 대신 요청하고 응답을 받은 것을 다시 client로 돌려준다. EndPoint란 소프트웨어나 제품에 최종 목적지인 client를 가리키며 PC, 노트북, 핸드폰, 태블릿 등의 디바이스들을 말함. 외부의 요청을 단일화하여 사용할 수 있도록 해준다. 클라이언트와 서버 사이의 프록시 역할로 시스템의 내부 구조를 숨기고 반환하는 데이터는 적절한 구조로 변경하여 반환할 수 있다. API Gateway Service를 사용하는 이유 인증 및 권한 부여 서비스 검색 통합 마이크로 서비스 검색 응답 캐싱 정책, 회로 차단기 및 QoS 다시 시도 마이크로 서비스에 문제가 생겼을..