일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- spring cloud
- 도커
- 스프링 시큐리티
- mysql
- vm
- HTTP
- 백엔드
- computer science
- 스프링 부트
- JPA
- Java
- 컨테이너
- CS
- spring batch
- 영속성 컨텍스트
- Spring Security
- Container
- 스프링
- web server
- 스프링 배치
- 웹 서버
- spring boot
- 가상화
- Spring
- virtualization
- 데이터베이스
- 배포
- ORM
- CI/CD
- 자바
- Today
- Total
목록Back-End/Spring (36)
개발 일기

Spring Boot 3.x 버전이 등장하며 Spring Batch 버전 또한 익히 알려져있는 4버전이 아닌 5버전을 활용하게 되었다. Spring Batch4와 5는 차이가 커서 하나씩 정리해보고자 한다.1. 다양한 JobParameter Type4.x 버전까지는 4개의 Type(Long, Double, String, Date)만을 지원했지만 5부터는 JobParameter를 커스텀해서 사용할 수 있다.원래는 제너릭을 지원하지 않았는데 제너릭 타입을 지원하는 것을 확인할 수있다. 2. Deprecated된 StepBuilderFactory와 JobBuilderFactoryImplicit configuration로 인해 StepBuilderFactory와 JobBuilderFactory가 Deprecat..

https://spring.io/projects/spring-batch Spring BatchA lightweight, comprehensive batch framework designed to enable the development of robust batch applications vital for the daily operations of enterprise systems. Spring Batch provides reusable functions that are essential in processing large volumes of respring.io 우선 배치에 대해 이해해보자배치 처리(Batch Processing)과 스프링 배치(Spring Batch)배치 처리(Batch Processi..

아키텍쳐를 멀티 모듈로 구상하며 하나하나 다시 코드를 뜯어보는 도중에 예외처리한 부분이 좀 아쉽다는 생각이 들어 다시 래퍼런스를 찾아보며 다시 뜯어보기로 했다. 우선 예외처리에 대해서 다시한번 짚고 넘어가보자. 예외처리(Exception Handling)예외처리란, 프로그램 실행 시 발생할 수 있는 얘기치 못한 예외의 발생에 대비한 코드를 작성하는 것이며, 예외처리를 하는 목적은 예외의 발생으로 인한 실행 중인 프로그램의 갑작스러운 비정상 종료를 막고, 정상적인 실행상태를 유지할 수 있도록 하는 것이다.프로그램 에러- 컴파일 에러 : 컴파일 시에 발생하는 에러- 런타임 에러 : 프로그램 실행 시에 발생하는 에러- 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것자바에서 런타 에러는 에러(E..

평소에 데이터베이스를 설계할 때, 나는 외래 키를 무조건 설정하는 것이 당연하다고 생각했다. 실제 서비스에서든, 해커톤에서든, 외래 키를 통해 테이블 간의 참조 무결성을 유지하는 게 중요하다고 생각했다.그런데 백엔드를 처음 해보는 친구와 함께 공부하다가, 그 친구가 나에게 "외래 키 설정 안해?"고 물었어다. 나는 당연히 키 설정을 한다고 했는데 친구는 블로그에서 보니까 외래 키를 설정하지 않는 곳도 있다고 답했다.실제로 블로그를 좀 찾아보니 실제 운영 환경에서도 외래키를 설정안하는 개발자들도 꽤 보였다. 그래서 이 주제에 대해 조금 더 알아보기로 했고 몇몇 블로그를 참고하며 다른 사람들은 어떤 식으로 운영했는지 보게 됐다.https://yeoon.tistory.com/165블로그 글에서 real mys..

평소에 나는 DTO 객체를 생성할때 class가 아닌 record를 통해 선언한다.처음 그렇게 쓰게된 계기는 그냥 구글링 대충하다가 reocrd가 더 낫다는 텍스트만 몇개 보고 그냥 record로 써야지 하고 줄곧 써왔었는데 왜 record가 class보다 더 적합한지 이해가 필요하다고 생각해서 찾아보게 됐다. 우선 DTO가 무엇인지에 대해 먼저 정리해보자DTO(Data Transfer Object)"계층 간에 데이터를 전달하기 위해 사용되는 객체"처음에는 "왜 굳이 번거롭게 DTO라는 객체를 따로 생성해서 데이터를 주고받지?"라는 생각을 했었다. 아래와 같은 이유들로 DTO가 필요하다고 한다. 도메인 보호도메인 로직의 보호: 도메인 객체는 비즈니스 로직과 상태를 포함한다. 도메인 객체를 외부 계층에서 ..

JPA에서의 UPDATE문Spring Data JPA를 적용하게 되면 SELECT 문은 JPA를 사용해 쿼리를 만들 수 있지만 INSERT, UPDATE, DELETE 와 같은 DML을 특정 조건을 곁들여 사용할 경우 쿼리를 직접 작성해야 한다.이 때 쿼리는 JPQL 로 작성하게 된다.@QuerySpring 공식 문서 : '리포지토리 메서드에서 직접 파인더 쿼리를 선언하는 주석입니다.'@Query Annotation은 JPA를 사용하여 UPDATE 문, DELETER 문과 같은 DML을 수행하기 위해 쿼리를 직접 작성해야 할 때 사용한다.위에서 잠깐 언급했듯이 쿼리를 작성할 때 JPQL로 작성해야한다.public interface MemberRepository extends JpaRepository { ..

정리하게된 계기필터링 같은 기능을 구현할때 QueryDSL을 사용하면 정말 좋을 것 같다는 생각이 들어 래퍼런스를 찾아볼 겸 유투브를 보고있다가 해당 영상을 보게됐다. 배민에서 주문, 결제, 할인에 대한 데이터가 각각 10억건, 13억건, 4억건이 될 정도로 정말 방대한 양의 데이터가 축적된 것을 확인할 수 있었다. 그래서 이러한 데이터가 1000만건에서 10억건이 되는 과정에서 이동욱 개발자님 께서 얻은 QueryDSL-JPA 개선에 대한 정보를 공유한 영상이였다.처음엔 아무 생각없이 보다가 사소한 SQL문에서 생각해보지도 못한 성능 이슈를 겪을 수 있겠다라는 생각 그리고 QueryDSL을 쓸때 가독성을 증가 시킬 수 있는 방법 등 정말 다양한 인사이트를 제공하는 영상이였다. 그래서 이러한 것들을 잊고..

평소 롬복을 쓰면 코드가 확연히 줄게 되어 즐겨 사용한다.그러나 사실 그냥 엔티티에서는 @NoArgsConstructor, @Getter, @Builder 쓰고 Controller, service 등에서는@RequiredArgsConstructor를 많이 쓰니까 나도 따라서 그냥 아무생각없이 쓰고 있었다.그러나 이제 스프링 프레임워크에 차츰 익숙해지고 있으니 이러한 것들도 하나씩 잡고 가야되겠다는 생각이 들어 정리해보게 됐다.Entity에서의 Lombok현재 나는 Entity에서 사용 중인 롬복 어노테이션은 아래와 같다.@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@Builder Getter와 Setter를 사용하는 이유객체 지향의 원칙 중 하..