전체 글

우아한테크코스 4기

RestDocs 시작하기

API 문서 자동화를 위한 RestDocs 적용 방법에 대해 알아봅시다! API 문서 자동화는 정말 중요한 일입니다. 사람이 손으로 해서는 결국 한계가 있고, 규모가 커질수록 걷잡을 수 없게 됩니다. 가령 문서 파일로 API를 관리하고, 이를 공유하고 업데이트 하는 식으로 사용하게 될 경우, 형상관리를 하더라도 분명 이슈가 발생하게 됩니다. 코드에 반영을 했는데 문서에 반영을 하지 않는다던가, 최신화되지 않은 문서를 참조하고 있다거나, 변형된 파일이 공유된다거나.. 정말 많은 이슈가 생길 수 있습니다. 그래서, 프로덕트가 배포되는 시점에 문서도 자동화되어 배포될 수 있게 구성할 수 있다면, 그리고 프로덕션 코드에는 영향이 없다면, 정말 좋겠습니다. 초기 설정이 다소 까다로워서 그렇지 한 번 구축을 완료하..

Life

🔑 맥북에서 와이파이 비밀번호 확인하기

키체인 실행 시스템 키체인 -> 시스템 -> AirPort 네트워크 암호 중 더블클릭 암호 보기 체크 후 비밀번호 입력 키체인 접근, kcproxy 관련 모두 맥북 잠금 해제할 때 사용되는 이름, 비밀번호를 입력하면 됨 키 체인 관련 이슈가 있을 때 finder 실행 -> cmd + shift + g -> ~/Library/Keychains/ 입력 후 엔터 -> 99831 폴더 삭제 후 재부팅 (폴더 명은 다를 수 있음) 도움 받은 링크 맥북에서 연결된 와이파이 비밀번호 알아보는 방법 키체인 암호입력하라고 자꾸 뜨시는 분 계세요?

Server & Infra

Jenkins, Multibranch-pipeline을 이용한 CD

Jenkins의 Multibranch-pipeline을 이용한 CD 설정에 대해 정리해봅니다. CD의 필요성 인간 젠킨스 라는 표현에 대해 들어보셨나요? 자바 애플리케이션은 빌드 결과물로 .jar 파일이 생성되는데요, 이를 배포하려는 서버에서 실행시키는 것이 곧 배포에 해당합니다. 즉, 새로운 버전이 배포되어야 할 때마다 jar파일을 빌드해서 서버에 옮겨서, 배포해야 하는 것이죠. 위와 같은 배포 과정을 사람이 수동으로 하는 경우를 익살스럽게 인간 젠킨스 라고 표현하기도 합니다. 쉽게 말하면 수동 배포죠. 이러한 수동 배포는 당연하게도 여러 가지 문제가 있습니다. 번거로움, 생산성, 실수 가능성 등등 말이죠. 이러한 배포 작업을 특정 이벤트에 따라 자동으로 트리거되어 Jenkins가 대신해주게 설정할 수..

Server & Infra

Git에 잘못 올린 파일 삭제하기

Git에 잘못 올린 파일을 삭제한다 라는 표현은 다소 애매모호합니다. 하나의 케이스는 단순히 형상관리 대상에서 제외하기 위한 작업을 의미할 수 있고, 또다른 케이스는 모든 히스토리에서 완전히 제거하기 위한 작업을 의미할 수도 있습니다. 이번 포스팅에선 위 두 가지 케이스 경우 어떻게 대응해야할 지 알아봅니다. git rm : 형상 관리 대상에서 제외하기 Remove files from the working tree and from the index IDE 설정들을 담는 .idea 내 파일들, java 파일을 빌드한 결과들인 .class 파일 등은 형상 관리 대상이 아닙니다. 이처럼 형상 관리 대상이 아닌 파일들을 실수로 staging하여 commit, push까지 한 경우, 이들을 형상 관리 대상에서 제..

Java & Spring

jitpack, github를 이용한 라이브러리 배포하기

나만의 라이브러리를 만들어서 배포해봅시다! Bearer 토큰 추출을 조금 더 쉽게 할 수 없을까 로그인, 인증/인가 과정은 어느 프로젝트를 하더라도 추가하게 되기 마련인데요, 이 과정에서 Authorization Header에 담긴 Bearer 토큰을 추출해내는 코드를 매번 프로젝트에 복사 붙여넣기로 추가하는 과정이 너무 번거롭게 느껴졌습니다. 저만 느끼는 감정이 아닐 것이기에 분명 이미 만들어진 무언가가 있으리라 생각했는데, Spring Security OAuth쪽 패키지에 DefaultBearerTokenResolver가 있는 것을 확인했습니다. 그러나 이 클래스는 특정 의존성 이 제공하는 클래스 중 하나의 구성요소여서 다른 의존성도 함께 추가할 수밖에 없다는 점과, 일부 내부 구현이 저의 사용 의도..