본문 바로가기

전체 글

(30)
[java] 코딩테스트 벼락치기 dfs, bfs- 탐색이 동시성을 가지는 경우 (ex 한 칸 움직일 때 값이 변하는 경우), 최소거리를 찾아야하는 경우는 bfs가 낫다.dfs1. 체크인2. 목적지인가?3. 연결된 곳을 순회4. 갈 수 있는가?5. 간다6. 체크아웃bfs1. 큐에서 꺼내오기2. 목적지인가?3. 연결된 곳을 순회4. 갈 수 있는가?5. 체크인6. 큐에 넣는다- dfs 시작점 잘 보기. 여러번 for문으로 돌려서 여러 시작점에서 시작해야 하는 경우 있음- dfs 들어갈 때 들어가는 상태 맞추기 자료구조- 세그먼트 트리(빈출)- Trie 클래스 작성 예시(참고문제: 9202. Boggle)class TrieNode { TrieNode[] children = new TrieNode[26]; boolean isWord;..
[taka] swagger ui 달기 및 NoSuchMethod 오류 해결하기 Swagger ui란?Swagger UI는 RESTful API를 시각적으로 탐색하고 테스트할 수 있는 인터페이스로, 개발자들이 API의 엔드포인트와 그에 따른 요청 및 응답을 쉽게 확인할 수 있도록 돕는다. 이는 API 사용 방법을 명확하게 보여주며, API의 복잡한 구조를 한눈에 파악할 수 있도록 한다.Swagger ui 가 필요한 이유1. api 문서 작성 자동화 가능: 간단한 코드 추가로 API 문서를 자동 생성해주기 때문에 문서 작성에 드는 시간과 노력을 크게 줄여주며, 문서와 코드의 불일치를 방지한다. API가 변경될 때마다 수동으로 문서를 업데이트할 필요 없이, 코드와 함께 문서가 자동으로 최신 상태로 유지된다. 2. 개발, 테스트의 편리함: Swagger UI는 사용자가 브라우저에서 직접 ..
[taka] dto에 관한 고찰 Dto가 필요한 이유1. entity란 굉장히 여러 곳에서 사용되는 것이기 때문에, entity를 손댔을 때 api 스펙 자체가 변화하면 안된다. 즉, entity와 api가 1:1로 매핑되면 안된다. 또한, 실무에서는 회원가입 케이스가 많이 존재하기 때문에 (ex 사이트 자체 회원가입, 네이버 회원가입, 카카오 회원가입 등...) 하나의 entity로 여러 가지 케이스를 다 감당할 수가 없다. 그렇기 때문에 entity를 외부에 노출하여 외부에서 들어오는 entity를 @ResponseBody 로 바로 바인딩해서 쓰면 안되고, dto 를 활용하여 데이터를 받는 것이 좋다. 즉, api를 만들 때는 entity를 파라미터로 받으면 안되고, 외부에 노출해서도 안된다.  또한 entity 자체를 받아버리면,..
[taka] 예외처리란 어떻게 해야할까? 원래는 그냥 자체 회원가입을 진행하려고 했는데, 학교 학생들을 대상으로 한 서비스이다보니 학교 이메일 인증이 필수적이라고 생각해서 아예 아이디 대신 학교 이메일을 대신 사용하는게 낫겠다는 생각이 들었다. 그래서 userId 필드 자체를 없애버리고 학교 이메일로 대체했다. 그렇다면 이메일로 인증 코드를 발송하고 그것이 프론트단에서 사용자가 확인차 입력한 코드와 일치하는지 확인하는 로직이 추가적으로 필요했다. 그렇게 어려운 과정이 아닌 것 같았는데 원래 회원가입 하나로 구성된 api 엔드포인트를 인증번호 전송 / 인증번호 확인 / 회원가입 세 개의 엔드포인트로 나눠서 구성해야 했고, 그 과정에서 군데군데 에러가 터졌는데 예외처리를 세분화하지 않으면 어디서 에러가 터졌는지 찾기가 힘들어서 좀 까다로웠다. (계..
[COSE214] Data structures for disjoint sets disjoint set이란 intersection이 공집합인, 서로 공통된 원소를 가지지 않은 두 개 이상의 집합을 말하는 것으로 disjoint set data structure은 collection of disjoint set을 의미한다. disjoint set data structure은 3가지 연산을 제공하는데, make-set(x)는 x를 멤버로 하는 new set을 만드는 연산이고, union(x,y)는 x와 y를 각각 가지는 두 집합을 하나로 합치는 연산이며, find-set(x)는 x를 포함하는 집합을 찾아 그 집합의 대표 원소를 반환하는 연산을 말한다.  이 때 이 연산들의 time complexity는 항상 2개의 parameter m, n에 의해 정의된다. n은 make-set ope..
[taka] entity 수정 + Envers를 이용한 엔티티 변경 감지 @Data 대신 @Getter의 사용실무에서는 @Data를 지양하는데, 이는 setter가 남용될 경우 데이터가 쉽게 변화될 수 있기 때문이다. 이론적으로는 getter, setter을 모두 제공하지 않고 별도의 메서드를 두는 것이 가장 이상적이라고 하지만, 실무에서는 엔티티 데이터를 조회할 일이 너무 많아서 getter은 모두 열어두고 setter의 경우 열어두면 데이터가 변하고 어디서 변화했는지 찾기가 힘들어지기 때문에 setter 대신 변경 지점이 명확해지도록 비즈니스 메서드를 제공해야 된다고 한다. 유효성 검사는 어디에서 해야하는가?유효성 검사를 Dto에서 해야할지 엔티티에서 해야될지 찾아보았는데 - 원칙적으로는 두 곳에서 모두 유효성 검사를 하는 것이 좋겠지만 실무에서는 너무 많은 부분에서 중복..
[taka] db 설계, erd 작성 서론프로젝트 소개학생회, 동아리 등에서 대여사업을 진행할 때 주로 오픈카톡, 네이버 폼을 이용해서 진행하는 경우가 많은데 상당히 불편해보였다. taka는 여러 서비스를 동시에 이용하며 대여사업을 진행하는 대신 하나의 서비스를 이용해 대어 사업을 관리할 수 있는 모바일 웹 서비스이다. (* 원래는 프론트까지 만들어서 실제 사용을 해보고 싶었는데... 오랜만에 리액트 켜서 화면 하나 만들다가 일단 서버개발에 집중해야겠다는 생각이 ...;;) 이름은 왜 taka라고 지었냐고 물어보시면... 별 뜻 없다. 그냥 리포지토리 새로 팔 때 듣고있던 노래 제목이 taka였다. ㅋㅋ  요구사항 분석 db설계를 하려면 요구사항을 면밀하게 분석해야 한다. 먼저 필요한 기능들을 글로 정리해보았다. 분석한 요구사항들을 바탕으로..
[COSE214] Matroid A matroid and greedy algorithms optimization problem의 구조가 matroid라면, 그 문제는 greedy algorithm을 통해 최적해를 찾을 수 있다. 그러나 optimization problem이 greedy algorithm을 통해 해결된다고 해서 해당 문제의 구조가 항상 matroid 인 것은 아니다. Unit task scheduling problemunit task scheduling problem이란 a1부터 an까지 작업시간이 1이 걸리면서 각각 다른 deadline과 지키지 못했을 때 발생하는 penalties가 존재하는 여러 unit task들이 있을 때, penalties의 합이 최소화 되도록 작업 순서를 설계하는 것을 말한다. 이러한 uni..