전체 글 134

[TroubleShooting] InvalidDefinitionException

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.data.domain.PageImpl` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) 따로 캡처는 못했지만 Redis로 Page를 Caching 할 때 발생한 에러다. `org.springframework.data.domain.PageImpl` 클래스에 기본 생성자가 없어서 발생한다고 했다. 어떻게 해야할 지 고민하다가 PageI..

TroubleShooting 2023.08.06

[Network] TCP/UDP

TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 네트워크에서 데이터를 전송하는 주요 프로토콜이다. TCP (Transmission Control Protocol) 데이터 단위: Segment 1 : 1 전송 통신을 시작하기 전에 세션을 설정하고, 데이터를 전송하고 받은 후 세션을 정리하는 방식으로 통신을 한다. 데이터 전송 중에 손실이나 오류가 발생하면 재전송을 요청하여 확실하게 데이터를 전달한다. 데이터를 보낸 순서대로 받아들이고 재조립하여 순서를 보장한다. 파일 전송, 웹 페이지 로딩 등 대용량 데이터 전송에 적합하며 주로 사용된다. 3-way handshake로 연결, 4-way handshake로 연결을 해제함으로써 신뢰성과 데이..

CS 2023.08.04

[TIL] S3이미지 업로드 시 게시글이 두번 작성되는 문제

프로젝트 진행 간 우리 조는 물물교환 사이트를 만들기로 했다. 게시글 등록 시 이미지를 등록할 수 있기에 S3에 이미지를 업로드 후 Repository에 등록을 하던 중에 발생한 문제였다. 분명 게시글 작성을 한번만 했는데 두개가 등록이 됐으며 하나는 이미지를 제외한 모든 값이 null이었고, 하나는 모든 값을 포함하지만 image를 가지지 못하였다. (Goods와 Image는 ManyToOne관계이다.) ServiceCode @Transactional public ApiResponse goodsCreate(GoodsRequestDto requestDto, List images) { List imageUuids = imageHelper.saveImagesToS3AndRepository(images, am..

TIL, WIL 2023.08.03

[CS] NoSQL vs RDMBS

NoSQL "Not Only SQL"의 약자로, RDBMS가 아닌 다른 형태의 데이터 저장과 처리를 지원하는 데이터베이스 시스템 장점: - 유연성이 높아서 비구조적인 데이터, 다양한 형태의 데이터를 처리하기 용이하다. - 대량의 데이터를 처리하는 데 뛰어난 성능을 가진다. - 수평적 확장이 쉽기 때문에 대규모 분산 시스템에 적합하다. - JSON과 같은 형태의 데이터 구조를 사용할 수 있다. 단점: - ACID (원자성, 일관성, 고립성, 지속성) 특성을 보장하지 않을 수 있어 데이터 무결성이 보장되지 않을 수 있다. - 복잡한 쿼리 작성이 어렵다. - 데이터 모델링에 유연성이 있기 때문에 비교적 데이터 일관성 유지가 어렵다. RDBMS "Relational Database Management Syste..

CS 2023.08.02

[CS] 쿠키와 세션의 차이

쿠키(Cookie) 클라이언트에 작은 데이터 조각을 저장하는 방식이다. 클라이언트에 저장되므로 클라이언트가 직접 수정할 수 있으며 보안에 비교적 취약하다. 주로 비밀번호, 로그인 상태 유지 등의 기능을 구현하는데 사용한다. 서버에서 일정 시간이 지나면 삭제되도록 설정한 암호화된 토큰으로 개인정보를 저장하여 사용한다. 각 도메인당 쿠키의 개수와 총 저장 용량에 제한이 있다. 세션(Session) 서버에 사용자 상태 정보를 저장하는 방식이다. 서버는 클라이언트 요청 시 고유한 세션 ID를 생성하고, 이를 쿠키를 통해 클라이언트에게 전송한다 로그인 정보, 장바구니 내역, 사용자 정보 등 사용자 상태를 유지하는데 사용한다. 쿠키와 달리 세션 데이터는 서버에 저장되므로 클라이언트가 직접 수정할 수 없고, 보안상 ..

CS 2023.08.01

[Springboot] S3에 이미지 올리기

S3에서 버킷 생성 및 IAM 설정을 완료한 후 작성해야 한다. gradle.build implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' application-security.properties # mySql spring.datasource.url=jdbc:mysql://localhost:3306/{DB명} spring.datasource.username={유저이름} spring.datasource.password={패스워드} #AWS S3 cloud.aws.credentials.accessKey={엑세스키 입력} cloud.aws.credentials.secretKey={시크릿키 입력} cloud.aws.s..

Springboot 2023.08.01

[Springboot] UnsatisfiedDependencyException

처음보는 에러가 발생해서 찾아봤다. UnsatisfiedDependencyException은 빈 객체 생성 과정에서 의존주입을 하게 되는데, 필드에 해당하는 의존관계를 만족시킬 수 없을때 발생하는 예외였다. 에러코드를 읽어보니 imageRepository가 JPA의 관리 대상이 아니라서 발생한다고 했다. JpaRepository의 제네릭 타입은 Entity 클래스와 해당 Entity의 기본키(PK) 타입이어야 한다. (ex: JpaRepository) 하지만 자세히 몰랐었기에 여러 이미지를 리스트에 넣은 후 저장하고 싶어서 JpaRepository 로 생성했기에 발생했던 에러였다. 이후에 추가적으로 수정하여 무사히 작동하였다.

Springboot 2023.08.01

[CS] TDD(Test-Driven Development)란?

TDD(Test-Driven Development) TDD는 테스트 주도 개발이라고도 불린다. 테스트 코드를 작성하고 이를 통과하는 최소한의 코드를 작성한 후에 리팩토링하는 과정을 반복하여개발하는 방식이다. 1. 기능 코드를 작성하기 전에 테스트 코드를 먼저 작성하여 테스트 하는 것이 핵심 원칙이다. 2. 보통 단위 테스트로 진행한다. 3. 테스트를 통과할 수 있는 최소한의 코드만 작성하여 기능이 작동하는지 검증한다. 4. 기능이 작동하는 것을 확인 후 코드 구조 개선 및 중복 제거 등 작업을 수행하는 리팩토링을 진행한다. 장점 1. 코드 품질 향상: 각 기능에 대한 테스트를 보장하므로 코드 품질이 높아지며 버그를 발견하기 쉬워진다. 2. 신뢰성 확보: 테스트를 통과한 기능은 정상적으로 동작한다는 확신을..

CS 2023.07.31

[WIL] week 7

Fact: 학습내용 이번주는 pinterest를 클론코딩 하였다. 저번주 프로젝트에서는 security쪽을 담당했었지만, 관계 부분을 해보고 싶었기에 이번주는 댓글 및 대댓글 CRUD, 좋아요 버튼과 globalException을 구현하였다. Feeling: 느낀 점 1. 관계에 대해 강의를 통해 배웠었지만 실제로 사용해보니 헷갈리는 것도 많고 어려웠다. 2. 대댓글을 구현할 때에 댓글과의 관계를 설정할 때에 힘들었지만 정상적으로 구현되었을 때에 기분이 너무 좋았다. Finding: 알게 된 것 1. OneToMany의 한계점 및 ManyToOne의 장점(https://developerhun.tistory.com/110) 2. customException을 사용하는 이유는 예외명을 직관적으로 만들어 예외..

TIL, WIL 2023.07.30