HttpURLConnection, RestTemplate, WebClient 비교
·
Spring/끄적끄적
1. 개요외부 API를 호출할 일이 생겨, 비슷한 다른 로직을 살펴보던 중 HttpURLConnection을 사용하는 것을 보았다. 지난 졸업작품 프로젝트를 하면서 WebClient를 사용하여 네이버 지도 API를 호출한 적이 있었는데이번 글을 기회로 "각 HTTP 요청 연결의 사용 시점"에 대해 정리하고자 글을 작성하게 됐다. 참고로 졸업작품에서는 N^2 (N 인턴 업무에서는 5000~6000 건에 해당하는 API 호출이 필요하여 WebClient를 사용했다.   2. HTTP 통신 방식 공공 데이터 포털에서 제공하는 Open API나 기업에서 제공하는 API를 사용하기 위해서,요구하는 Parameter / Body / Header 형식을 갖춘 HTTP 요청을 만들어야 한다. 서버 간의 HTTP 통신을..
Union-Find 알고리즘 (feat. Disjoint Set)
·
Algorithms/Union Find
알고리즘을 풀다가 분리집합, union-find 관련 문제를 자주 접하여 관련 개념들을 정리하고자 글을 적게 되었다. 1. Union-Find와 Disjoint Set`Union-Find, Disjoint Set` 두 단어 모두 알고리즘을 풀다 보면 한 번씩 들어보게 되는 용어이다. 처음에는 '2개의 문제 유형이 다른가?' 하고 생각을 했는데 같은 문제로 보면 될 것 같다.정확히 말하면 그래프 탐색에 dfs, bfs 알고리즘을 사용하듯이, 분리집합에는 Union-Find 알고리즘을 사용한다.하지만 분리집합을 관리하기 위한 알고리즘으로 Union-Find 알고리즘이 효율이 매우 좋아 다른 알고리즘이 필요하지 않는다고 보면 될 것 같다. 그럼 간략하게나마 각 용어의 개념을 정리해보자. Disjoint Set..
Mockito가 있는데 왜 BDDMockito를 사용할까?
·
Test
1. BDD..? 그게 무엇일까??BDD, Behavior-Driven Development 로 행위 주도 개발을 뜻한다.이는 기존의 TDD에서 확장된 개발론으로, "시나리오를 기반으로 한 행위"에 더 많은 관심을 기울인다.  이 시나리오는 다음과 같은 형식을 따르며, 이를 통해 실제 테스트가 이루어진다. Given(초기 상황) → When(행위, 이벤트) → Then(기대 결과)   2. 그럼 BDDMockito와 기존의 Mockito를 사용했을 때 차이점을 살펴보자.BDD 방식과 Mockito의 기능성을 결합하여, BDD의 "Given-When-Then" 구조 스타일의 테스트 작성을 지원하도록 만든 것이 바로 `BDDMockito`이라고 정의를 했다. 그럼 기존의 Mockito와 BDDMockito의..
서비스 로직 Test 작성하기 (feat. Mockito)
·
Test
1. '단위 테스트'의 정의부터 짚고 넘어가자.프로젝트 개발 과정에서 일반적으로 한 개의 클래스 또는 메소드 수준으로 기능을 검증하는 테스트이다.주로 각 service, controller 별로 테스트 클래스를 만들어서 진행하는데, 이것이 바로 단위 테스트를 의미한다.   2. 그럼 테스트를 할 때, 정의한 도메인 객체들을 그대로 사용해도 되나?기존에 정의한 도메인 객체를 그대로 사용할 수도 있지만, 비효율적이며 다음과 같은 문제점을 가지고 있다. - 테스트하려는 객체가 다른 객체에 의존하는 경우, 모든 의존성을 준비하는데 복잡하고 시간이 오래 걸린다.- DB 또는 네트워크를 사용하는 테스트에서 관련 기능들을 호출하는 작업에서 많은 비용이 든다.- 테스트 중 에러가 발생하면, 현재 시스템 문제인지 외부 ..
Github Actions CI/CD 프로젝트 적용기
·
DevOps/CI-CD
졸업 설계를 진행하면서 코드의 변경이 있을 때마다 aws 서버에서 변경된 코드에 대해 pull을 받고 배포해주는 과정이 반복되었다. 이러한 수고로움이 계속 되면서, 자동화 프로세스인 CI/CD에 관심이 갔고 공부하고 프로젝트에 적용하는 과정에서의 배움을 정리하였다.  1. CI/CD란?CI(Continuous Integration)지속적 통합, 자동으로 코드의 변경이 있을 때 메인 레포지토리에 통합하는 과정이다. 여기에서 중요한 점은 통합되기 전에자동화 된 build, test를 통해 문제가 없는 코드인지 확인하는 것이다.  CD(Continous Deployment)지속적 배포, 자동으로 CI가 완료된 코드를 서버에 배포하는 과정이다.   2. CI/CD를 지원하는 여러 tool들이 있는데 왜 Git..
SSH (Secure SHell) 이란?
·
DevOps/CI-CD
프로젝트에 CI/CD를 구축하는 과정에서 SSH와 관련된 개념이 부족하여, 며칠동안 꽤 애를 먹었다. 관련하여 여러 오류를 만나면서, 공부한 내용들을 정리하였다.- 비대칭키(공개키, 비밀키)를 이용한 SSH 통신의 동작 흐름- 클라이언트에서 신뢰할 수 있는 서버인지 확인하는 과정- Github Actions에서 원격 SSH 통신을 할 때 known_host를 등록하기 위한 코드 작성   1. 개념SSH(Secure SHell): 원격 호스트에 접속 및 원격 명령을 실행하기 위해 사용되는 보안 프로토콜 SSH를 사용하여 네트워크 상의 다른 컴퓨터에 원격 로그인하여 (ex. AWS EC2 원격 접속) 원격 시스템에서 명령을 실행하고,다른 시스템으로 파일을 복사 (ex. SCP 명령어) 할 수 있다.   2...