| En

웹 인증 Cookie, Session, JWT

웹 인증(Web Authentication)은 HTTP 프로토콜의 무상태(Stateless) 특성 때문에 발생하는 사용자 식별 문제를 해결하기 위한 핵심 메커니즘이다. 1994년 Netscape Communications의 Lou Montulli가 쿠키를 발명한 이후 인증 방식은 세션 기반 인증과 토큰 기반 인증으로 발전해왔고, 오늘날에는 보안성과 확장성을 함께 고려해 JWT와 Refresh Token을 조합한 하이브리드 방식이 널리 사용된다. 인증과 인가의 개념 인증(Authentication)과 인가(Authorization)의 차이 인증(Authentication)은 “당신이 누구인가?“를 확인하는 과정으로 사용자의 신원을 검증하는 것이며, 인가(Authorization)는 “당신이 무엇을 할 수 있는가?“를 결정하는 과정으로 인증된 사용자에게 특정 리소스에 대한 접근 권한을 부여하는 것이다. 인증이 먼저 수행되어야 인가가 가능하며, 두 개념은 명확히 구분되어야 한다. ...

2024년 6월 2일 · 7 분 · 1470 단어 · In-Jun

백준 27440번 1로 만들기 3 풀이

백준 27440번 “1로 만들기 3"은 10^18 범위의 매우 큰 정수를 세 가지 연산(3으로 나누기, 2로 나누기, 1 빼기)으로 1로 만들 때 필요한 최소 연산 횟수를 구하는 문제다. 입력 범위가 10^18에 달하므로 일반적인 동적 프로그래밍 접근법(O(N) 시간, O(N) 공간)으로는 해결할 수 없다. 대신 재귀적 점화식과 맵 기반 메모이제이션을 활용해 O(log² n) 시간 복잡도로 해결해야 한다. 문제 설명 백준 27440번 - 1로 만들기 3 정수 N이 주어졌을 때, 세 가지 연산을 적절히 사용하여 1을 만드는 데 필요한 최소 연산 횟수를 구하는 문제다. ...

2024년 5월 29일 · 6 분 · 1149 단어 · In-Jun

Git 커밋 타임스탬프 조정

Git 타임스탬프의 구조 Git의 타임스탬프 시스템은 2005년 Linus Torvalds가 Git을 만들 때부터 두 가지 시간을 별도로 기록하도록 구성되었다. 이는 Linux 커널 개발의 특성상 패치를 작성한 시간과 실제로 커밋된 시간이 다를 수 있기 때문이다. AuthorDate와 CommitDate Git 커밋은 두 가지 타임스탬프를 가진다. AuthorDate는 코드를 처음 작성한 시간, 즉 원저자가 변경을 만든 시간을 나타내며, git commit --date 옵션이나 GIT_AUTHOR_DATE 환경변수로 설정된다. CommitDate는 커밋이 실제로 저장소에 기록된 시간을 나타내며, rebase, cherry-pick, amend 등으로 커밋이 재생성될 때마다 갱신되고, GIT_COMMITTER_DATE 환경변수로 설정할 수 있다. ...

2024년 5월 25일 · 4 분 · 790 단어 · In-Jun

Spring Boot 개발 모범 사례

계층형 아키텍처의 역사와 배경 계층형 아키텍처(Layered Architecture)는 1990년대 엔터프라이즈 애플리케이션 개발에서 관심사의 분리(Separation of Concerns) 원칙을 실현하기 위해 정립된 설계 패턴으로, Martin Fowler의 “Patterns of Enterprise Application Architecture”(2002)에서 체계화되었다. 전통적인 3계층 아키텍처는 프레젠테이션 계층(Presentation Layer), 비즈니스 로직 계층(Business Logic Layer), 데이터 접근 계층(Data Access Layer)으로 구성되며, Spring Framework는 이 구조를 @Controller, @Service, @Repository 어노테이션으로 자연스럽게 구현할 수 있게 하여 자바 엔터프라이즈 개발의 사실상 표준이 되었다. Spring Boot에서 계층형 아키텍처를 적용하면 각 계층이 인접한 계층과만 통신하도록 제한하여 결합도를 낮추고, 각 계층을 독립적으로 테스트하고 교체할 수 있게 되며, 새로운 개발자가 코드베이스를 이해하기 쉬워진다. 일반적으로 Controller는 HTTP 요청을 받아 Service를 호출하고, Service는 비즈니스 로직을 수행하며 Repository를 통해 데이터에 접근하고, Repository는 데이터베이스와 통신하여 CRUD 연산을 수행한다. ...

2024년 5월 25일 · 5 분 · 1014 단어 · In-Jun

ERD 엔티티 관계 다이어그램

ERD의 역사와 탄생 배경 ERD(Entity Relationship Diagram)는 데이터베이스 구조를 시각적으로 표현한 다이어그램으로, 테이블 간 관계를 한눈에 보여 주어 설계와 구조를 이해하기 쉽게 돕는다. Entity-Relationship 모델링은 Peter Chen이 데이터베이스 설계를 위해 개발했으며, 1976년 논문으로 발표되었다. 그는 MIT Sloan School of Management에서 조교수로 재직하던 시기에 “The Entity-Relationship Model: Toward a Unified View of Data"라는 논문을 발표했고, 이 논문은 ACM Transactions on Database Systems에 게재되어 오늘날까지도 자주 인용된다. 현재 미국 피츠버그의 카네기멜런대학교 교수인 Peter Chen(Peter Pin-Shan Chen)은 1970년대에 데이터베이스 설계를 위한 ER 모델링을 정립한 인물로 평가받는다. Chen의 작업 이전에도 Charles Bachman과 A.P.G. Brown이 유사한 연구를 진행했으며, Bachman은 Data Structure Diagram의 한 유형인 Bachman Diagram을 개발했다. ...

2024년 5월 25일 · 10 분 · 2010 단어 · In-Jun

HTTP 메서드 이해하기 GET, POST, PUT, PATCH, DELETE 등

HTTP(HyperText Transfer Protocol) 메서드는 클라이언트와 서버가 어떤 방식으로 통신할지 정의하는 핵심 요소다. 1991년 Tim Berners-Lee가 World Wide Web을 고안한 이후 HTTP는 지속적으로 발전해왔고, HTTP/1.1 표준(RFC 7231)에서는 GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS, CONNECT, TRACE의 9가지 표준 메서드를 정의한다. 각 메서드는 멱등성(Idempotency)과 안전성(Safety)이라는 중요한 특성을 가지며, RESTful API 설계와 웹 애플리케이션 개발에서 핵심적인 역할을 한다. HTTP의 역사와 메서드의 발전 HTTP(HyperText Transfer Protocol)란? 웹에서 클라이언트와 서버 간에 하이퍼텍스트 문서를 전송하기 위한 응용 계층 프로토콜로, 요청-응답 모델을 기반으로 동작하며 각 요청에 사용되는 메서드가 수행할 작업의 의미를 정의한다. ...

2024년 5월 25일 · 12 분 · 2374 단어 · In-Jun

Call by Value와 Call by Reference

함수 인자 전달 방식(Parameter Passing Mechanism)은 함수를 호출할 때 인자를 어떻게 넘길지 정하는 개념이다. 이 방식은 코드의 동작 방식과 성능에 직접적인 영향을 주기 때문에 프로그래밍에서 매우 중요하다. 대표적인 방식인 Call by Value와 Call by Reference의 차이를 이해하면 더 효율적이고 안전한 코드를 작성할 수 있다. 함수 인자 전달 방식 개요 함수 인자 전달 방식이란? 함수 인자 전달 방식(Parameter Passing Mechanism)은 함수 호출 시 실인자(Actual Parameter)의 값이나 참조를 형식 매개변수(Formal Parameter)에 어떻게 전달하는지를 정의하는 메커니즘으로, Call by Value, Call by Reference, Call by Name, Call by Need 등 다양한 방식이 존재한다. ...

2024년 5월 16일 · 9 분 · 1882 단어 · In-Jun

Spring Boot 시작하기

Spring Framework의 역사와 등장 배경 Spring Framework는 2002년 Rod Johnson이 그의 저서 “Expert One-on-One J2EE Design and Development"에서 제시한 아이디어를 바탕으로, 2003년에 처음 공개된 자바 기반 엔터프라이즈 애플리케이션 프레임워크다. 당시 복잡하고 무거웠던 EJB(Enterprise JavaBeans) 2.x는 컨테이너에 강하게 결합되어 단위 테스트가 어렵고 XML 설정이 방대해 개발 생산성이 낮았다. Spring은 이에 대한 대안으로 등장해 POJO(Plain Old Java Object) 기반의 경량 개발 방식을 제시했고, IoC(Inversion of Control)와 DI(Dependency Injection)를 핵심으로 객체 간 결합도를 낮추고 테스트 용이성을 높였다. ...

2024년 5월 16일 · 5 분 · 990 단어 · In-Jun

개발자를 위한 리눅스 운영체제

리눅스는 1991년 Linus Torvalds가 커널을 개발한 이후 30년 넘게 발전해온 오픈소스 운영체제다. 지금은 전 세계 서버의 90% 이상에서 사용되고, 안드로이드 스마트폰과 임베디드 시스템, 슈퍼컴퓨터까지 폭넓게 쓰인다. 개발자에게는 서버 환경과의 높은 일치성, 강력한 CLI 도구, 컨테이너 기술과의 좋은 궁합 덕분에 특히 실용적인 개발 플랫폼으로 평가받는다. 리눅스의 역사와 철학 Unix에서 Linux로의 진화 리눅스의 뿌리는 1969년 AT&T Bell Labs에서 Ken Thompson과 Dennis Ritchie가 개발한 Unix로 거슬러 올라가며, Unix의 설계 철학인 “하나의 작업을 잘 수행하는 작은 프로그램들의 조합"은 오늘날 리눅스와 현대 소프트웨어 엔지니어링의 핵심 원칙이 되었다. ...

2024년 5월 16일 · 6 분 · 1226 단어 · In-Jun

Java 프로그래밍 입문

Java는 1995년 Sun Microsystems에서 James Gosling이 이끄는 팀에 의해 개발된 객체지향 프로그래밍 언어이다. “Write Once, Run Anywhere(한 번 작성하면 어디서나 실행)“라는 슬로건 아래 플랫폼 독립적인 실행 환경을 제공하며, 2024년 현재 TIOBE 프로그래밍 언어 순위에서 꾸준히 상위권을 유지하고 있다. 기업용 애플리케이션, 안드로이드 앱, 빅데이터 처리, 웹 서비스 등 다양한 분야에서 널리 사용되며, 강력한 타입 시스템과 풍부한 표준 라이브러리, 활발한 커뮤니티를 바탕으로 지속적으로 발전하고 있다. Java 개요 Java란? Java는 Sun Microsystems(현재 Oracle)에서 개발한 범용 객체지향 프로그래밍 언어로, JVM(Java Virtual Machine) 위에서 실행되어 플랫폼 독립성을 제공하며, 강력한 타입 검사, 자동 메모리 관리(가비지 컬렉션), 멀티스레딩 지원 등의 특징을 가진다. ...

2024년 5월 16일 · 10 분 · 2009 단어 · In-Jun
[email protected]