IDE & Framework/Spring

    [IntelliJ] codeStyle - naver code convention 적용하기

    [IntelliJ] codeStyle - naver code convention 적용하기

    0. 개요 coding convention? 소스코드의 작성 규칙을 정의한 것입니다. 소스코드의 일관성을 유지할 수 있고, 같은 규칙을 공유하는 팀원들이라면 빠르게 읽고 이해할 수 있어 유지보수에 도움을 줍니다. [네이버 핵데이 자바 코딩 컨벤션 내용 확인하기] [네이버 핵데이 자바 코딩 컨벤션 git repo] 어떻게 적용할까? 정적 코드 분석 도구를 사용해 적용합니다. 이를 사용해 적용하게 되면, 규칙에 알맞지 않은 코드가 존재할 시 컴파일이 되지 않도록 설정할 수 있습니다. 정적 분석 도구란? 소스코드, 바이너리 코드를 분석해 버그 및 취약점을 찾아내는 도구입니다. 컴파일 하지 않고 코드 자체를 분석하므로, 코딩 컨벤션의 규칙을 확인하기에 알맞습니다. 대표적으로 Checkstyle이 있습니다. 적용..

    Spring - MyBatis 설정하기

    Spring - MyBatis 설정하기

    0. 개요 개인 프로젝트를 할 때, 블로그 글을 보고 복사-붛여넣기로 의존성 설정을 해왔었는데요, 이번엔 좀 정확한 정보를 직접 보고 판단해서 설정하도록 공식문서를 보면서 의존성 설정을 하게 됬습니다. 1. 의존성 설정 Spring boot에서 DB툴로 MyBatis를 사용하기 위해서는 총 두개의 의존성 설정을 해 주어야 합니다. 하나는 MyBatis이고 하나는 MySQL Connector JAVA 입니다. MyBatis 의존성 설정을 통해 MyBatis와 Spring Boot의 통합 설정이 자동으로 이루어지고, MyBatis의 기능을 Spring Boot 애플리케이션에서 사용할 수 있게 됩니다. 그리고 MySQL Connector JAVA 의존성 설정을 통해 java 애플리케이션에서 MySQL 데이터베..

    [단축 URL 프로젝트 URLumberjack] - 기타 규칙 정의

    [단축 URL 프로젝트 URLumberjack] - 기타 규칙 정의

    0. 개요 서버 및 기술외에 프로젝트에 필요한 가이드라인이나 도구를 선택한 이유과 근거를 작성했습니다. 1. API 문서화 툴/프레임워크 RestDocs Swagger를 문서화 툴이라고 하기에는 조금 애매하지만, API별로 테스트도 가능하면서 API에 대한 스펙을 출력해주기에 RestDocs와 비교를 해 보았습니다. RestDocs를 선택한 이유는 다음과 같습니다. 스웨거만 사용해 봤기에, 사용해보지 않은 RestDocs에 관심이 갔습니다. 테스트코드를 작성하며 진행할 것이므로, 문서작성에 반드시 테스트코드가 필요한 RestDocs를 유지하는데 문제가 없을것이라 판단했습니다. RestDocs는 문서화를 위해 많은 클래스를 유지관리 해야 합니다. 그러나, Swagger는 프로덕션 코드가 지저분해지고, 이를..

    [단축 URL 프로젝트 URLumberjack] - 기술 스택 정의

    [단축 URL 프로젝트 URLumberjack] - 기술 스택 정의

    0. 개요 1. 기술 스택 Overview 1. Java 17버전 선택 이유 IT업계의 흐름을 따라가려면 높은 버전을 사용해야 한다 버전이 높아진 다는것은 코드 작성 더 간편하게, 안정성과 성능을 향상시킬 수 있도록 변화하는 것입니다. 굳이 잘 쓰고 있는데 바꿀 필요가 있나? 가 아니라, 적극적으로 학습하기 위해서 선택하였습니다. Java17은 LTS버전으로, 지원기간이 상당히 길다 java11은 26년까지 지원하며, java8은 30년까지 지원합니다. java17은 29년까지 지원으로 java8 급으로 안정적으로 사용할 수 있습니다. JAVA 출시 주기가 고정되어 명확해졌다 이제 JAVA의 출시 주기가 고정화 되어서 업데이트 지원이 필요한 시기를 안정적으로 예측할 수 있게 되었습니다. 또한 안정적으로 ..

    [단축 URL 프로젝트 URLumberjack] - devOps 정의

    [단축 URL 프로젝트 URLumberjack] - devOps 정의

    0. 들어가며 새 프로젝트를 시작하면서 가장 먼저 정해야 할 것은 서버 스펙입니다. 이를 정하는 데 있어서는 비용, 문서(공식 문서 및 구글링 문서량), 학습 난이도 세 가지가 가장 중요한 요소로 느껴졌습니다. 물론, 이는 상황에 따라 우선순위가 달라질 수 있지만요 ㅎㅎ 프로젝트를 진행할때 서버스펙에 관련하여 고민한 내용과 선택한 이유들을 정리해 보았습니다. 1. 서버스펙 overview 2. NCP(Naver Cloud Platform) 선택 이유 Cloud 비용이 가장 큰 비용 항목 중 하나이지만, 운이 좋게도 크레딧 지원을 받을 수 있게 되었기 때문에 이 큰 문제를 해결할 수 있었습니다. 또한, aws를 사용해온 경험이 있는 제게 NCP의 UI/UX는 쉽고 편안하게 사용할 수 있었습니다. 게다가 공..

    Spring boot 서버를 Gradle로 build해 jar로 직접 배포하기

    Spring boot 서버를 Gradle로 build해 jar로 직접 배포하기

    개요 spring boot 프로젝트는 jar 또는 war 파일로 배포할 수 있습니다. jar 파일로 배포하는 경우 : 내장된 톰캣서버 쨰로 배포할것이면 jar로 배포합니다. war 파일로 배포하는 경우 : 이미 WAS환경이 존재해 내장 톰켓서버를 빼고 배포하려면 war파일로 배포하면 됩니다. 그리고 빌드 관리도구(Maven, Gradle)에 따라 배포하는 방법이 다릅니다. 저는 Gradle을 사용하므로 Gradle 방식으로 배포하는 방법에 대해서 기술하겠습니다. 1. JAR 파일 빌드 릴리즈 전 jar파일을 만들어야 합니다. jar 파일을 만드는방법은 IDE를 사용하는 방법과 CLI로 terminal에서 진행하는 방법이 있습니다. 1-1.IDE 사용 inteliJ 더보기 alt + alt 로 Run An..

    [Spring] MyBaits Insert 후 ID 받기 (짧)

    [Spring] MyBaits Insert 후 ID 받기 (짧)

    방법은 두가지가 있다. 1. 처럼 사용하는 방법은 useGeneratedKeys="true"를 입력하고 KeyColum은 pk table명을, keyProperty는 해당 pk값을 넣을 변수명을 입력하면 된다. 위의 경우엔 Map 타입을 매개변수로 주었다면 servicdId-pk값 쌍이 map에 추가되고 DTO 객체를 매개변수로 주었다면 DTO의 serviceId 필드값이 pk값이 될 것이다. 2. INSERT INTO CP_SERVICE VALUES SELECT LAST_INSERT_ID() 처럼 쓰는방법도 있다. 파라미터로 넘긴 Service객체에 id가 int타입으로 주입되게 된다.

    [Spring] 관념지향 프로그래밍(Aspect Oriented Promgramming)

    [Spring] 관념지향 프로그래밍(Aspect Oriented Promgramming)

    AOP란? 어떠한 로직을 기준으로 핵심적인 관점과 부과적인 관점으로 나눠 각각 모듈화 하는 방식이다. 관점을 기준으로 모듈화 한다는 것은, 코드를 부분적으로 나누어서 모듈화하겠다는 것. 이 관심사를 Crosscutting Concerns(흩어진 관심사)라고 부르며 이를 모듈화 한것이 Aspect이다. 주요 개념 Aspect : 흩어진 관심사를 모듈화 한 것, Target : Aspect를 적용하는 곳 Advice : 실질적인 기능을 담은 구현체 JointPoint : Advice가 적용될 위치 PointCut : JointPoint의 상세 스펙 정의. ex) A메서드 호출 전,후로 호출할 것 스프링 aop 특징 접근제어 및 부가가능을 추가하기 위해 프록시 패턴 기반의 AOP 구현체를 사용한다. 스프링 빈..

    Spring DI, IoC

    Spring DI, IoC

    DI (Dependency Injection) 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴이다. 두 객체 사이에 인터페이스를 둬 클래스 레벨에서는 의존관계가 고정되지 않도록 하고, 런타임시에 관계를 주입하여 유연성 확보 및 결합도 낮춘다. public class MyRoom(){ private Desk desk; } public class Desk(){ } 에서 MyRoom 객체가 Desk 객체에 의존성을 지닌다. 여기서, public class MyRoom(){ private Desk desk; public MyRoom(){ this.desk = new Desk(); } } 일 경우 결합도가 매우 높다는 문제가 발생한다. 왜냐하면, 내 방에 어떤 물건이 있는지에 대한 관심이 분리되지 않았기 떄..

    [Spring] @Scheduled cron 표현식

    [Spring] @Scheduled cron 표현식

    단위 : 범위 초 : 0~59 분 : 0~59 시 : 0~23 일 : 1~31 월 : 1~12 or JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC 요일 : 1~7 or SUN MON TUE WED THU FRI SAT 기호 : 뜻 * : 모든 값 ? : 설정 없음 (일 또는 요일에만) , : 배열 (1,2,4 : 1,2,4만) - : 앞-뒤 범위 전체(1-3 : 1부터 3까지) / : 간격 (1/10 : 1부터 10마다 1,11,21,31...) 0 0 0 * * * 매일 00시 00분 00초에 실행 0 0 3,4 * * 2-6 월요일부터 금요일 00시 00분 3시,4시마다 실행 0 0 9/2 5 * * 매월 5일 9시부터 2시까지 00분 00초에 실행 0 30 1..