4차산업혁명의 일꾼/웹개발 325

CloseableHttpClient, WebClient, RestTemplate의 특징 및 비교

CloseableHttpClient, WebClient, RestTemplate의 특징 및 비교Java에서 REST API와 같은 HTTP 통신을 수행할 때 가장 많이 사용되는 주요 도구들은 CloseableHttpClient, RestTemplate, WebClient입니다. 각각의 도구는 사용 목적, 패러다임, 특징이 다르기 때문에 적절한 도구를 선택하는 것이 중요합니다.1. CloseableHttpClientApache HTTPClient 라이브러리에서 제공하는 HTTP 클라이언트로, HttpClientBuilder를 사용해 생성합니다.특징저수준(low-level) 클라이언트:HTTP 요청/응답의 세부적인 처리를 해야 할 때 유용.쿠키 관리, 인증, 커넥션 풀, 시간 초과 설정 등의 HTTP 설정을..

리액트의 render phase와 commit phase에 대해서 설명해주세요

.프론트엔드와 관련된 질문이에요.리액트의 렌더링 과정은 크게 두 가지 단계로 나눌 수 있습니다. render phase와 commit phase입니다.먼저 render phase는 리액트가 변화된 상태나 props에 따라 어떤 UI가 변경되어야 할지를 결정하는 단계입니다. 이 과정에서는 실제로 DOM을 업데이트하지 않고, 변경사항을 가상 DOM에서 계산하여 비교합니다. 이 단계는 순수하게 계산과정이기 때문에 성능에 영향을 주지 않도록 중단되거나 다시 실행될 수 있으며, React 18에서 도입된 Concurrent Mode를 통해 비동기적으로 처리될 수도 있습니다.다음으로 commit phase는 실제로 변화된 UI를 DOM에 반영하는 단계입니다. 이때 리액트는 가상 DOM에서 계산된 결과를 실제 DOM..

equals와 hashCode는 왜 함께 재정의해야 할까요?

equals와 hashCode 메서드는 객체의 동등성 비교와 해시값 생성을 위해서 사용할 수 있습니다. 하지만, 함께 재정의하지 않는다면 예상치 못한 결과를 만들 수 있습니다. 가령, 해시값을 사용하는 자료구조(HashSet, HashMap..)을 사용할 때 문제가 발생할 수 있습니다.class EqualsHashCodeTest {    @Test    @DisplayName("equals만 정의하면 HashSet이 제대로 동작하지 않는다.")    void test() {        // 아래 2개는 같은 구독자        Subscribe subscribe1 = new Subscribe("team.maeilmail@gmail.com", "backend");        Subscribe subsc..

리액트의 Strict Mode에 대해서 설명해주세요

리액트에서 StrictMode는 주로 개발 중에 발생할 수 있는 잠재적인 문제를 사전에 감지하고 예방하기 위해 사용됩니다.첫째, 오래된 라이프사이클 메서드와 비권장 API의 사용을 감지합니다. 예를 들어, componentWillMount(), componentWillReceiveProps()와 같은 메서드는 더 이상 사용이 권장되지 않는데, StrictMode는 이러한 메서드들이 코드에 포함된 경우 경고를 표시해줍니다. 이를 통해 개발자가 최신 React API를 사용하여 보다 안정적이고 효율적인 코드를 작성하도록 돕습니다.둘째, 의도치 않은 부수 효과를 방지합니다. 리액트는 컴포넌트의 렌더링이 예측 가능하고 순수하게 이루어지기를 기대합니다. StrictMode는 이를 검증하기 위해 useEffect(..

로그와 메트릭을 설명해주세요

로그와 메트릭을 설명해주세요.백엔드와 관련된 질문이에요.로그는 서버가 동작할 때 서버의 상태와 동작 정보를 시간 경과에 따라 기록된 결과입니다. 로그는 시스템의 오류와 문제들을 쉽게 찾아낼 수 있도록 도와줍니다. 반면, 메트릭은 시스템의 성능과 상태에 대한 통계적인 정보를 의미합니다. 메트릭을 잘 수집하면 시스템의 현재 상태를 손쉽게 파악할 수 있고, 사업 현황에 관한 유용한 정보를 얻을 수 있습니다. 가령, 메트릭은 DAU, Retension, CPU 사용량, 메모리 사용량 등이 있습니다.로그와 메트릭을 수집해 보신 적이 있나요? 🤔아래부터는 예시로 생각해주세요! 각자 진행하신 프로젝트 상황에 맞는 답변을 생각해 주세요. 😀스프링 부트 액추에이터를 사용해 메트릭을 생성하고 프로메테우스에 저장한 다..

얕은 복사와 깊은 복사에 대해서 설명해주세요

백엔드와 관련된 질문이에요.자바에서 객체를 복사할 때 얕은 복사와 깊은 복사라는 두 가지 방식이 있습니다. 먼저 Book과 Author라는 두 클래스를 사용해서 예제를 살펴볼게요. Book은 책의 이름(name)과 저자(author) 정보를 가지고 있고, Author는 저자의 이름을 가지고 있습니다.class Book { private String name; // 책 이름 private Author author; // 저자 public Book(String name, Author author) { this.name = name; this.author = author; } public Book shallowCopy() { // 얕은 복사 re..

브라우저 렌더링 파이프라인에 대해서 설명해주세요

브라우저가 웹 페이지를 화면에 표시하기 위해 거치는 과정을 브라우저 렌더링 파이프라인이라고 합니다. 이 과정은 크게 6단계로 나눌 수 있습니다.첫번째로 DOM 생성입니다.브라우저가 HTML 파일을 받으면, 이 파일을 바이트(byte) 단위로 읽기 시작합니다. 브라우저의 HTML 파서(Parser)는 이 바이트들을 문자(character)로 변환하고, 이 문자들을 다시 HTML 토큰으로 변환합니다. 이 HTML 토큰들은 각각의 태그와 그 안에 포함된 텍스트, 속성 등을 의미하게 됩니다.HTML 토큰이 생성되면, 브라우저는 이를 기반으로 DOM 트리를 생성합니다. DOM 트리는 HTML 문서의 구조를 트리 형태로 표현한 것으로, 각 태그가 노드(node)가 되어 부모-자식 관계를 형성합니다. 예를 들어, ..

연결 리스트(Linked List)의 구조와 사용 사례를 설명해주세요.

연결 리스트(Linked List)의 구조연결 리스트는 데이터를 노드(Node)라는 단위로 저장하며, 각 노드는 데이터(Data)와 다음 노드를 가리키는 포인터(Next Pointer)를 포함하는 구조입니다. 배열(Array)과 달리 연결 리스트는 메모리상에서 데이터를 연속적으로 저장하지 않고, 동적으로 메모리를 할당받아 노드 간 연결을 유지합니다.구조노드(Node):데이터(Data): 저장하고자 하는 실제 값.포인터(Next): 다음 노드를 가리키는 참조값.헤드(Head):연결 리스트의 첫 번째 노드를 가리키는 포인터.종류:단일 연결 리스트(Singly Linked List): 각 노드가 다음 노드만 가리킴.이중 연결 리스트(Doubly Linked List): 각 노드가 다음 노드와 이전 노드를 가리..

비동기 클라이언트 수신 SseEmitter 사용법과 어노테이션 끄적

private Map emitterMap = new HashMap();public Optional get(Integer userId) { // userId에 해당하는 SseEmitter를 emitterMap에서 가져옴 SseEmitter result = emitterMap.get(getKey(userId)); // 가져온 결과를 로그에 기록 log.info("Get Emitter from Redis {}", result); // 결과를 Optional로 감싸서 반환 return Optional.ofNullable(result);}private String getKey(Integer userId) { return "emitter:UID:" + us..

성장욕구와 기부의 보람 [항해 99 잔디기부 캠페인]

항해 99에서 잔디 기부 캠페인을 해서 잔디 기부를 했다.개발자 커리어 개척 캠프 항해99 | 잔디 기부 캠페인 https://git-wrapped.com/profiles/MyoungSoo7 GitHub Wrapped 2024 - Your Coding Year in ReviewLike Spotify Wrapped, but for your GitHub activity! See your top languages, commit streaks, most productive days, and more in an engaging story format. Get your 2024 coding year in review now.git-wrapped.com 항해 99에 잔디를 기부하면서 내 git을 재미로 되돌아 볼수..

스프링부트 3.x 연구

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes Spring Boot 3.0 Release NotesSpring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss. - spring-projects/spring-bootgithub.com v3.0자바17지원 , Graal 22.3이상(상당한 메모리 및 시작 성능개선) , Native Build Tools Plugin 0.9.17 이상 필요, 스프링 시큐리티 6.0, 스프링인터그레이션 6.0, 그래프ql 1.1 , ..

스프링부트 2.x 연구

v2.0https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes Spring Boot 2.0 Release NotesSpring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss. - spring-projects/spring-bootgithub.com 자바8 이상, 톰캣 8.5 , 플라이웨이5, 하이버네이트 5.2, 타임리프 3 , 스프링웹플럭스(비차단 반응형대안), 그래들4.x이상, 코틀린1.2.x 지원, 속성으로 redis기본값구성, 애니메이션 gif배너지원 http..

스프링부트 버전 1.x 대 연구

v1.1메이븐을 사용하여 실행, 타임리프, JSP  지원, 지표 및 엔드포인트 , Flyway 로 이제 데이터베이스 마이그레이션에 대한 자동구성제공v1.2이메일 지원, 배너속성( ${}) 지원, 잭슨 커스터마이징 , JNDI( datasource 및 JMS빈 모두조회) v1.3스프링4.2이상이 필요, 스프링시큐리티4.0 이상, 라이브리로드 지원, 캐시자동구성 지원, 세션테이터 저장(server.session.store-dir) , 고급 http 세션구성(server.session.*) , 엔드포인트( /logfile , /flyway, /liquibase 추가 및 CORS 지원) , .env 지원v1.4하이버네이트5.0이상 , 서버헤더( 속성이 설정되지 않은면 응답헤더는 설정안됨) , 스프링4.3이상 ,..

스프링을 적용한다는건...

[요구사항]- 해외직구를 위한 원화 결제 준비 기능 개발- 주문번호, 외국통화종료, 외국통화기준 결제 금액1. 기본로직 환율 가져와서, 환율 값 계산하고, 환전된 원의 유효기간을 구한다.여기서 url에서 가져오는 환율정보를 가져오는 기술적 로직과업무적로직은 향후 추가 될 수 있다. 그래서 아래와 같이 구조 개편을 한다.2. 인터페이스 객체지향 의존성역전원칙 적용 ( Object Factory - IOC/DI도 적용) PaymentService 에 ExRateProvider를 구현하고 환율 구하는 부분을 클래스로 따로 뺀다. 이렇게 하면 환율 적용하는 방식의 변동에 유연하게 대응할 수 있다. (환율 수수료 무료 등 정책에 유연한 대응)  3. 객체지향설계 원칙중 개방폐쇄원칙을 적용해서 변하는 부분과 변하지..

IT엔지니어를 위한 AWS운영의 기본과 노하우 정리

[1] AWS 운영 기초AWS 시스0템 운영에는 계정 운영, 로그 운영, 모니터링, 패치 적용, 백업과 복원 운영, 보안과 통제, 감사 준비, 비용최적화의 8가지가 있다.온프레미스에서 클라우드로 가는 건 장비 운영 및 유지보수가 불필요하고 온디맨드 셀프서비스(elastic, 필요할 때마다 자원요청- 서버,스토리지,네트워크)와 신속한 구축 및 쓴만큼 지불하기만 하면 되기 때문이다. 그리고 스케일업과 다운이 쉽기 때문이다. 그리고 인프라운영에 있어서 aws와 공동으로 책임을 지기 때문에 위험 분산이 된다.잘설계된 아키텍처는 운영우수성, 보안, 안정성, 성능효율성, 비용최적화, 지속가능성 등을 만족한다. [2] AWS 입문( VPC , EC2 , EBS, RDS  , ELB)1) VPC : AWS 시스템의 기..

검색엔진과 챗GPT 동시에 검색하기

https://spartacodingclub.kr/blog/chatgpt-extensionprogramme 초보자도 사용할 수 있는 ChatGPT 크롬 확장 프로그램 5가지ChatGPT, 좀 더 똑똑하게 사용할 수는 없을까요? 생산성을 200% 높여주는 크롬 확장 프로그램 5가지를 소개합니다.spartacodingclub.kr챗GPT를 크롬확장으로 사용하는거야.. gpt 매니아라면 다 아는 것이고MaxAI.me: 검색엔진과 챗GPT 동시에 검색하기이 동시 검색이 상당히 매력적이죠~! ㅎㅎㅎ다만 유료라는 것..Sider: 검색 엔진과 AI 챗봇 답변 동시에 비교하기 https://mediabrain.news/3835/ GPT-4o 출시! ChatGPT의 혁신적인 기술 업데이트 | 미디어브레인 뉴스룸GPT-..

인텔리제이 오랜만에 복습~! 알짜 사용~!

https://www.youtube.com/watch?v=0HQkGMJOxwo 자 인텔리제이~! 뭐든지 단축키를 잘써야 도구 활용도가 높아진다.~!이전에 알았지만 다시한번 정리해보자 3년전 영상이네요ㅎㅎㅎㅎ  4년차의 학습법을 한번 들어봅시다.ㅎㅎㅎ 1. ALT + Insert :  Generate~!  이거는 뭐 그냥 잘 쓰던거에요~!2. Ctrl + Shift + I : 코드 구현부 즉시보기이거는 써본적이 없는데... 코드 작성하면서 위라래 쓰는 거는... 스타크래프트식 부대지정이 가능해서... 그거 활용하는데...3. Ctrl + Alt +V : 변수 자동 완성흠.. 변수는 제가 직접 작성하는 편이라... AI가 제안해주기도 하지만... 그래도 이런게 있다는 것은 알아두는 것은 좋은듯 합니다.4. ..