Backend
-
[DB] 인덱스로 조회시 개선되는 성능 확인해보기Backend/개발 2022. 2. 23. 20:33
DB의 인덱스 라는 개념이 분명히 우리가 목차나 여러가지 인덱스를 접할 기회가 많은데도 되게 와닿지 않는다고 느꼈다. 아무리봐도 이론으로 글만 보려니까 재미가 없어서 그런지.. 그래도 중요한 개념이라 정리해보고 있는데 그런김에 실습을 한번 해보았다. 현재 하고있는 토이프로젝트에 1년간 쌓인 게임 데이터는 총 1200개이고 한 판에 참가하는 인원이 10명이라 참가자에 대한 데이터는 12000개가 쌓여있었다. 만약에 챔피언ID를 기준으로 해당 챔피언을 사용한 게임을 조회한다거나, 뭐 count를 세서 기간내에 가장 많이 사용된 챔피언이 무엇인지 검색할 일이 있다면 !? 일단 mysql query 몇가지를 정리해본다. select count(*) as cnt from game_record_participant..
-
[Git] git add -p 로 변경사항 일부만 commitBackend/git,협업 2022. 2. 21. 15:53
commit할 때 최대한 커밋 메세지 컨벤션을 맞추고, 그에 해당하는 부분만 커밋하려고 하는데 가끔 한번에 여러가지 수정이 일어나게 되거나 잠시 주석처리, debug용 메세지를 남긴 상태로 한 파일을 일괄 add 하게되면 남기지 말아야할 기록이 함께 추가될 수 있다. 이때 git add -p를 사용하면 파일의 수정된 블록(hunk라고 부른다) 별로 add할지,말지 정할 수 있어서 커밋 히스토리를 깔끔하게 관리할 수 있다. hunk에 대해서 다음 문구가 뜨는데 []중 하나의 명령어를 입력하면 된다. - Stage this hunk [y,n,q,a,d,s,e,?] 수정된 파일의 hunk부분에 대해서 물어보는데 자주 사용되는 명령어는 다음과 같다. y - 해당 hunk를 stage 시킨다 n - 해당 hunk..
-
[Spring Boot] Validation 유효성 검증Backend/공부,개념 2022. 2. 17. 22:25
Validation - 유효성 검증 우리는 입력하는 값에 대한 유효성 검사를 해야할 필요가 있다. 단순한 예로 회원가입 ID/PW 값에 대해서도 ID는 4자리 이상이어야 하며, PW에는 소문자,영어,특수문자와 같은 문자들이 들어가야한다는 조건이 있다. 더 단순하게는 null에 대한 처리도 있을 것이다. 프론트엔드 단에서도 이 값에 대해서 검사를 하겠지만, 그것만 믿고 요청 부분에 유효성 검사를 하지 않으면 business, db 레이어에서 올바르지 않은 값으로 인해 서버에 문제가 생길 수 있다. 그렇다면 유효성 검사(Validation)은 어디서 해야할까? 데이터 검증이 여러 계층에 걸쳐서 이루어 진다면, 동일한 내용에 대한 검증 로직이 중복되거나 계층간 검증 로직의 불일치로 오류가 생길 것이다. 이를 ..
-
[Spring Boot] Controller의 Request data 받아오는 방식Backend/공부,개념 2022. 2. 12. 16:59
github에 정리한 내용 중 너무 복잡하거나 불확실한 내용 빼고 정리해서 다시 올려본다. SpringBoot에서 RestController 구현 시 요청을 받아오는 방법에 대해서 정리해보려고 한다. 지금 정리하는 방식에는 form data 형식의 요청은 일단 제외하고 클라이언트가 json형태의 데이터를 보내거나, url query에 담아서 보내는 방식만을 정리하려고 한다. ( content-type: application/json ) 1. HTTP Method 먼저, HTTP METHOD 중 GET, POST, DELETE에 대해서 간단히만 정리하면 다음과 같다. GET 리소스 조회에 사용 query(쿼리 스트링, 파라미터)로 전달 body 지원 일부 안함 (Getmapping일 때 requestBod..
-
[Spring Boot] Dto와 EntityBackend/공부,개념 2022. 2. 12. 16:33
DTO ENTITY 1. Entity JPA를 사용해서 개발하게되면 Entity클래스가 바로 DB테이블로 1:1 매핑되어진다. 따라서 테이블이 가지지 않는 컬럼을 필드로 가져서는 안되며 Entity클래스는 다른 클래스를 상속받거나, 인터페이스 구현체여서는 안된다. 이때 사용하는 Entity를 그대로 구현시에 사용하지 않기 위해서 Dto를 사용한다. 2. DTO ( Data Transfer Object) DB에서 꺼낸 데이터를 저장하는 Entity를 가지고 일종의 Wrapper의 역할을 한다. Controller계층 처럼 클라이언트와 직접 마주하는 계층에서는 실제 데이터인 Entity대신 DTO를 사용해 데이터를 교환한다. DTO는 특별한 로직을 가지지 않는 순수한 데이터 객체여야하며 Setter를 만들지..
-
[Spring Boot] Trouble ShootingBackend/개발 2022. 1. 27. 00:00
프로젝트 ControllerTest , 게임 조회 구현 기록 Jackson 버전 Pagable Pageable 객체 선언 방법 List를 Page로 바꾸는 방법 @PageDefault RequestParam에 List verify와 then should DeleteIn vs DeleteById vs DeleteInBatch Query로 Delete @Modifying의 clearAutomatically @Transcational @OneToMany의 Cascade와 orphanRemoval orphanremoval = true 매핑관계가 있을 때 delete(entity) 오류 findTopByOrderBy Jackson 버전 java.lang.NoClassDefFoundError: com/fasterx..
-
[Spring Boot] API구현 엔티티 설계 및 테스트 기록Backend/개발 2022. 1. 23. 13:20
프로젝트 에서 Spring MVC + handlebars 구조로 개발했던 웹페이지를 API용 백엔드와 React로 구현한 프론트엔드로 분리해보기로 했다. 같은 기능이지만 리팩토링할 부분이나 조금 추가해야될 기능들을 넣고, 계층별로 유닛테스트로 테스트코드를 모두 작성해보는것이 목표이다. 진행하면서 기록할만한 내용들 @IdClass Dto와 Entity @DataJpaTest @AutoConfigureTestDatabase JPA 양방향 매핑 Member - LeagueResult OneToMany + ManyToOne Enum default값 지정 Exception handling ErrorResponse ErrorCode 서비스 계층 테스트코드 작성 @IdClass PK가 여러개인 경우 PK만을 속성으로..
-
[강의] 스프링 핵심 원리 - 기본편 수료Backend/책,강의 2021. 12. 30. 01:58
김영한님의 스프링 핵심 원리-기본편을 완강했다 어떤 강의를 다 들은게 너무 오랜만인 것 같다. . 심지어 인프런 결제도 8월에 했는데 4개월동안 쉬다가,, 12월이 다돼서야,, 제대로 듣고, 다 이해해야지, 듣는중에 모르는걸 더 찾아봐야지 하는 마음으로 하다보니 포기하게되는 경우가 너무 많아서 이번에는 회사에서 짬나는시간에, 집에서 그냥 일단 1.5배속으로 틀어놓았다. 필기도 제대로 안했다. (라이브코딩만 따라함). 그래도 물흐르듯 진짜 잘 설명해주셔서 이해가 많이 됐다. 아마 한달뒤면 까먹을 내용일지도.. 일단 이 강의에 무슨 내용이 있는지 궁금했고, 내가 지금 막힌 부분을 이 강의에서 찾을 수 있는지가 궁금했다. 그 대단한 김영한님 강의에는 무엇이 있을까.. 일단은.. 내가 찾으려던건 spring s..