본문 바로가기 메뉴 바로가기

언젠가 꽃이 될 개발자

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

언젠가 꽃이 될 개발자

검색하기 폼
  • 분류 전체보기 (224)
    • 프로그래밍 (52)
      • 자바 (29)
      • 스프링 (4)
      • JPA (9)
      • querydsl (2)
      • html,css (0)
      • database (2)
      • Spring Security (6)
    • 개발 (5)
    • 코딩테스트 (15)
      • 백준 자바 (14)
    • Git (3)
    • 앱개발 (1)
    • 자격증 (39)
      • 정보처리산업기사 (39)
    • 디버깅 (19)
    • 파이썬 (5)
      • 이것이 취업을 위한 코딩 테스트다 (5)
    • 독서 (8)
      • 스프링 부트와 AWS로 구현하는 웹 서비스 (2)
    • http (0)
    • 기타 (5)
    • 해커랭크 챌린지 (53)
    • 일기 (1)
    • 한줄다짐 (0)
    • cs (3)
    • 경험 (1)
    • sql (0)
  • 방명록

프로그래밍 (52)
OTP 기반 2단계 인증 시스템 직접 구현해보기 - 1 시스템 아키텍처 및 3단계 인증 흐름

웹 또는 모바일 서비스를 개발하다 보면, "로그인" 기능은 항상 빠지지 않는 필수 요소이다.하지만 단순히 아이디와 비밀번호만 일치하면 로그인 처리하는 방식은 이제는 보안적으로 너무 약하다.그래서 요즘은 2FA(2단계 인증, 2 Factor Authenticaion), 특히 OTP(일회용 비밀번호) 기반 인증 방식이 많이 사용되는데이번 프로젝트에서는 실제 서비스에서 사용되는 OTP 기반 2단계 인증 흐름을 직접 설계하고 구현해보겠다. ✨ 시리즈 구성1. OTP 기반 2단계 인증 시스템 직접 구현해보기 - 1 시스템 아키텍처 및 3단계 인증 흐름 2. OTP 기반 2단계 인증 시스템 직접 구현해보기 - 2 인증 서버를 구현해보자.3. OTP 기반 2단계 인증 시스템 직접 구현해보기 - 3 비즈니스 논리 서버..

프로그래밍/Spring Security 2025. 5. 24. 19:29
OAuth 2와 SSO의 차이

OAuth 2와 SSO의 차이에 대해 알아보자.(SSO에 대해 궁금하다면 해당 링크를 참고하자.) 둘 다 인증(Authentication)과 인가(Authorization)를 처리하는 기술이지만,목적과 범위, 사용 방식에서 차이가 있다.항목OAuth2SSO목적리소스 접근 권한 위임(Authorization)한 번의 로그인으로 여러 시스템 접근(Authentication)사용 주체제3자 애플리케이션 (클라이언트)사용자 중심인증 처리 여부직접적인 인증 처리 없음 (OpenID Connect 필요)인증 중심예시Google Drive를 통해 다른 앱에서 내 파일 접근 허용회사 인트라넷 로그인 한 번으로 이메일, 결재시스템 자동 로그인 🔐 OAuth2란?권한 위임(Authorization Delegation) ..

프로그래밍/Spring Security 2025. 5. 23. 17:31
SSO란?

(Single Sign-On)란한 번의 로그인으로 여러 시스템 또는 서비스에 접근할 수 있도록 해주는 인증 방식이다. 사용자가 처음 한 번 로그인하면, 이후 별도의 로그인 없이 연동된 다른 서비스들도 자유롭게 이용할 수 있다.예 : Google 계정에 로그인하면 Gmail, YouTube, Google Drive 등 다양한 Google 서비스에 다시 로그인할 필요 없이 바로 접근 가능 🔁 흐름 및 동작 방식1. 사용자가 애플리케이션(A)에 접근 → 로그인 필요2. 사용자가 SSO 서버(인증 서버)에 리디렉션됨3. 사용자 인증 (아이디/비밀번호 입력)4. SSO 서버가 사용자에게 토큰 또는 세션을 발급5. 사용자 브라우저가 이 토큰으로 A에 접근 허용6. 이후 사용자가 애플리케이션 B에 접근하더라도, 이..

프로그래밍/Spring Security 2025. 5. 22. 23:00
[Spring Security] SecurityContext의 Thread-safe 전략

Spring Security를 사용하다 보면 인증된 사용자 정보를 조회할 때 SecurityContextHolder.getContext().getAuthentication()을 자주 사용한다.하지만 이 SecurityContext가 Thread-safe 하지 않기 때문에Spring Security의 내부 동작 원리를 바탕으로 알아보고 멀티스레드 환경 또는 비동기 작업시 어떻게 관리하는지 알아보자. 1. SecurityContext란?Spring Security에서 인증(Authentication) 및 권한(Authorization) 정보를 담고 있는 컨테이너간단히 말해, 로그인한 사용자의 정보를 담고 있는 Thread-local 저장소다.Authentication auth = SecurityContext..

프로그래밍/Spring Security 2025. 5. 20. 12:54
[Spring Security in Action] 모놀리식 아키텍처 vs 마이크로서비스 시스템

모놀리식 아키텍처- 실행 가능한 하나의 아티팩트로 모든 책임을 구현하는 애플리케이션한 애플리케이션이 모든 활용 사례를 충족한다.애플리케이션을 유지 관리하기 쉽게 만들기 위해 책임을 다른 모듈 내에서 구현할 수 있지만 런타임에 한 모듈의 논리를 다른 모듈의 논리와 분리할 수 없다. 일반적으로 확장과 배포 관리를 위한 유연성이 떨어진다. 마이크로서비스 시스템여러 실행 가능한 아티팩트에서 책임을 구현한다.동시에 실행되고 필요할 때 네트워크를 통해 서로 통신하는 여러 애플리케이션으로 구성된 시스템이다확장 유연성은 좋지만 지연 시간, 보안 문제, 네트워크 안정성, 분산 지속성, 배포 관리 등의 어려움이 있따. .

프로그래밍/Spring Security 2025. 5. 20. 07:09
[Spring Security] Spring Security 주요 아키텍처를 알아보자.

Spring Security 주요 아키텍처를 알아보자.(링크 참조 : https://docs.spring.io/spring-security/reference/servlet/authentication/architecture.html) - SpringContextHolder : 스프링 보안이 인증된 사용자에 대한 세부 정보를 저장- SecurityContext : SecurityContextHolder에서 가져오고 현재 인증된 사용자의 인증을 포함함.- Authentication : 사용자가 인증을 위해 제공한 자격 증명 또는 SecurityContext의 현재 사용자를 제공하기위해 AuthenticationManager에 입력할 수 있다. - GrantedAuthority : 인증에 대해 본인에게 부여된..

프로그래밍/Spring Security 2025. 5. 19. 06:55
[JPA] SQL 중심적인 개발의 문제점

지금 시대는 '관계형 데이터베이스(Oracle, MySql)'을 많이 사용한다. 즉, 객체를 관계형 DB에 넣어 관리해야하는데, 여기서 우리는 SQL 굴레에 빠지게 된다. 🤔 그럼 SQL의 문제점은 무엇일까? 1. 무한 반복, 지루한 코드 - crud, 자바 -> 객체, 객체 -> 자바로 무한히 반복해야한다. 결국 관계형 데이터베이스를 사용하면 sql에 의존할 수밖에 없다. 객체와 관계형 데이터베이스의 차이점은 다음과 같다. 1. 상속, 2. 연관관계, 3. 데이터 타입, 4. 데이터 식별 방법 위의 문제를 해결하기 위해서 개발자가 'SQL 매퍼' 역할을 수행해야 한다. 계층형 아키텍처 진정한 의미의 계층 분할이 어렵다. 즉, 객체답게 모델링 할수록 매핑 작업만 늘어난다. 객체를 자바 컬렉션에 저장 하듯..

프로그래밍/스프링 2022. 9. 26. 20:11
[스프링 부트와 AWS로 혼자 구현하는 웹서비스] gitignore 등록하는법

오늘은 springBoot와 github를 연동한 후 gitignore 파일을 생성해 github에 올리기 불필요한 파일들을 관리해보자. .👇👇 그전에 springboot 프로젝트와 github의 연동이 궁금하다면 다음을 참고하자. (링크) [스프링 부트와 AWS로 혼자 구현하는 웹서비스] 인텔리제이(IntelliJ)와 깃허브(GitHub) 연동하기 오늘은 인텔리제이(IntelliJ)와 깃허브(GitHub)를 연동하는 방법에 대해 포스팅하겠다. 1. 먼저 깃허브(Gtihub)사이트에 접속해 회원가입을 한다. 링크 : https://github.com/ GitHub: Where the world builds so.. dandev.tistory.com 그럼 바로 들어가보자. 1. 우선 intelliJ(IDE..

프로그래밍/database 2022. 8. 2. 11:23
[h2 database] h2 데이터베이스 생성하는 방법

오늘은 h2 데이터베이스를 생성하는 방법에 대해 알아보자. 1. 우선 h2 데이터베이스의 다운로드 위치로 이동한다. 2. h2 데이터베이스를 실행하고 나면 화면 하단 시작표시줄에 다음과 같은 아이콘이 생성된다. 3. 오른쪽 마우스를 클릭 해 'create a new database'를 클릭한다. 4. database 이름을 입력하고 'create' 버튼을 누른다. create 버튼 클릭 후 'database was created successfully.'라는 말이 나오면 성공한 것이다. 👉 그럼 이제 h2 데이터베이스 생성은 끝났고 데이터베이스에 연결을 진행해보자. 1. h2 데이터베이스 실행 후 url과 비밀번호를 입력 하고 '연결 시험' 버튼을 클릭해보자. 2. 다음과 같이 '시험 성공'이라는 말이 ..

프로그래밍/database 2022. 8. 1. 11:01
[자바의 정석] Ch 11 총정리 - 2

🤔 Stack ✔ LIFO(Last In First Out) 마지막에 저장된 것을 먼저 꺼냄. 저장(push), 추출(pop) 🤔 Queue ✔ FIFO(First In First Out) 제일 먼저 저장한 것을 먼저 꺼냄. 따라서 LinkedList가 적합함!! 저장(offer), 추출(poll) 다음의 예제를 통해 스택과 큐에 대해 이해하자. import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Ex11_4 { static Queue q = new LinkedList(); static final int MAX_SIZE = 5; // Queue에 최대 5개까지만 저장 public static ..

프로그래밍/자바 2022. 7. 30. 22:05
[자바의 정석] Ch11-23 Iterator, LinkedIterator, Enumeration, Ch11-25~29 Arrays의 메서드

다음의 포스팅을 꼭 같이 읽어볼 것을 적극 권장한다. (링크1) (링크2) 이름 특징 Iterator 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스 ListIterator Iterator에 양방향 조회기능 추가(List를 구현한 경우만 사용가능) Enumeration Iterator 구버전 다음과 같이 컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은다음 반복문, 주로 while문을 사용해서 컬렉션 클래스의 요소들을 읽어온다. import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class P413 { public static void main(String[] args) { ..

프로그래밍/자바 2022. 7. 26. 17:12
[자바의 정석] Ch 11 총정리 - 1 (Collection, framework, ArrayList, LinkedList)

🤔 컬렉션 프레임워크(collections framework) : 데이터를 저장하는 클래스들을 표준화한 설계 - 컬렉션(다수의 객체를 다루기 위한 표준화된 프로그래밍 방식) - 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스 제공 - java.util 패키지에 포함. jdk 1.2부터 제공 🤔 컬렉션(collection) : 다수의 데이터, 데이터 그룹 - 여러 객체(데이터)를 모아 놓은 것 🤔 프레임워크(framework) 표준화된 체계적인 프로그래밍 방식 🤔 컬렉션 클래스 : 다수의 데이터를 저장할 수 있는 클래스 (예 : Vector, ArrayList, HashSet) 🤔 라이브러리와 프레임워크 ✔ 라이브러리 : 공통으로 사용될만한 유용한 기능을 모듈화하여 제공 ✔ 프레임워크 : 단순히 기능뿐..

프로그래밍/자바 2022. 7. 23. 03:37
[자바] 향상된 for문이란? (for i : arr) 의미 🤔

🤔 for(int i: arr) {}는 왜 사용할까(장점) ✔ 간편하며 가독성이 좋다. ✔ 배열의 인덱스 문제를 해결할 수 있다. (ArrayIndexOutOfBoundsException 예외 피할 수 있음.) 다음의 예시를 통해 살펴보자. public class For { public static void main(String[] args) { int[] arr = {1,2,3,4,5}; for(int i=0; i

프로그래밍/자바 2022. 7. 14. 21:55
[자바의 정석] Ch 11 -30 Comparator와 Comparable이란?

🤔 Comparator와 Comparable이란? ✔ 객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스 ✅ Comparable : 기본 정렬기준을 구현하는데 사용 ✅ Comparator : 기본 정렬 기준 외에 다른 기준으로 정렬할 때 사용 public interface Comparator { int compare(Object o1, Object o2); // o1, o2 두 객체 비교 boolean equals(Object obj); // equals를 오버라이딩하라는 뜻 } public interface Comparable { int compareTo(Object o); // 주어진 객체(o)를 자신과 비교 } ✔ compare()와 compareTo()는 두 객체의 비교 결과를 반환하도..

프로그래밍/자바 2022. 7. 7. 19:15
[자바의 정석] Ch11 25~29 Arrays란?

🤔 Arrays란? ✔ 배열을 다루기 편리한 메서드(static) 제공 ✅ 배열의 출력 - toString() ✅ 배열 복사 - copyOf(), copyOfRange() ✅ 배열 채우기 - fill(), setAll() ✅ 배열의 정렬과 검색 - sort(), binarySearch() (이진탐색은 정렬되어있을 때만 가능하므로 정렬 먼저 하고 binarySearch() 사용 해야 한다.) int[] arr = {3, 2, 0, 1, 4}; int idx = Arrays.binarySearch(arr, 2); // idx=-5 잘못된 결과 (왜냐? 정렬되어 있지 않아서) Arrays.sort(arr); // 배열 arr을 정렬한다. System.out.println(Arrays.toString(arr))..

프로그래밍/자바 2022. 7. 6. 12:25
이전 1 2 3 4 다음
이전 다음
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
  • queue
  • 그리디
  • Java
  • BAEKJOON
  • JPA
  • 자바
  • 22 정보처리산업기사
  • 해커랭크
  • 나동빈
  • hackerrank
  • hackerrank challenges
  • ORM
  • 디버깅
  • 해커랭크 자바
  • 자바의 정석
  • 코드
  • 이코테
  • 챌린지
  • MSA
  • 22 정보처리 산업기사
  • Spring Security
  • 정보처리 산업기사
  • 강의
  • 백준
  • challenges
  • 해커랭크 자바 챌린지
  • 정보처리산업기사 공부법
  • 소스코드
  • 해커랭크 챌린지
  • 정보처리산업기사
more
«   2025/06   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함

Blog is powered by Tistory / Designed by Tistory

티스토리툴바