본문 바로가기

전체 글

(69)
@Transactional propagation이 동작하지 않는 문제 모든 코드는 github 에 있습니다. 들어가기 앞서... 다음과 같은 서비스 메서드가 있을 때, @RequiredArgsConstructor @Service public class HumanHandler { private final HumanRepository humanRepository; //passOneyear을 3번 호출한다. public void liveLife(Long humanId) { IntStream.rangeClosed(1, 3).boxed() .forEach(x -> passOneYear(humanId)); } //1살의 나이와 10cm의 키성장을 한다. @Transactional public void passOneYear(Long humanId) { Human human = huma..
점진적으로 Vue 프레임워크 적용하기 (Vanilla Js -> Vue) None Framework 프로젝트에 점진적으로 Framework 적용하기 0. 들어가기 앞서 None Framework 프로젝트를 프레임워크로 교체하기 위해서는 기존의 기능 및 디자인 등을 똑같이 다시 구현해야 하고, 이는 몇 개월 이상의 비용이 필요한 큰 작업입니다. 그런데 프레임워크가 적용되지 않은 프로젝트에 부분적으로 프레임워크를 적용할 순 없을까요?🤔 예를 들어 하나의서비스에서, 어느 페이지는 html로 만든 페이지이고 어떤 페이지는 vue 프로젝트를 build 하여 만들어낸 페이지인 것으로 말이죠. 이번 글에서는 점진적으로 프레임워크를 적용하기 위해 시도한 방법에 다뤄보려고 합니다. 기존 진행하던 프로젝트가 있다고 가정하여 간단한 예제를 만든 다음 일부 페이지를 Vue로 바꿔나가 보도록 하겠습..
트래픽을 상승을 위한 구글 SEO 완전 정복 SEO란? SEO(Search Engine Optimization)란 검색 엔진에서 나의 웹 페이지를 상위 노출하기 위한 작업을 말합니다. 구글 검색 엔진의 영향력이 증가하는 만큼 구글 SEO에 대한 관심이 늘고 있습니다. 이번 포스팅에서는 구글 검색 결과 랭크를 올리는 구글 SEO에 대해서 다뤄보겠습니다. SEO의 종류와 적용 방법 SEO는 크게 3개의 카테고리로 나눌 수 있습니다. 온페이지 SEO, 오프페이지 SEO, 온서프 SEO입니다. 하나씩 차례대로 살펴보겠습니다. 1. 온페이지 SEO (on-page SEO) 온페이지 SEO란 소유한 웹 사이트에서 수행하는 SEO 작업을 말하며 온페이지 SEO는 다시 '테크니컬 SEO'와 '콘텐츠 SEO'로 나뉩니다. 1) 테크니컬 SEO 테크니컬 SEO는 웹..
얕고 넓은 데이터베이스 지식 Mysql 기준으로 작성되었습니다. 용어 정리 스키마: DB, 테이블의 정의 내역 외래키: 어떤 테이블의 기본키가 다른 테이블의 컬럼에 들어 있는 경우 NoSql: 검색보다 저장속도가 중요한 경우에는 별도로 다루는 NoSQL과 같은 시스템을 고려할 수 있다. DML: 테이블의 데이터를 조작 (CRUD) DDL: 테이블의 스키마를 정의, 수정 (create, drop, alter) DCL: 테이블 접근 권한 (grant, revoke) join inner join: null값을 허용하지 않음 Left join: join의 왼쪽 테이블의 null값을 포함 right join: join의 오른쪽 테이블의 null값을 포함 view 생성 create view 뷰이름 as 셀렉트구문 삭제 drop view 뷰이름..
존 도어의 OKR 핵심 내용 정리 존 도어의 OKR을 읽어보았습니다. OKR에 대한 설명도 있지만 OKR을 토대로한 여러 기업들의 경험들을 엮은 책에 가까운 느낌이었습니다. (OKR을 잘 활용하기 위해서는 역시 경험이 쌓여야 하는 듯합니다) 그 중 OKR에 대한 이론적인 내용들을 정리해보았습니다. OKR이란? O OKR의 O는 목표(object)를 뜻한다. 성취해야 하는 대상으로써 구체적이고 행동 지향적으로 정하는 것이 좋다. 목표를 구체적으로 종이에 적어놓고 끊임없이 상기하는 것을 추천한다. KR OKR의 KR은 핵심 결과(Key Result)를 뜻한다. 목표 달성을 위한 방안을 모색하고 목표 달성 여부를 확인하는 수단으로 사용된다. 때문에 KR은 측정과 검증이 가능한 것으로 해야 한다. O 그리고 KR 목표는 우리가 나아가고자 하는 ..
001프로젝트 / '이벤트'방식으로 레이싱카 구현하기 '이벤트'방식으로 레이싱카 구현하기 001 Project? 001 Project란 어떠한 과제가 있을 때 그의 기초 단계인 0.0.1v을 만들어 보는 개념입니다. 이벤트 방식의 기초적인 부분을 다루고 있습니다. 모든 코드는 github에 있습니다. 이번 포스팅에서는 간단한 콘솔 어플리케이션을 이벤트 방식으로 구현해보면서 '이벤트'에 대해 간단하게나마 이해하는 시간을 가져보겠습니다. 간단한 콘솔 어플리케이션을 구현하자🕹 구현하려는 어플리케이션은 다음과 같습니다. 레이싱카 구현하기 - 게임에 참여하는 Car를 입력한다. - 매 라운드마다 참여하는 Car들 각자가 car.move(int count)를 통해 position을 이동한다. - 한 라운드가 끝나면 현재 1등을 콘솔에 찍는다. - 모든 라운드 끝나면 ..
클린 코드, 클린 코드 40 가지 원칙! 클린 코드 - 로버트 C. 마틴 '클린 코드'를 참고하여 '클린 코드 원칙 40'을 정리해보았습니다. 책에서 소개하는 원칙들을 세보면 100개도 넘을테지만 후반부에는 반복되는 것도 많고 한 마디로 정리하기 힘들 것들도 많아서 초반부 위주로 정리해보았습니다. 페이지도 함께 기재하였으니 해당하는 항목에 대해서 자세히 알고 싶으신 분들은 책을 참고하시길 바랍니다. 해당 포스팅은 클린코드 1st Edition 을 기준으로 작성되었습니다. 2013년 개정판을 참고하실때는 아래 기재된 페이지에서 34를 빼면 되실거예요. ex) 1판 35p → 2판 1p 클린 코드란? 단순하고 직접적이다 간단해서 버그가 숨어들지 못한다 하나의 기능만을 제공한다 중복이 없다 잘 쓴 문장처럼 읽힌다 짐작했던 기능을 그래도 수행한다 작성..
001프로젝트 / ThreadPoolTaskExecutor를 이용한 Spring에서 Graceful Shutdown 구현해 보기 001 Project? 001 Project란 어떠한 과제가 있을 때 그의 기초 단계인 0.0.1v을 만들어 보는 개념입니다. Graceful Shutdown의 기초적인 부분을 다루고 있습니다. 모든 코드는 github에 있습니다. 🤔 Graceful Shutdown? graceful shutdown 이란 실행 중인 작업이 완료된 후 애플리케이션을 종료하는 것을 의미합니다. 예를 들어 다음과 같이 15초가 소요되는 작업이 있습니다. @RestController public class MyController { @GetMapping("/task") public String task() throws InterruptedException { job(1); return "end"; } private void j..