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

김영한님 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..

공부하게된 계기스프링 시큐리티를 공부할때 인증, 인가 그리고 XSS, CSRF와 같은 공격을 방어해주는 기능을 필터를 통해 처리한다고 했는데 이 필터가 무엇인지 잘 알지 못했고 대충 검색해보니 필터와 함께 인터셉터라는 개념이 함께 나와서 정리해보게 됐다. 필터는 서블릿, 인터셉터는 스프링이 제공한다.필터와 인터셉터 개념을 도입한 이유그렇다면 왜 필터라는 개념을 도입했을까? 바로 공통 관심사 때문이다.예를 들어서 로그인을 한 사람만 상품을 등록할 수 있어야 하고 상품 수정을 할때 해당 상품 등록자만 그 권한을 줘야 한다. 이럴때는 상품 관리의 모든 컨트롤러 로직에 공통으로 로그인 여부를 확인하면 된다. 예를들면 상품 등록 컨트롤러와 상품 관리 컨트롤러 등 모든 상품 관련 컨트롤러 마다 공통적으로 각각 로..

ServletCGI의 등장처음 웹 프로그래밍에서 웹 서버는 정적 데이터만 전달하면 됐다. 누가 접속하던지에 관계 없이 똑같이 정적인 데이터를 기반으로 뷰를 렌더링하면 됐다. 즉, 웹 서버는 사용자(요청)에 맞게 동적인 데이터를 처리할 필요가 없었다.그러나 웹 페이지에서 동적인 컨텐츠의 제공의 필요성이 생기게 됐다. 이를 위해 CGI라는 것이 나오게 된다. CGI의 문제점 및 Servlet의 등장동적 데이터를 처리하는 CGI (Common Gateway Interface)는 이름에서 알 수 있듯이 인터페이스 이다. 인터페이스는 하나의 규약이라고도 한다. 구현체는 이 인터페이스를 기반으로 구현되어야 한다. 그래서 웹 서버(Apache)와 CGI 구현체(C, PHP 등) 사이의 규약을 CGI라고 할 수 있..

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

기본값 타입 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능하다. ex) 회원 엔티티의 키, 나이 값이 변경 되도 식별자로 인식 가능 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 ex) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 - 자바 기본 타입(int, double) - primitive type - 래퍼 클래스(Integer, Long) - String 생명 주기를 엔티티에 의존, ex) 회원 삭제 시 이름, 나이 등 필드들 함께 삭제 값 타입은 공유하면 X, ex) 회원 이름 변경 시 다른 회원의 이름도 함께 변경되..

프록시 프록시를 이해하고 아래의 즉시로딩 지연로딩에 대해서 이해할 수 있다. 우선 왜 프록시가 쓰이는가? 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) ..

상속관계 매핑 객체 상으로는 상속 관계가 존재한다. 그러나 관계형 데이터베이스는 상속 관계가 없다! 그나마 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑 = `객체의 상속과 구조`와 `DB의 슈퍼타입 서브타입` 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 1. 각각테이블로변환 -> 조인전략 만약 그냥 객체만 고려하여 Item 객체를 만들어 Album, Movie, Book에서 extends Item을 통해 처리해놓고 Item객체에 @Inheritance(strategy = InheritanceType.JOINED)를 걸어주면 아래와 같이 매핑됨. ex) movie의 경우 movie.setDirector/Actor/Name/Price()해주면 ..