목록전체 글 (380)
Just Do IT!
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/curfYI/btsKdvWDEdW/30XGbOAiLWkjKFkQDD0DKK/img.png)
프로젝트에 북마크 기능이 있는데, boolean을 이용해서 삭제 여부를 update하는 soft delete를 구현하기로 했다.북마크 db가 따로 있고 로그인한 사용자가 특정 문제집을 북마크하는 것이다. 처음 북마크를 한다면 db에 새로운 북마크가 생성되고,북마크를 취소하는 경우 is_deleted가 true로 업데이트 되는 형식이다. 기능 구현 전에 api 명세서를 작성할 때는POST /api/books/{id}/bookmarkUPDATE /api/books/{id}/bookmark이렇게 두 가지를 따로 작성했었는데 토글 방식으로 구현할 수 있지 않을까 하다가 참고할만한 글을 발견해서적용해보았고 포스트맨으로 테스트까지 마쳤다. BookmarkResponse 생성@Getter@Builder@..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/FB9Ys/btsKeV0A8nF/GdzF9HBJNyxiFSsIDdEUs0/img.png)
문제집 삭제 기능을 포스트맨으로 테스트 해보려고 하는데 2024-10-22T10:38:04.046+09:00 ERROR 9084 --- [test-dodream-backend] [nio-8080-exec-5] c.d.t.common.exception.ErrorController : Name for argument of type [java.lang.Long] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag. 2024-10-22T10:38:04.086+09:00 WARN 9084 --- [test-dodream-backend] ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/vC2Sb/btsKdOAmI6P/HBVDmQ43YapMDzU6SShYZK/img.png)
ControllerAdvice전역적으로 ExceptionHandler를 적용할 수 있는 @ControllerAdvice와 @RestControllerAdvice 어노테이션을 제공하고 있다.@ControllerAdvice는 여러 컨트롤러에 전역적으로 ExceptionHandler를 적용해준다만약 특정 클래스에만 제한적으로 적용하고 싶다면 @RestControllerAdvice의 basePackages 등을 설정함으로 제한할 수 있다.@RestControllerAdvice는 @ControllerAdvice와 다리 @ResponseBody가 붙어 있어 응답을 JSON으로 내려준다 @RestControllerAdvice 와 @ControllerAdvice 의 특징과 차이@RestControllerAdvice 는..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/lvrTP/btsKdxL4kgF/bu1dzsivPcS3cLfBcjsUyK/img.png)
어느덧 시간이 흘러 교육 과정 마무리까지 한달도 채 남지 않았다.시간 진짜 빠르고...프로젝트 언제 하나 싶고 뭔가 조급하지만 그래도 이번주에 나름대로 순조롭게 흘러가서 다행이었다. 1. 디자인메인 페이지 디자인을 우선 먼저 해두었다. 피그마를 보면 겹치는 디자인이 많아서 한 번 정리해두면 나도 편하고 다른 팀원들도 편하기에 백엔드 기능을 구현하기 전에 프론트 쪽에 디자인을 했다. 이번에는 재사용성을 중점에 두고 생각해봤다. 물론 재사용성이라고 해봤자 디자인 틀 재사용이긴 하지만...우선은 중복되는 부분을 최대한 컴포넌트화하려고 했다. 스터디랑 문제집 카드가 전부 디자인이 동일하기 때문에 전체적인 큰 틀의 디자인은 동일하게 유지하고,카드 안에 들어가는 정보들만 조금 다르게 만들었다. 그렇게 해..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/nmin8/btsKcYi1Xu7/VnXZOEGlaDuWPQ9Lhl9etk/img.png)
이번에 dodream 프로젝트를 하면서, 검색창이 여러 페이지에 쓰인다는 걸 깨달았다.그래서 이번에는 나름대로 중복되는 코드를 줄이고 조금 더 효율적으로 프로젝트를 하고자component 폴더 안에 UI 폴더를 만들었고, 그 안에 여러 페이지에서 쓰이는 UI component들을 생성했다. 그 중 하나가 검색창 컴포넌트이다. import React from "react";import { FaSearch } from "react-icons/fa";const SearchInput = ({ value, onChange, placeholder, onSearch }) => { const handleKeyDown = (e) => { if (e.key === "Enter") { onSearch(); ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/7rg1A/btsJ9qmPnxW/kFXKBozPhTVsO4RCAnQRqk/img.png)
H2 Database를 사용하는 이유?H2 DB는 In-Memory DB로 스프링 애플리케이션과 함께 실행되며, 매우 가벼운 용량을 가지고 있다.복잡한 mocking 없이도 서비스 및 레포지토리 레이어를 테스트할 수 있기 때문에 mocking으로 인한 부분적인 오류나 가짜 성공(실 서비스에서는 오류가 발생하지만 mocking으로는 성공으로 표기되는 상황)을 방지할 수 있다.테스트 과정에서 데이터가 영향을 받지 않도록 한다.만약 다른 Database를 사용하는 경우, 테스트 데이터가 롤백되어 DB에 남아있지 않아도 auto increment로 지정한 id가 계속 증가되는 등의 문제가 발생할 수 있다.=> 테스트용 DB가 따로 필요하다.기존 Database 대신에 H2 Database를 이용하여 테스트를 하..
Vite란?빠르고 간결한 모던 웹 프로젝트 개발 경험에 초점을 맞춰 탄생한 빌드 도구개발 시 네이티브 ES Module을 넘어 더욱 다양한 기능을 제공번들링 시 Rollup 기반의 다양한 빌드 커맨드 사용 가능높은 수준으로 최적화된 정적 리소스들을 배포할 수 있게 미리 정의된 설정을 제공미리 bundle을 만든다필요한 소스코드만 건드린다. 공식 문서https://ko.vitejs.dev/ ViteVite, 프런트엔드 개발의 새로운 기준ko.vite.dev Create-React-App의 단점node_modules 용량이 크다빌드 속도가 느리다.UX나 SEO 측면에서도 좋지 않다.bundling이 느리다Webpack을 사용하는데 이는 라이브러리가 많은 경우 번들링이 오래 걸린다. CRA는 더이상 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/do7Rsu/btsJ287shcS/QQbhit39MGK36gYKdIY4y1/img.png)
지난번, KOSTA에서 교육 과정을 듣게 되었다며https://daydream-sy.tistory.com/311 프론트엔드 개발자 준비를 하다가 백엔드 개발자 준비로 전향했다작년에 내일배움캠프를 수료하고 꽤나 많은 일들이 있었다.우선 가장 큰 일은, 내가 개발자라는 직업을 본격적으로 준비하게 되었다는 점. 42서울 라피신 과정을 진행할 때까지만 해도 개발자daydream-sy.tistory.com이런 글을 작성했었다. 그 이후 시간이 제법 흘러서 어느덧 최종 프로젝트를 하는 기간이 되었다.항상 프론트엔드 파트만 맡았었고, 내배캠 최종 프로젝트 이후 제대로 프로젝트를 한 적이 한 번이라 이번에는 제대로 해보고자 마음 먹었는데 다행히도 2주차까지는 잘 진행되고 있다. 1. Github 활용하기이번 프..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cMT4CK/btsJ181i2YY/pUC7d4UHx9WmtYoUTKPXCK/img.png)
코딩 컨벤션해당 언어로 작성된 프로그램의 각 측면에 대한 프로그래밍 스타일, 관행 및 방법을 권장하는 특정 프로그래밍 언어에 대한 일련의 지침 (출처: 위키백과) 코딩 컨벤션을 사용해야 하는 이유소프트웨어 개발 비용의 80%는 유지보수에 쓰인다.소프트웨어 유지보수는 직접 개발한 개발자가 하는경우가 적다.코딩 규칙을 지키면 다른 사람도 코드를 더 빠르게 이해하고 가독성이 높아진다.즉 같은 컨벤션을 쓰는 사람끼리 서로 코드의 이해도가 향상된다. 따라서 협업하고 유지보수할 때 훨씬 더 가독성이 좋고 간편하다.그렇기 때문에 이번 프로젝트에서 인텔리제이 초기 세팅하고 시작하면서 아예 설정하기로 결정했다. JAVA의 코딩 컨벤션의 종류NAVER : 캠퍼스 핵데이 Java 코딩 컨벤션Google : Goog..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/PNSHe/btsJ2VG5ezU/22F6sang6QGMgVPKNKGbUK/img.jpg)
프로젝트를 위해 인텔리제이 유료 버전을 설치했다.설치하는 과정을 담은 블로그들은 많으니 생략하고, 프로젝트를 위해 설치한 플러그인을 정리해보려고 한다. 1. Atom Material Icons 프로젝트 구조 (패키지, 폴더, 파일 등)를 아톰 IDE 디자인을 적용해 아이콘 모양을 바꿔주는 플러그인이다. 적용하면 이렇게 모든 파일을 잘 구분할 수 있게 해준다. 2. Grep Console 콘솔창에 각각 상황별로 색상을 넣어서 좀더 가독성을 편하게 해줄 수 있다 settings > other settings > grep console 을 클릭해서 색상을 변경할 수 있다.나는 아직 프로젝트를 실행해본 적이 없어서 대충 작성했는데 추후에 변경할 예정이다. 3. Git Tool Box 협업 할 때 ..