본문 바로가기

분류 전체보기151

240827 : 특정 목표페이지 내 피드구현 (진행중) 작업 내용 : 목표 아래에 피드 구현하기 현재 특정 목표에 진입했을 때의 view - 여기서 해당 목표에 도전중인 유저들의 활동내역 이벤트(DONE, SUPER-DONE, 도전 시작, 포기, 연속 수행 등)를 한번에 볼 수 있는 피드를 구현하고자 한다. - 여러 이벤트들을 가져와서 각기 다른            고민1. 기존에 있는 테이블인 Done, Super-Done객체를 그대로 가져와서 활용하면 그만일지    -> 처음 시도로는 Union해서 가져왔지만 단점이 많이 발견.    -> 추후에 여러 이벤트들이 추가될텐데 그 때 확장성이 좋지 않아 보임. 2. 여러 테이블에 있는 정보들이 하나의 리스트로 가져와야 한다.    -> 테이블의 튜플을 그대로 가져오는 것이 언제까지 유효할지?    -> 예를들.. 2024. 8. 27.
240820 : 간만의 업데이트 ('목표' 리스트 탭 추가) '채용공고 서칭 - 간헐적 공채 자소서 작성 - 이력서 보완 - 포트폴리오 진행 - 알고리즘 공부 - CS 공부' 이 무한굴레에서 모두를 완벽하게 해내는 것이 너무나 어렵다는 것을 느끼고 있는 요즘이다.그 틈에 간만에 업데이트를 했다.    다른 사람들의 목표 피드화 (홈 탭)타인의 목표와 수행통계를 보며 동기부여를 상호적으로 주고받기를 원했다.각 목표 하단에 참여하는 참가자 수 - 총 달성 수 - 조회 수 를 표기했다.각 피드를 클릭했을 때, 다른 사람들의 목표관련 이벤트를 확인할 수 있는 페이지로 이동. (이벤트 조회는 예정)'목표 도전' 버튼을 통해 해당목표에 나도 달성할 수 있게 지정가능.               트러블 슈팅application.yaml 파일 내에 특정 db의 비밀번호를 공백으로.. 2024. 8. 20.
트러블슈팅 : 목표에 오늘의 DONE 기록시 중복요청 분산락으로 방지하기 (2/2) https://thiswooin.tistory.com/147 트러블슈팅 : 목표에 오늘의 DONE기록시 동시성 문제로 인한 중복 생성 (1/2)문제상황동시에 done 테이블에 접근하여 오늘 생성된 데이터가 있는지 조회각 요청 모두 조회된 데이터가 없다고 판단하루에 하나만 존재해야하는 데이터가 두개가 동시에 생성됨한마디로, 우thiswooin.tistory.com지난 시간 연관관계가 포함된 객체를 비관적락으로 중복조회를 한 뒤 하나씩 쓰기 시도를 하려다가,FK를 포함한 객체에 비관적 락을 걸었을 때 인덱스 페이지 전체에 레코드락이 걸려 데드락이 걸리는 현상이 발생하였다. 처리중인 요청을 AOP를 통해 set에 담아 체크하는 방식의 시도, 그리고 Redis를 활용하여 분산락 구현을 통한 중복요청 방지를 구현.. 2024. 8. 5.
트러블슈팅 : 목표에 오늘의 DONE기록시 동시성 문제로 인한 중복 생성 (1/2) 문제상황동시에 done 테이블에 접근하여 오늘 생성된 데이터가 있는지 조회각 요청 모두 조회된 데이터가 없다고 판단하루에 하나만 존재해야하는 데이터가 두개가 동시에 생성됨한마디로, 우연히 두개의 요청이 동시에 조회하여 발생한 이슈   시도한 방법 - 비관적 락 적용오늘 해당목표의 수행기록(DONE)이 있는지 체크하는 쿼리에 비관적 락을 적용하였다.이로 인하여 동시에 들어오더라도 존재를 확인하는 조회쿼리의 레코드에 비관적 락을 걸어 하나의 트랜잭션이 끝난 이후 다른 트랜잭션에서 조회가 이뤄지도록 했다.테스트임시로 오늘 done의 여부를 조회하는 쿼리뒤에 3초의 대기시간을 두었다. 비관적락을 적용한 해당 목표에 오늘 생성된 done이 있는지 조회하는 쿼리. curl을 통해 동시에 요청을 보냈다. 테스트 결과.. 2024. 7. 31.
HashSet에 hashCode() 재정의 없이도 중복제거가 가능할까 결록적으로 중복제거는 된다.하지만, 그렇게 되면 Hash의 장점은 없이 LinkedList처럼 된다.해쉬 충돌을 피하게 해줘야하는 이유와 비슷하다.equals()를 재정의했다면 hashCode()도 같이 해주자. 코딩테스트 문제를 풀기 위해 자체 클래스 Path를 생성했다.이 Path들의 객체를 중복없이 모은다음 개수를 리턴하기 위해 Set를 생성했고,이를 위해 출발값과 도착값이 같으면 같은 객체로 인식하기 위한 일련의 과정을 정리했다. 0. 코드설명Path 클래스필드 : int[] from, int[] to생성자 : 두 필드에 입력값을 받는 생성자만 존재 (from, to 에 null값이 존재하면 안되도록)             큰 값이 from에 오도록 정렬하여 생성. (방향만 다른 경우를 만들지 않.. 2024. 7. 22.
현재까지의 D'ONE 프로젝트 히스토리4월부터 2개월간 백엔드와 프론트엔드를 모두 개발하여 최소한의 MVP상태로 웹에 배포했다.소셜, 피드기능을 추가한 뒤 직접 바이럴과 웹뷰형태의 앱배포까지 해보려 한다. https://done.n-e.kr/ 개발 환경Java17,  SpringBoot 3.x,  SpringDataJPA,  MySQL,  Redis, Docker, AWS 구현된 기능MVP (완료)- 목표설정, 조회, 삭제- 목표 설정시 숫자를 하향조정해서 쉬운목표를 제안- 각 목표들에 매일 DONE, SUPER DONE 기록- DONE을 체크시 SUPER DONE 체크 가능- 달력을 통해 DONE 기록 조회- 회원가입 및 수정 (현재는 닉네임만 변경 가능)- 카카오 소셜로그인 예정기능스프린트 : 피드- 다른 사람이 생성한 .. 2024. 7. 19.