전체 글
[Java] 자바 제네릭(Generic)이란, 제네릭 쉽게 이해하기
평소 제네릭을 사용은 했었지만 왜 사용하는 것인지, 어떤 역할인지 이해하고 있지 않은 것 같아 완벽히 이해하는 것을 목표로 정리해 봤습니다. 제네릭이란? 제네릭은 클래스, 메소드에서 사용할 타입을 외부에서 주입받는 것을 말합니다. 우리가 HashMap에서 으로 사용했던 것이 바로 제네릭입니다. HashMap map = new HashMap(); ArrayList arrList = new ArrayList(); 정의로는 제네릭이 무엇인지 감이 안 오지만 예제를 통해 쉽게 이해할 수 있습니다. 예를 들어, 우리가 숫자 리스트를 저장할 수 있는 ArrayList라는 클래스를 만들었다고 가정하겠습니다. public class main{ public static void main(String[] args) { A..
[Linux] 리눅스 Crontab - Could not find or load main class 에러 해결 방법
# CentOS 7 기준 에러 원인 리눅스 Crontab을 이용하여 shell script를 자동으로 실행하는 작업을 하던 도중 Could not find or load main class 에러가 발생했습니다. (command not found 에러 포함) shell 파일을 직접 실행하면 정상적으로 실행되지만 crontab으로 실행할 때만 에러가 발생해 구글링 해보니 Script in cron cannot find command 이 글을 통해 환경변수 설정 문제라는 것을 알게되었습니다. 직접 shell 파일을 실행할 때는 접속한 유저의 환경 변수를 사용하지만, crontab이 실행할때는 환경 변수를 찾을 수 없기 때문에 shell 파일에 환경 변수를 작성해줘야 합니다. 해결 방법 shell 실행에 필요한..
[Spring] Spring Boot, H2, Mybatis 연동하기(Gradle)
Spring Boot 프로젝트를 생성하고 H2 DB를 이용해 Mybatis를 연동하는 내용을 정리해보겠습니다. 개발환경 JDK 1.8 Grale IntelliJ Mac OS 1. Spring Boot 프로젝트 생성 https://start.spring.io/ 에 접속하여 Spring Boot 프로젝트를 생성합니다. Dependencies는 Spring Web, Thymeleaf, H2 Database, Mybatis를 추가합니다. "GENERATE" 버튼을 클릭하여 프로젝트를 생성하고 IntelliJ에서 폴더를 Open합니다. No matching variant 에러 발생 시 해결방법 프로젝트를 Open하자마자 No matching variant of org.springframework.boot:spri..
[Spring] 스프링 부트(Spring Boot)란? - 특징, 사용 이유, 시작하기
스프링을 처음 접했을때 Spring과 Spring Boot의 차이점을 몰라 Spring Boot도 많이 쓴다던데 이것도 배워야 하나 라고 생각했었습니다. 스프링을 쉽게 시작하기 위해 만들어진게 Spring Boot인데 말이죠😹 오늘은 Spring Boot란 무엇이고 왜 사용하는지, Spring Boot를 사용함으로써 얼마나 쉽게 프로젝트를 시작할 수 있는지에 대해 정리해보겠습니다. 스프링 부트란? 스프링 부트는 스프링 기반 애플리케이션을 쉽게 시작할 수 있는 프로젝트입니다. 옛날에는 스프링은 설정이 반이다 라는 말을 들었을 정도로 수많은 XML 파일(web.xml, root-context.xml, servlet-context.xml) 을 통해 라이브러리를 설정하고 호환성을 맞춰야 했습니다. 이미 스프링 ..
[Word] 워드 표 페이지마다 머리글 행 반복 안될때 해결방법
저처럼 삽질하는 분이 없길 바라며 메모합니다. 1. 머리글 반복 전체 해제 후 다시 체크 표 전체 선택 우클릭 - 표속성 - 행 탭 - 페이지마다 머리글 행 반복 체크 해제 - 확인 반복하려는 행만 선택(헤더) 우클릭 - 표속성 - 행 탭 - 페이지마다 머리글 행 반복 체크 - 확인 2. 텍스트 배치 없음으로 변경 표 선택 - 우클릭 - 표 속성 표 탭 - 텍스트 배치 - "없음"으로 변경 끝!
[Github] Fork해온 저장소에 잔디 심는 방법(커밋해도 잔디가 안심어질때)
자바 웹 프로그래밍 Next Step 책에 있는 저장소를 Fork하여 실습중이었는데 Fork한 저장소는 잔디가 심어지지 않는다는 사실을 뒤늦게 깨달았습니다 😂 저장소를 새롭게 clone하여 사용하는 방법도 있겠지만 그동안 심은 잔디가 사라지게 됩니다. 해결 방법 👍 git push --mirror 옵션을 이용하여 Fork해왔던 저장소를 새로운 저장소로 옮기면 됩니다. 1. 새로운 저장소 생성 생성 완료! 비어있는 상태 2. 지금까지 사용했던 저장소를 --bare 옵션 추가하여 clone (Fork해서 사용했던 저장소) git clone --bare old-repo.git 3. 새로운 저장소에 --mirror 옵션 저장소에 push 2에서 clone했던 저장소로 이동 cd old-repo.git --mir..
MongoDB에서 효율적으로 페이징 처리하기(pagination)
MongoDB Pagination MongoDB에서 페이징을 처리하는 방법은 여러 가지가 있습니다. 효율적으로 처리하기 위해 했던 고민들을 공유합니다. 개발 환경 Node.js(Express) mongoDB(Mongoose) ❌ Skip, Limit 처음 적용했던 방식은 mongoDB의 skip과 limit 기능을 이용해서 데이터를 건너뛰고(skip), 한 페이지에 보여줘야 하는 수만큼 제한(skip)하는 것입니다. 현재 3 페이지고 한 페이지에 10개의 데이터를 보여준다면 21~30 번째 글을 보여주면 되므로 skip(20).limit(10) 가 됩니다. db.students.find().skip(20) // 10개를 건너뛰고 21개부터 조회 db.students.find().limit(10) // 1..
nodeJS(typescript)에 swagger 적용하기
이전 글에서는 swagger 소개와 장점, 적용 방법에 대해 정리했었고 이번 글에서는 실제 프로젝트에 적용한 사례에 대해 정리해보겠습니다. 이전 글을 안 읽은 분이라면 읽고 오시는 것을 추천드립니다! 👇 이전글) swagger로 API 문서 자동화하기(nodeJS) 기술 스택 : Node.JS(Express), Typescript, MongoDB 예제 : github Swagger yaml 구조 Swagger Editor를 보면 전체적인 구조를 확인할 수 있습니다. json 같은 다른 데이터 포맷을 사용할 수 있지만 간결함을 위해 yaml 포맷을 사용했습니다. 💡 yaml이란? 데이터 표현 양식으로 다른 양식에 비해 사람이 이해하기 쉬운 형태를 가지고 있습니다. yaml은 들여 쓰기를 정확히 맞춰야 하며..