목록KimJinHwan/Project (17)
ecsimsw
파일 삭제 롤백 불가 문제 앨범을 삭제하면 그 안에 있는 모든 사진 정보, 파일이 삭제된다. 사진 파일 다중 제거하는 시간은 오래 걸리기에 이를 비동기 처리하여 DB 정보 삭제, 사진 파일 다중 삭제 이벤트 발행만 완료하고 그 즉시 앨범 삭제 처리 완료를 응답한다. @Transactional public void deleteAlbum(Long userId, Long albumId) { var pictures = pictureRepository.findAllByAlbumId(albumId); fileService.deleteAllAsync(pictures); albumRepository.delete(album); pictureRepository.deleteAll(pictures); // 후처리 } 코드의 ..
소개 내 첫 번째 보물은 가족사진, 두 번째는 일기장, 그리고 세 번째 보물은 티스토리 블로그이다. 자유로운 글 관리부터 백업까지, 언젠가 직접 블로그 서버를 운영하길 꿈꿨었다. 이 프로젝트에선 티스토리 글을 백업하고, 그 데이터로 직접 블로그 서버를 운영한다. 저장소 : https://github.com/ecsimsw/blog.me 배포 링크 : https://www.ecsimsw.com 기능 1. 블로그 글을 수집할 수 있다. 2. 카테고리 별 글을 확인할 수 있다. 3. 게시물 별 조회수를 확인할 수 있다. 4. 전체 혹은 날짜 별 최다 조회수 게시물을 집계 할 수 있다. 기록 1. 조회수 캐시 조회수를 메모리에 기록해 두었다가, 10초에 한번 그 기간 발생한 수를 DB에 기록한다. 게시물 별 조회..
미리 보기 핸들러의 요청 처리 속도를 제한한다. 아래 핸들러는 0.1초에 한 번으로 처리 속도가 제한되고, 5개까지 보관해 두었다가 속도에 맞춰 처리한다. 10 개의 요청을 동시에 전송했을 때 5개만 처리되고 나머지는 429 (Too Many Requests) 를 응답받는 것을 확인할 수 있다. 그리고 처리되는 5개의 요청은 속도 제한에 따라 0.1초에 하나씩 처리된다. Leaky bucket algorithm 처리 속도를 일정하게 정하여 네트워크 트래픽 체증을 제어한다. bucket 크기를 미리 지정하여 순차적으로 처리하고, 버킷 크기를 넘어선 요청은 버려진다. 즉시 처리 rate는 0.1초, 사이즈는 3 인 버킷에, 5개의 패킷이 동시에 도착하고 0.2초 후에 3개의 패킷이 이어 도착했다고 가정해 보..
미리 보기 컨트롤러에 @ShutDown 어노테이션을 추가하고 임시 응답을 어떻게 전달할지를 지정해주는 것으로 ShutDown 조건에서 해당 컨트롤러 아래 모든 핸들러의 임시 응답을 자동으로 생성해 준다. 위 예시에서 DailyCountRepository 타입의 빈이 존재하지 않으면 /api/counts 를 GET 요청하는 경우 아래와 같이 응답한다. HTTP status : 503, SERVICE_UNAVAILABLE Content type : application/json Message : This API is currently unavailable. 아래 사용 방법이나 버전, 기능은 현재 글을 쓰는 첫 배포 시점을 기준으로 한다. 최신 변경 사항은 https://github.com/ecsimsw/ap..
Web server with socket API Socket API를 이용하여 Http 형식의 요청을 처리, 응답할 수 있는 웹 서버를 제작한다. github : https://github.com/ecsimsw/multiplexing-server Steps 1. Socket API를 구현한 간단한 Socket Server를 제작한다. - Socket server를 구현하고 client 연결, 메시지를 처리한다. - Http 요청, 응답 포맷을 확인하고 Socket Server가 이를 해석, 처리, 반환할 수 있도록 한다. - Jsoup을 이용하여 html 파일을 변환, 사용자의 접근에 따른 동적인 페이지를 반환한다. 2. Multi-Threading을 이용한 비동기 요청 처리를 구현한다. 3. Selec..
결과를 먼저 보면.. 원했던 결과부터 소개하고자 한다. 내 라이브러리를 만들어 사람들한테 소개하는 것. 딱 아래처럼 사용자들이 gradle이나 maven의 dependency로 내가 만든 모듈을 import 해 사용하도록 하고 싶었다. dependencies { ... implementation 'com.github.ecsimsw:fast-crud:0.0.1' } maven central repository는 절차가 까다로워, 좀 더 편하게 jitpack을 사용하기로 했고 Spring boot 모듈을 사용했기 때문에 생겼던 문제들과 해결 팁을 소개하고자 한다. (예시에서 나온 fast-crud가 이번에 만들어 배포한 것인데, Spring boot - JPA 프로젝트에서 Entity에 어노테이션 하나만 달..
기존 PR 방식에 지친다면? 마틴파울러 블로그에 소개된 브랜치 전략을 소개하려고 한다. Rouan Wilsenach가 올해 9월 달에 작성한 따끈따끈한 글인데, 공감되기도 하면서도 필요한 팀들이 많을 것 같아 정리해본다. CI 정책이 확실하게 있고 팀원들이 어느 정도 경력이 있다면, 그리고 기존의 PR 방식이 늘어지고 의미 없다고 느껴본 적이 있는 사람이라면 한 번쯤 읽어보면 좋을 것 같다. Ship / Show / Ask Ship/Show/Ask is a branching strategy that helps teams wait less and ship more, without losing out on feedback. martinfowler.com 간단한 정리 Rouan Wilsenach가 제안하는 이..
클릭 위치가 부채꼴 안에 포함되어 있는지 알고 싶어요! 옆 회의실에서 '프롤로그'팀이 수학 문제 푸는 거를 보고 재밌어 보여 나도 참여해보았다. 라이브러리 없이 직접 확률에 따른 사잇각을 구하고 영역 클릭시 해당 내용을 확인할 수 있는 기능을 구현 중이었고, 사용자 클릭 이벤트가 주어졌을 때 그 좌표가 해당 영역에 포함되어 있는지 확인할 수 있는 로직이 필요했다. 1. 클릭 범위 확인 우선 클릭할 수 있는 범위가 맞는지를 확인했다. 아래 그림에서 빨간색으로 표시한 부분을 말한다. 간단히 작은 원보다 밖에 있고, 큰 원 안에 있는지를 확인하면 된다. 2. 각도 확인 이번에는 좌표가 A 영역 부채꼴 안에 포함되었는지를 확인할 것이다. 영역 시작 선을 a, 영역 끝 선을 b이라고 한다. x축과 a가 이루는 각..