안녕하세요. 이번 시간에는 Java의 switch 문에 대해 알아보겠습니다. c언어의 switch문하고 다를 것은 없고요. 이번에 제가 낸 문제에서, 쓰면 좋겠다 싶어서 소개를 해 보려고 해요. 이 글에서는 string switch문이 어떻게 돌아가는지를 먼저 소개하고, 어떻게 적용할 수 있는지 알아보겠습니다. string 빼고 나머지는 제가 예전에 c언어 시간에 소개했던 switch문과 동일하므로, 관련 글의 연장선 정도라고 보시면 좋겠습니다. [관련글] c언어 switch문에 대해 알아봅시다. java에서는 String도 switch문이 됩니다. 저만 몰랐을 수도 있겠지만요. 이 프로그램은, 간단합니다. acquire를 입력받으면, 뎁스를 하나 증가시키고 acquire!를 출력합니다. release를..
Java 검색 결과
안녕하세요. 이번 시간에는 Collections의 reverse 메소드에 대해 알아보도록 하겠습니다. 사실 오늘 알게 된 메소드이기도 합니다. 먼저 메소드의 설명을 보겠습니다. 리스트의 order를 뒤집는다는 설명만 되어 있어요. 예를 들자면 list에 5, 4, 3, 2, 1 순서가 있었다면, reverse를 호출한 후에는 1, 2, 3, 4, 5가 된다는 말입니다. 대표적인 것으로 ArrayList와 LinkedList가 있는데요. 보통 저는 ArrayList의 순서를 많이 뒤집는 편입니다. 위 예제 프로그램을 보겠습니다. ArrayList에 1부터 10까지를 차례대로 넣었습니다. 그리고, 8번째 줄에 Collections의 reverse 메소드를 호출하였습니다. 결과는 어떻게 나올까요? 순서가 뒤집..
백준 문제를 풀다 보면, 균형 이진 트리를 써야 하는 경우를 종종 보셨을 겁니다. 이것을 다룰 때, x보다 큰 것 중 제일 작은 키, 같거나 큰 것 중 제일 작은 키, 작은 것 중 제일 큰 키, 작거나 같은 것 중 제일 큰 키를 실시간으로 구해야 하는 상황을 접하셨을 겁니다. java에서는 어떻게 하는지 간단하게 알아봅시다. 먼저, c++의 map에는 lower_bound, upper_bound가 있었습니다. 이와 유사하게 자바의 TreeMap에는 ceilingKey와 higherKey가 있습니다. 이 둘의 설명을 보겠습니다. 먼저, ceilingKey 메소드는 제일 작은 키를 리턴한다고 하는데요. 조건이 하나 있습니다. given key보다 크거나 같은 것. 예를 들어, 1, 2, 3, 7이 있다고 해..
저번에, 경로 조작 공격을 이 글에서 다루었습니다. 글이 난이도에 비해서 꽤 길었는데요. 요약하면 이거였습니다. 클라이언트의 입력을 곧이 곧대로 믿지 말라. 이것에 대해서 조금 더 찾아보면, 방지책으로 절대 경로를 쓰라고 되어 있습니다. 이 답글이나, 이 문서에서도 강조하고 있는 부분이기도 합니다. 데이터 파일들은 특정한 경로 안에 있을 것이기 때문입니다. [관련글] 사용자의 입력값과 path traversal 공격 File 클래스를 보면, getAbsolutePath와 getCanonicalPath가 있습니다. 아래 예제를 보겠습니다. 테스트 케이스는 하나입니다. ..\\.idea입니다. 이것은 프로젝트 폴더의 상위 디렉토리로 이동해서 .idea로 이동하겠다는 의미입니다. 출력 결과만 보도록 하겠습니다..
path traversal 공격은 들어보신 분도 계실 겁니다. spring boot로 만든 간단한 프로그램을 가지고 테스트를 해 보도록 하겠습니다. 먼저, 프로젝트 구조는 다음과 같습니다. application.properties를 보겠습니다. server의 포트를 7778로 설정하였습니다. 다음에, default controller를 보겠습니다. 뭔가 복잡해 보이는데요. path가 /data입니다. 이것은, 파라미터로 file name을 보내면, 해당 파일에 있는 내용을 출력해서 응답합니다. 별 문제는 없어 보입니다. 저는 클라이언트가 보내준 값만 믿겠습니다. 저는 우분투를 이용하므로, 방화벽을 설정해 줄 건데요. 포트를 7778을 쓰므로, 172.30.1.0/24에 대해서만 허용해 줍니다. 왜 그런지..
최근댓글