전체 글 16

[글또 x 코드트리] 코드트리 대만족 한 달 사용 후기

코드트리와 첫 만남 학교에서 알고리즘 수업을 들은 것은 19년도였습니다. 무려 5년 전입니다.. 흠흠.. (어째서..) 작년 하반기부터 알고리즘의 중요성을 깨닫고 조금씩 풀고 있었습니다. 주로 백준과 Leetcode를 활용했습니다. 코딩테스트 경험이 많은 편은 아니지만, 제가 경험한 코딩테스트는 Leetcode 문제와 느낌이 다소 달랐습니다. 그래서 병행하게 된 백준, 백준은 문제를 무작위로 골라서 풀다 보니 제가 아는 개념과 모르는 개념을 분리하기가 어려웠습니다. 그렇다면 코딩테스트 관련 서적을 사서 봤으면 되지 않았을까..? 라기엔 저는 너무나 게을렀답니다.. 그러던 와중에 글또를 통해 코드트리를 체험해 볼 수 있는 기회를 얻었습니다. 글또에 참여하기를 잘했다고 느낀 여러 순간 중 하나였던 것 같습니..

기타 2024.03.02

Spring boot - bean validation

Validation이란? Controller는 클라이언트가 보낸 요청의 데이터를 검증할 책임을 갖습니다. 예를 들어 회원가입 로직을 처리하려면 다음과 같은 정보가 필요합니다. { "email": String, "password": String, "nickname": String, "job": String } 만약 클라이언트에서 email을 보내지 않고 다음과 같은 데이터를 보냈다면 어떨까요? { "password": "password", "nickname": "닉네임", "job": "대학생" } 이 경우 email 필드는 null로 처리될 것이고, 회원가입 로직을 처리할 수 없겠죠. 이와 같은 상황을 미리 방지하기 위해 요청의 데이터를 검증해야 합니다. 검증할 객체를 맵핑하자 먼저 검증을 하기 위해서는..

LeetCode 1926(Nearest Exit from Entrance in Maze) 풀이

문제 첫번째 시도 (오답) 방식: BFS 시간복잡도: O(n * m) 문제를 보고 BFS라고 바로 생각할 수 있었습니다. 시작 노드부터 가까운 순으로 방문할 것이기 때문에 방문 노드가 출구라면 가차없이 반환하면 됩니다. 저는 시작 노드로부터의 거리를 저장하는 distance_map: List[List[int]]를 통해 최소 거리를 관리했습니다. BFS로 돌면서 방문하지 않은 노드라면 최소거리를 업데이트하고 다음 방문 노드로 추가했습니다. 하지만 시간 초과 에러를 만났습니다. 제공받은 테스트케이스는 전부 통과했기 때문에 최적화를 고민하기로 합니다. from collections import deque class Solution: def nearestExit(self, maze: List[List[str]]..

Udemy - 옆집 개발자와 같이 진짜 이해하며 만들어보는 첫 Spring Boot 프로젝트 수강 후기

계기 많은 회사에서 스프링을 사용한다는 사실은 모든 개발자들이 아는 사실입니다. 저도 우리나라에서 가장 큰 커뮤니티를 가진 스프링을 한 번 접해보고 싶은 마음을 항상 가지고 있었어요. 그러던 찰나에 유데미에서 글또를 통해 강의를 지원해 주셨어요. 강의 이름은 바로..! [옆집 개발자와 같이 진짜 이해하며 만들어보는 첫 Spring Boot 프로젝트] 스프링을 맛보는 것이 목표였던 저에게 아주 적합한 강의라고 생각이 들었습니다. 프로젝트 생성 start.spring.io 사이트를 통해 스프링 프로젝트를 생성합니다. 저는 웹사이트에서 프로젝트를 생성하는 프레임워크를 처음 사용해 보았어요. 대체로 cli나 ide를 사용했거든요..! (Flutter - flutter create app_name, React -..

기타 2024.01.07

BOJ 2749 (피보나치 수 3)

문제 난이도: 골드 2 첫 번째 시도 방식: Memoization 시간복잡도: O(N) (O(10 ^ 18)) 피보나치를 구현할 때, 가장 먼저 접근해 볼 수 있는 방식입니다. import sys IN = sys.stdin.readline N = int(IN()) fibonacci_map = [0, 1] def fibonacci(i: int) -> int: if len(fibonacci_map) = 1000000: tmp %= 1000000 fibonacci_map.append(tmp) return fibonacci_map[i] print(fibonacci(N)) 하지만 Recursion 에러가 발생..

TDD, 클린 코드 with Kotlin 회고

우아한 테크코스를 운영하는 기관인 NextStep에서 진행하는 TDD, 클린 코드 with Kotlin 7기 과정을 수료했습니다!! 아직 마지막 미션의 리뷰를 기다리고 있지만..🥲 끝이 보이는 것 같아서 조금 미리 회고를 작성해보려고 합니다. 그게 뭐야? NextStep은 개발자를 준비하시는 분들과 현업에서 개발을 하시는 분들을 대상으로 제공하는 스터디입니다. 진행 방식은 다음과 같습니다. 매주 정해진 요일에 라이브 강의를 듣고 코딩 미션을 진행하게 됩니다. 각 미션마다 이전에 우수한 성적으로 수료하신 분들이 리뷰어로 매칭됩니다. 미션마다 존재하는 마일스톤(Step)을 달성할 때마다 PR을 올립니다. 리뷰어분들의 피드백을 받으면서 코드를 개선하고 머지합니다. 신청한 이유 안드로이드 공부를 계획하고 시간이..

회고 2023.12.10

[출시] 백그라운드 위치 정보 권한 선언을 업데이트해야합니다.

소비자와 꽃집을 연결해 주는 서비스 플룸을 출시하며 다음 오류를 만났습니다🥲 첫 번째, 세 번째가 같은 원인으로 발생한 것 같습니다. ‘민감한 앱 권한으로 이동’으로 이동했더니 다음과 같이 나왔기 때문입니다. 원인 꽃집의 위치를 직관적으로 보여주기 위해 flutter_naver_map을 사용했습니다. 지도가 기본으로 보여주는 위치를 현재 위치로 하기 위해 위치 정보 권한 선언이 필요했습니다. 그래서 AndroidManifest.xml에 다음과 같이 추가했습니다. fine → 정확한 위치 정보 coarse → 대략적인 위치 정보 background → 항상 위치 정보 허용 위와 같은 권한 요구가 포함된 appbundle을 심사에 올리려고 하니 다음 문구를 받았습니다. 앱에 백그라운드 위치 정보 액세스 권한..

일급 컬렉션 (First Class Collection)

NextStep의 TDD, 클린 코드 with Kotlin을 수강하며 일급 컬렉션에 대한 내용을 접했습니다. 적용하는 방법은 간단하지만, 개념은 간단하지 않아서 흥미로웠습니다. 일급 컬렉션?? 먼저 컬렉션에 대해 알아볼까요? 컬렉션(Collection)은 ADT의 일종으로 데이터의 개수가 변할 수 있는 데이터의 집합입니다. 우리가 흔히 사용하는 List, Set, Map 등이 포함됩니다. 그렇다면 일급 컬렉션은 무엇일까요? 일급 컬렉션이란 컬렉션 이외에 다른 멤버 변수를 가지지 않는 클래스를 말합니다. 컬렉션을 한번 더 랩핑했다고 이해해도 무방할 것 같습니다. 다음은 일급 컬렉션을 적용한 예시입니다. data class Todo(private val title: String, val isDone: Boo..

공부/Kotlin 2023.11.23

Kotlin의 data class

Kotlin에는 일반 class보다 데이터를 저장하기에 더욱 적합한 멤버 함수를 가지는 data class를 제공합니다. 문법 일반적은 class 선언문 앞에 data 키워드를 붙여 사용합니다. ex. data class Todo(val title: String, var isDone: Boolean) 생성자 외부에서 선언된 멤버 변수는 data class를 이용하는 특징에 대한 대상이 아니게 됩니다. 만약 다음과 같이 정의했다면, isDone 멤버 변수는 아래 특징에서 다루는 equals()/hashCode(), toString(), componentN(), copy()를 사용할 수 없습니다. ex. data class Todo(val title: String) { val isDone: Boolean =..

공부/Kotlin 2023.11.03

[기능] Firebase_messaging 연동 및 페이지 이동

푸시 알림은 모바일 앱을 운영할 때, 굉장히 중요한 기능 중 하나입니다. 오늘은 푸시 알림을 구현하는 방법에 대해 기록하고 공유해 보겠습니다. 푸시 알림 관련 설루션으로는 가장 유명한 것은 Firebase를 사용했습니다. 일단 무료인 점이 가장 크고, Firebase를 Flutter에서 잘 사용할 수 있도록 flutterfire라는 플러그인도 운영하고 있어 많은 Flutter 개발자들이 활용하고 있을 것이라고 생각됩니다. FCM을 이용하여 푸시 알림을 수신할 때에는 크게 3가지 로직이 필요합니다. Firebase로부터 메시지를 수신한다. 수신한 메시지를 notification으로 보여준다. 함께 오는 데이터인 link 정보를 활용해서 적절한 페이지로 이동시킨다. 3번에서 말씀드린 link 정보는 백엔드와..