객체지향적으로 코드 리팩토링 하기 [Spring/Java]
·
Spring
1. 객체지향이란?JAVA는 알다시피 객체지향적인 언어다. 그렇다면 객체지향이라는 것이 무엇일까 한번 다들 고민해 봤을 거라고 생각한다.검색해서 나오는 내용들을 보면 객체지향은 OOP다, SOLID원칙을 지켜야 한다라고 단순히 설명하면서 알려주는데 대부분의 사람도 마찬가지로 나도 이런 식으로 그냥 외우고 있었다.또한 SOPT라는 동아리를 하고, 프리랜서로 외주를 맡아 일하면서 여러가지 프로젝트를 진행했는데 코드를 구성할 때 객체지향적으로 생각하면서 코드를 짜지는 않았던 것 같다.그래서 다음과 같은 책을 읽고 코드를 리팩토링하면서 블로그를 작성해보려고 한다.https://product.kyobobook.co.kr/detail/S000213447953 자바/스프링 개발자를 위한 실용주의 프로그래밍 | 김우근..
Spring Boot 프로파일링 및 Stress Test [Spring]
·
Spring
현재 진행하고 있는 프로젝트의 대한 최적화를 진행하기 위해 다음과 같은 기술 스택을 사용했고 어떻게 진행했는지, 어떤 과정으로 나아갔는지 작성해보도록 하겠다.Spring Boot 3.3.2Java 21Docker각 서비스 환경 구성Grafana API 스트레스 테스트, Spring Boot , CPU 메모리등 리소스 시각화InfluxDBAPI 스트레스 결과용 DBK6스트레스 테스트 툴로 설정 : 리소스를 적게 잡아 먹어 같은 JVM을 사용하는 JMeter및 NGrinder보다 가벼운 장점Prometheus각 서비스 컴포넌트 데이터 수집지난 글에서 말했다시피 다음과 같이 코드레벨에서 멀티모듈로 코드를 작성했고 아키텍쳐는 다음과 같고 Docker에 할당된 리소스는 다음과 같이 구성했다.CPU: 8Memory..
멀티모듈 프로젝트 Docker 빌드 전략: Path 기반 접근법[Docker&Github Action]
·
Spring
0.1 멀티 모듈이란?자바에서 모듈(Module)은 독립적으로 배포될 수 있는 코드의 단위를 말합니다.멀티 모듈(Multi-Module)이란 이러한 코드 뭉치를 하나의 프로젝트 안에서 관리하는 것을 의미합니다.멀티 모듈 안에서 각각의 모듈은 서로를 향한 의존성을 가질 수 있습니다.여러개의 모듈을 생성할 때 반드시 멀티 모듈 프로젝트를 생성해야 하진 않지만 코드 중복 제거, 모듈 간 의존성을 위해 저장소에 배포하지 않아도 되는 점 등 장점이 있고 이를 각각 다른 컴포넌트로 구성해야 하는 경우에 하나의 프로젝트에서 어떻게 빌드를 수행해야 하는지 확인해 보겠습니다.예시를 들자면 다음과 같이 스프링 프로젝트를 멀티모듈로 하나의 프로젝트에서 구성했습니다. 그 후에 컨테이너화 하여 서버에 각각의 컴포넌트로 띄우고자..
[Spring] 응? 이게 왜 롤백이 안되지? - 비동기와 @Transaction
·
Spring
https://www.baeldung.com 에서 블로그를 찾아보다가 Java 23에 대한 글을 보게되었다.https://foojay.io/today/java-23-has-arrived-and-it-brings-a-truckload-of-changes/ 이 글인데 Java23의 특징과 22의 대한 차이점 위주로 설명하는 포스팅이다.여기서 가장 흥미를 끌었던 내용은 비동기의 처리 부분이였는데JEP 480: Structured Concurrency (Third Preview) Java's take on concurrency has always been unstructured, meaning that tasks run independently of each other. There's no hierarchy, ..
[Spring] Redis Stream을 사용한 EventPublisher, EventListener 구현
·
Spring
https://playground.sopt.org/projects/179 SOPT | 프로젝트 둘러보기자세한 내용이 궁금하신가요?playground.sopt.org다음과 같은 Product에 참여를 해 서버 개발자로 참여를 했었는데요.!그런데 여기서 의문점이 하나 있었는데 데이트 코스를 생성하는 과정에서 다음과 같은 과정을 거쳐야 했었습니다1. 데이트 코스 생성 [CREATE] 2. 코스를 생성하면 User에게 코스를 생성했으니 Point값 추가 [ UPDATE ]3. 그후 Point 내역을 보여주기 위한 Point 테이블에 Point 생성 [CREATE] 근데 여기서 의문점이였던게 어라라???POST API한개로 다른 테이블을 조회해서 UPDATE와 CREATE를 전부 수행해도 되는것인가...?에 대한..
Swagger로 사랑받는 개발자 되기 [ Spring ]
·
Spring
들어가며안녕하세요, 여러분! 오늘은 개발자로서 Swagger를 이용해 API 문서를 작성하는 방법과 이를 통해 사랑받는 개발자가 되는 방법에 대해 이야기해 보려고 합니다. 특히, Spring 프레임워크를 사용하는 여러분께 유용한 팁과 예제를 공유할 예정입니다. 그럼, 시작해볼까요?Swagger란 무엇인가요?Swagger는 API 문서를 자동으로 생성해주는 툴로, API의 설계 및 구현 과정에서 매우 유용하게 사용됩니다. Swagger를 사용하면, API의 명세를 쉽게 확인하고 테스트할 수 있어 개발자와 비개발자 모두에게 큰 도움이 됩니다. Spring 프레임워크와 결합하면 더욱 강력한 도구로 활용할 수 있습니다.@Tag와 @SecurityRequirement먼저, API 인터페이스를 정의하는 부분을 살펴..
Spring 검색조회 필터링 구현 방법 [JPA Specification]
·
Spring
https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl안녕하세요..!오늘은 Spring Framework를 활용하여 검색조회 필터링을 구현하는 방법에 대해 소개할게요! 주어진 코드는특정 조건에 따라 Course 객체를 필터링하고, 결과를 DTO로 변환하여 반환하는 기능을 위해서 제가 진행한 프로젝트에서 필터링 기능을 적용하기 위해서 사용했습니다!이 과정에서 JPA의 Specification을 사용하여 동적 쿼리를 생성함으로써 필터링 기능을 작동시킬수 있습니다!1. Specification이란?Specification은 JPA에서 제공하는 인터페이스로, 동적 쿼리를 생성하는 데 유용합니다! . 주로 복잡한 ..
편리한 객체간 매핑을 위한 MapStruct 적용기 .feat 당근클론코딩
·
Spring
왜??Spring에 대한 공부와 여러가지 실습을 진행하면서 객체간 Mapping을 할 일이 많아졌고 각 객체 내부에 계속해서 다른 객체와 Mapping 해주는 로직을 짜게 되었습니다. 그러나 이제 객체가 늘어날수록 계속해서 Mapping 로직과 반환하는 DTO들이 많아졌고 관리의 용이성을 생각했을때 더 좋은 방법이 있다고 생각해서 찾아보게 되었습니다.일반적으로 제공하는 Mapper가 있지만 MapStruct라는 좋은 것이 있어서 코드설명과 함께 제공을 해드리려고 합니다. 네이버 클라우드의 블로그를 참고했습니다.https://medium.com/naver-cloud-platform/%EA%B8%B0%EC%88%A0-%EC%BB%A8%ED%85%90%EC%B8%A0-%EB%AC%B8%EC%9E%90-%EC%..
JPA - 단방향? 양방향? OneToMany? ManyToOne?
·
Spring
과제하다가 갑자기 DELETE 가 동작하지 않았다....ㅋㅋㅋㅋㅋㅋ... 따라서 여러가지 찾아보다가 이렇게 글을 쓰게 되었습니다...ERROR: update or delete on table "member" violates foreign key constraint "fkid4wmieido0slha6oaqc8l5fb" on table "blog"Detail: Key (id)=(6) is still referenced from table "blog".다음과 같은 Error로인해서 동작하지 않는다고 한다. 잘 읽어보면 update나 delete 시 member가 blog의 fk를 위반하고 있다고 한다. 따라서 blog참조하려다가 error가 떴다고 확인할수 있었다.그럼 이전에 먼저 ManyToOne , One..
데이터베이스에 더미 데이터를 추가하는 방법
·
Spring
일단 더미데이터란? 특정 데이터를 테스트나 데모용도로 사용하기 위해 임의로 만든 데이터입니다! 저희도 과제를 하고 API를 작성함에 있어서 더미데이터를 넣어주고 test하는것이 필요한 경우가 많죠! 하지만 저도 이런점들을 잘 몰랐을때 그냥 Main코드에 더미데이터를 추가하는 코드를 넣거나 그냥 test API마다 값을 달리해서 추가하는 경우가 종종 있었습니다!! 따라서 아래와 같은 방식을 사용해서 더미데이터를 집어넣는다면 코드를 좀더 간결하고 작업하기 쉽게 만들수 있겠죠?? 1. data.sql 스프링 부트에서 (src/main/resource) 안에 만들어주시면 어플리케이션 "실행"시에 자동으로 실행됩니다! 다음과 같이 쿼리문을 만들어서 실행시켜주면 자동으로 더미데이터를 만들수가 있습니다! 어떻게 만들..