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

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

정리하게된 계기스프링 부트를 쓰게되면서 접근 제어자를 고민할때가 정말 많다. 그러나 사실 정확히 알지 못하고 그냥 때려맞추거나 Best Practice를 무작정 매번 따라 가려고한다. 근데 정확히 왜 이게 주로 이렇게 접근 제어자를 설정하는지 이해하면서 개발을 진행하고 싶고 그러기 위해서는 접근 제어자에 대해서 잘 알고 있어야한다는 판단이 섰다. 그래서 정리해보게 됐다.접근 제어자(Access Modifier)란?자바에서 접근 제어자는 클래스와 클래스의 멤버인 필드, 메소드, 생성자를 생성할 때 외부에서 접근할 수 있는 범위를 제한해주는 장치이다.크게 클래스의 접근 제어자와 클래스 멤버의 접근 제어자 이렇게 두가지로 나누어서 고려해볼 수 있다. 클래스의 접근 제어자클래스를 정의할 때 지정 가능한 접근 ..

평소 롬복을 쓰면 코드가 확연히 줄게 되어 즐겨 사용한다.그러나 사실 그냥 엔티티에서는 @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관계에서 사용된다.영속성 전이는 연관관..

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

경로 표현식 .(점) 을 통해 객체 그래프를 탐색하는 것으로 상태 필드(state field) : 단순히 값을 저장하기 위한 필드 (ex: m.username) 경로 탐색의 끝으로 더이상 탐색 불가하다. 연관 필드(association field) : 연관관계를 위한 필드 단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team) 묵시적 내부 조인(inner join) 발생, 탐색O 컬렉션 값 연관 필드 : @OneToMany, @ManyToMany, 대상이 컬렉션(ex: m.orders) 묵시적 내부 조인 발생, 탐색X -> 결과가 컬렉션이기 때문에 속성 값에 접근할 수 없다. 묵시적 조인은 실무(큰 프로젝트)에서는 사용을 지양해야한다. 튜닝하기 엄청 어려워진다..

프록시 프록시를 이해하고 아래의 즉시로딩 지연로딩에 대해서 이해할 수 있다. 우선 왜 프록시가 쓰이는가? Member를 조회할 때 Team도 함께 조회해야 하는가? // 1. 회원과 팀 함께 출력 public void printUserAndTeam(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.getTeam(); System.out.println("회원 이름: " + member.getUsername()); System.out.println("소속팀: " + team.getName()); } // 2. 회원만 출력 public void printUserAndTeam(String memberId) ..