<aside>
💡 실전 프로젝트 6주차에 가장 집중해주셔야 할 것은 “최종 발표회 준비”입니다.
최종 발표에는 6주간 진행했던 프로젝트 개발 과정을 엔지니어답게 설명할 수 있어야합니다.
아래 항목들을 바탕으로 기술적으로 더욱 매력적인 최종 발표를 준비해봅니다.
</aside>
🙏🏻 우리 프로젝트에서 기술적으로 강점을 삼을 만할 항목을 정리해 주세요.
-
[ FE ] :
-
[ BE ] :
- 대용량 데이터(1000만건) 수집 및 핸들링
- 검색 성능(속도 및 정확도) 향상
- 시스템 이중화를 통한 대용량 트래픽 부하분산
- 동시성 제어
👻 **프로젝트에 적용했던 핵심 기술 목록을 작성해 주시고,
각 기술을 도입하게된 의사결정 과정을 정리해주세요.**
구분 |
요구사항 |
선택지 |
핵심 기술을 선택한 이유 및 근거 |
BE |
CI/CD |
선택한 기술 : |
|
선택지 :
-
Jenkins | GitHub Action
-
젠킨스의 경우 별도의 빌드 서버를 구축해야하고, 젠킨스 운영에 많은 리소스가 발생할 것으로 판단
-
Github과의 연동이 Jenkins에 비해 매끄럽고, 원하는 WorkFlow로 YAML을 만들어 Commit하는 것
만으로 간단하게 CI/CD Workflow를 만들 수 있어 선택 |
| | 동시성제어 | 선택한 기술 :
-
Redis(Redisson Lock)
선택지 :
- synchronized
- ReentrantLock | Redis(Redisson Lock) - 분산락
Redisson은 자체적으로 타임아웃 기능이 있고 락의 유지시간, 락 요청 대기시간 등을 사용자가 세부적으로 설정할 수 있는 부분이 많아 선택 |
| | 검색속도향상 | 선택한 기술 :
- Elastic Search
선택지 :
- index, covering index
- full-text index
- QueryDsl | Query dsl
- 서비스에서 제공하는 기능들이 검색조건이 많고 다양해 jpa의 findby 메소드로는 가독성을 해칠 우려가
있겠다는 판단을 하여서 native-query를 사용한 조회 기능을 구현하려고 하였으나,
문법 오류를 쉽게 확인할수 있고 가독성 측면에서 이점이 있는 QueryDsl을 선택
index
- 조회하는 성능을 향상시키기 위해선 색인 작업이 필요하다라는 판단이 들었고 B-TREE 기반의 index 적용
Full-text index
- index는 Like%이기때문에 검색 정확도가 떨어진다고 판단
- Full-text index의 ngram방식과 stop-word방식을 통해 %Like% 검색 조건을 포함 할 수 있고
더 작은 단위 (최소 2글자)로 잘게 나누어 인덱싱 처리를 할 수 있는 full-text index 적용
ElasticSearch
- 검색정확도를 향상시키기 위해 full-text index에서 형태소를 추가하는 작업보다
elasticSearch의 더 강력한 형태소 엔진을 사용하는 것이 효율적일 것 으로 판단
- 프로젝트 특성상 사용자가 검색을 하면 가장 사용자가 원하는 정보가 제일 첫번째로 나와야하는데
elasticSearch는 랭킹 스코어를 통해 가장 높은 스코어가 먼저 사용자에게 전달할 수 있다는 점도 고려 |
| | | 선택한 기술 :
Redis
선택지 :
Memcached | Redis
- 데이터베이스/캐시/메시지 브로커로 사용되는 in-memory기반의 Dictionary(key-value) 저장소
- 메모리의 구조로 디스크에 데이터를 쓰는것이 아니라, 메모리에서 처리하기 때문에 속도가 빠름
- Memcached에서 제공하지 않는 많은 부분들을 Redis에서 제공하여 선택
( 다양한 데이터 구조, 스냅샷, 복제, 트랜잭션 등) |
| | 작업 일괄 처리 | 선택한 기술 :
Spring Batch
| Spring Batch
- 리뷰가 등록이 될 경우 스토어 정보를 일괄적으로 업데이트 해주는 로직이 필요하여 선택
- Spring Framework에서 기본적으로 제공하는 모듈로 선택 |
| | 대용량 트래픽 처리 | 선택한 기술 :
****- AWS ELB
선택지 :
- Scale-Up | AWS ELB
- 한 대의 Ec2 리소스를 증가시켜서 성능향상을 할 경우 장애 상황 발생 시 장애 대처에 어려움
- EC2가 정상화 되기 전 다운타임 발생이 불가피함
- EC2를 2대로 운용하여 서비스 분산처리 향상 및 장애 상황시에도 운용 가능하도록 구현 |
| | Test | 선택한 기술 :
****- Jmeter, Pinpoint, Junit5 | Junit5
- 기대결과에 대한 assertion을 제공하고 annotation을 제공하고,
- 단위 테스트 케이스에서 해당 메소드가 예상대로 동작하는지 확인이 가능하여 사용이 용이할 것 같아서 도입
Jmeter
- 스트레스성 및 부하 테스트를 진행하기 위해서 Jmeter 사용
- API 호출 시, 서버가 버틸 수 있는 최대 부하가 어느 정도인지 측정하기 위해서 스트레스 테스트 진행
- API 호출 시, 서버가 안정적으로 동작할 수 있는 한계치가 어디인지 측정하기 위해서 부하 테스트 진행
Pinpoint
- Jmeter를 통한 Report 외에 서버의 부하 및 API 호출 성공 여부 모니터링을 조금 더 쉽게 하기 위해서 사용
|
| | Admin | 선택한 기술 :
****- Logstash, Kibana | LogStash/Kibana
- 웹 사이트 검색 시 검색 성능을 향상 시키기 위한 수단으로 ES를 선정함
- Logstash로 데이터를 집계하고 처리하여 ES로 전송함
- Kibana로 ES를 사용할 때 필요한 시각화 및 관리 도구를 제공 받음- |
| | Logging | 선택한 기술 :
****- Logback | Logback
Logback은 log4j 이후에 출시된 Java 기반 Logging Framework 중 하나로 가장 널리 사용되고 있음SLF4J의 구현체이며 Spring Boot 환경에서 Dependency 추가 없이 기본적으로 포함되어 있어 적용 |
📩 이번 주 한 일 (목표와 진행 사항)