본문 바로가기

전체 글376

[Spring] ViewResolver를 적용했을 때, 이를 무시하고 리다이렉트 디시키는 방법 / redirect: 로그인에 성공하거나 실패했을 때 Controller에서는 사용자에게 다른 페이지를 보여줘야한다. 이때 ViewResolver(suffix,prefix)를 적용한 상태라면, ModelAndView 객체에 저장되는 View 이름은 ViewResolver 설정을 고려하여 등록해야 한다. ViewResolver가 설정되어 있어도 이를 무시하고 리다이렉트 시키는 방법이 있다. ModelAndView mav = new ModelAndView(); if( user != null ) { mav.setViewName("redirect:getBoardList.do"); } else { mav.setViewName("redirect:login.jsp"); } return mav; "redirect:"를 붙이면 된다. 2023. 3. 6.
[Wireshark] TCP 장애 대응 순서 DOD Model을 기반으로 총 Accss 수준, Network 및 Tansport 수준, Application 수준으로 나누어서 분류한다. 1. Access 수준 1) Segment의 Lost (유실)인지? 2) Out of order 순서에 문제가 있는지? Access 수준에서 발생하는 장애는 심각한 문제이다. Segment의 유실과 ACK 순서에 오류이니.. 해당 데이터들은 더 볼필요도 없이 오류 투성일 것이다. 2. Network 및 Tansport 수준 1) 재전송 요구(Retransmission) 2) duplicate ACK 위 그래프를 보면 연두색 바와 동일하게 트래픽이 급격히 증가한 구간을 볼 수 있다. 이를 통해 추측할 수 있는 사실은, 데이터 량이 급격히 증가해서 트래픽이 증가한게 아.. 2023. 3. 6.
[WireShark] 네트워크 패킷 분석 도구 / 필터 문법 정리 자주 사용되는 Filter 문법 ==, and, && 또는||, or 사용 예 ip.src == 1.1.1.1 ip.dst == 1.1.1.1 ip.addr = 1.1.1.1 ==, and, && 또는||, or 등의 부정 주의! (ip.addr != 1.1.1.1)이 아님. 사용 예 !(ip.src == 1.1.1.1) !(ip.dst == 1.1.1.1) !(ip.addr == 1.1.1.1) Http 응답 코드 사용 예 http.response.code == 404 http.response.code == 500 Http 호스트 이름 사용 예 http.host contains "naver" http.host contains "com" http.host contains "www" Http 요청 uri .. 2023. 3. 6.
[BaekJoon] 백준 알고리즘 1697번 / 숨바꼭질 / BFS / Python """ 1. 아이디어 - x-1, x+1, 2x의 케이스를 나눠서 탐색한다. - 해당 수에 이미 방문했다면 다시 방문하지 않는다. 2. 시간복잡도 - 좌표 200_000개 - 간선 200_000 * 3개 = 600_000개 - 800_000 < 2억개! 가능. 3. 자료구조 - q [] - visited [] 4. 시나리오 1) q [] 생성, v [] 생성 2) 초기 q.append(s), v[s] = 1 3) while q: 4) c = g.pop(0) 5) c-1, c+1, 2c( 허용범위 내, 미방문 ) 6) q 삽입, v[c] 방문처리 """ import sys sys.stdin = open( "input.txt", "r") def bfs(s,e): # 초기 q [] 리스트 생성 q = [] #.. 2023. 3. 4.
[Java] HashMap이 아닌 LinkedHashMap을 사용하는 이유 LinkedHashMap이란 순서를 유지하는 해시맵이다. LinkedHashMap은 Java에서 HashMap을 확장한 클래스이다. LinkedHashMap의 가장 큰 특징은 자료가 입력된 순서를 기억한다는 것이다. 그렇다면, Java의 ArrayList, LinkedList와 같은 자료구조는 순서를 유지하는데 왜 LinkedHashMap이라는 특별히 HashMap의 순서를 유지하기 위한 자료구조로 소개되는 것일까? 우선, HashMap이 입력된 데이터의 순서를 유지하지 않는지 먼저 알아봐야한다. HashMap은 데이터의 순서를 유지하지 않는다. HashMap이 순서를 보장하지 않는 이유를 알기위해선 HashMap이 등장하게 된 목적부터 알아야한다. HashMap은 연관 배열을 저장하기 위한 자료구조이다.. 2023. 3. 3.
[BaekJoon] 백준 알고리즘 1260번 / DFS와 BFS / Python import sys sys.stdin = open( "input.txt", "r") def dfs(c): # 방문정보 v[c] = 1 # 방문기록 ans_dfs.append(c) # 다음 방문지 for i in adj[c]: if v[i] == 0: dfs(i) def bfs(s): # 필요한 q, v[], 변수 생성 q = [] # Q에 초기데이터 삽입 q.append(s) ans_bfs.append(s) v[s] = 1 while q: c = q.pop(0) for n in adj[c]: if v[n] == 0: # q 삽입 q.append(n) # 방문정보 v[n] = 1 # 방문기록 ans_bfs.append(n) # 정점 N과 간선 M의 개수, 시작 정점 번호 V N,M,V = map( int,.. 2023. 3. 3.
[Java] JUnit을 이용한 테스트 및 리팩토링 리팩토링(Refactoring)? 현재까지 대부분의 애플리케이션 구현과정을 돌이켜보면 요구사항을 만족하는 코드를 구현하면 개발을 완료했었다. 하지만 요구사항을 만족하는 코드를 구현했다고 개발이 완료된 것이 아니다. 소스코드를 구현했으면 반드시 뒤따라야 하는 과정이 중복을 제거하고, 읽기 좋은 코드를 구현하기 위해 구조를 변경하는 리팩토링이다. 리팩토링이란 소스코드의 가독성을 높이고 유지보수를 편하게 하기 위해 소스코드의 구조를 변경하는 것을 의미한다. 따라서, 아래와 같은 요구사항에 맞춰서 리팩토링을 진행해보자. 메서드가 한가지 책임만 가지도록 구현하자. 인덱트(indent, 들여쓰기) 깊이를 1단계로 유지하자. 인덴트는 while 문과 if문을 사용할 경우 인덴트 깊이가 1씩 증가한다. 예를 들면, 아.. 2023. 3. 2.
[BaekJoon] 백준 알고리즘 14503번 / 로봇 청소기 / 시뮬레이션 / Python """ 1. 아이디어 - 4방향을 확인 하고 청소한다. 2. 시간 복잡도 - 4방향 전부 확인해야하니.. N*M => 50 * 50 = 2500 바라보는 방향을 유지한 채, 후진한다. 2-1-2-2. 벽이라면 => break 2-2. 왼쪽부터 확인했을 때, 빈칸이 있는 경우 2-2-1. 해당 빈 칸으로 이동한다. 2-2-2. 탐색 for문을 빠져나와 그 위치로.. 2023. 3. 2.
[Java] 싱글톤 패턴 싱글톤 패턴(singleton pattern) 객체 지향 프로그래에서 인스턴스를 단 하나만 생성하는 디자인 패턴을 싱글톤 패턴이라고 한다. 이 싱글톤 패턴은 static을 응용하여 프로그램 전반에서 사용하는 인스턴스를 하나만 구현하는 방식이다. 예를 들어, 회사의 직원들을 객체 지향 프로그램으로 구현한다고 가정해본다면, 직원은 여러 명이겠지만 회사는 하나이다. 이런 경우에 직원 인스턴스는 여러개 생성하는 것이 당연하지만, 회사 객체는 하나만 생성해야한다. 생성자를 private로 생성자가 하나도 없는 클래스는 컴파일러가 자동적으로 디폴트 생성자를 넣어준다. 이 디폴트 생성자는 항상 public이다. public 라는 의미는 외부 클래스에서 인스턴스를 여러개 생성할 수 있다는 의미이다. 설명하고자 하는 싱.. 2023. 3. 1.