We will find a way, we always have.

-interstellar

분류 전체보기 303

[Git] 하지말라는거 더 하고 싶어 (feat: git reset -- hard)

문제우테코에서 프로젝트를 진행할 때 각 팀당 주어지는 레포지토리는 하나이다. 코딩해듀오는 백엔드와 프론트엔드 브랜치 prefix를 BE와 FE로 정하여 여기에서 작업을 하고 백엔드 코드와 프론트코드 모두 있는 브랜치는 production으로 정하였다. 다시 말해 prefix가 BE면 백엔드 코드만, FE면 프론트엔드 코드만 존재하고 production 브랜치에는 백엔드, 프론트엔드 코드 모두 존재한다.  백엔드 코드와 프론트엔드 코드 각자도생하다가 런칭 페스티벌 즈음에 production 브랜치에서 만났다. 이 브랜치에서 만나는 과정도 CI/CD 파일들이 컨플릭트 나긴 하였지만 어찌저찌 잘 해결하였다.  하지만 문제는 BE/test 브랜치에서 production 코드를 pull 땡겨와 머지하는 실수를 하..

DevOps/깃 2024.09.20

[네트워크] 3xx 리다이렉트 (feat: ERR_TOO_MANY_REDIRECTS)

서론우테코 레벨 2 미션을 하면서 생성 요청이 왔을 때 응답으로 201 Created를 반환하고 Location을 내리라는 요구사항이 있었다.   그래서 코드 구현도 UriComponentsBuilder를 사용해서 URI를 만들고 Location 필드에 넣어주었다.   하지만 이렇게 구현을 해도 Post 요청이 왔을 때, Location으로 리다이렉트 하지 않는다. 왜냐 2xx에선 Location에 값이 있어도 그쪽으로 자동 리다이렉트하지 않는다. 레벨 2 당시에는 놓쳤던 부분이지만 이번 레벨 4 미션을 하면서 왜 201 Created에 Location을 말아 넣는지 알았다. 오다 주웠기 때문이다.    리다이렉션웹 서버는 종종 성공 메시지 대신 리다이렉션 응답을 반환한다. HTTP 헤더에서 Locati..

[자바] 공백 처리 탐험기 (isEmpty(), isBlank(), strip(), trim())

서론Tomcat 구현하기 미션 중 요청을 처리하는 과정에서 공백 제거를 하지않아 예외가 발생했다.   자바에서는 양 사이드 공백 제거를 위해 trim()과 strip() 두가지 메서드를 제공한다. 이 둘은 어떤 차이를 가지고 있고 어떻게 구현되어있는지 알아보자.  공백 확인공백 제거로 들어가기 전 공백 확인 메서드를 살펴보자. 문자가 빈문자열인지 확인할 때 isEmpty() 혹은 isBlank() 메서드를 사용하곤 했다.    isEmpty()를 사용하면 문자열이 딱 "" 요녀석인지만 확인해주고 isBlank()를 사용하면 "" 이외의 공백, 탭, 줄바꿈과 같은 녀석들도 판별할 수 있다.     어떻게 확인하는가? 위 메서드들은 어떻게 문자가 비었는지 알까소스코드를 까보자.  isEmpty() Strin..

[알고리즘] 카드 게임(Easy & Hard)

레벨 인터뷰 하면서 받았던 피드백을 반영해보자 세웠던 액션 플랜을 준비하기 위한 글이다.    나는코더다에서 카드 게임(Easy)와 카드 게임(Hard)라는 문제가 나왔다.  Easy문제 요약Easy는 상대의 체력 $H$와 내가 가지고 있는 공격력 카드 $N$장과 그리고 각 공격력 카드의 공격력 $d_i$이 주어진다. 카드를 사용하면 상대의 체력은 $d_i$ 만큼 깎이고, $H$가 0이하가 되면 게임은 끝난다. 그리고 각 카드는 한번씩만 사용할 수 있다. 최대한 많은 카드를 사용고자할 때 최대 몇 개의 카드를 사용할 수 있는지를 구하는 문제이다. 모든 카드를 사용하여도 $H$를 만들지 못하면 -1을 반환한다. 문제 접근정리하면 최대한 많은 카드를 사용하여 $H$ 이상을 만들어야 한다. $H$ 이상을 만들..

[Spring] 우리집을 못 찾겠군요 (feat: @RestControllerAdvice, @Order)

배경지식우리 코딩해듀오는 예외 상황을 좀 더 구체적으로 표현하고, 또 테스트도 정확하게 하고자 커스텀 예외를 사용하기로 컨벤션을 정했다. 그리고 각 도메인 별로 패키지를 나누어 각 패키지 마다 대빵 예외가 있고, 이 대빵 예외를 상속하는 세부 예외들이 있었다. @RestControllerAdvice도 각 패키지 안에 들어가 대빵 예외들을 잡아주고 common 패키지에선 최상위 예외인 Exception을 잡아주는 구조였다.    초반에는 각 도메인의 대빵 예외가 CoduoException이라는 찐대장 예외를 상속하는 구조였다가 너무 깊은 상속구조를 갖는 것 같아 CoduoExcpetion은 제거하였다.   문제 상황AccessCode로 페어룸을 찾는데 실패하면 PairRoomNotFoundException..

Spring 2024.08.18

[알고리즘] 이분 매칭 (bipartite matching)

한동안 알고리즘 공부를 멈췄다가 최근에 다시 흥미가 생겨 발을 들이기 시작했다. 이번에는 또 어떤 씹덕 알고리즘을 배워볼까 하다가 이분 매칭이 맛있어 보였다.    모든 간선 용량이 1이고, 정점을 두 개의 그룹으로 나누었을 때, 존재하는 모든 간선의 양 끝 정점이 서로 다른 그룹에 속하는 형태의 유량 그래프를 이분 그래프(bipartite graph)라고 한다.    이분 그래프에서 한쪽 그룹을 A, 다른 쪽 그룹을 B라고 할 때, 간선의 방향이 모두 A -> B일 때, 최대 유량을 구하는 문제를 이분 매칭(bipartite matching) 문제라고 부른다. 위 그림에서는 생략되었지만 소스에서 A로 가는 간선과 B에서 싱크로 가는 간선이 있다고 생각하면 된다.  이분 그래프에서 매칭은 두 그룹의 정점..

[Spring] 액추에이터 Actuator

프로덕션 준비 기능지금까지 미션을 하면서 열심히 돌아가는 쓰레기를 목표로 코드를 짜고 그 다음에 열심히 또 리팩터링을 해 클린코드로 만들어 나갔다. 하지만 이제는 비즈니스 요구사항만 충족할 게 아니라 서비스에 문제가 있는지 없는지 모니터링해야 한다.   프로덕션을 운영 환경에 배포할 때 준비해야 하는 것들이 있는데 이들을 프로덕션 준비 기능이라고 한다. 지표(metric), 추적(trace), 감사(auditing)모니터링 애플리케이션이 잘 살아있는지, 커넥션 풀이 얼마나 사용되고 있는지 등을 확인할 수 있다.  액추에이터 의존성 추가 스프링 프로젝트에 액추에이터를 설정하려면 아래처럼 의존성을 추가해주면 된다.   implementation 'org.springframework.boot:spring-bo..

Spring 2024.08.05

[네트워크] DNS(Domain Name System) 1편

테코톡 준비할 겸, 공부했던 내용을 다시 복습해보자.  DNS 등장배경아파넷(ARPAnet) 시절에는 아파넷의 호스트 주소(숫자 주소)와 호스트 이름 리스트를 SRI NIC(Stanford Research Institution Network Information Center)에서 일괄 관리하였다. TCP/IP 및 DNS가 개발되기 전까지, 전체 호스트 정보(호스트 이름과 숫자주소)를 담고 있는 텍스트 파일을 온라인에 올리면 네트워크 사용자는 FTP로 다운받아 사용하는 방식이었다. 이 텍스트 파일이 hosts.txt이고, 현재도 운영체제 상관없이 어느 pc에서든 이 파일을 검색할 수 있다. window 같은 경우 windows\system32\drivers\etc 에서 찾을 수 있다.    이 hosts ..

[우테코 레벨3] 20주차 회고 (해커톤, 머지 소트 트리, 좋은 동료)

우리는 구조를 설계하는 백엔드 개발자- 지누 창 - 해커톤지난 주 금요일에 1박 2일 해커톤이 열린다는 공지가 올라왔다. 이전 기수에서는 한번도 없었다는 점과 캠퍼스에서 1박을 할 수 있다는 생각에 기대가 되었다.  에너지 드링크와 많은 간식들이 준비되었고, 저녁으로는 치킨과 피자를 제공해주었다. 🍗  해커톤이 끝나고 짧게 시연 가능한 기능을 개발하라는 요구사항이 주어졌다. 그래서 우리는 해커톤 기간동안 구현할 목록들을 쫙 정리하고 각자 기능 구현에 나섰다. API는 크게 3가지였는데, 페어 프로그래밍 튜토리얼 제공 API, 페어룸 생성 및 조회 API, 레퍼런스 링크 CRUD API였다. 백엔드의 인원은 5명이라 두 팀은 페어 프로그래밍으로 진행을 하고 한 명만 혼자 진행하기로 하였다.  나는 레모네..

[우테코 레벨 3] 19주차 회고 (MVP, 페르소나, 사용자 스토리, 포비와의 술자리, 1차 스프린트, UCPC)

레벨 3의 2주차 역시 코드를 작성하진 않았지만 블로깅할 내용이 많다. 메인 기능과 MVC, 페르소나와 사용자 스토리우리의 프로젝트 코딩해듀오의 MVP를 위한 메인 기능을 정하는 시간이 있었다. 여러 기능을 나열하고 각자 메인 기능이라고 생각하는 주제들을 투표했더니 깃허브 API 연동, 타이머 및 브라우저 알림, 실시간 동시 편집 메모장 기능이 뽑혔다. 나는 사용자가 우리 사이트에서 접속하여 할 수 있는 컨텐츠를 먼저 제공하는것이 좋을 것 같아 타이머 및 브라우저 알림과 실시간 동시 편집 메모장을 골랐다  그래서 해당 기능을 다음 스프린트 때 구현할 기능으로 잡고 기능 명세서를 작성하며 데모데이를 준비하였다.  사용자 스토리 강의를 들은 후 페르소나와 사용자 스토리도 정하는 시간도 가졌다.  페르소나 뽑..