[TIL] HttpClient/ RestTemplate/ WebClient, 논블로킹 vs 비동…
in TIL on Til Last modified at:
2025-04-01 TIL
📝 TIL (Today I Learned)
🔗 원본 이슈: #34
📅 작성일: 2025-04-01
🔄 최종 수정: 2025년 04월 08일
🍀 새롭게 배운 것
✅ HttpClient, RestTemplate, WebClient
- Java에서 REST API와 통신할 수 있도록 하는 HTTP 클라이언트
- 공부하다 비슷한 개념들의 성능적 차이점을 알고 싶어 블로그에 HttpClient, RestTemplate, WebClient의 차이점에 대해 적어놓았다,
- RestTemplate
✅ 논블로킹 (Non-blocking) vs 비동기 (Asynchronous)
항목 | 비동기 | 논블로킹 |
---|---|---|
개념 | 작업을 요청하고 바로 다음 코드 실행 (응답 기다리지 않음) | 리소스(쓰레드 등)를 점유하지 않음 |
초점 | 시간(언제 실행될지 모름) | 리소스 사용 여부 |
예시 | 콜백, Future, Promise, Mono | read() 호출 시 즉시 리턴 |
관련성 | 비동기 처리는 대부분 논블로킹 방식으로 구현됨 | 논블로킹이 항상 비동기인 건 아님 |
✅ 보일러 플레이트 → 롬복
- 보일러 플레이트를 공부하다 롬복 개념과 비슷한 것이 있는 것 같아 어떤 관계가 있는지 알아보고 각각 개념에 대해서 자세히 정리해보았다.
- BoilerPlate와 Lombok
✅ 패키지, 모듈, 라이브러리, 프레임워크, 스켈레톤, 템플릿
- 한눈에 이 개념들에 대해 정리하고 싶어서 아래와 같이 만들었다!
- 💬 “Spring 프레임워크로 만든 스켈레톤 프로젝트에서, controller 패키지에 로그인 모듈 넣고, 이메일 템플릿을 Thymeleaf로 렌더링, Jackson 라이브러리로 JSON 파싱한다.”
개념 비교표 (한눈에 보기)
용어 | 개념 요약 | 백엔드 개발자가 알아야 할 포인트 |
---|---|---|
패키지 | 클래스/파일들을 기능별로 묶은 폴더 | Java, Python 등에서 파일 구조 잡을 때 사용 |
모듈 | 독립적으로 동작할 수 있는 기능 단위 | 기능 분리 → 유지보수/테스트/재사용에 중요 |
라이브러리 | 특정 기능을 수행하는 코드 집합 | 필요할 때 꺼내 쓰는 도구 (예: Gson, Lodash) |
프레임워크 | 개발 구조를 잡아주는 뼈대 + 기능 제공 | 정해진 방식대로 개발 (Spring, Express 등) |
스켈레톤 | 기본 구성만 갖춘 “빈 프로젝트” | 프로젝트 시작 시 빠르게 셋업 가능 |
템플릿 | 반복되는 코드/구조를 미리 만들어둔 것 | 보일러플레이트 줄이기 (이메일 템플릿, HTML 구조 등) |
🔍 하나씩 간단하게 설명 + 예시
1. 패키지 (Package)
- 📁 폴더처럼 코드 정리하는 단위
- Java:
com.myapp.controller
, Python:myapp.utils
- 구조적 관리, 이름 충돌 방지
👉 왜 중요?
→ 프로젝트가 커질수록 패키지 구조 잘 잡는 게 유지보수 핵심
2. 모듈 (Module)
- 📦 독립적인 기능 단위
(예: 사용자 인증 모듈, 결제 모듈) - 재사용 가능, 유닛 테스트 용이
👉 왜 중요?
→ 기능별로 나눠 개발하면 협업·유지보수가 쉬워짐
3. 라이브러리 (Library)
- 📚 함수/클래스를 모아놓은 도구 상자
- 내가 직접 작성하지 않고 가져다 쓰는 코드
- 예: Gson (JSON 파싱), JUnit (테스트)
👉 왜 중요?
→ 개발 효율성 급상승, 같은 기능 굳이 직접 안 만들어도 됨
4. 프레임워크 (Framework)
- 🏗️ 일정한 구조 + 기능 제공
- 개발자가 코드만 붙이면 동작함 (제어 흐름은 프레임워크가 담당 - IoC)
- 예: Spring, Express, Flask
👉 왜 중요?
→ 표준 구조로 팀 개발 가능, 학습 곡선 있지만 익히면 강력함
5. 스켈레톤 (Skeleton)
- 🦴 초기 프로젝트 구조만 갖춘 상태 (빈 틀)
- Spring Initializr가 생성해주는 구조 = 스켈레톤
- 보일러플레이트만 있는 기본 프로젝트
👉 왜 중요?
→ 빠르게 프로젝트 시작할 수 있음
6. 템플릿 (Template)
- 📄 반복 구조를 미리 만들어 놓은 코드 or UI
- HTML 이메일 템플릿, JSP 템플릿, 코드 생성 템플릿 등
👉 왜 중요?
→ 개발 생산성 증가, 디자인/구조 통일