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

전 게시글에서 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(논리 삭제..

공부하게된 계기기존에는 하나의 객체의 값을 다른 객체에 바인딩 시키는 경우. 즉, Entity로 가져온 데이터를 Response DTO에 바인딩 시키는 경우에 record 타입의 DTO에서 정적 메소드를 직접 선언하여 일일이 다 매핑해준다.아래 코드가 내가 실제로 썼던 Entity 객체 값을 Response DTO에 바인딩 시켰던 예시이다.그러나 실무를 해본 같은 동아리 친구가 이 방식보다 ModelMapper와 MapStruct를 써보는 것이 어떻겠냐고 제안해줘서 한번 이번 기회에 정리해보고 Trade-Off를 따져보고 혹시 더 좋은 방법이라면 도입해보고자 정리해보기로 했다.ModelMapper와 MapStruct는 모두 Java에서 객체 간 매핑을 위한 라이브러리이다.ModelMapperModelMa..
https://adjh54.tistory.com/77 [Java/Library] Spring Boot Validation 이해하기 : 데이터 유효성 검증해당 글에서는 Spring Validation 라이브러리를 이용하여 클라이언트에서 전송된 '데이터'를 유효성 검증을 처리하는 방법에 대해서 공유합니다. 1) 개발 환경 💡 Spring Validation 구성을 위한 사용된adjh54.tistory.com https://adjh54.tistory.com/77 [Java/Library] Spring Boot Validation 이해하기 : 데이터 유효성 검증해당 글에서는 Spring Validation 라이브러리를 이용하여 클라이언트에서 전송된 '데이터'를 유효성 검증을 처리하는 방법에 대해서 공유합니다...

이전 게시글에서 로그 레벨까지 알아봤고 이제 실제 EC2에서 돌아가고 있는 스프링 컨테이너는 로깅이 어려웠기 때문에 로깅을 할 수 있도록 로깅 프레임워크를 적용 후에 컨테이너를 갈아 끼울 예정이다.Logback에 대해Logback을 사용할때 application.yml을 통해서 설정이 가능하지만 디테일한 설정을 하는데에는 한계가 있다. 그래서 logback-spring.xml을 통해 조금 더세부적인 설정이 가능하다. logback-spring.xml / logback-spring.groovy / logback.xml / logback.groovy의 이름을 한 파일을 스캔하고 이를 바탕으로 로그 설정이 적용된다. 이때 logback-spring.xml이 Spring Boot에 특화된 설정 파일이였다. Ap..

이전 게시글에서 로깅 프레임워크를 쭉 훑어봤고 그래서 어느 수준으로 로깅 레벨을 설정할지 각 레벨을 정리해보고자 한다. 로깅 레벨(Logging Level)TRACE TRACE: DEBUG보다 상세한 로그로 애플리케이션의 실행 흐름과 디버깅 정보를 상세히 기록해주며 디버깅 시에 사용된다.예로 메서드의 진입과 종료, 변수의 값 변경 등 모든 세부 사항이 기록된다.DEBUG: 이름과 같이 개발단계에서 디버깅을 위해 사용되며 Log.d()로 많이 사용됐을 것이다. "배포 환경에서 보통 사용될 필요가 없다."INFO: 일반적인 정보 로그 수준으로, 시스템의 정상적인 동작을 기록하는데 운영 환경에서 시스템의 상태와 주요 이벤트를 기록하는 데 사용된다. 예로 애플리케이션이 시작되거나 종료될 때, 중요한 설정이 ..