일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JPA
- 배포
- Spring Security
- 스프링 부트
- CI/CD
- 데이터베이스
- 웹 서버
- 백엔드
- 도커
- spring batch
- 스프링 배치
- 스프링 시큐리티
- CS
- Spring
- 스프링
- 영속성 컨텍스트
- ORM
- Java
- vm
- spring boot
- computer science
- HTTP
- virtualization
- 가상화
- 자바
- mysql
- spring cloud
- 컨테이너
- web server
- Container
- Today
- Total
목록spring boot (33)
개발 일기

스프링과 스프링 부트 차이스프링은행 시스템과 같이 몇 백만, 몇 천만의 사람이 한꺼번에 잔고 조회를 하고, 입금 및 출금 요청을 처리하는 등 많으 유저의 요청을 동시에 처리해야하는 엔터프라이즈 애플리케이션는 성능, 안정성 그리고 보안이 매우 중요해 졌다. 그러나 이러한 것들을 고민하며 비즈니스 로직까지 개발하는 것은 비효율적이였기에 이러한 엔터프라이즈 애플리케이션을 위한 개발 환경을 제공해서 기능 개발에만 집중할 수 있도록 하기 위해 스프링 프레임워크를 제공했고 개발자들은 비즈니스 로직에만 집중할 수 있게 됐다. 스프링 부트그러나 설정이 매우 복잡하다는 단점이 있었고 이러한 단점을 극복하여 스프링 프레임워크를 더 쉽고 빠르게 이용할 수 있도록 만든 도구가 스프링 부트이다. 빠르게 스프링 프로젝트를 설정할..

평소에 나는 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 { ..

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

전 게시글에서 Cascade 영속성 전이 그리고 그중에서도 ALL, REMOVE, PERSIST 타입에 대해 집중적으로 이해해봤다.개발하다보면 주로 orphanRemoval=true가 쓰이는 것을 종종 볼 수 있는데 이때 orphanRemoval이 어떤 것을 설정하는 것인지 알아보자.orphanRemoval = true부모 엔티티와 연관관계가 끊어진 자식 엔티티 를 자동으로 삭제해주는 설정이다.Content엔티티에서 Comment와 일대다 관계를 맺을 때 아래와 같이 설정한다고 하자.// Content 엔티티@OneToMany(mappedBy = "content", cascade = CascadeType.ALL, orphanRemoval = true)private List comments = new A..

김영한님 JPA 강의를 들으면서 연관관계 영속성 전이(CASCADE)라는 것에 대해 처음 듣게 됐었는데 실제로 Spring Boot 프로젝트를 하면서 Entity 연관관계를 맺을 때 참고 코드를 보고 따라 쓰고 있으면서 또 Soft Delete할때도 관련 작업을 해야해서 좀 대충 감은 잡았지만 그래도 정확히 알고 써야지 추후에 에러나 좀더 효과적인 개발을 할 수 있을 것 같아 정리하게 됐다.영속성 전이(CASCADE)가 뭔데?말 그대로 영속성의 전이이다. 연관관계를 맺는 두가지 엔티티가 있을 때 특정 엔티티를 영속 상태로 만들면 그 엔티티와 연관관계에 있는 엔티티 또한 영속 상태로 만들때 사용한다.cascade옵션은 JPA에서 @ManyToOne과 @OneToMany관계에서 사용된다.영속성 전이는 연관관..

전 게시글에서 특정 엔티티의 데이터를 제거 시에 Hard Delete하는 방법과 Soft Delete하는 방법 이렇게 두가지가 있고 Soft Delete를 하기 위해서 @SQLDelete와 @SQLRestriction을 통해 구현 가능하다는 사실을 알게 됐다.그런데 만약 예를들어서 내가 멤버를 제거한다고 했을 때 그 연관관계에 있는 댓글들 즉, 해당 탈퇴 처리한 멤버의 댓글들은 어떻게 처리할지에 대한 고민이 생기기 시작했다. 그래서 해당 해결 후 이 블로그 글을 작성하게됐다.첫 번째 방법 - @SQLDelete / @SQLRestriction이 방법은 똑같이 Comment에도 위와 같은 어노테이션을 걸어두는 것이다.// Member Entity// ... 기타 anotation 생략@SQLDelete..

왜 사용하게 됐는가깃허브에 다른 사람이 개발한 코드를 보면서 그냥 memberRepository.delete()를 하면되지 왜 굳이 entity에 softDelete()를 따로 만들어서 처리하는지에 대한 의문이 계속 있었는데 사실 처음엔 그냥 넘겼다.그런데 최근 동아리 시간에 같은 동아리원이 CRUD에서 Delete를 다루는 시간에 "저렇게 Hard Delete보다는 Soft Delete로 처리해줘야지"라고 얘기했었다. 그때 내 머리속에 위에서 언급했던 코드가 스쳐지나가면서 이게 뭐길래 쓰지? 왜 굳이 저렇게 처리해주는 것일까? 라는 궁금증이 생겼고 그래서 한번 도입해보게 됐다.Hard Delete와 Soft Delete 어떻게 다를까?Hard Delete(물리 삭제)와 Soft Delete(논리 삭제..