| En

웹 인증 Cookie, Session, JWT

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

2024년 6월 2일 · 8 분 · 1494 단어 · 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 분 · 1196 단어 · 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 분 · 776 단어 · 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에 게재되었으며 오늘날까지도 관련성을 유지하고 있다. ...

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

HTTP 메서드 GET POST PUT DELETE

HTTP(HyperText Transfer Protocol) 메서드는 1991년 Tim Berners-Lee가 World Wide Web을 고안하면서 처음 등장한 이후 지속적으로 발전해온 클라이언트-서버 간 통신 규약의 핵심 요소로, 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 분 · 2360 단어 · In-Jun

Call by Value와 Call by Reference

함수 인자 전달 방식(Parameter Passing Mechanism)은 프로그래밍 언어에서 함수를 호출할 때 인자를 어떻게 전달하는지를 결정하는 핵심 메커니즘으로, 1960년대 초기 프로그래밍 언어 설계 시기부터 연구되어 왔으며, 현대 프로그래밍에서도 코드의 동작 방식과 성능에 직접적인 영향을 미치는 중요한 개념이다. 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 분 · 1871 단어 · 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의 대안으로 등장하여 POJO(Plain Old Java Object) 기반의 경량 개발 방식을 제시했다. EJB 2.x는 컨테이너에 강하게 결합되어 있어 단위 테스트가 어렵고 XML 설정이 방대했으며 개발 생산성이 낮았는데, Spring은 IoC(Inversion of Control)와 DI(Dependency Injection) 개념을 핵심으로 하여 객체 간의 결합도를 낮추고 테스트 용이성을 높였다. ...

2024년 5월 16일 · 5 분 · 969 단어 · 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 분 · 1223 단어 · In-Jun

Java 프로그래밍 입문

Java는 1995년 Sun Microsystems에서 James Gosling이 이끄는 팀에 의해 개발된 객체지향 프로그래밍 언어로, “Write Once, Run Anywhere(한 번 작성하면 어디서나 실행)“라는 슬로건 아래 플랫폼 독립적인 실행 환경을 제공하며, 2024년 현재 TIOBE 프로그래밍 언어 순위에서 꾸준히 상위권을 유지하고 있는 세계에서 가장 널리 사용되는 프로그래밍 언어 중 하나이다. 기업용 애플리케이션, 안드로이드 앱, 빅데이터 처리, 웹 서비스 등 다양한 분야에서 핵심 언어로 사용되고 있으며, 강력한 타입 시스템과 풍부한 표준 라이브러리, 그리고 활발한 커뮤니티를 기반으로 지속적으로 발전하고 있다. ...

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