TIL 42

(2024-07-18) 면접 준비

면접 질문1.NoSql과 RDBMS의 차이점을 장단점을 들어가면서 설명하시오:NoSql은 스키마가 없기 때문에 유연한 구조를 가지고 있고 수평적 확장이 가능해 대규모 데이터를 처리하는대 용의하다. RDBMS보다 읽기쓰기 성능은 높지만 수정하는 경우 속도가 RDBMS에 비해 느리고 중복을 허용하기 때문에 중복된 칼럼을 수정하는 경우 여러개의 데이터를 변경해야한다.RDBMS는 데이터의 구조가 명확할 경우 사용하고 외래키를 통해 테이블간에 Join이 가능하고 데이터의 중복을 허용하지 않는다.단점으로는 외래키로 테이블간에 관계를 맺고 있기 때문에 다수의 Join문이 발생해서 쿼리가 복잡해진다. 그리고 데이터의 구조가 명확한 경우 사용하기 때문에 유연하지가 않다. 정리 : NoSQL은 데이터 구조 유연,대규모 데..

TIL 2024.07.18

(2024-06-27) Cascade.REMOVE 와 OrphanRemoval 의 차이점

OrphanRemoval: 부모 엔티티의 리스트에서 요소를 삭제하기만 해도 해당 자식엔티티가 삭제된다.Parent parent1 = em.find(Parent.class, parent.getId());parent1.getChildList().remove(0); // delete 쿼리나간다. Cascade.REMOVE: 일대다 일때 일에 해당하는 부모 엔티티를 em.remove를 통해 삭제하면 해당하는 모든 자식 엔티티들도 삭제된다.   영속성 전이 최강 조합 : orphanRemoval=true + Cascade.ALL: 이두개를 같이 사용하면 자식엔티티와 부모엔티티의 라이프사이클이 동일해져서 자식 엔티티의 Repository 조차 생성하지 않아도 된다.

TIL 2024.06.27

(2024-06-26) JDBC

JDBC 드라이버란?: JDBC(Java Database Connectivity)는 자바 애플리케이션에서 데이터베이스에 접근할 수 있도록 하는 API입니다. JDBC 드라이버는 이 API를 구현하여, 자바 애플리케이션과 특정 데이터베이스 간의 연결을 가능하게 합니다.DriverManager 를 통해서 Connection(연결) 을 생성하여 쿼리를 요청할 수 있는 상태를 만들어주고Statement(상태) 를 생성하여 쿼리를 요청하고ResultSet(결과셋) 을 생성해 쿼리 결과를 받아옵니다.

TIL 2024.06.26

(2024-06-20) 변경감지

변경감지변경감지는 트랜잭션 커밋시 영속화된 Entity에서 가지고 있었던 최초 정보(스냅샷)와 바뀐 Entity 정보를 비교해서 바뀐 부분을 update 해주는 기능입니다.@Transactionalpublic ReviewResponseDto updateReview(ReviewRequestDto requestDto , Long reviewId){ if(requestDto.getRating()1 || requestDto.getRating()>5){ throw new ReviewOverRatingException(ResponseCodeEnum.REVIEW_OVER_RATING); } Review review = reviewAdapter.findById(reviewId); review.update(request..

TIL 2024.06.21

(2024-06-19) 아웃소싱 팀프로젝트 시작

다시 팀프로젝트를 시작하면서 api명세서 작성, erd 작성 , 역할 분배 등 을 했다. erd는 이런식으로 이루어져있고 나는 review 파트를 맞게 되었다.git 브랜치 전략은 기능별로 이슈를 생성하고 코딩한 후 풀리퀘스틀르 날려서 팀장님이 확인하고 dev 브랜치에 머지 하는 식으로 진행하기로 했다. 코드 컨벤션도 팀장님이 만드셨는대 @Getterpublic class MessageResponseDto { protected Integer statusCode; protected String message; public MessageResponseDto(Integer statusCode, String message) { this.statusCode = statusCode; this.message = m..

TIL 2024.06.20

(2024-06-13) 스프링 AOP

AOP는 핵심기능과 부가 기능을 여러상황에서 공통적으로 수행할 때 사용한다. 리턴할 때 실행되게하거나 메서드 실행 전후 실행 되거나 실행후 아니면 실행전에 수행되게 할 수 있다. 공통으로 사용되는 코드를 정의할 수 있어서 코드 재사용성과 유지보수에 좋을 것 같다. @Pointcut("execution(* com.sparta.myselectshop.controller.ProductController.*(..))")private void product() {}@Pointcut("execution(* com.sparta.myselectshop.controller.FolderController.*(..))")private void folder() {}@Pointcut("execution(* com.sparta...

TIL 2024.06.14