본문 바로가기

전체 글

(461)
DFS 이전에 dfs 알고리즘과 bfs 알고리즘에 대해 한 번 살펴본 적이 있었습니다. 시간이 오래 지나 흐릿해진 기억을 되짚어보기 위해 정리해봅니다. BFS, DFS 두가지 모두 그래프를 탐색하는 방법입니다. 그래프란, 정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조의 일종을 말하며, 그래프를 탐색한다는 것은 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하는 것을 말합니다. dfs 알고리즘의 진행 단계는 아래와 같습니다. 위 예시와 같이 dfs 알고리즘으로 문제를 해결한다고 가정해봅시다. 1번 노드에서 시작을 한다면 1 -> 2 -> 3 1 -> 5 -> 6 1 -> 5 -> 8 1 -> 9 -> 10 순서로 노드를 이동할 수 있습니다. 특정 노드에서 시작해서 인..
BFS 이전에 dfs 알고리즘과 bfs 알고리즘에 대해 한 번 살펴본 적이 있었습니다. 시간이 오래 지나 흐릿해진 기억을 되짚어보기 위해 정리해봅니다. BFS, DFS 두가지 모두 그래프를 탐색하는 방법입니다. 그래프란, 정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조의 일종을 말하며, 그래프를 탐색한다는 것은 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하는 것을 말합니다. 먼저 bfs 알고리즘 부터 살펴보도록 하겠습니다. BFS 알고리즘 (Breadth-First Search) bfs 알고리즘은 아래와 같이 동작을 합니다. 위 예시와 같은 문제를 푼다면 1 -> 2 -> 3 -> 4 1 -> 2 -> 4 -> 3, 1 -> 3 -> 2 -> 4 1 -> 3 ->..
[WIL] 항해 1주차 회고 1주차 회고록 2022년 3월 7일부터 16주간 진행되는 항해99 부트캠프에 등록 후 한주가 지나고 그에 대한 회고록을 작성한다. 회고록을 적기에는 짧은 기간이긴 하지만 그 안에서 또 새로운 것을 느낄 수 있었던 한 주였다. 이에 대해 짧지만 간단한 소감을 적으려 한다. 미니 프로젝트, 알고리즘 문제 풀이 (3월 7일 ~ 3월 13일) 간단한 미니 프로젝트를 3월 7일부터 3월 10일 까지 4일간 진행하였으며 3월 11일 부터 3월 12일 이틀간 알고리즘 문제 풀이를 진행하였다. 6일간 평균 14시간 가량 팀원들이랑 같이 프로젝트와 알고리즘 공부를 하는 시간을 가져보았다. 향해 99를 진행한지 6일 밖에 지나지 않았음에도 벌써 중도 포기를 하는 사람이 나타나고 있었다. 아무래도 팀원과 많은 격차가 나는 ..
java stream stream 을 사용할 때 외부 변수가 필요한 경우가 있을 수 있다. 그러나 외부 변수와 stream을 같이 사용하는 경우에는 특별히 주의해야 할 점이 있다. Reference data type은 stream 영역 내에서 변경이 가능하지만 Primitive data type은 stream 영역 내에서 변경이 불가능하다. Primitive data type을 사용하기 위해서는 무조건 final or effectively final 변수만 사용 가능하다. 참고 내용은 아래에서 확인할 수 있다. https://cobbybb.tistory.com/19 람다 캡처링 :: Variable used in lambda expression should be final or effectively final의 이유 Inte..
항해 week1 - 회원가입 기능 구현 (아이디 중복 확인) 회원 가입 기능을 구현하였다. 완성 페이지를 우선 살펴보도록 하자. 회원 가입 기능은 어떻게 구현할까? 구현해야 하는 기능을 먼저 살펴보자. 기본 기능 1. id 중복 확인 2. 비밀번호 재확인 추가 기능 1. 아이디 포맷 확인 2. 비밀번호 포맷 확인 구현 순서 1. 회원 가입 페이지로 왔을 때 get 요청 처리 2. 아이디 중복 확인을 클릭 했을 때, db로 부터 id 중복 확인 3. 가입하기 버튼을 클릭 했을 때, 아이디 포맷 확인, 비밀번호 포맷 확인, 비밀번호 재확인 4. 모든 조건을 만족하는 경우 db에 사용자 정보 저장 1. 회원 가입 페이지로 왔을 때 get 요청 처리 이전에 좋아요 기능을 처리할 때는 get 요청 이 왔을 때 처리해야 하는 부분들이 많았다. 이번에는 그것과는 다르게 처리할..
항해99 - week1 좋아요 기능 구현하기 좋아요 기능을 구현하였습니다. 좋아요 클릭을 하는 부분이 두 곳이다. 1. 메인 페이지 카드 하단 부 2. 모달 페이지 하단 부 완료 작품을 아래에서 확인할 수 있습니다. Database 구현을 하기에 앞서 database에 어떤 내용이 들어가야 할지 생각을 해 보았다. 1. post_id: 어떤 게시글에 좋아요가 붙어 있는지 알 수 있어야 하기 때문에 게시글의 고유 id가 필요하다. (게시글을 저장한 db에서 _id로 저장되어 있는 부분이다.) 2. user_id: 좋아요를 누른 사람의 id를 저장해 놓았다. 3. type: 좋아요(heart) 라고 저장을 하였다. 추후 좋아요 뿐만 아니라, 엄지를 들고 있는 부분 등 추가적으로 확장 가능성이 열려 있기 때문에 type을 따로 지정하여 저장하였다. 1..
HTTP IP 주소를 통해 클라이언트와 서버는 상호 통신이 가능하다. (IP는 인터넷 주소) 패킷이라는 통신 단위로 데이터를 전달한다. 출발지와 목적지 IP를 적어서 IP 패킷을 전달한다. 클라이언트에서 서버로 가능 방법과 서버에서 클라이언트로 가는 방법은 다를 수 있다. IP 프로토콜의 한계 비연결성 - 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 비신뢰성 - 중간에 패킷이 사라지면? (패킷 소실) - 패킷이 순서대로 안오면? (패킷 전달 순서 문제 발생) - 패킷의 크기가 클 경우 나눠서 발송을 함, 보내는건 순서대로지만 도착은 순서대로 도착한다는 보장은 없다. 프로그램 구분 - 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면 (한개의 컴퓨터로 게임도 하고, 음악도 들고 다양한..
로그인 처리하기 - 서블릿 http 세션1 이전에는 직접 세션을 만들어 보았다. 이번에는 서블릿이 제공하는 HttpSession을 이용해보자 기본적인 동작 방식은 동일하다. 추가적으로 이번에는 세션 만료 기간을 적용할 수 있다. 한 번 코드로 살펴보자 상수 생성 계속해서 세션 key로 사용할 것이고 따로 클래스를 만들지 않을 것이기 때문에 interface로 생성을 한다. package hello.login.web; public interface SessionConst { String LOGIN_MEMBER = "loginMember"; } 계속해서 세션에 대해서 공부하고 있지만 헷갈릴 수 있으니 Controller의 역할을 먼저 정리하고 가보겠다. 주목해서 봐야하는 컨트롤러는 2가지이다. HomeController와 LoginControlle..