분류 전체보기 149

[WIL] week 10

Fact 이번주는 멘토님에게 프로젝트 중간 발표회를 진행했다. 아쉽게도 발표 전날 thread starvation or clock leap detected가 발생했다. 아마 AWS 서버가 터진 것 같았다. 이 후, 시간이 흐르고 나니 서버는 정상적으로 돌아갔지만, 이어서 DNS에 문제가 발생하여 많은 시간동안 프론트와 연결되지 못했다. 경매, 입찰, 레이팅 등 백에서는 모든 기능을 구현했다고 생각되지만, 프론트에서 테스트를 할 시간이 부족해져서 아쉬운 결과물을 발표하게 되었다. Feeling 많은 시간을 투자한 작업물이었지만, 결과물이 생각처럼 나오지 못해서 아쉬웠고 자신에게 화도 났다. Finding: 알게된 것 아래는 튜터님의 피드백 및 CS 질문으로 알게된 것들이다. 1. @Transactional..

TIL, WIL 2023.08.21

[WIL] week 9

Fact 이번주도 저번주와 이어 실전 프로젝트를 진행했다. 기존의 물물교환은 CRUD의 확장이며 볼륨이 작다는 튜터님의 피드백이 있었다. 이후 추가적인 회의를 통해 경매 시스템 및 레이팅 시스템을 추가적으로 구현하기로 했다. 나는 물품의 하한가를 결정하기 위한 Rating 시스템 부분을 맡았다. rating 시스템은 유저가 등록한 물품들을 다른 유저가 평가하는 방법으로 구현된다. Feeling 1. 협업 진행 간 브레인스토밍 기법으로 아이디어를 제시하는데, 내가 제시한 의견이 반영됐을 때 뿌듯했다. 2. 볼륨이 작다는걸 초반에 알았다면 좀 더 빠르게 진행할 수 있었을텐데 라는 아쉬움이 남았었다. 3. Rating 시스템 구현 간 queryDSL을 사용했는데, SQL문과 비슷하면서 다른점이 있어서 헷갈렸다..

TIL, WIL 2023.08.14

[Springboot] QueryDSL 2

어제는 랜덤 물품을 유저에게 보여줬다면 오늘은 중복된 물품을 주지 않도록 로직을 짰다. User와 Rating 테이블 간 다대다 관계여서 중간테이블(userRatingRelationRepository)을 만든 후 진행했다. RatingService @Transactional public ApiResponse randomRatingGoods(Long userId) { Set UserRatedGoods = userRatingRelationRepository.findUserCheckedGoodsByUserId(userId); Rating rating = ratingRepository.findRandomRatingWithCountLessThanOrEqual7(UserRatedGoods); User user = ..

Springboot 2023.08.09

[Springboot] QueryDSL

물물교환 프로젝트 진행 간 경매 시스템을 추가하기로 했다. 찾아보니 경매에서는 하한가가 필요했다. 하한가 설정을 위해 팀원끼리 많이 고민했으나 우선은 등록한 물건의 가격을 랜덤한 유저가 적절하다고 판단하는 값을 입력하게 하여 평균값을 산출 후 하한가로 적용하기로 했다. gradle.build dependencies { implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jak..

Springboot 2023.08.08

[WIL] week 8

Fact 이번주는 실전 프로젝트를 진행했다. 우리조는 물물교환 사이트를 만들기로 하였고 그 중에서 나는 게시글을 담당하였다. 프론트와 백 팀원들 간 협업을 진행하면서 재미있었고, 모두들 적극적으로 의견을 제시해주어서 만족스러웠다. Feeling 1. 협업 간 같은 목표로 열심히 나아가는 팀원들이 있어서 소속감을 느꼈고, 지칠 때 큰 의지가 됐다. 2. 모두가 적극적으로 의견을 제시하고, 제시된 의견을 적극적으로 수용하여 작업 간 트러블 없이 즐겁게 진행할 수 있었다. Finding: 알게된 것 1. 협업 간 소통이 얼마나 중요한지 2. 공통 목표를 향해 같이 작업하는 즐거움에 대해 알게되었다. 3. Redis를 사용하여 Caching 하는법 4. Form Data로 전송받은 이미지 데이터를 AWS S3에..

TIL, WIL 2023.08.06

[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