전체 글 129

책 읽는 방법

오랜만에 독서를 통해 새로운 개념을 학습하려고 하니, 어떻게 접근하고 학습하였는지 기억도 잘 안나고, 체계가 잡혀있지 않은 상태로 읽게되는 것 같다.이 문제를 해결? 하기 위해, 가볍게 "책 읽는 방법" 이라는 주제로 생각을 정리한 글을 게시한다.1. 목차 읽기알려주는 내용 파악: 목차를 먼저 읽어 책이 전달하려는 핵심 메시지와 다루는 주제를 명확히 한다.주제 분석: 각 목차 항목을 통해 책의 전반적인 내용과 범위를 이해한다.예상 결과 도출: 목차를 기반으로 책을 읽으면서 얻을 수 있는 인사이트나 배움의 방향을 미리 예측한다.2. 용어 추출핵심 단어 강조: 책을 처음 읽을 때 주요 개념이나 용어에 형광펜을 사용해 강조한다.부제 작성하기: 각 문단별 부제를 작성함으로써, 해당 문단이 설명하고자 하는 개념과..

조금씩 차근차근 - 25년 3월 3주차 회고

배움에 끝은 없다.취준을 위한 공부를 피해라.불안을 동기로 하는 공부는 정신을 갉아먹는다.지속가능한 학습을 수행해라.남들보다 뒤쳐질 것 같더라도, 무시당할 것 같더라도, 나는 정답을 알고 있다.결국엔, 내가 옳고, 이 방식이 옳다.타인의 시선을 의식하지 마라.나에게 가장 부족한 부분을 인식하고, 현재 내가 필요한 부분의 학습에 집중해라.나 자신을 인정하고, 겸허히 받아들이고, 기초를 탄탄히 다져놔야 뭐든 할 수 있다.순수하게, 나를 위해서 가끔 돌아가보고, 실수해보는 공부를 할 여유를 가져라.미래에 대한 불안 없이, 막연히 즐기며 할 수 있는 공부방향성에 대한 불안이 없는 공부순수하게 배움의 즐거움에 빠져있을 수 있는 공부난 패러다임 시프팅을 수행하기엔, 너무 아깝다.이미, 내가 좋아하는 공부를 즐기는 ..

개인적 공간 2025.03.21

기아 면접 KPT 회고 - 25년 3월 2주차 회고

잘한 것 - 유지해야 함"회복 탄력성"매우 강한 스트레스 관리 능력.성장에 진심인 태도.강렬한 논리적 피드백에 대해, 압박받지 않는 것.내 감정이 아닌, 문제의 해결에 집중하는 것.피드백 상황에서 유연하게 대처함.피드백 상황에서, 어떻게 해야 할 지 나름대로 생각을 해보고 침착하게 답변함.갈등 해결 능력"글로 의견이 적히면, 불필요한 대화의 반복을 제거할 수 있다.""같은 말을 반복하면 감정이 담긴다는 것을 파악하고, 글로 감정을 정리해서 표현했다.”못한 것 - 개선해야 함소통 능력 - 내게 들어온 질문, 피드백에 대한 대응너무 많은 것을 혼자서 생각하려 하지 말고, 동료와 의견을 나누어 정답을 찾아가려는 의지를 보여라.피드백을 들었다고, 당장 그걸 해결하려는 건 좋은게 아니다!정확히 그 피드백이 무슨 ..

개인적 공간 2025.03.14

상속 관계 매핑

상속 관계 매핑은 엔티티 간의 상속 관계를 데이터베이스에 표현할 필요가 있을 때 사용하는 모델링 기법이다. 이는 객체지향의 상속 개념과 유사하게, 엔티티가 is-a 관계를 가지거나 부모 타입으로 일관되게 관리되어야 할 때 유용하다. RDBMS는 상속 개념을 직접 지원하지 않으므로 Super-Type Sub-Type Relationship이라는 기법으로 이를 대체한다.상속관계 매핑이란?필요성엔티티 간 상속 관계가 필요한 경우가 존재한다.is-a 관계: 특정 엔티티가 다른 엔티티의 특성을 물려받을 때부모 타입으로 일관된 관리: 여러 엔티티를 공통 부모 타입으로 관리해야 할 경우 - 부모 타입으로 다형적 쿼리(ex: 부모 타입으로 전부 조회)를 지원해야 할 경우대체 기법RDBMS는 상속 개념이 없으므로, 슈퍼..

WEB BE Repo/JPA 2025.03.11

도메인 주도 설계(DDD)

1. 개념 및 원칙도메인 주도 설계(Domain-Driven Design)는 소프트웨어의 핵심 비즈니스 도메인에 집중하여 복잡한 도메인 지식을 코드의 도메인 모델로 표현하고 발전시키는 설계 철학이다. 복잡한 비즈니스 로직을 도메인 모델(객체 모델)로 추상화함으로써 비즈니스 현실과 코드 간의 간극을 줄인다. 이를 위해 도메인 전문가와 개발자는 공유하는 보편 언어(Ubiquitous Language)를 구축하여 요구사항 분석부터 설계, 구현까지 동일한 언어로 소통한다. 이 과정에서 모델은 지속적으로 정제되고 리팩토링되어, 요구사항의 의도를 코드에 정확히 반영하게 된다.DDD가 필요한 이유는 복잡한 도메인 문제를 다루는 소프트웨어에서 두드러진다. 전통적인 데이터 중심 설계나, 도메인 객체가 단순히 데이터 저장..

Docker 개념과 기본 지식

1. Docker의 개념: 컨테이너 기반 가상화 vs. VMVM과 컨테이너의 구조를 비교하면, VM은 하이퍼바이저 위에서 각각 게스트 OS를 포함하는 반면, 컨테이너는 Docker와 같은 컨테이너 엔진 위에서 호스트 OS의 커널을 공유하며 애플리케이션과 라이브러리만 포함한다.컨테이너는 운영체제 수준에서 격리된 가상화 환경을 제공하며, 별도의 게스트 OS를 포함하지 않기 때문에 VM보다 훨씬 경량이고 빠르게 실행된다.또한, 컨테이너는 프로세스 격리를 통해 애플리케이션을 다른 환경과 분리함으로써 시스템 간 간섭을 최소화한다.Docker는 이러한 컨테이너 기술을 활용해 애플리케이션을 패키징하고 배포하는 플랫폼이다. Docker 컨테이너의 주요 이점은 다음과 같다.경량성 & 효율성: 시작 속도가 수 초 이내로 ..

백엔드 개발자를 위한 서버, 프록시 서버, 로드 밸런싱 면접 질답

웹 서버와 애플리케이션 서버의 차이점은 무엇인가요?Web Server정적 파일(HTML, CSS, JS, 이미지 등) 처리에 최적화된 서버요청을 받아 즉시 정적 자원을 반환하기 때문에 단순하고 빠른 처리를 제공클라이언트의 요청이 복잡하지 않을수록 웹 서버만으로도 충분히 대응 가능함WAS(Application Server)비즈니스 로직을 처리하고, 동적 콘텐츠를 생성하는 서버요청에 따라 데이터베이스 연동, 세션 관리 등 다양한 기능을 수행복잡하고 동적인 로직이 필요한 경우, WAS를 통해 효율적으로 구현 가능함서버 확장 방식인 수직적 확장(Scale-up)과 수평적 확장(Scale-out)의 차이점과 각각의 장단점은 무엇인가요?Scale-up(수직적 확장)서버 자체의 성능(CPU, 메모리 등)을 높여 처리..

CI/CD 와 무중단 배포

CI/CD지속적 통합 (CI)정의개발자들이 작업한 코드를 중앙 저장소에 자주 통합하는 과정이다. 이를 통해 각자의 코드가 서로 잘 어우러지는지 지속적으로 확인할 수 있다.주요 효과충돌 및 오류 조기 발견: 통합 시 발생할 수 있는 충돌이나 오류를 신속하게 파악하고 해결할 수 있다.코드 품질 향상: 서로의 코드를 검토하면서 품질을 유지하고 개선할 수 있다.지속적 배포 (CD)정의CI를 통해 통합된 코드를 자동화된 테스트와 빌드 과정을 거쳐 실제 운영 환경에 배포하는 과정이다.주요 효과신속한 사용자 전달: 사용자에게 새로운 기능과 개선 사항을 빠르게 제공할 수 있다.배포 프로세스 자동화: 수동 개입 없이 배포가 진행되어 인적 실수를 줄이고 안정성을 확보한다.두 가지 개념을 함께 활용하면 개발 프로세스 전반에..

스레드 풀 생성 전략과 작업 거절 정책

스레드 풀은 시스템 자원을 효율적으로 사용하고, 안정적인 작업 처리를 위해 필수적인 요소다. 다양한 상황에 맞춰 적절한 풀 생성 전략과 작업 거절 정책을 설정하면, 트래픽 급증 시에도 시스템이 예측 가능한 성능을 유지할 수 있다.Executor 전략Executor 스레드 풀 관리스레드 관리 속성corePoolSize기본적으로 유지되는 스레드 수다. 이 수만큼의 스레드를 초기화해두고, 작업이 들어오면 먼저 활용한다.maximumPoolSize생성될 수 있는 스레드의 최대치다. corePoolSize 이상의 스레드는 필요한 경우에만 만들고, 더 이상 새 스레드를 만들 수 없으면 작업을 거절한다.keepAliveTime, timeUnitcorePoolSize를 초과해 생성된 스레드(초과 스레드)가 대기할 수 ..

WEB BE Repo/JAVA 2025.03.09

스프링 + 비동기 프로그래밍

비동기 프로그래밍은 시스템의 처리 효율을 높이고 블로킹을 최소화하기 위한 핵심 기법이다. 동기 호출로 인한 블로킹 문제를 해결하기 위해 이벤트 드리븐 아키텍처와 같은 패러다임이 채택되며, 이를 통해 처리 흐름을 비동기로 전환하고, 데이터 흐름 제어(backpressure) 및 에러 처리를 체계적으로 관리할 수 있다.이벤트 드리븐 아키텍처이벤트 드리븐 아키텍처란, 상태의 변화가 직접적인 메소드 호출로 이루어지지 않고, 자신의 상태 변화를 외부에 알리는데 중점을 두는 아키텍처 형태를 의미한다.I/O 처리와 zip 요청I/O 작업 시 상류 스트림에서 zip 요청을 받는다. 내부에서 동기 호출이 이루어지면 블로킹이 발생하므로, 비동기 요청을 일관되게 사용하는 것이 바람직하다.이벤트와 콜백 메커니즘이벤트나 콜백을..

동기/비동기 관점에서 바라본 Java IO vs Java NIO

동기/비동기 통신 관련은 해당 글을 참고해주세요. 봉쇄/비봉쇄(Blocking/Non-Blocking), 동기/비동기(Sync/Async), 그리고 이벤트 드리븐 아키텍처통신(파일 I/O, 네트워크I/O) 개념에서 비동기와 논블로킹 개념은 매우 혼동하기 쉬운 주제이다.네트워크를 정확히 모른다는 것은 장님이 코끼리 만지는 격이니, 이번기회에 제대로 정리하고 넘go-gradually.tistory.com 동기 및 비동기 프로그래밍 방식의 관점에서 Java IO와 Java NIO를 살펴보면, 두 기술은 입출력 처리 방식과 구조적인 접근에서 본질적인 차이를 보인다. Java IO는 전통적인 스트림 기반 방식으로 설계되었으며, 모든 입출력 작업이 완료될 때까지 호출 스레드가 대기하는 블로킹 방식을 채택한다. 반..

"프로그래밍 패러다임" 이란?

프로그래밍 패러다임은 소프트웨어 설계와 구현 방법론을 구체화하는 개념이며, 각 패러다임은 문제 해결 접근 방식에 따른 특징과 이점을 갖는다. 다양한 패러다임이 존재하며, 아래와 같이 체계적으로 분류할 수 있다.명령형 프로그래밍 (Imperative Programming)컴퓨터에게 수행해야 할 작업을 명령어의 순차적 집합으로 지시하는 방식이다.절차적 프로그래밍 (Procedural Programming): 명령형 프로그래밍의 한 갈래로, 작업을 함수나 서브루틴 단위로 나누어 순차적으로 수행한다. 예를 들어, C 언어와 Pascal이 이에 해당한다.구조적 프로그래밍 (Structured Programming): 코드의 흐름을 제어 구조(조건문, 반복문 등)를 통해 명확하게 구성함으로써 가독성과 유지보수를 향..

CAP 이론, 그리고 BASE 원칙이란?

분산 시스템은 여러 컴퓨터 노드가 하나의 통합된 시스템처럼 동작하도록 구성된 환경이다. 하지만, 네트워크 지연이나 일부 노드의 장애 등 다양한 문제에 직면할 수 있기에, 시스템 설계자는 이러한 제약 조건을 고려한 원칙에 따라 트레이드오프를 명확히 이해하고 선택해야 한다.CAP 이론CAP 이론은 분산 시스템 설계 시 고려해야 할 세 가지 핵심 요소 간의 상호작용을 설명한다.Consistency (일관성)모든 노드가 동일한 데이터를 동시에 반영하여, 사용자에게 항상 최신의 일관된 정보를 제공하는 상태를 유지한다.Availability (가용성)시스템이 모든 요청에 대해 항상 응답할 수 있도록 보장한다. 일부 노드에 장애가 발생하더라도 전체 시스템은 계속 운영된다.Partition Tolerance (분할 허..

백엔드 개발자가 알아야 할 소프트웨어 공학 관련 면접 질문

1. 마이크로서비스 아키텍처(MSA) vs 모놀리식 아키텍처마이크로서비스 아키텍처 (MSA)마이크로서비스 아키텍처는 애플리케이션을 독립적인 서비스 단위로 분리하여 운영하는 방식을 의미한다.장점독립적 배포 및 확장: 각 서비스는 별도로 배포 및 확장이 가능하여, 필요에 따라 개별적으로 조정할 수 있다.장애 격리: 하나의 서비스에 장애가 발생해도 전체 시스템에 미치는 영향을 최소화할 수 있다.기술 선택의 유연성: 서비스마다 최적의 기술 스택을 선택할 수 있어 개발 환경에 유연하게 대응할 수 있다.단점운영 및 모니터링 부담 증가: 서비스 수가 늘어남에 따라 운영, 모니터링 및 로깅 체계가 복잡해진다.테스트 난이도 상승: 분산 환경에서의 통합 테스트 및 서비스 간 상호작용 테스트가 어려워진다.구현 및 운영 복잡..

백엔드 개발자가 알아야 할 기초 보안 - 인증, 인가, OAuth, OpenID Connect

1. 인증과 인가인증 (Authentication)정의: 사용자가 주장하는 신원을 확인하는 절차이다.목적: 사용자로부터 제공된 정보를 바탕으로, 실제로 해당 사용자인지 검증한다.인가 (Authorization)정의: 인증된 사용자가 특정 리소스에 접근할 권한이 있는지를 확인하는 절차이다.목적: 인증을 마친 사용자에게 적절한 접근 권한을 부여하여 시스템 자원의 보안을 유지한다.2. 암호화 방식 및 특징대칭 키 암호화원리: 암호화와 복호화에 동일한 키를 사용한다.장점: 연산 속도가 빠르며 대용량 데이터 암호화에 효율적이다.단점: 키의 분배와 관리가 취약하여, 키 노출 시 전체 보안에 심각한 영향을 미친다.공개 키 암호화원리: 서로 상보적인 공개 키와 개인 키를 사용하여 암호화와 복호화를 수행한다.장점: 키 ..

OSI 7 Layer, TCP/IP 4 Layer, 그리고 HTTP와 HTTPS

1. 계층 모델1.1 OSI 7계층OSI 7계층은 네트워크 통신의 각 기능을 계층별로 분리하여 정의한 모델이다. 각 계층은 아래와 같이 역할을 수행한다.물리 계층 실제 전송 매체를 통해 비트 단위의 데이터 전송을 담당한다.전기 신호, 광 신호, 무선 주파수 등을 사용하여 데이터 전송이 이루어진다.데이터 링크 계층 물리 계층에서 전송된 데이터를 프레임 단위로 관리하며, 오류 검출 및 수정 기능을 수행한다.MAC 주소 등을 이용한 노드 간의 통신을 지원한다.네트워크 계층 데이터를 패킷 단위로 관리하며, 최적의 경로를 선택해 목적지까지 전달하는 라우팅 기능을 담당한다.IP 주소를 사용하여 패킷의 출발지와 도착지를 지정한다.전송 계층 종단 간 데이터 전송의 신뢰성과 순서를 보장하기 위한 연결 설정, 데이..