본문 바로가기

전체 글50

그래프 알고리즘 객관식 문제(20문항) v1.0 안녕하세요. 어느덧 블로그를 운영한지 2년이 다 되어갑니다. 2년 동안 이번 글을 제외하면 총 49개의 글을 작성했습니다. 그래서 이번에 50번째 글 작성 및 블로그 총 조회수 1만명을 기념해서 새로운 시험을 제작했습니다. 문제 카테고리를 고민하다가 제가 블로그에서 가장 많이 다뤘던 그래프 관련 문제를 만들게 됐습니다.20문제 밖에 없지만 작년에 제작했던 Java 개념 30문제보다 더 오래걸렸습니다. 문제에 들어가는 시각 자료들을 손수 만들다보니 오래걸렸던 것 같습니다. 문제에서 다루는 내용은 대략적으로 아래와 같습니다.그래프 이론그래프 탐색 알고리즘위상 정렬 알고리즘최소 비용 알고리즘최소 신장 트리 알고리즘일부 문제는 알고리즘과 관련된 소스코드가 포함되어 있고, 소스코드가 포함된 문제는 전부 Java .. 2026. 8. 1.
[Security] Security Through Obscurity - 모호함의 보안 효과 들어가며Security Through Obscurity는 여러 커뮤니티에서 그 효과에 대해 갑론을박이 이어지고 있습니다. 많은 사람들이 케르크호프스의 원리를 들먹이며Security Through Obscurity is Bad! 를 주장합니다. 케르크호프스의 원리의 핵심은 "암호 알고리즘을 알아도 올바른 키(key)를 모른다면 암호를 해독할 수 없어야한다"는 것입니다. 하지만 Security Through Obscurity는 암호 알고리즘 자체를 숨기려는 방식이라서 비판적인 시선을 많이 가지고 있는 것 같습니다. 이 글을 시작하기 전 미리 말하자면 Security Through Obscurity는 다른 철저한 보안 설계와 함께할 때 실질적인 이득을 얻을 수 있다는 것이지 Security Through Ob.. 2026. 7. 29.
Linux 서버에 Nginx로 Https 프로토콜 사용하기 들어가며 GitHub - jueunseuk/Yureeya-BEContribute to jueunseuk/Yureeya-BE development by creating an account on GitHub.github.com 기존에 만들었던 "유리야" 프로젝트의 서버를 AWS에 배포해 운영하고 있었지만, 매달 발생하는 비용이 점점 부담스러워졌습니다.그래서 집에서 사용하지 않던 오래된 노트북에 Linux 운영체제를 설치하고, 해당 노트북을 개인 서버로 활용해 프로젝트를 이전하게 됐습니다. 앱 서버를 직접 실행하는 것 자체는 어렵지 않았지만, 웹 서비스로 외부에 공개하기 위해서는 Nginx, HTTPS, 리버스 프록시와 같은 추가 설정이 필요했습니다. 특히 Vercel에 배포한 React 클라이언트에서 API.. 2026. 7. 21.
[Security] Username Enumeration 들어가며우리가 서비스를 이용하다 보면 불편하다고 느껴지지만, 보안을 위해 의도적으로 그렇게 설계된 기능들이 있습니다. 대표적인 예가 로그인 실패 메세지입니다.대부분의 웹 서비스는 로그인 서비스를 제공하며, 여전히 많은 서비스가 ID/PW 인증 방식을 사용하고 있습니다. 그런데 로그인을 시도할 때 ID를 잘못 입력하든 PW를 잘못 입력하든 사용자에게는 동일한 메세지를 출력합니다. 예를 들어 네이버에서 아이디 또는 비밀번호를 잘못 입력하면 다음과 같은 메시지를 확인할 수 있습니다."아이디(로그인 전화번호, 로그인 전용 아이디) 또는 비밀번호가 잘못 되었습니다." 실제로 로그인을 시도하는 사용자 입장에서는 다소 불편한 메시지입니다.아이디가 틀린 것인지, 비밀번호가 틀린 것인지 알 수 없기 때문입니다. 결국 다.. 2026. 7. 15.
[Security] Verbose Error Messages 들어가며보안과 관련된 첫 글의 주제를 고민하던 중, 개발 과정에서 비교적 쉽게 발생할 수 있지만 의외로 간과되기 쉬운 Verbose Error Message를 선택하게 되었습니다. Verbose Error Messages먼저 Verbose의 사전적 의미를 살펴보겠습니다.Verbose장황한, 말 수가 많은 Verbose의 사전적 의미만 봐도 이번 글에서 다루고자 하는 내용을 어느 정도 유추할 수 있습니다.Verbose Error Message란 애플리케이션에서 과도하게 상세한 오류 정보를 노출하는 메시지로 직역할 수 있습니다. 즉, 서버에서 예외(Exception)가 발생했을 때 사용자가 알 필요가 없는 내부 정보까지 함께 전달되는 보안 취약점입니다.예를 들어 서버의 디렉터리 구조, 패키지명, 클래스명.. 2026. 6. 22.
제25회 TOPCIT 시험 4수준 취득 후기 지지난주 리눅스마스터 2급 1차 시험에 이어서 오늘 TOPCIT 시험을 치고 왔습니다. 대학의 특정 강의 중 기말고사 점수를 TOPCIT 점수로 반영해서 시험을 치게 됐습니다. TOPCIT 시험에 대해사실 TOPCIT 시험이 잘 알려진 시험이 아니라서 인터넷에서 시험에 대한 유익한 내용을 찾기는 힘듭니다. 일반적으로 TOPCIT 홈페이지에 업로드 된 TOPCIT 에센스라는 6개의 파일로 준비를 하는 것 같습니다. TOPCIT Essence는 아래에서 확인할 수 있습니다. 학습자료 | TOPCIT" data-ke-align="alignCenter" data-og-description="" data-og-host="www.topcit.or.kr" data-og-source-url="https://www.t.. 2026. 5. 16.
제2602회 리눅스마스터 2급 변경된 1차 시험 합격 후기 방금 막 리눅스마스터 2급 1차 시험을 치고 왔습니다!2차 시험은 다음 회차에 칠 에정이라 1차 후기부터 쓰게 됐습니다. 기출 문제 복기우선 까먹기 전에 시험 문제들 생각나는대로 적어보겠습니다.생각나는대로 적어서 순서가 뒤섞이고 가독성이 안 좋은 점 양해부탁드립니다. 리처드 스톨먼과 관련된 FSF, GNUtty의 출력 결과 2문제 거의 똑같이 나옴출력을 다른 입력으로 사용하는 파이프리다이렉션의 표준 입력을 바꾸는 2문제 똑같이 나옴cal의 -y 옵션출력 결과보고 grep인지 find인지 구분하기가상환경 설치 시 IPv4의 기본 설정 값으로 DHCP 설정systemctl의 enabletime 명령어id 명령어ICMP를 사용하는 명령어인 pingMIT LicenseBSD License ← 확실하진 않음us.. 2026. 5. 2.
[Database] 관계대수(Relational Algebra)로 SQL Select 이해하기 들어가며이 글은 관계형 데이터베이스에 대한 이해와 지식을 필요로 합니다. 또한, 모바일보단 PC 환경에서 읽기 편하도록 작성됐습니다. 보통 데이터베이스와 SQL을 배울 때 데이터베이스의 이론을 배우고 SQL 문법을 배우면서 실습합니다. 그런데 SQL문을 눈으로만 보면 이해하기 쉬운데 직접 작성하라고 하면 제대로 못하는 사람이 태반입니다. 관계대수는 테이블에서 원하는 결과를 얻기 위해 표현하는 방법을 배우는 학문입니다. 관계대수를 배워서 SQL Select문의 원리를 알면 SQL을 훨씬 깊게 이해하고 사용할 수 있습니다. 하지만 앞서 말했듯이 데이터베이스가 무엇인지. 그리고 관계형 데이터베이스가 무엇인지는 알고 이 글을 읽는 것을 권장합니다. 관계대수(Relational Algebra)1. 정의관계대.. 2026. 4. 1.
[Algorithm] 0-1 BFS 알고리즘(격자그래프 편) with Java 들어가며이 글은 아래의 0-1 BFS(인접 리스트 편)과 이어지는 내용입니다. 여기선 격자 그래프에서 0-1 BFS 알고리즘을 구현하는 방법만 다루기 때문에 0-1 BFS 알고리즘을 알고 싶은 분은 아래의 링크에 들어가서 먼저 읽어보고 오는 것을 추천드립니다. [Algorithm] 0-1 BFS 알고리즘(인접 리스트 편) with Java들어가며이번 글은 그래프 탐색에 관한 글입니다. 읽기 전에 아래의 링크에서 그래프 이론을 숙지하고, 너비 우선 탐색 및 데이크스트라 알고리즘을 먼저 익히고 나면 정말 쉽게 배울 수 있습니jundyu.tistory.com 격자 그래프에서 0-1 BFS 문제 정의우선 격자 그래프가 어떻게 주어져야 0-1 BFS 알고리즘을 적용할 수 있을 지 생각해보아야합니다.아래의 그.. 2026. 3. 7.
[Algorithm] IMOS 기법: 누적합과 차분 배열로 빠른 구간 업데이트 with Java 들어가며누적합(Prefix Sum) 알고리즘에서 더 나아가 구간을 빠르게 업데이트하는 IMOS 기법에 대해 설명하는 글입니다. 누적합 알고리즘에 대해 모르는 경우 아래의 글을 먼저 읽고 오시길 바랍니다. [Algorithm] 누적합(Prefix Sum) 알고리즘 with Java들어가며길이가 100만인 배열에서 특정 구간의 합을 구하는 것은 for문을 사용해서 쉽게 구할 수 있습니다. 하지만 구해야하는 특정 구간이 한 번이 아니라 10만 번인 경우엔 어떻게 구할까요? 이jundyu.tistory.com이번 글에선 차분 배열 자료구조와 누적합 알고리즘을 합친 imos 방법에 대해 설명하겠습니다. 차분 배열(Difference Array)1. 의미차분 배열이란 배열의 특정 구간에 값을 더하거나 뺄 때,.. 2026. 1. 27.
[Algorithm] 기하 알고리즘 해결을 위한 수학 공식 및 정리 모음 with Java 들어가며최근 대학수학을 복습하면서, 기하 알고리즘 문제를 풀 때 반복적으로 등장하는 개념과 공식을 정리할 필요성을 느꼈습니다.이번 글에서는 기하 알고리즘 문제 해결에 자주 사용되는 핵심 개념들을, 기초적인 내용부터 대학수학 수준까지 정리해보려고 합니다.증명은 생략하고, 수학적 설명과 자바(Java) 코드를 중심으로 설명할 예정입니다.새롭게 공부하며 추가된 내용은 글 하단에 이어서 정리하고, 분량이 많거나 난이도가 높은 주제는 별도의 글로 분리해서 링크를 적어놓겠습니다. 피타고라스 정리(Pythagorean theorem)1. 의미직각삼각형에서 빗변과 나머지 두 변에 대한 관계를 나타낸 식입니다.서로 직각을 이루는 두 변의 길이가 a, b이고 빗변의 길이가 c일 때 아래의 관계를 가집니다.$$a^2+.. 2026. 1. 17.
[Algorithm] 그레이엄 스캔(Graham Scan) 알고리즘으로 볼록 껍질(Convex hull) 구하기 with Java 들어가며볼록 껍질을 구하는 그레이엄 스캔 알고리즘을 알기 위해선 CCW 알고리즘을 먼저 배워야합니다. CCW 알고리즘에 대해 자세히 설명해둔 글이 있으니 아래 링크 참고해주세요. [Algorithm] CCW 알고리즘 with JAVA들어가며최근에 기하와 관련된 문제를 풀며 점들이 이루는 방향성을 판별하는 알고리즘을 배우게 되었습니다. CCW 알고리즘은 세 점이 이루는 방향을 간단한 연산으로 확인할 수 있는 핵심 알고jundyu.tistory.com 볼록 껍질: Convex Hull1. 볼록한 다각형(Convex Polygon) 왼쪽 도형을 바깥에서 바라봤을 때 기준으로 모든 꼭짓점들이 볼록합니다. 하지만 오른쪽 도형은 빨간색으로 표시된 하나의 꼭짓점이 오목한 것을 볼 수 있습니다. 이렇게 모든 꼭짓점.. 2025. 9. 16.
[Algorithm] 차량 기지(Shunting Yard) 알고리즘을 이용해 후위 표기식으로 변환하기 with Java 들어가며우리가 일상적으로 사용하는 수식은 대부분 중위 표기법(Infix Notation)입니다. 그러나 수식을 표현하는 방법에는 전위 표기법(Prefix Notation), 후위 표기법(Postfix Notation)도 존재합니다. 이번 글에서는 각각의 표기법에 대해 간단히 알아본 뒤 후위 표기법을 왜 사용해야하는 지와 중위 표기법을 후위 표기법으로 어떻게 변환하는 지에 대해 다뤄보겠습니다. 글의 마지막에 표기법끼리 변환하는 방법도 있으니 참고해주세요. 수식 표기법우선 수식 표기법에 대해 간단히 알아보고 지나가겠습니다. 수식 표기법은 총 3가지로 분류됩니다.전위 표기법 : Prefix Notaion(PN = Polish Notation)중위 표기법 : Infix Notaion후위 표기법 : Postfi.. 2025. 9. 3.
[Algorithm] 누적합(Prefix Sum) 알고리즘 with Java 들어가며길이가 100만인 배열에서 특정 구간의 합을 구하는 것은 for문을 사용해서 쉽게 구할 수 있습니다. 하지만 구해야하는 특정 구간이 한 번이 아니라 10만 번인 경우엔 어떻게 구할까요? 이번 글에서 알아볼 알고리즘은 누적합이라는 알고리즘입니다. 누적합: Prefix Sum1. 개요배열에서 특정 구간의 합을 반복적으로 구해야 하는 문제가 코딩 테스트에서 자주 등장합니다. 단순하게 매번 특정 구간을 순회하면 시간이 너무 오래걸리기 때문에 이를 개선하기 위해 누적합 기법이 고안되었습니다.누적합은 한 번의 배열 전체 순회를 통해 배열의 합 정보를 저장해두고, 이후 각각의 구간합 요청에 대해 빠르게 응답할 수 있습니다. 2. 시간복잡도원본 배열의 길이가 N일 때, 인덱스 0부터 N-1까지 한번씩의 연산이.. 2025. 8. 7.
[Algorithm] 오일러 피 함수로 서로소의 개수 구하기 with JAVA 들어가며처음으로 수학과 관련된 알고리즘을 다뤄보게 되었습니다. 사실 정확히 말하자면 오일러 피 함수는 알고리즘이라기보단 정수론에서 배우는 수학 개념입니다. 의미는 단순하지만 증명은 어렵고 복잡하기 때문에 함수를 외운 뒤 구현하는 법만 이해하면 충분합니다. 오일러 피 함수 : Euler Phi Function1. 정의오일러 피 함수는 자연수 n이 주어졌을 때 n 이하의 자연수 중에 n과 서로소인 수의 개수를 구하는 데 사용됩니다. 2. 표기$$\Large \phi(n)$$함수의 표기는 위와 같고 피(phi)라고 읽습니다. $\phi(6)$이라면 6 이하의 자연수 중 6과 서로소인 자연수는 1, 5가 있으므로 2를 값으로 가집니다. 3. 수식$$\large\phi(x)=n\prod_{p|n}(1-\frac.. 2025. 6. 30.