본문 바로가기

전체 글156

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