나만의공부(이슈정리)

나만의공부(이슈정리)

MySQL LIKE % 위치에 따른 인덱스 사용 여부

서론 Table 내 어떠한 칼럼에 index를 설정하여 Like 문을 통해 검색하는 경우 INDEX 설정을 하였어도 % 위치에 따라 INDEX 가 정상적으로 작동하는 경우가 있지만 반대로 잘못 사용한 경우 Full Scan 이 발생할 수 있다. 이번글에서는 LIKE 검색에서 % 위치에 따른 INDEX 사용 여부를 하나씩 살펴볼 것이다. Table 구조 간단한 Member Table이며 더미 데이터수는 1만 개로 설정하였다. CREATE TABLE `Member` ( `id` int(9) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `address` varchar(255) NOT NULL, `age` int(11) NOT NULL, PR..

나만의공부(이슈정리)

Entity 설계 다시하기

해당 프로젝트를 진행한 지 좀 오래되었지만 정리는 꼭 해야 된다고 생각하여 좀 많이 늦은 감이 있지만 이제라도 작성해봅니다. 왜 잘못된 설계를 했는가? 해당 프로젝트의 게시판의 종류는 중고나라, 도서 리뷰, 구인구직, 강의 등이 존재한다. 현재 Entity의 설계는 게시판 종류별로 Table을 가지는 형태이다. 왜 이렇게 설계 했는가? 그때 당시를 생각해보면.. 팀원별 각자의 도메인을 따로따로 분배받아 만들다 보니 각자의 도메인에 맞는 CRUD를 우선적으로 완성하다 보니 이렇게 설계가 된 것 같다. (JPA와 데이터베이스 공부를 열심히 안 한 것이 제일 크지만..) 이때 당시에 프로젝트를 끝나고 느낀 점은 완벽한 설계는 아니더라도 어느 정도 Table 설계를 진행하여 공통적으로 묶을 수 있는 테이블에 대..

나만의공부(이슈정리)

토이프로젝트 다시한번 살펴보기!

이전 글과 이어지는 내용입니다. 안 읽어도 본문의 내용과는 상관없지만! 궁금하시면 읽어주세요! https://k3068.tistory.com/97 성장을 확인할 수 있는 척도는 무엇일까? 개발자로 성장하기 위해 1일 1 커밋 , 기술 블로그 활동을 하면서 해당 활동을 하면 분명 내가 남긴 기록을 통해 열심히 하고 있다는 것을 느낄 수 있지만 정말로 예전의 나보다 조금 더 좋은 개 k3068.tistory.com 오래된 토이 프로젝트를 리펙토링을 진행해보자. 어떻게 진행할까?! 솔직히 어느 부분부터 고쳐야 할지 막막했지만 저는 다음과 같이 기준 세우고 리펙토링을 진행했습니다. 도메인을 선택! 도메인 package 구조 파악하기! 도메인 Entity 파악! Controller -> Service -> Rep..

나만의공부(이슈정리)

어느 패턴을 사용해야 정답일까요??

게시판 통합 댓글 기능을 만들면서 생각했던 고민과 코드 구조에대해 말하고자 한다. 해당 기능의 목표는 Board 와 댓글간 연관 관계는 없다. 단 Reply Table 에서 각각의 Board 의 ID 와 Type 정보를 들고 있으며 게시글을 조회해오고 싶을때 Board ID 와 Type 에 맞는 row를 반환 할 수 있도록 하였다. 이에 따른 Reply Save 구조를 살펴 볼 것 이다. 소스코드를 먼저 살펴보자. @Service @RequiredArgsConstructor @Transactional public class ReplyService { public ResponseReply replySave(Long boardId, RequestSaveReply requestSaveReply){ //TODO..

나만의공부(이슈정리)

어설픈 객체지향은 안티패턴을 만들어낸다.

어설픈 객체지향은 안티 패턴을 만들어낸다. 스터디 프로젝트를 진행하면서 받았던 리뷰를 한번 정리하고자 합니다. 필자는 프로젝트를 진행하면 최대한 객체지향 적 코드를 짜려고 시도를 해봤다. 그중 공부하면서 보았던 Tell, don't ask 원칙(TDA 원칙) 즉 객체에게 물어보지 말고 시켜라는 의미가 있다. 해당 글을 읽고 내가 평소에 짜던 코드 방식을 다시 생각하는 시간을 가졌다. 따라서 해당 원칙을 사용하면서 안티패턴을 만들어낸 상황과 해결방법을 공유하고자 한다. 책임을 확실하게 구분하자. TDA 원칙을 따르면서 내가 간과한 부분은 객체에 대한 책임을 확실하게 구분하지 않았다. 우선 예제를 보자.(컨트롤러는 중요하지 않으니 생략하겠습니다.) //.. 롬복 생략 public class UsedItemR..

나만의공부(이슈정리)

[Spring-boot] CORS , SOP 개념 및 설정

CORS , SOP CORS 이슈는 개인 프로젝트 REST API 애플리케이션 개발을 하면서 겪었던 이슈이다. 이때는 CORS 가 뭔지도 몰랐다 ㅎㅎ. 일단 CORS 와 SOP의 개념부터 알아보자. SOP(Same Origin Policy) 일단 Spring-boot 의 기본적으로 아무것도 설정을 하지 않는다면 SOP 정책을 따른다. 그래서 SOP 가 무엇이냐면 자바스크립트 엔진 표준 스펙의 보안 규칙으로 같은 호스트, 같은 포트 , 같은 프로토콜 에서만 접근이 가능한 정책(Policy)이다. 그럼 SOP에서 Origin은 (같은 호스트, 같은 포트 , 같은 프로토콜)을 나타낸다고 보면 된다. 예를 들어보자면 Spring-boot로 아무런 세팅을 하지 않고 Application을 실행했을 때 서버의 포트..

나만의공부(이슈정리)

[JAVA] live -study 대시보드 만들어보기 (gitHub 라이브러리 사용)

과제 1. live-study 대시 보드를 만드는 코드를 작성하세요. 깃헙 이슈 1번부터 18번까지 댓글을 순회하며 댓글을 남긴 사용자를 체크 할 것. 참여율을 계산하세요. 총 18회에 중에 몇 %를 참여했는지 소숫점 두자리가지 보여줄 것. Github 자바 라이브러리를 사용하면 편리합니다. 깃헙 API를 익명으로 호출하는데 제한이 있기 때문에 본인의 깃헙 프로젝트에 이슈를 만들고 테스트를 하시면 더 자주 테스트할 수 있습니다. member 라는 객체를 생성하여 정보를 담고 관리하는 쪽으로 개발 했다. 구현 Class public class live_board { public static void main(String[] args) { try { Map members =new HashMap(); Stri..

jay Joon
'나만의공부(이슈정리)' 카테고리의 글 목록