Java
-
[appling] Product 수정appling 프로젝트 2024. 9. 4. 12:46
🔴 Product 상품 수정🟠 도메인 정리🟢 Request@Getter@Builder@AllArgsConstructor@NoArgsConstructorpublic class PutProductRequest { @JsonProperty("product_id") @NotNull(message = "상품 번호를 입력해 주세요.") private Long productId; @NotNull(message = "상품명을 입력해 주세요.") @JsonProperty("product_name") private String productName; @NotNull(message = "상품 무게를 입력해 주세요.") @JsonProperty("product_weight") ..
-
읽기 좋은 코드 작성하기 [3] SOLID 원칙개인 공부/읽기 좋은 코드 2024. 9. 1. 16:35
출처 인프런 Readable Codegit 소스 깃 소스 참고🔴 SOLID 란SRP Single Responsibility PrincipleOCP Open-Closed PrincipleLSP Liskov Substitution PrincipleISP Interface Segregation PrincipleDIP Dependency Inversion Principle다음 의미를 가지고 있다. 코드에 SOLID 원칙이 적용되는 예시를 하나씩 적어보려 한다.🟠 SRP(Single Responsibility Principle)단일 책임 원칙으로 하나의 class는 하나의 책임을 가진다는 것이다.🟢 예시public class Main { public static void main(String[] arg..
-
[appling] 프로젝트 설정appling 프로젝트 2024. 8. 29. 08:44
🔴 프로젝트 세팅🟠 Spring Initializr프로젝트 자체가 가볍게 해볼 내용으로 db와 web 정도만 세팅해서 진행하려고 한다.🟢 테스트용 db h2를 사용하지 않는 이유참고로 이번에는 h2를 사용하지 않고 spring에서 지원하는 docker compose support를 사용하여 개발 환경에서는 docker로 mysql 서버를 띄워서 테스트 db로 사용해보려고 한다.h2가 가벼워서 좋지만 docker를 사용할 줄 안다면 docker compose support로 세팅해서 여러가지를 테스트용도로 쓰는것이 redis나 kafka등 다른 시스템을 추가하기도 좋을거 같아서다.🟠 프로젝트 실행프로젝트를 실행시키고 해당 페이지로 접근했다면 정상적으로 실행 완료🟢 docker compose sup..
-
읽기 좋은 코드 작성하기 [2] 논리 사고 흐름개인 공부/읽기 좋은 코드 2024. 8. 5. 20:08
출처 인프런 Readable Code🔴 논리 사고 흐름인간의 뇌는 한번에 한가지만 처리할 수 있다. 멀티 태스킹을 잘한다는 것은 여러 업무를 번갈아 가면서 처리할때 빠르게 다른 업무를 처리할 준비를 할 수 있는 능력이 좋다는 것을 의미한다.이 말은 즉 우리의 뇌는 업무를 처리할때 업무 처리를 위한 준비 -> 업무 처리 -> 다른 업무 인지 -> 업무 처리를 위한 준비 형태로 진행된다는 것이다.이를 코드를 작성할때도 고려해볼만 하다.🟠 Early Retrun코드를 작성할때 빠른 리턴은 코드를 더 읽기 쉽게 해준다.public class Scribbling2 { @Test void earlyReturn() { int count = 3; if (count 다음 코드를 실..
-
동시성 제어 [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..