4차산업혁명의 일꾼 323

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. ..

인텔리제이 젯브레인 - AI Assistant~!와 vscode보다 편리한 fleet

https://www.youtube.com/watch?v=-NnYtfzO7qU AI 코파일럿이 자동완성으로 상당히 쓸만했다.https://www.youtube.com/watch?v=R-lIeSR8-hE자 여기서 추천해줬듯이ㅎㅎㅎㅎ 그러나.. 대용량 학습으로 인해 대용량 학습과는 별개로..  AI Assistant는 효과가 있나? 방통대를 졸업하며 드디어 개인 계정을 갱신하면서  AI 기능도 1년 같이 구독했다. 인텔리제이 모든 기구 쓰는거.. 파이참까지 하니 40만 가량이 나온다... 그만한 가치가 있나 한번보자~!음... 너무 질렀나... 그래도 이런 AI 활용기술을 배우는 것은 중요한 것 같다.1. 리팩토링 분야 [AI action] 어떻게 변경해야 되는지 코드에서 바로 물어볼수 있다.2. [AI C..

JPA 간단정리3

김영한님의 자바ORM 표준 JPA 프로그래밍책으로 공부를 한다. 책으로 공부하는 것도 좋은듯하다. 스프링데이터 예제 프로젝트로 배우는 전자정부 표준데이터베이스 프레임워크~! jpa는 CRUD를 생성해주므로 생산적이다. 객체 설계중심으로 db와 연동가능하다. jpa는 상속,연관관계,객첵그래프탐색, 패러다임의 불일치 문제를 해결해준다. 객체지향을 통한 성능최적화를 할 수 있으나 잘 못 사용하면 n+1문제가 나타난다. JPA는 통계쿼리 같이 복잡한 쿼리보다는 실시간 처리용 쿼리에 더 최적화 되어 있다.김영한님 강의도 있지만... 책으로 하는게 편하다.https://www.youtube.com/watch?v=ZgtvcyH58ys jpql은 엔터티 객체를 대상으로 쿼리한다.(entity 클래스와 필드) jpql ..