목록전체 글 (95)
Hyun's Wonderwall
ERD를 설계할 때 컬럼을 NOT NULL로 설정하고, 엔티티 매핑을 위해 도메인 코드를 작성하다가 이것과 관련해 선택지가 많음을 알게 되었다. (사실 알게 된 지가 세 번은 넘었을 텐데, 정리를 해놓지 않았더니 헷갈려서 이번에 정리하게 되었다.)1. nullable=false컬럼을 NOT NULL로 설정하는 것. 엔티티와 매핑되는 테이블 생성을 위한 DDL 쿼리(create table)가 나갈 때, 컬럼에 NOT NULL 제약조건(constraints)를 걸어준다.이것은 데이터베이스 테이블 컬럼에 NULL 값이 삽입되는 것을 막는 것이어서, 서비스 로직에서 엔티티에 NULL이 들어오는 것은 아무런 에러를 발생시키지 않는다.2. @NotNullSpring Boot Validation 라이브러리(buil..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/1AhgK/btsIkAEO6mP/9nXMK9WrtwXYqmaoTmZnR0/img.jpg)
자바 스프링을 시작한 지가 벌써 1년이 넘었다. 시간이 무섭도록 빠르다!내가 스프링을 처음 공부했던 것은 작년 3월 인터넷 강의 스터디를 통해서였다. C++ 알고리즘 공부를 어느 정도 해본 상황이었어서, 자바 문법을 간단히 익히고 용기 있게 바로 스프링에 도전했었다. 그러나 얼마 못 가 내가 얼마나 무모했는지를 깨달았는데, 강의 자체도 어려운 강의였는데 나는 객체 지향과 웹 기초 지식(HTTP 등) 조차 없었다. 결국 막막한 이론 부분은 감만 잡고 넘어가버리고 코드를 따라 치고 구현하는 것을 확인하기 급급했던 기억이 난다.. 이론 지식이 빈약하다보니 프로젝트 실전에 뛰어들었을 때 더욱 많은 에러를 만났다. ERD 설계를 잘못하거나 Service끼리 필드 주입을 해주어 순환 참조가 나는 등... 프로젝트 ..
교내동아리 EFUB에서 SongPin 프로젝트를 진행중이다!개발 기술 스택은 프론트 - React, 백엔드 - Java Spring boot이고 AWS와 Docker로 배포할 예정이다.외부 API로는 Spotify Web API와 Kakao Map Web API를 사용하게 되었다.서비스에 음악 검색 기능과 지도 장소 검색 기능이 필요한데, 스포티파이 API를 통한 음악 검색은 백엔드를 거치고 지도 장소 검색은 프론트엔드에서 처리하기로 했다.핀이 1개일 때는 음악 상세보기로 이동하고, 핀이 여러개일 때는 장소 상세보기로 이동한다. 이에 따라 백엔드에서 나름의 클러스터링(?)을 하게 되었다.pinList과 placePinList(여러 핀을 묶은)를 구분해 배열에 담아 응답을 전송한다. 이전 Kidari 프로..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Lm61V/btsIgknp48T/BcogFJFSmGHCl71CxIdNVK/img.jpg)
따끈따끈한 소식! 어제 6월 27일 장충체육관에서 열린 Innovators Hive Seoul 2024 행사에 오거나이저로 참여하였다. 장충체육관은 밴드 콘서트를 보러 온 적이 있었는데 이곳에 일하러 오다니 감회가 무척 새로웠다. 현수막이 가장 먼저 반겼고 계단, 유리창 벽, 깃발까지 구글의 색깔로 알록달록 꾸며져 있었다. 기념으로 받은 티셔츠~!! Innovators Hive의 앞에 Google Cloud Summit 행사가 진행되어서, 대기하면서 이 행사도 조금 볼 수 있었다. 이렇게나 많은 분들이 모이는 행사에 와 있는 것이 신기해서 마음이 들떴다. 나는 GDSC 이화여대 소속으로 같은 동아리 멤버들과, 그리고 행사를 주관하신 GDG Seoul 분들과 Google Cloud Skills Boost ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dKRztk/btsIakI0FzW/4T6CYFyV6qJKKzG3RWybjk/img.jpg)
방 정리를 하다가 여태 모은 명찰 목걸이들을 모아 사진을 찍었다. - 제일 왼쪽부터 소개 - // 2022 1 - 2022 MaKING Jam(게임잼) TF // 2023 2 - 2023 NDM 게임전시회 참가 3 - 제1회 UNIJAM(게임잼) 기획자로 참가 4 - UNICON 2023 TF 5 - GDSC Ewha Server 멤버 6 - 2023 MaKING Jam TF 7 - GDSC Ewha Home Coming Day (행사 참여) 8 - 42서울 10기 카뎃 오리엔테이션 // 2024 9 - 눈꽃톤(서비스 개발 해커톤) 참가 10 - 제2회 UNIJAM TF 11 - 2024 NDM 게임전시회 참가 12 - 42서울 본과정 출입 카드 13 - GDSC Ewha 멤버 카드 어제 GDSC Ewh..
Minimum Spanning Tree- 무방향 연결 가중치 그래프. n개의 모든 정점 n-1개의 간선으로 연결.- MST는 유일하지 x 전체 트리의 가중치합.. GENERIC-MST -> A는 매 반복에서 선택된 안전간선들의 집합.A에 대해 safe edge (u,v)를 찾아서 A에 합한다. 그것을 A 가 최소신장트리 되기 전까지 반복GENERIC-MST(G,w) A 크루스칼(Kruskal) 알고리즘- forest를 이룸.- 가중치값 최소 간선 선택함. (cycle 생기지 않게)프림(Prim) 알고리즘- single tree가 계속 확장됨. (시작정점o)- 트리에 있지 않은 정점을 트리에 연결시키는 가중치값 최소 간선 선택함. Kruskal 알고리즘의 실행- 간선이 잇는 정점 이미 같은 집합 안에 있..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bNa7ZQ/btsH6vibfVw/wbpgA9N7CJC62VdtUfd0hk/img.png)
그래프 G = (V,E)- 정점 V, 간선 E.- 무방향, 방향 그래프- 차수: 인접 간선의 개수 (방향: in-degree, out-degree / 무방향: degree)- weighted graph 가중치 그래프- connected graph 연결 그래프. strongly connected 강연결 그래프.- 희소 sparse, 밀집 dense - 스택, 큐 그래프로 표현 가능 인접행렬 Adj[i][j]. Θ(V^2) 공간 필요인접리스트 Adj[v] = {1, 2}. Θ(V+E) 공간 필요. 시간복잡도 O(n)- 인접리스트 무방향이면 값 2번 있어야. 가중치그래프는 노드 (key,value) 로 구성.- |adj[v]| = out-degree 갯수 (각 정점의 외차수의 개수만큼 인접노드.)- 삭제랑 탐..
Huffman Codes 허프만 압축 (허프만 코드)- Binary character code. 각 문자는 고유 이진 문자열로 표현됨.* Fixed-length code: 고정길이 방식 (6개 문자 나타내는데 3bit 필요.)* Variable-length code: 가변길이 방식 (등장 빈도수 고려해 codeword 부여 가능. 자주등장-짧은 codeword. 굿) Prefix Codes: 어떤 codeword도 다른 codeword의 접두사가 아님- 인코딩과 디코딩에 용이. 각 문자를 나타내는 코드워드를 차례대로 concat하고 쪼개면 됨. (인코딩) "abc" -> 0.101.100 = 0101100 | (디코딩) 001011101 = 0.0.101.1101 -> "aabe"- 문자는 이진트리의 ..
Greedy Algorithms 그리디 알고리즘: 각 단계에서 최적의 수를 찾아 전역 최적해를 구함.- ex) 수업 시간표 짜기: (1) 젤 빨리 끝나는 과목 먼저 신청 (2) 첫번째 과목 끝난후 시작해서 젤 빨리 끝나는 과목 신청- 그리디 알고리즘은 지역 최적해로 전역 최적해를 구하는 방식. DP로 얻은 최적해보다 덜 최적일 수 있음. Activity Selection Problem 행동 선택 문제- 입력: n개의 행동이 담긴 집합 S = {1,2,..n}. 시작 시간 si, 종료 시간 fi라 할때 행동 i는 [si,fi)를 차지함.- 목표: 호환가능한. 안겹치는 행동들로 최대 개수의 행동을 하기. (시간을 얼마나 쓰는진 고려대상x)S = { [1,4), [5,7), [2,8), [3,11), [8,1..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Fjo2M/btsH6tSbCYw/PY4YBCmDazmGin9bay2B2K/img.png)
12.1동적 프로그래밍(DP): 격자(배열) 만들어 사용- 분할정복 DAC와의 비교: 문제를 부분 문제로 나누어 해결하는 것이 비슷.- DAC는 하위 문제들이 서로 독립적, DP는 서로 연관.- 하위 문제들이 겹침 -> DAC는 중복 계산하지만 DP는 table에 저장하는것으로 단 1번만 계산. DP 알고리즘 수립1. 최적해의 구조 특징을 찾는다.2. 최적해의 값을 재귀적으로 정의한다.3. 최적해의 값을 상향식(bottom-up)으로 정의한다.4. 계산된 정보들로부터 최적해를 구성한다. DP 알고리즘의 구성요소1. Optimal sub-structures 최적의 하위구조2. Overlapping sub-problems 겹치는 부분문제3. Memoization and reuse 메모이제이션과 재사용 Opt..