본문 바로가기
반응형

All Posts134

[백준 17144] 미세먼지 안녕! - 파이썬(Python) 미세먼지 안녕! 문제 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사과는 뛰어난 코딩 실력을 이용해 각 칸 (r, c)에 있는 미세먼지의 양을 실시간으로 모니터링하는 시스템을 개발했다. (r, c)는 r행 c열을 의미한다. 공기청정기는 항상 1번 열에 설치되어 있고, 크기는 두 행을 차지한다. 공기청정기가 설치되어 있지 않은 칸에는 미세먼지가 있고, (r, c)에 있는 미세먼지의 양은 A(r,c)이다. 1초 동안 아래 적힌 일이 순서대로 일어난다. 미세먼지가 확산된다. 확산은 미세먼지가 있는 모든 칸에서 동시에 일어난다. (r, c)에 있는 미세먼지는 인접한 네 방향.. 2023. 9. 23.
[백준 14502] 연구소 - 파이썬(Python) BFS 풀이 연구소 문제 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. 새로 세울 수 있는 벽의 개수는 3개이며, 꼭 3개를 세워야 한다. 예를 들어, 아래와 같이 연구소가 생긴 경우를 살펴보자. 2 0 0 0 1 1 0 0 0 1 0 1 2 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 .. 2023. 9. 23.
[Spring] 서블릿 인터셉터 개념과 로그인(인증) 필터 구현 로그인 기능을 구현해도 로그인된 사용자에 맞춰서 기능을 구현하는 것 까진 잘되는데, 특정 페이지에 접근하는 것을 막는것은 불가능합니다. 예를 들면 로그인하지 않은 사람이 '회원정보 수정' 페이지를 들어갈수 있는 버튼이 뜨지 않도록 페이지를 만들지만, 회원정보 수정 URL만 있으면 접근자체는 백엔드에서 막지 않았으므로 언제든지 url로 접근이 가능합니다. 컨트롤러에서 각 요청마다 로그인 여부를 체크하는 로직을 하나하나 작성하면 되겠지만, 수많은 컨트롤러마다 로직을 작성하는 것은 정말 비효율적이고, 나중에 로그인과 관련된 로직이 바뀌는 순간 모든 컨트롤러에 적용시킨 로그인 여부 체크 로직을 일일히 하나하나 바꿔야 되므로 유지보수가 어렵습니다. 이런 관심사는 스프링의 AOP를 이용해서 해결할수 있지만, 서블릿.. 2023. 5. 21.
[Spring] 서블릿 필터 개념과 로그인 필터 구현 저번 포스트에 이어 로그인 기능을 구현했습니다. 그러나 로그인 기능을 구현하고 로그인된 사용자에 맞춰서 기능을 구현하는 것 까진 잘되는데, 특정 페이지에 접근하는 것을 막는것은 불가능합니다. 예를 들면 로그인하지 않은 사람이 '회원정보 수정' 페이지를 들어갈수 있는 버튼이 뜨지 않도록 페이지를 만들지만, 회원정보 수정 URL만 있으면 접근자체는 백엔드에서 막지 않았으므로 언제든지 url로 접근이 가능합니다. 컨트롤러에서 각 요청마다 로그인 여부를 체크하는 로직을 하나하나 작성하면 되겠지만, 수많은 컨트롤러마다 로직을 작성하는 것은 정말 비효율적이고, 나중에 로그인과 관련된 로직이 바뀌는 순간 모든 컨트롤러에 적용시킨 로그인 여부 체크 로직을 일일히 하나하나 바꿔야 되므로 유지보수가 어렵습니다. 이런 관심.. 2023. 5. 6.
[Spring] HTTP 세션의 개념과 로그인 구현 세션이라는것은 쿠키 기반이기 때문에 쿠키에 대한 이해가 필요하므로 이전 포스트를 보고 오시면 좋습니다. 자바 스프링에서 HttpSession을 이미 지원하기 때문에, 이것을 이용해 간단한 세션 로그인을 구현해보겠습니다. 세션을 직접적으로 구현하는 것은 만약에 요청이 들어오면 나중에 포스트하겠습니다! HttpSession이 알아서 세션을 구현해줄테지만, 그래도 내부 원리를 알고 써야되기 때문에 (redis등을 적용하려면) 원리를 설명하고 적용하는 것을 보여드리겠습니다. 이전 포스트에서 오로지 쿠키만을 이용했을때 생기는 보안문제에 대해서 보고, 그의 대안책으로 세션이 나온것이라고 배웠습니다. 쿠키 값은 임의로 변경할 수 있고, 보관된 정보는 훔쳐갈 수 있습니다. 만약 쿠키에 개인정보나, 신용카드 정보가 있다.. 2023. 5. 6.
[Spring] HTTP 쿠키의 개념과 로그인 구현 보통 현업에서는 Spring Security(스프링 시큐리티)라이브러리를 사용하거나, 세션을 이용합니다. 오로지 쿠키로만 로그인을 구현하면 심각한 보안 문제가 있으므로 토큰이나 세션, 라이브러리를 추가로 사용해야됩니다. 그래도 쿠키의 개념과 용도는 알아야하므로 쿠키를 다뤄보는 실습을 제작하게 됐습니다. Stateless(무상태) 프로토콜 우리가 현재 사용하는 HTTP 프로토콜은 Stateless(무상태), 비연결성 프로토콜 입니다. (연결성이 필요한 경우 소켓 프로토콜이라고 따로 이용합니다.) 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어지고, 클라이언트가 다시 요청하면 서버는 이전 내용을 기억하지 못합니다. 클라이언트와 서버는 서로 상태를 유지하지 못하는 대신의 서버의 확장성이 좋다는 장점.. 2023. 3. 27.
[Spring Boot] gitpod.io 에서 h2 데이터베이스 사용하기(RDBMS) 이 글을 작성하는 시점(2023.2.25)에서, 아래와 같이 구글 검색해보면 깃팟같은 웹IDE에서 h2같이 실습하기 좋은 내장 데이터베이스를 사용하는 법에 대해서 전혀 안알려져 있습니다. 제 글이 아마 세계 최초일 것입니다(그냥 그렇다구요..ㅎ) 어서 제 글이 세계 최초라고 해줘요(찡긋) 이용하는 법이 구글에 전혀 없어서 제가 개척해봤습니다. (리눅스 명령어 조금은 할줄 아므로..) 어서 세계 최초라고 해줘요(찡긋) 아니면 국내 최초라도.... 언제어디서나 웹브라우저만 가지고 코딩하거나, 자신만의 노트북이 없거나, 아니면 군입대(ㅋㅋ...)처럼 웹브라우저로 개발환경을 구축하는 사람은 언제나 있을거라고 생각합니다. gitpod에서는 에디터와 콘솔 환경만 쓸수 있고, 일반 컴퓨터처럼 mysql workben.. 2023. 2. 25.