반응형 분류 전체보기44 시스템보안 개론 SeSAC(청년취업사관학교)와 한국정보보호산업협회가 주관하는 사이보보안 양성과정에 참여를 하게 되었다. 교육 첫날진행이 됐다. 개발경력은 있지만 비전공자이고 보안에 대한 지식들은 별로 없다. 첫날에는 시스템보안(System Security)에 대해 배웠다. 시스템보안은 각종 위험으로부터 시스템의(OS 등) 안전한 상태를 유지 하는 것이다. 보안의 뼈대가 되는 기본적인 개념은 6가지가 있다. 1. 계정관리2. 세션관리3. 접근제어4. 권한 관리5. 취약점 관리6. 로그 관리 운영체제(Unix, windows)마다 관리가 조금씩 다르다. 그리고 가상머신 실습을 해보았다. 처음 접해보는거라 당황했지만 차근차근 잘해갔다. 2024. 8. 6. 동적 계획법(DP:Dynamic programming) 개념 및 구현 동적 계획법은 복잡한 문제를 작은 하위 문제로 나누어 해결하고, 그 결과를 저장하여 동일한 하위 문제가 다시 나타날 때 재활용함으로써 연산을 줄이는 알고리즘 설계 기법이다. DP는 다음과 같은 두 가지 중요한 특징이 있다. 1. 최적 부분 구조 : 문제의 최적 해결 방법이 하위 문제들의 최적 해결 방법으로 구성될 수 있다. 2. 중복되는 부분 문제 : 동일한 작은 문제들이 반복적으로 계산된다. 또한 DP에는 메모이제이션(탑다운), 타뷸레이션(바텀업) 2가지 방법이 있다.비효율적인 재귀를 이용한 비보나치 수열 구현public class FibonacciRecursive { public static void main(String[] args) { int n = 10; // 예를 들어 1.. 2024. 5. 27. 그리디 알고리즘(Greedy Algorithm) 개념 및 구현 Greedy는 사전 상 탐욕스러운, 욕심 많은의 의미를 가지고 있다. 그래서 탐욕 알고리즘이라고도 한다. 탐욕 알고리즘은 "최적해"를 구하는데 사용되는 근사적인 방법이다. "최적해"를 구한다는 보장은 없지만 단순하게 동작하기 때문에 실용적이다. 최적해를 얻을 수 있는 조건 1. 탐욕스러운 선택 속성(Greedy choice property)탐욕스러운 선택 속성이 존재한다는 말은 앞의 선택이 이후의 선택에 영향을 주지 않는다는 뜻이다. 2. 최적 부분 구조 조건(Optimal Substructure)최적 부분 구조 조건은 문제에 대한 최적해가 부분 문제에 대해서도 역시 최적해라는 것이다. "탐욕스러운 선택 속성과 "최적 부분 구조 조건"을 가지고 있는 경우는 탐욕 알고리즘을 이용해서 항상 최적.. 2024. 5. 20. 시간/공간복잡도 개념(코테 대비 팁) 1. 시간/공간 복잡도를 알아야 하는 이유 2. 빅오(Big O)표기법 : 알고리즘의 성능을 분석할 때 사용하는 수학적 표현 방식이다. 이는 특히 알고리즘이 처리해야할 데이터의 양이 증가할 때, 그 알고리즘이 얼마나 빠르게 실행되는지 나타낸다. 여기서 중요한 것은 알고리즘의 정확한 실행 시간을 계산하는 것이 아니라, 데이터 양의 증가에 따른 성능의 변화 추세를 이해하는 것이다. - 시간 복잡도 : 입력된 N의 크기에 따라 실행되는 조작의 수 1. O(1) - 상수 시간 : 입력 데이터의 크기에 관계없이 알고리즘의 실행 시간이 일정하다. 예) 배열에서 인덱스를 사용하는 경우2. O(n) - 선형 시간 : 알고리즘의 실행 시간이 입력 데이터의 크기에 비례하여 증가한다. 예) 배열의 검색, 배열의 모든 요.. 2024. 5. 13. DFS와 BFS 개념 및 구현 DFS(Depth-First Search) : 그래프를 탐색할 때, 현재 위치에 인접한 노드를 우선적으로 선택하여 깊이가 증가하는 방향으로 탐색하는 알고리즘 구현 : 재귀를 이용 (그래프 표현 방법 : 인접 행렬)static int[][] graph; static boolean[] visited;static void dfs(int node){ visited[node] = true; System.out.print(node + " "); for (int i = 0; i BFS(Breadth First Search) : 시작 정점부터 옆으로 좌우로 탐색하는 너비 우선 탐색 방법 구현 : 큐를 이용 (그래프 표현 방법 : 인접 행렬)static int[][] graph;static b.. 2024. 5. 13. [자료구조] 스택(stack) ,큐(Queue) / [알고리즘] 이진 탐색(binary search) 1 . 스택(stack)은 모든 원소들의 삽입과 삭제가 리스트의 한쪽 끝에서만 수행되는 제한 조건을 가지는 선형 자료구조이다.삽입과 삭제가 일어나는 리스트의 끝을 top이라고 하고, 다른 한쪽 끝을 bottom이라고 한다. 즉, 후입선출(Last in First Out - LIFO)이라고 한다.기록을 쌓아가며 직전의 상태를 복원해야하는 상황에 유용하다. ex) 웹 브라우저 뒤로 가기, 프로그램 실행 취소, 함수 호출 등등 기억하기 쉬운 예시 : 펜케이크 펜케이크를 다 굽고 그릇 위에 옮긴다. 접시에 한 개씩 쌓아간다. 이때 손님이 펜케이크를 달라고 한다. 그럼 어떤 펜케이크를 줄 것인가? 사회통념상 쌓던 펜케이크 중에서 맨 위에 있는 펜케이크를 줄 것이다. 펜케이크 굽는 것을 멈추고 그릇에 쌓여있던 .. 2024. 5. 6. 인텔리제이(IntelliJ) 단축키 정리(계속 추가) 옵션 확인 : Command + P 생성자?(Generate) : Command + N코드 완료 ex) 세미콜론 안썼는데 완성해주기 : Command + shift + enter show context Action(옵션 확인) : option + enterExtract -> Introduce Variable : option + Commad + V(변수 관련 단축키?)Extract method : Ctrl + tcreate Test : Command + Shift + t최근 파일 조회 : Command + E오버라이드 조회 : Ctrl + O 2024. 4. 30. 스프링 웹 개발 기초(정적 컨텐츠, mvc, API) 내가 공부한 걸 내 언어로 정리를 해보려고 한다. 처음에는 어색해도 꾸준히 해보겠다. 스프링 공부를 다시 시작했다. 김영한님의 스프링입문 강의를 듣고 있다. 스프링은 자바의 프레임워크이다. 스프링부트를 통해 실행된다고 볼 수 있다. 스프링부트 프로젝트를 생성하는 사이트이다. https://start.spring.io/ 지금 공부할 때는 3.2.5버전으로 생성했다. 자바는 21을 썼다. 웹 개발의 기초라 함은 화면에 표시되는 것과 api로 나눠진다고 볼 수 있다. 1. 정적 컨턴츠정적컨텐츠는 html을 바로 보여주는 것?이다. html을 찾아 화면에 표시해준다. 처리과정은 내장 톰켓 서버 -> resources:static/hello-static.html -> 웹브라우저 2. MVC와 템플릿 엔진.. 2024. 4. 30. "미래의 나"와 연결됐다. 퓨처셀프 책을 읽기 전에는 목표라고 생각하면 그저 막연하게 생각을 했다. 목표를 달성하면 좋고 못해도 그저 시간이 지나가기에 별로 중요하게 생각을 하지 않았다. 그리고 달성하지 못할까봐 목표를 시작하지 않았을 때도 많았다. 위에 두가지는 퓨처셀프를 읽고 해결이 됐다. 드디어 미래의 나와 연결이 됐다. 1. 목표를 달성하면 좋고 못해도 그저 시간이 지나가기에 별로 중요하게 생각을 하지 않았다. 미래의 나와 단절됐던 것이다. "허시필드는 사람들 대부분의 미래의 나를 생각하는 데 많은 시간을 쓰지 않는다는 사실을 발견했다. 사람들은 생각 없이 소셜미디어로 시간을 보내거나 폭식이나 과소비를 하는 등, 지금 당장 도파민이 잠깐 생기고 마는 행동에서 벗어나지 못한다. 그렇게 단기적인 보상을 추구하면 장기적으로 대.. 2024. 1. 14. [JAVA] String java에는 문자열을 나타내는 String 클래스가 있다. String name = "홍길동" 이렇게 표현하고 쌍따움표를 써야한다. 홑따움표는 문자를 나타내는 char에 써야한다. String 클래스는 한번 인스턴스가 생성하면 수정할 수 없다.(immutabe object) 새 String을 만들어 바꿀 수는 있다. String 표현방식은 두가지가 있다. 1. String a = "test"; 2. String b = "test"; 3. String c = new String("test"); 4. String d = new String("test"); 1번은 constant string pool에 저장. text가 같으면 같은 저장공간을 바라본다. 2번은 java heap에 저장. 1번 == 2번(tru.. 2023. 12. 18. 이전 1 2 3 4 5 다음 반응형