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

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

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

기존에는 Express로만 개발을 해봤기 때문에 인증 인가를 도와주는 프레임워크라는 것이 따로 없었다.그러나 이번에 스프링을 공부를 해보니 인증 인가를 도와주는 스프링 시큐리티라는 프레임워크를 제공했다.그래서 스프링 시큐리티가 무엇인지, 어떻게 동작하는건지에 대해 이해 후 적용해보기 위해 정리하게 됏다.Spring SecuritySpring 공식 문서를 보면 다음과 같이 쓰여져 있다."Spring Security is a framework that provides authentication, authorization, and protection against common attacks.."즉, 인증, 권한 부여, 그리고 일반적인 공격으로부터의 보호를 제공하는 프레임워크라고 한다. 이는 Filter를 통해..

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

경로 표현식 .(점) 을 통해 객체 그래프를 탐색하는 것으로 상태 필드(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) ..

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

영속성 컨텍스트 엔티티 매니저 팩토리와 엔티티 매니저 위의 그림과 같이 EntityManagerFactory가 유저의 요청이 들어올때마다 EntityManager를 생성한고 EntityManger들은 내부적으로 데이터베이스 커넥션을 사용해서 DB를 사용하게 된다. 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 중 하나로 EntityManager.persist(entity);는 DB에 저장한다는 뜻이아니라 사실 영속성 컨텍스트에 저장한다는 의미이다. 영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않는다. 엔티티의 생명주기 //객체를 생성한 상태(비영속(new/trasient): 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태) Member member = new Member(); member.se..