-
백엔드 데브코스 12기 44일차
오늘 오전에는 이진 탐색, 파라매트릭 서치, 최대/최소 힙에 대한 이론을 공부했다. 이론 자체는 이해하는 데 크게 어렵지 않았는데, 오후에 배운 내용을 활용해서 알고리즘 테스트를 풀어보니 생각보다 훨씬 어려웠다.특히 힙은 코드 자체는 간단한 편인데, 문제를 보고 ‘힙을 사용해야겠다’고 떠올리는 과정이 가장 어려웠다. 이진 탐색도 단순히 이진 탐색을 구현하는 것보다 어떤 값을 기준으로 범위를 나누고 어떤 조건으로 탐색해야 하는지 판단하는 게 어려웠다. 역시 알고리즘은 이론을 이해하는 것과 실제 문제를 해결하는 것 사이에 차이가 큰 것 같다. 꾸준히 공부해야 한다는 걸 알고 있지만 귀찮다는 이유로 매일 실천하지 못하고 있었다. 이제는 귀찮음은 잠시 내려놓고 매일 하나라도 알고리즘 문제를 풀어보는 습관을 만들..
2026.09.10
-
[프로그래머스 Lv.2] 디펜스 게임(Java)
문제https://school.programmers.co.kr/learn/courses/30/lessons/142085 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이매 라운드마다 적의 수를 우선순위 큐에 저장하고, 무적권을 사용할 수 있는 k개의 라운드는 적의 수가 많은 순서로 처리하는 것이 유리하다.이를 위해 PriorityQueue를 사용한다. 기본 PriorityQueue는 가장 작은 값부터 꺼내는 최소 힙이므로, 지금까지 만난 적의 수 중 가장 작은 값을 poll()하여 병력 n에서 차감한다.pq.offer(enemy[i]);if (pq.size() > k) { n -= pq.poll();} 현..
2026.09.10
-
[Java] 이진탐색(Binary Search)
1. 이진 탐색이란?이진 탐색(Binary Search)은 정렬된 배열에서 원하는 값을 빠르게 찾는 탐색 방법이다.배열의 가운데 값을 확인한 뒤, 찾는 값이 가운데 값보다 작은지 큰지에 따라 탐색 범위를 절반씩 줄여가는 방식이다.따라서 배열의 크기가 커져도 탐색 횟수가 크게 증가하지 않는다는 장점이 있다.전제 조건이진 탐색을 사용하려면 배열이 정렬되어 있어야 한다.정렬되어 있지 않은 배열이라면 먼저 정렬해야 하며, 일반적인 정렬의 시간복잡도는 O(N log N)이다.2. 기본 이진 탐색int binarySearch(int[] arr, int target) { int l = 0; int r = arr.length - 1; while (l 가운데 값인 arr[mid]와 target을 비교하..
2026.09.10
-
백엔드 데브코스 12기 43일차
오늘은 Spring Security 학습을 마무리했다. 뒤로 갈수록 내용이 점점 어려워져서 수업을 따라가는 것도 쉽지 않았고, 나중에 직접 구현할 수 있을지 조금 걱정되기도 했다.프로젝트를 진행하면서 필요한 부분을 다시 찾아보며 익혀야겠다.... 오후에는 2차 프로젝트의 추천 알고리즘을 최종적으로 확정하고, 팀원들과 GitHub 브랜치 전략에 대해서도 이야기를 나눴다. 이제는 정말 개발을 시작할 수 있을 줄 알았는데, 예상보다 기획에 많은 시간이 들어갔다. 생각했던 것보다 개발 시작이 늦어진 만큼, 남은 기간 동안 계획한 기능을 제대로 구현할 수 있을지 조금 걱정된다. 그래도 이제 기획은 어느 정도 마무리된 만큼, 다음주부터는 본격적으로 개발을 시작해봐야겠다.
2026.09.10
-
백엔드 데브코스 12기 42일차
오늘은 오전에 Spring Security에 대해 공부했다. 수업 시간에는 최대한 열심히 따라가려고 했는데, 중간부터 난이도가 확 올라가면서 이해하기가 쉽지 않았다. 특히 UsernamePasswordAuthenticationFilter부터는 지금까지 배웠던 내용보다 훨씬 복잡하게 느껴졌다. 수업을 들을 때는 어느 정도 이해한 것 같아도, 막상 혼자 다시 정리하려고 하니 어디서부터 어떻게 정리해야 할지 조금 걱정된다. 복습하면서 흐름을 다시 잡아봐야겠다. 오후에는 다시 팀원들과 2차 프로젝트 기획에 대해 이야기를 나눴다. 다음 주 월요일까지 제출해야 하는 기획서는 거의 마무리했고, 이후에는 기능을 한 번 더 정리해보기로 했다. 그런데 구현하기로 했던 추천 기능의 알고리즘을 어떻게 구성할지 생각하다가 또 ..
2026.09.08
-
백엔드 데브코스 12기 41일차
오늘은 JWT(JSON Web Token)를 학습했다. 수업을 따라가면서 개념을 이해하는 데에는 크게 어렵지 않았지만, 직접 처음부터 구현한다고 생각하면 아직은 많이 헤맬 것 같았다. 특히 Access Token을 발급하고 검증하는 과정과 기존 API Key 인증 방식과의 차이를 이해하는 데 집중했다. 오후에는 2차 프로젝트에서 구현할 기능을 정리했다. 기능만 정리했는데도 약 3시간이 지나갔고, 이후 ERD를 만들고 팀원들과 확인하는 데 또 1시간 정도가 걸렸다. 생각보다 별로 한 게 없는 것 같은데 시간이 빠르게 지나가서 당황스러웠다.이번에 프로젝트 기획을 직접 해보면서 기획 단계가 생각보다 많은 시간과 고민이 필요한 작업이라는 것을 느꼈다. 단순히 기능을 나열하는 것뿐만 아니라, 실제로 필요한 기능인..
2026.09.08
-
[Spring] JWT 구현하기 | Access Token 발급부터 인증 처리까지
앞에서 JWT의 개념과 Access Token, Refresh Token의 차이를 알아봤다.이번에는 Spring에서 JWT를 이용해 실제 인증을 구현하는 과정을 정리했다.전체적인 흐름은 다음과 같다.로그인 ↓아이디·비밀번호 확인 ↓Access Token 생성 ↓Cookie에 Access Token 저장 ↓인증이 필요한 API 요청 ↓Cookie에서 Access Token 확인 ↓JWT 검증 ↓Payload에서 회원 정보 확인 ↓인증 완료1. JWT 라이브러리 사용하기JWT를 생성하고 검증하기 위해 jjwt 라이브러리를 사용할 수 있다.implementation("io.jsonwebtoken:jjwt-api:...")implementation("io.jsonwebtoken:jjwt-impl:...")imp..
2026.09.08
-
[Spring] JWT란? Access Token과 Refresh Token 이해하기
1. JWT란?JWT(JSON Web Token)는 JSON 형태의 정보를 안전하게 전달하기 위한 토큰 형식이다.기존에 사용했던 API Key는 단순히 무작위 값을 이용해 사용자를 식별했다.반면 JWT는 토큰 내부에 필요한 정보를 담을 수 있고, 서명(Signature)을 이용해 토큰의 위변조 여부를 확인할 수 있다.예를 들어 다음과 같은 정보를 JWT에 담을 수 있다.{ "id": 1, "username": "user2"}이러한 정보를 Claims 또는 Payload라고 한다.JWT는 대략 다음과 같은 구조로 구성된다.Header.Payload.SignatureSignature는 토큰의 내용과 서버가 가진 Secret Key를 이용해 만들어진다.따라서 서버는 Secret Key를 이용해 해당..
2026.09.08
-
백엔드 데브코스 12기 40일차
오늘은 개인 사정으로 오전 수업에는 참여하지 않고 오후부터 팀원들과 2차 프로젝트 아이디어를 결정하고 기획서를 작성하는 시간을 가졌다.처음에는 팀원분이 제안해주신 아이디어와 비슷한 사이트가 거의 없는 줄 알았는데, 직접 찾아보니 생각보다 유사한 서비스가 많아서 조금 당황했다. 그래도 기존 서비스와 완전히 똑같이 만드는 것보다는 우리만의 기능을 추가해서 차별화된 서비스로 만들어보기로 했다. 처음에는 구현 자체는 크게 어렵지 않을 것이라고 생각했다. 하지만 막상 기획서를 작성해보니 어떤 기능을 실제로 구현할 것인지 명확하게 정해지지 않은 부분이 많았고, 기능을 구체화하지 않은 상태에서는 기획서를 계속 작성하기도 어려웠다. 이 상태로 기획서를 억지로 작성하는 것은 의미가 없다고 생각해서, 주말 동안 각자 담당..
2026.09.04