글또 9기 발돋움
·
활동/글또
글또를 지원하게 되기까지 취업을 준비를 시작하고 취업이 된 후에도 한동안 눈앞에 보이는 것에만 정신이 팔려 살았다. 꾸준히 작성해왔던 블로그도 소홀해졌고 외부 활동도 거의 하지 않았다. 오로지 삶의 밸런스를 잡아가는 것에 집중했다. 시간이 지나 대충 직장에 적응했고 여유가 생겨 자신을 돌아볼 시간이 생겼다. 글쓰기라는 것이 생략되었던 탓일까, 회사에서 한 것은 많은데 머리 속에 정리가 하나도 안 되어 있다는 사실을 알게 됐다. 여기에 더해 내 주변 사람들은 다들 커뮤니티, 스터디 등에 열심히 참여하며 성장하고 있는데 나는 집과 직장이 서울과 멀다는 이유로 커뮤니티 활동을 미뤄오고 있었다. 그렇게 회사와 집만 왔다갔다 하다보니 우물 안 개구리가 되어가고 있었고 내 성장이 더디다는 생각을 떨칠 수가 없었다...
Spring REST Docs 설정하기 (build.gradle & .kts)
·
Spring/Spring Boot
REST Docs Spring Rest Docs는 Spring MVC를 사용하는 REST API를 문서화할 때 사용하는 툴이다. 다양한 API 문서화 도구 문서툴 노션이나 깃허브 Wiki 등 문서 툴을 사용해 직접 API 문서를 작성하는 방식이다. 서비스 코드의 변경, 작성 실수 등의 이유로 인해 내가 작성한 API 스펙과 실제 코드의 API 스펙이 달라질 수 있다는 문제가 있다. Swagger 대중적인 API 문서화 툴이다. Swagger를 사용해서 API를 문서화하면 아래와 같이 서비스 코드에 Swagger 관련 어노테이션과 코드가 작성되어야 한다. 때문에 코드의 양이 방대해져 서비스 가독성이 떨어뜨릴 수 있는 문제점이 있다. @RestController @RequestMapping("/v1/cate..
Jacoco 설정하기 (build.gradle & .kts)
·
JAVA
Jacoco 자바코드의 커버리지를 체크할 때 사용하는 오픈소스 라이브러리이다. CI/CD와 연계해 테스트 커버리지를 충분히 채우지 못하면 배포가 되지 못하게 하는 등 구성원들에게 테스트 코드를 강제할 때 사용할 수 있다. 여기서 커버리지란 Test를 실행했을 때 Code가 얼마나 빈틈없이 실행됐는지 측정한 수치이다. Gradle 설정 Java 17 / Spring Boot 3.1.2 / Gradle 8.2.1 기준 build.gradle (groovy) plugins { id 'java' id 'org.springframework.boot' version '3.1.2' id 'io.spring.dependency-management' version '1.1.2' // 1. Jacoco 플러그인 추가 id..
Spring Boot 환경 QueryDSL 설정 (build.gradle & .kts)
·
Spring/Spring Boot
QueryDSLJPA에서 제공하는 객체지향쿼리인 JPQL(Java Persistence Query Language)을 통해 동적 쿼리를 구성하면 코드가 굉장히 난잡해진다는 것을 느낄 수 있다.JPQL은 문자열을 사용한다. 문자열을 조건에 따라 이어붙이는 형식으로 구성하기 때문에 생기는 문제가 있다. 문자열이기에 오타가 발생해도 컴파일 단계에서 에러를 잡아주지 못한다.(다만, NamedQuery를 사용하면 가능하다) 또한 동적쿼리를 구성할 때, 중간중간 if문에 의해 문자열이 추가되기 때문에 가독성이 떨어진다. 따라서 쿼리를 체계적으로 관리하기 어렵다.QueryDSL은 위와 같은 문제를 해결하기 위해 만들어졌다. Type-Safe한 쿼리를 사용하기 위해 엔티티와 매핑되는 정적 타입 QClass를 생성해 쿼..
데이터베이스 인덱스
·
CS/데이터베이스
인덱스를 사용해야하는 근본적인 이유인덱스를 사용하는 이유는 무엇일까? 효율적으로 조회하기 위해서 일 것이다. 그럼 왜 풀텍스트 스캔을 하면 시간이 오래 걸리고, 인덱스를 사용하는 것이 더 효율적일까?데이터베이스의 스토리지 엔진은 컴퓨터와 마찬가지로 하드디스크에 정보를 저장하고 읽어온다. 디스크는 아래 그림과 같이 구성되어 있다. 여기서 섹터는 하드 드라이브의 최소 기억 단위로 트랙의 일부이다. 만약 정보를 읽으라는 명령이 떨어지면 헤드와 암을 열심히 움직여 섹터를 탐색한다. 내용을 읽으려면 암과 헤드가 원하는 track으로 이동해야하고 (빙글빙글 돌고 있는 플래터의) 타이밍이 맞아 헤드와 섹터가 맞닿아야 한다. 이 과정 자체가 굉장히 느리기 때문에 효율적으로 디스크를 조회하려면 최소한의 섹터 범위 안에서..
2023 Spring Camp 근데 이제 현업 경험을 곁들인
·
활동/컨퍼런스
스프링 캠프? 3월에 막 입사하여 신입 개발자로 근근이 살아던 중 인프런에 재직 중인 부스트캠프 동기 김00 군에게 연락이 왔다. 아래 링크를 던져주면서 참가할 생각이 있냐고 물어봤다. [오프라인] 스프링캠프 2023 - 인프런 | 강의 애플리케이션 서버 개발자들과 함께 가치있는 기술에 관한 정보과 경험을 '공유'하고, 참가한 사람들과 함께 '인연'을 만들고, 시끌벅적하게 즐길 수 있는 개발자들을 위한 '축제'를 목표로 하는 www.inflearn.com 현재 회사의 핵심 기술스택이 스프링이었음에도 스프링 알못인 나는 스프링에 대해서 하나라도 더 주워들어야 했기 때문에 그 친구와 함께 참가하기로 결정했다. 스프링 캠프는 한국 스프링 사용자 모임(KSUG)에서 매년 진행하는 비영리 컨퍼런스이다. 가격은 3..