
이번주 멘토링 시 멘토님께서 내가 만든 Redis Cache + Scheduler + Spring Batch를 이용한 Update처리 로직 관련해서 동시에 여러 서버가 접근하면 어떻게 될 것 같나요? 라는 질문을 던져주셨고 멘토링 직전까지 해당 로직을 만들어내는데에 급급했던 나는 🙋🏻 Redis서버를 각 로컬에 생성한다면 아무 문제가 없지 않을까용 ? 이라고 대답을 하였다. 애기들 세명이 오락기 하나 가지고 싸우고있는데 이걸 어떻게 사이좋게 나눠서 놀도록 할 수 있을까? 대한 질문을 오락기를 세개를 두면 되지 않나요?의 답변을 한 셈임 대답이 틀렸다고 할수는 없지만 동시성 제어 부분을 아예 생각도 안한걸 바로 들킬수 있는 구문이였다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 그래서 한발 늦었지만 성능 개선을 위해서 공부..

대량의 트래픽을 핸들링하기 위한 동시성 제어 기법 중 여러가지 방법이 있는데 그중에서 비관적 락과, 낙관적 락 두 락의 차이를 알아보자 👀 비관적락 : 자원 요청에 따라서 동시성 문제가 발생할것이라고 사전에 예측하고, 락을 걸어버리는 방법론 : 트랜잭션의 충돌이 발생한다고 가정하고 하나의 트랜잭션이 자원에 접근시 락을 걸고, 다른 트랜잭션이 접근하지 못하도록 함 : 데이터베이스에서 Shared Lock(공유, 읽기 잠금), Exclusive Lock(배타, 쓰기 잠금)을 건다. 1. Shared Lock - 접근한 트랜잭션이 작업중일 때 다른 트랜잭션에서는 읽기만 가능하고, Exclusive Lock 적용이 불가능하다. 2. Exclusive Lock - 접근한 트랜잭션이 작업중일 때 다른 트랜잭션에서는..

이번주는 중간 발표 후 피드백 받은 내용을 기반으로 한 주를 열심히 달렸당 🏃🏻♀️🏃🏃♂️ 금주 팀 목표 및 개인 목표는 아래와 같음 ! 이번 주 한 일 회고 이번주 한 일 팀 전체 미구현 된 mvp 기능 완성 미구현 기능 List 장소 마커 클릭시 별점 / 리뷰 수 조회 기능 장소 마커 클릭시 웨이팅 현황 조회 기능 (기존에는 웨이팅후에 확인 가능) 사용자 유효성 검사(이메일 요청) 기능 웨이팅 입장 호출(이메일 요청) 기능 장소 마커 클릭 시 리뷰 조회 기능 최대 수용 가능 인원 설정 기능 개인 목표 리뷰 등록/조회 기능 개선 적용 ( Redis Cache + Scheduled + Spring Batch ) 사용자 유효성 검사(이메일 인증) 기능 구현 - BE / FE 웨이팅 호출 기능 구현 - ..

지난주 중간 발표 후 이번주에는 MVP 기능 중 추가가 필요하거나, 개선이 필요한 기능을 우선적으로 만들기로하였다. 우리의 이번주 목표는 위와 같고! 내가 해야할일은 사용자 유효성 검사(이메일) 기능 구현, 웨이팅 호출 기능 구현, 스토어 리뷰 조회 기능 구현 부분이다! 도커 무중단 배포는 해둔다고 쓰긴 했지만 지금 당장 필요할까 ?? 싶어서 이번주에 할지 말지는 고민중이다 맘먹고하면 한 두어시간쯤이면 되지 않을까 생각즁 🤨 이메일 인증 기능 구현(사용자 유효성 검사) 이메일 인증 구현을 만들게 된 사유는 회원 가입만으로도 충분히 사용자에 대한 검증을 했다고 볼 수 있긴 하지만 JWT나 요런걸 사용하지 않기 때문에 추가적인 유효성 검사를 하려는 니즈도 있었고, 웨이팅 예약중인 사용자가 입장 대기상태일 때..

우리 팀 노션에 작성한 내용인데 같은 내용으로 고민하고있는 분이 있으실 수 있으니 참조하시라고 올립니다 ✨ Github Action을 이용한 CI/CD 구성시 프로젝트 빌드에 필요한 모든 파일이 깃허브에 올라가야하는데 aws key 같이 공개된 장소에 올리면 안되는 정보들을 어떻게 처리해야할까 ❓ 🔑 GPG로 주요파일 암호화 하여업로드하기 gpg는 GnuPG(Privacy Guard)의 OpenPGP 부분을 구현한 암복호화 프로그램으로 요걸 사용한다. GPG Key 생성하기 1. GPG Key 생성 gpg --gen-key 2. gpg secring.gpg 파일 생성(개인키) gpg --export-secret-keys -o secring.gpg 3. gpg keyid 얻기 gpg --list-keys ..

이번주는 지난주에 나태지옥에 빠진 이유로 한 주간 엄청나게 바빴다 💨 실전에 들어오고나서 뭔가 확실한 목표치?가 없다보니 조금 루즈해진감이 없지않았는데 이번주 토요일에 중간 발표 직전에 계획을 거의 80% 이상 수정하면서 엄층나게 바빠진 것 ㅋㅋㅋㅋㅋㅋㅋㅋ 사슴공부법을 프로젝트에도 적용하게 될줄은 몰랐지 나도 .. 무튼 발표날 새벽 4시까지 팀원분들이랑 웃샤웃샤하면서 중간 발표 자료도 잘 만들고, 영상도 잘 찍어내고! 프론트도 하은님의 피드백과 + 시넌님의 손기술로 검수받아서 든든한 마음으로 중간 발표를 진행했다.! 두둥 대망의 중간발표 😎 챌린지팀의 경우 2주차에 중간발표를 하고, 나머지 4주동안 성능 개선을 진행한다. 우리는 핀테이블 이라는 서비스를 만들었는데 지도앱을 통해서 지도를 검색할 수 있고,..

- 문제 : 테이블에서 자동차 종류가 'SUV'인 자동차의 평균 일일 대여 요금을 출력하는 SQL문 작성 평균 일일 대여 요금은 첫번째 자리에서 반올림, 컬럼명은 AVERAGE_FEE로 지정

- 문제 : MEMBER_PROFILE 테이블에서 3월 생일인 여성의 정보 출력하기 ( 전화번호가 Null 이면 제외함 ) 멤버 아이디 기준으로 정렬 날짜 데이터 포맷은 예시와 동일해야함 SQL은 재밌음ㅋ

- 문제 : 각 기능은 개발속도가 모두 다르고 첫번째 기능이 완료되어서 배포되어야 두번째 기능도 배포될 수 있다. 각 배포마다 몇개의 기능이 배포되는지 return - 내가 생각한 접근 방식 : 스택/큐 중에 FIFO 방식이므로 큐 방식으로 풀어야함 스택은 후입선출임 작업이 몇번의 반복 끝에 완료되었는지는 요구하지않음 첫번째 배포가 일어날때(=1번째가 완료되었을 때) 총 몇개가 완료된 상태인지 ?? 를 구하면 됨

- 문제 : 폰켓몬의 종류 번호가 담긴 배열에서 최대한 많은 종류의 포켓몬을 포함한 N/2개의 폰캣몬 갯수 구하기 - 내가 생각한 접근 방식 : 폰켓몬의 종류 배열을 딕셔너리에 넣어서 중복을 제거한다. 제거한 배열의 길이만큼 반복하면서 n/2 갯수까지 출력하도록 조건문을 걸어둔다

실전 프로젝트 시작한지 얼마 안된 것 같은데 벌써 내일이 중간 발표 .. !!!! !!!! 중간발표까지 2주라는 시간이 주어졌는데 기획 부분에서 반, 파이썬 크롤링 하는데 2/3의 시간을 쓰고 실제 코드는 2~3일만에 후다닥 짠 것 같다 이번에 어쩌다보니 스프링 코드는 다른 팀원분들이 거의 다 짜주시고 나는 프론트 코드랑 ,, 파이썬 위주로 짜게 되었는데 챌린지팀은 프론트 팀원이 없는 대신 간소화 하게 작성해라 ! 거의 없듯이 해라 ! 라고 항해 측에서 설명해준것과 다르게 뭔가 하려면 웹이 계속 계속 필요했다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 새로이 공부하는게 싫어서 html, css, js로만 꾸역꾸역 구현했었는데 우리가 원하는 기능을 구현하려면 더이상 이대로 진행할수가없어서 오늘 리액트 기술매니저님의 조언을 ..

이번주의 나는 Mvp 기능 중 지도 검색, 현위치 기준 지도 검색을 구현하는데 시간을 왕창 썼다 Java도 잘 모르는 0개 국어 나에게 다시금 html + css + js란 .. 그저 지옥 ... 몇번씩 지옥에 빠져서 5시간씩 같은 코드를 보고있었는데 정말정말정말 안될때 그저빛 시넌님께, , 도움을 요청했고 시넌님이 날 지옥구덩이에서 꺼내줬다 🥺 정말 정말 고맙읍니다 ,, 갓 시넌 ,, , Thanks to synun,, 👍 구현이 완료된 화면은 아래 화면이당 😎 지도에 원하는 장소로 검색을 할 수 있어요! 검색 시 핀을 눌러 정보를 확인 할 수 있어요! 현 위치 기준 근방의 장소를 검색할 수 있고, 다중 마크를 찍어서 확인할 수 있어요! 이 부분에서 구현에 시간이 엄청 소요되었던 이유눈 웹(html)에..

오늘은 실전프로젝트를 시작하면서 정말 보고싶었던 .. 멘토님을 드디어 만났다 .. 🥹 멘토님을 만나기전까지 정리가 된거같으면서도 계속 머리속에 물음표가 가득한 하루하루를 팀원분들이랑 어찌저찌 잘 버텨냈는데 ㅋㅋㅋㅋㅋㅋㅋ 아주 속 씨언해짐 !!! 기술멘토링은 한 주차의 회고, 그리고 질의 사항으로 진행되는데 원래 멘토링 시간은 40분인데 궁금증대마왕인 우리팀은 1시간이나 진행했다 ㅋㅎ 요약해서 말하자면 .. 우리가 우리는 서비스팀이 아니야! 챌린지팀이야! 하고 기능들을 다 없애버렸는데 mvp 스코프가 너무 적으니까 기능에서 끽해봤자 이런 성능개선뿐이 못할것 같은데 ,, 이거 맞나요 ,, 라는 느낌이였다 멘토님께서 그동안 우리가 계속 혼란스러웠던 챌린지팀과 서비스팀의 차이를 알려주셨는데 챌린지팀과 서비스팀은..

그동안 매일매일 하는 일에 대해서는 열심히? 기록하지 못했지만 실전 프로젝트때는 상세히 꼼꼼히 있었던 일에 대해서 잘 적어보려고 엄청나게... 노력중이다 🥺 오늘은 심적으로 쉽지 않았던 하루였는데, 왜 쉽지 않았냐면 레퍼런스가 많지 않은 챌린지팀을 시작하면서 데이터를 수집하는것부터, 어떤 서비스를 해야할지 참조할곳도 많지않고 기술매니저님도 일주일에 한번?밖에 안오시니 망망대해에 팀원들이랑 버려진 것 같은 느낌이 약간 들었당 그리고 이틀동안 죽음의 크롤링 공장을 돌렸는데 한사람당 15만건의 데이터를 돌려서 데이터를 추출하기로하였으나 약 2천건의 데이터를 한번에 돌린다고 가정할 때 600~700건대에서 NOT FOUND 오류가 나면서 페이지가 Block되는 이슈가 있어서 하루종일 크롤링으로 데이터를 한건도 ..

🧧 Radis : Radis는 데이터베이스로, 캐시로, 메시지 브로커로 사용되는 in-memory 기반의 Ditionary(key-value) 저장소 : 인메모리의 구조로 디스크에 데이터를 쓰는것이 아니라, 메모리에서 처리하기 때문에 속도가 빠른 장점이 있다. : 다만 용량이 적기 때문에 저장하려는 데이터 셋이 메모리 크기보다 크면 디스크를 써야함 🪙 Cache : 한번 조회된 데이터를 특정 공간에 저장해두고, 똑같은 요청이 발생하였을 때 서버로 요청하지 않고 저장된 데이터를 클라이언트한테 바로 제공해줄 수 있다. (1) Cache hit : 캐시 스토어에 데이터가 있을 경우 바로 가져온다(빠름) (2) Cache miss : 캐시 스토어에 데이터가 없을 경우 DB서버에 요청하여 가져온다(느림) ♟ Ra..

챌린지 팀에서는 서비스팀과 다르게 '성능향상' 이라는 부분을 초점으로 진행해야한다. Java + Spring 걸음마 하고있었는데 어떻게 하면 빨리 걸을 수 있을까? 어떤 부분을 바꿔줘야 뛸 수 있을까? 를 고민하는 격 대량의 데이터를 수집하고 가공하고 사용하는데 있어 사용자가 불편함을 느끼지 않도록 서비스 할 수 있는 방법까지가 우리가 해야할 고민이다. 데이터 수집 후 해야할 고민은 크게 두가지인데 검색 성능 향상과, 부하 및 안정화 부분 인 것 같다. 검색 성능 향상 부분에서 적용할 스택으로 엘라스틱 서치를 먼저 공부해보기로했다. 🌀 Elastic Search 그게 뭔데? ES는 아파치 루썬 기반의 Java 오픈소스 분산 검색 엔진 방대한 양의 데이터를 신속하게 실시간으로 저장, 검색, 분석 할 수 있..