일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스프링
- 시나공
- python
- MYSQL
- softeer
- 백준알고리즘
- 자바
- 공부일지
- 1과목
- 소프티어
- 정보처리산업기사
- 코딩봉사
- CJ UNIT
- C++
- 알고리즘
- SW봉사
- 회고
- 백준
- 문제풀이
- kotlin
- 백준 알고리즘
- java
- SQL
- 파이썬
- 코틀린
- 프로그래머스
- 데이터베이스
- 코딩교육봉사
- programmers
- BFS
- Today
- Total
목록Application (141)
JIE0025
✅ 개요 JPA를 사용하기 위해 알아야하는 키워드가 너무 많아서 당황했었던 기억이 난다. ORM, JPA, Hibernate, .... 각 용어에 대해 알아보고, 무엇이 장점인지 좀더 명확하게 알아보면 기술을 좀더 제대로 이해하고 사용할 수 있다. 1️⃣ ORM Object Relational Mapping 한마디로 말하면 RDBMS의 테이블과 OOP를 연결하는 기술이다. 데이터베이스에 데이터를 생성, 수정, 읽기, 삭제하는 과정을 객체지향프로그래밍적으로 비즈니스 로직 단에서 좀 더 쉽게 다루기 위해 만들어진 기술이다. (자바 진영에 국한된 기술은 아님) 🖥 Example 만약 데이터베이스에 테이블이 있다고 가정하자. 회원 테이블에는 이름, 성별, 나이 등의 Column을 갖고 있다. 전체 유저를 검색하..
✅ 왜 인덱스는 B-TREE, B+TREE 자료구조를 채택했을까? 인덱스 구현을 위해선 대표적으로 해시테이블과 비트리가 존재한다. ⏺ 해시테이블 해시테이블은 Key value를 저장하는 데이터 구조로, 빠른 데이터 검색을 할때 유용하다. 따라서 해시테이블 기반의 DB인덱스는 컬럼의 값으로 생성된 해시를 통해 인덱스를 구현한다. 검색 속도도 해시테이블의 Key를 찾는 속도인 O(1)이다. 그러나 DB의 인덱스에서는 해시테이블을 사용하는 경우가 제한적이다. WHY? equal = 연산에만 특화되었기 떄문이다. 해시함수는 값이 1개라도 달라지면 다른 해시값을 생성하기 때문에 범위 검색 (> ⌈M2⌉⌈�2⌉, 최대 M�개의 서브 트리를 갖는다. 6. 모든 leaf node들은 같은 level에 있어야 한다. ⏺..
✅ 개요 Database와 SQL강의를 듣다보면 SELECT 문을 배우게 되는데 일반적으로 데이터를 출력한다 정도로만 배우지, 내부적으로 기능이 무엇이 있는지 정의 자체는 배운 기억이 나지 않는다. SELECT문을 통해 데이터 검색 기능의 원리에 대해 알아보자. ✍️ Selection 테이블에서 출력하고자 하는 행을 제한적으로 출력한다. 데이터베이스에서 원하는 부분집합 (subset)을 선택한다. 👩💻 간단한 예시 CUSTOMERS 테이블에서 AGE가 20 이상인 "행"을 선택한다. SELECT * FROM CUSTOMENRS WHERE AGE>=20 ✍️ Projection 테이블에서 출력하고자 하는 열을 제한적으로 출력한다. 👩💻 간단한 예시 CUSTOMERS 테이블에서 NAME과 AGE라는 "열..
✅ 개요 친구가 에러를 만났는데 도통 해결할 수 없다해서 도움을 요청했다. 나도 처음 만나본 에러메세지였는데 해결 방법을 떠올리는 과정에서 역시 어떤 기술을 공부할때엔 동작원리부터 공부해야한다는 것을 다시 한번 느끼게 되어서 이 글을 작성한다. ✅ 에러메세지 Hibernate: select b1_0.id, b1_0.created_at, b1_0.post_content, b1_0.post_image, b1_0.post_purpose, b1_0.post_title, b1_0.user_id from board b1_0 2023-04-26T00:39:40.857+09:00 ERROR 9968 --- [nio-8080-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servl..
✅ 목적 특정 키워드를 검색하기 위해 DB에 데이터를 조회하게 되면 LIKE %keyword% 이런식으로 접근하는데.... 게시물 본문과 같은 경우 글이 너무 많은 경우 그 안에서 키워드를 찾기란 쉽지 않다. 이런 경우에 검색 성능을 높이기 위해 고려할 수 있는것들이 존재한다. 쿼리 최적화와 더불어 인덱싱을 사용함으로써 성능개선에 도전해보게 되었다. ✅ 어떤 상황이었는가? (이전 설계의 상태 : ERD와 MySQL) 게시글(BulletinPost)와 장소(Amenity)는 뗄레야 뗄 수 없는 관계이다. ⏺ ERD BulletinPost와 Amenity는 다음과 같은 관계이다. 게시글 1개는 장소 1개를 가질수 있다. 장소 1개는 게시글 N개에 태그될 수 있다. ⏺ 요청 해당 API가 사용되기까지 과정은..
DTO를 생성하는 방법은 2가지가 있다. 1. 모든 요청/응답에 대한 파일을 분리하여 생성하는 방법 2. 한개의 파일을 정의하고, 내부클래스로 생성하는 방법 오늘 이야기할 DTO에서 추상클래스를 정의하는 것은 2번 한개의 파일을 정의하고, 내부클래스로 생성하는 방법에서 해당되는 이야기이니 참고 바란다)) ✅ 개요장소(Amenity) 데이터의 입력이 게시글(BulletinPost)작성시 Body로 들어오도록 설계되었다. 따라서 입력 데이터 역시 BulletinPostDto내부에 들어오게 되는데, 이때 Create와 Patch 클래스의 내부 필드가 유사함에 따라 DTO에 추상클래스를 만들어보는것에 대한 쟁점이 생겼다. ⏺ 원래 DTOpublic class BulletinPostDto { private sta..
✅ AOP ? Aspect Oriented Programming 관점지향 프로그래밍이라고 부른다. 여러 클래스에 나뉜 책임을 한곳으로 모아서 처리하는 접근 방식이다. 관심사의 분리를 통해 소프트웨어 시스템의 모듈성을 개선하는 프로그래밍 패러다임 ⏺ AOP는 왜 필요할까? : OOP의 한계 ✔️ OOP 객체지향 프로그래밍은 애플리케이션 설계할 때 역할과 책임에 따라 class를 분리하면서, 재사용성, 유지보수성을 크게 증가시켰다. ✔️ OOP의 단점 소프트웨어 시스템에선 로그/보안/트랜잭션과 같은 비기능적인 부분이 굉장히 중요하다. 그러나 비기능적인 부분은 모듈화가 어려웠다. 여러가지 모듈에서 공통적으로 사용되면서, 코드의 중복이 발생되었다. 어플리케이션 전체적으로 걸쳐서 흩어져있는 부가기능을 관심사 ..
✅ 개요 지도 API 를 사용하기로 결정되면서 장소에 대한 데이터를 우리 서비스에 저장해둘 필요가 생겼다. 프론트 분과 상의 후 KAKAO MAPS API를 사용하기로 되었고, KAKAO MAPS API의 데이터에서 어떤 데이터를 저장하고, 어떻게 데이터를 저장할지 설계가 필요했다. ✅ KAKAO MAPS (response) 먼저 카카오 맵이 특정 장소에 대해 어떻게 응답을 주는지 살펴보았다. ✅마이버디 데이터베이스에는 어떤 데이터를 저장해야할까? 서비스의 기능과 연결해 필요한 데이터만을 저장하도록 해야했다. 와 관련된 요구사항은 다음과 같다. 📣 요구사항1. 마이페이지에서 좋아하는 장소 리스트가 나와야한다. 1) 해당 장소를 클릭시 -> 장소가 태그된 게시글들이 나온다. 2. 검색페이지에서..
애견 소셜네트워크 서비스 마이버디 (MY BUDDY) https://my-buddy.co.kr/ ✅ 개요 특정 지역을 검색했을때 많이 태그된 게시물을 장소 추천해주는 기능이 기획되었다. 이때 특정 지역의 범위를 얼만큼 할건지, 필터링 기준 단위는 어떻게 할건지에 대한 고민이 있었다. 아이디어가 기획만 되고, 구체화되지 않은 상황에서 데이터 전처리가 필요하다는것은 명확했다. ✅ 준비 가장 먼저 팀원분이 전국 시군구 데이터가 있는 csv파일을 찾아주셨다. 국토교통부_전국 법정동 20221031 .csv파일을 확인해보니 시도명 / 시군구명으로 분리되어있음을 확인했다. 서비스가 전국구를 필터링 할 수 있게 제공할 것이었기때문에 읍면동이나, 리까지 선택하는건 과하다고 판단했다. 따라서 시도명과, 시군구명까..
✅ 데이터 확인 중.. 로컬에 많은 데이터를 추가해 성능 테스트를 해보기 위해 파이썬을 이용해 데이터 추가 스크립트를 작성하였고, 일단 5000개를 목표로 스크립트를 실행했다. 데이터가 잘 들어갔는지 확인하기 위해 MySQL workbench를 보았는데, primary key가 1000까지 밖에 안들어가진건지,, 왜 1000이 나오는건지 도무지 이해할 수 없었다. ✅ 데이터 보기 1000개 제한 해제 알아보니 데이터는 잘 들어갔으나, 1000개만 보여주고 있는것이었다. MySQL WorkBench > preference (윈도우면 Edit > preference) SQL Editor > SQL Execution > SELECT Query Results Limit Rows 의 체크를 해제시킨다. 이후 데이..