목록전체 글 (47)
코딩
사전 작업 Jenkins관리 → 플러그인 관리 → Available plugins 에 들어가서 Generic:Webhook Trigger Plugin Gitlab API Plugin Gitlab Authentication plugin GitLabPlugin 을 설치하고 jenkins를 restart해줍니다. 설치된 plugin은 installed Plugin에서 확인할 수 있습니다. 1. Jenkins의 메인화면에서 새로운 Item을 클릭합니다. 2. item의 이름을 정하고 Freestyle project를 클릭합니다. 3. 소스 코드 관리에서 Git 선택 후, Repository의 URL을 작성합니다. 4. Credential에 Add를 클릭하여 인증 방법을 추가해줍니다. 💡 Username에는 gi..
✔️ Paging이란? process가 할당 받은 메모리 공간을 일정한 page단위로 나누어, 물리적 메모리에 연속되지 않는 서로 다른 위치에 저장하는 메모리 관리 기법. 주소 바인딩을 위해 모든 프로세스가 각각의 주소 변환을 위한 page table이 필요하다. → 메모리 단편화 문제 중 하나인 ‘내부 단편화’가 일어날 수 있다. (필요한 메모리보다 더 많은 page공간을 할당 받게 된다.) 논리적 주소 process가 memory에 적재되기 위한 독자적인 주소 공간인 논리적 주소가 생성된다. 논리적 주소는 각 Process마다 독립적으로 할당, 0번지 부터 시작 물리적 주소 물리적 주소는 process가 실제로 메모리에 적재되는 위치 주소 바인딩 CPU가 기계어 명령을 수행하기 위해 process의 ..
✔️ 동기화 문제란? multi process/thread 환경에서 서로 다른 thread가 메모리 영역을 공유하기 때문에 여러 thread가 동일한 자원에 동시에 접근하여 엉뚱한 값을 읽거나 수정하게 되는 동기화 문제가 발생 💡 해결 방법 1. Mutex 1개의 스레드만이 공유 자원에 접근할 수 있도록 한다. 경쟁 상황을 방지하는 기법으로 공유 자원을 점유하는 thread가 lock을 걸면, 다른 thread는 unlock 상태가 될 때까지 해당 자원에 접근할 수 없다. (Mutex == binary Semaphore) acquire() //critical section (공유 자원을 사용할 수 있는 영역) release() 2. Semaphore S개의 thread만이 공유 자원에 접근할 수 있도록 ..
리파지토리를 이동해주는 과정에서 100MB가 넘는 파일을 push하려니 오류가나는 일이 발생하였다. 데이터가 50만건 쯤 있는 sql 파일이었는데, push하는 과정에서 한번 이런 오류가 나고 commit 기록이 남아있는 상태에서 무작정 방법들을 쓰려고하니 잘 되지 않았다. 내가 찾아본 방법은 1. Git LFS 2. Git config에서 Increasing buffer size 3. BFG 로 1번과 2번은 왜인지 해결이 되지 않았고, 100MB가 넘어가는 sql파일이 굳이 필요하지 않은 파일이었어서 3번으로 오류를 해결할 수 있었다. Git은 100M가 넘는 파일을 push하지 못한다. BFG Repo-Cleaner을 통해서 해당 에러를 해결해주었다. https://rtyley.github.io/b..
crew를 만들기 위해 신청서를 보낼 때, 최대인원이 5명이고 현재원이 1명인 방에 여러명을 동시에 승낙받았을 경우, 4명만 들어와야하는데 요청한 7명이 다 들어왔다. 동시성을 해결하기 위한 방법에는 여러가지가 있지만 이 경우 트래픽의 수가 낮고 대용량 데이터가 오고가지 않으므로 데이터베이스에서 동시성을 해결해보도록 했다. crewID = 8 해결 비관적 Lock Write 옵션을 사용하여 해당 크루 데이터에 Lock을 걸어 다른 트랜잭션이 해당 크루를 select하지 못하게 처리함. 테스트 코드 @Autowired CrewService crewService; @Test @DisplayName("크루 참가 동시성 테스트 -> Service 직접 호출") void crewServiceTest() throw..
JPA에서 nativeQuery로 DTOclass를 매핑해주려니, 매핑이 안되는 오류가 발생했다. 이를 해결하기 위해서 DTOclass를 interface로 바꾸어 주었다. PloggingRepository.java PloggingInterface.java 주의 사항 SELECT절에 ALIAS로 interface와 똑같은 이름으로 맞춰주어야 한다. 만약 snake형식이 아닌 한단어로 이루어진 칼럼이라면 자동으로 mapping이 가능하다. ➡️ PloggingInterface.getPloggingId() = ploggingID의 값
프로젝트에서 사용자들의 발자취를 따라 위도와 경도를 계산하여 반경 5km 이내에 있는 다른 사용자들의 발자취를 보여줘야 했다. 이 과정에서 위도와 경도를 DB에서 어떻게 표현해야 성능이 빨라질까? 에 대한 고민을 했고 최종적으로 2가지의 후보가 나왔다. 1. 위도 경도 Column을 varchar로 두개를 따로 만들어서 반경 계산하기 2. 위도 경도를 Point ColumncolumnDefinition = "POINT SRID 4326"으로 만들어 반경 계산하기 1. 위도와 경도를 Cloumn으로 각각 만들어서 반경 계산하기(하버사인 공식 이용) SELECT p.plogging_id as ploggingId ,p.start_lat as startLat, p.start_lng as startLng, (63..
☑️ ArrayList vs LinkedList ✔️Array 는 어떤 자료구조 인가요? data를 메모리상에 연속적이며 순차적으로 미리 할당된 크기 저장(Stack) 고정된 저장 공간 순차적인 데이터 저장 ↔ LinkedList 메모리에 저장되는 방식, 이에 따른 operation의 연산 속도(time complexity) ✔️Dynamic Array란 무엇인가요? Array의 저장공간이 가득차면 resize하여 저장공간을 재조정한다.(Heap) resize 하는 방식 Doubling(2배 사이즈 resize) 데이터를 추가할 때 시간 복잡도 resize할 때의 시간 복잡도 O(n) ➡️ 그렇담 결과적으로 append의 시간 복잡도는? amortized O(1) 추가 시, resize가 계속해서 일어나..