전체 글

전체 글

    JS 코드로 .css 파일 혹은 .js 파일 삽입하기

    개요 가끔 CSS 파일이나 JS 파일을 javascript 코드를 이용하여 동적으로 삽입하고 싶을 때가 있다. 그 때 아래의 코드를 이용하면 편리하다. 코드 if (document.getElementsByTagName("head") != null) { document.getElementsByTagName("head")[0].insertAdjacentHTML( "beforeend", ' />' ); } head 태그에 insertAdjcentHTML() 메서드를 이용해 추가해주는 방식이다. insertAdjacentHTML() 메서드는 문자열을 HTML 태그 형태로 바꾸어주는 역할을 하는 메서드이다. 레퍼런스 insertAdjacentHTML 메서드 설명 공식문서

    prefers-color-scheme 과 다크모드 적용 실무 팁

    prefers-color-scheme 과 다크모드 적용 실무 팁

    개요 다크 모드를 적용하다가 몇가지 시행착오를 겪었다. CSS 에서 @media (prefers-color-scheme: dark) 라는 부분에 대한 이해가 부족했기 때문이다. prefers-color-scheme 란? 요즘은 OS 에서 선호하는 컬러 모드를 설정할 수 있고, 그 결과가 prefers-color-scheme 이다. Mozilla CSS @Media prefers-color-scheme 공식문서 에서 자세한 내용을 볼 수 있다. 나중에는 다른 컬러를 지원할지 모르겠지만, 현재는 light 와 dark 중 선택하는 하는 것만 존재한다. 이 부분은 개발자가 임의로 javascript 로 변경할 수 없는 부분이며, OS 에서 설정하는 곳이 있다. 처음 다크모드를 개발할 때 이 부분을 내가 자바스..

    5월 4주차 주간회고 - 기술 회고

    5월 4주차 주간회고 - 기술 회고

    메이븐 배포에 대한 이해 부족이 있었다 Maven 이 제공하는 라이프사이클 중 어떤 것이 어떤 역할을 하는지 잘 이해하지 못했다. 그래서 배포한 앱이 잘 동작하지 않았을 때, 내가 잘못된 라이프사이클을 수행했다고 생각했다. 내가 헤맸던 곳 처음에 메이븐에서 deploy 라이프사이클이 제대로 돌지 않아 이 문제인줄 알았다. 그런데 알고보니 배포를 위해서 deploy 라이프사이클까지 돌릴 필요가 전혀 없었다. 그냥 pakcage 로 돌려서 나온 xxx.jar 파일을 바로 실행해도 무관했다. 이 링크 에서 도움을 얻게 되었다. deploy 는 메이븐 리포지토리에 배포할 때에 돌려야 하는 라이프사이클이라고 한다. 실제 문제 deploy 라이프사이클이 안 돌아가는 것은 웹서비스 배포와 무관했다. package 라..

    MSSQL 에서 1~10000 까지의 숫자 반복하여 출력하기

    개요 SQL 구문을 입력하다보면 가끔 '어디 FOR 문 같은 거 없나..?' 생각이 들 때가 있다. 그럴 때 약간의 흑마법을 이용할 수 있다. SQL ;WITH Nums AS ( SELECT n = ROW_NUMBER() OVER (ORDER BY [object_id]) FROM sys.all_columns ) 위와 같이 SQL 을 작성하면 1~30000 까지의 숫자를 반복하여 출력할 수 있다. 이를 다양한 곳에 응용할 수 있다.

    MSSQL 실무 쿼리 튜닝법

    개요 실무에서 모든 이론을 천천히 공부해서 쿼리를 튜닝하기엔 너무 늦다. 간단한 규칙을 지키며 최대한 튜닝해보자. 해야되는 것 PLAN 보기 PLAN 보기는 모든 튜닝 작업 중 가장 선행해서 이루어져야 할 작업이다. 이는 의사로 치면 치료 전에 진단을 먼저 해보는 것과 비슷하다. 인덱스 인덱싱은 쿼리의 빠른 실행에서 가장 중요한 역할을 한다. DB 는 순서가 있는 데이터를 검색할 때 가장 빠르다. 순서가 있는 데이터는 Binary Search 가 가능하고, Binary Search 가 가능한 순간 O(N) 의 복잡도는 O(log N) 으로 줄어든다. 서비스에서 많이 이용되는 검색조건이 있다면, 반드시 인덱스를 걸어주도록 하자. 조건문 유심히 보기 쿼리가 느린 이유는 보통 SELECT 에서 어떤 것을 선택..

    SQL Server 에서 인덱싱을 제대로 타지 못하는 다양한 이유

    개요 SQL 서버는 다양한 이유로 인덱싱을 타지 않을 때가 있다. 데이터가 많은데 인덱싱을 타지 않는 문제가 발생하면, 디비가 매우 느려진 것으로 착각하기 쉽다. 일반적으로 SQL SERVER 의 VARIABLE 타입 매칭이 잘 되지 않을 때 인덱싱을 타지 않는 문제가 많이 발생한다. 가끔 너무 깊은 DEPTH에 변수가 있을 때 인덱싱을 타지 않는다 여기서 DEPTH 가 깊다고 쓴 것은 서브쿼리 내부의 서브쿼리와 같은 경우를 의미한다. 종종 OPTION(RECOMPILE) 을 이용해 인덱싱을 타게 만들 수 있다. 단, PLAN에서는 인덱싱을 안타는 것으로 보이며 실행할 때만 적용된다. 프로시저의 매개변수를 그대로 이용했을 때 인덱싱을 타지 않는다 VARIABLE 을 새로 선언하고 SET 으로 다시 재할당..

    MSSQL (SQL Server) 에서 테이블의 주석 확인하는 방법

    개요 몇몇 DB 관리 도구에서는 테이블 주석을 보기 매우 불편하다. 차라리 쿼리를 날려서 보는 편이 편하다. 쿼리 SELECT A.TABLE_NAME, C.VALUE AS TABLE_COMMENT, A.COLUMN_NAME, A.DATA_TYPE, ISNULL(CAST(A.CHARACTER_MAXIMUM_LENGTH AS VARCHAR), CAST(A.NUMERIC_PRECISION AS VARCHAR) + ',' + CAST(A.NUMERIC_SCALE AS VARCHAR)) AS COLUMN_LENGTH, A.COLUMN_DEFAULT, A.IS_NULLABLE, B.VALUE AS COLUM_COMMENT FROM INFORMATION_SCHEMA.COLUMNS A LEFT OUTER JOIN SY..

    MSSQL (SQL Server) 에서 느린 쿼리 (슬로우 쿼리) 확인하는 방법

    슬로우 쿼리 확인 방법 SELECT TOP 1000 (qs.total_elapsed_time / qs.execution_count) as each_elapsed_time, st.text as query FROM sys.dm_exec_query_stats as qs WITH(NOLOCK) CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as st WHERE (qs.total_elapsed_time / qs.execution_count) > 1000000 ORDER BY each_elapsed_time ; MSSQL의 Dynamic Management Views를 이용하는 방식이다. 당연히 elapsed_time 이 높게 잡히는 쿼리가 슬로우 쿼리이다. 레퍼런스 레퍼런스..

    메이븐 유저가 꼭 알아야 할 메이븐의 골(Goal)과 페이즈(Phase)란 무엇일까?

    메이븐 유저가 꼭 알아야 할 메이븐의 골(Goal)과 페이즈(Phase)란 무엇일까?

    메이븐 빌드 라이프사이클 (Maven Build Lifecycle) 메이븐 라이프사이클은 빌드와 배포 중에 일어나는 작업들을 정의한 것이다. 빌트인으로 제공하는 것으로는 default, clean, site 가 있다. 메이븐 빌드는 타겟 프로젝트의 배포를 위해 특정한 라이프사이클을 따른다. 빌드인 라이프사이클로는 아래의 항목이 있다. default: 메인 라이프사이클로 배포에 대한 책임이 있다. clean: 이전 빌드에서 생성된 모든 파일을 지워서 프로젝트를 깔끔하게 만들어준다. site: 프로젝트의 사이트 문서를 만들어준다. 각각의 라이프사이클은 연속된 여러 개의 페이즈로 이루어져있다. 예를들어 default 빌드 라이프사이클은 23개의 페이즈를 포함한다. clean 은 3개, site는 4개를 포함한..

    메이븐이란? (What is Maven)

    소개 Maven 은 유대어로 지식의 축적자라는 의미를 가지고 있다. 자바로 관리되는 프로젝트를 관리하고 빌드하는데 도움을 주는 도구이다. 목적 빌드 과정을 쉽게 만들어준다 개발자가 빌드에 필요한 많은 세부지식을 모르더라도 프로젝트를 빌드할 수 있게 해준다. 물론 기본 매커니즘을 몰라도 된다는 이야기는 아니다. 획일화된 빌드 시스템을 제공한다 메이븐은 Project Object Model (POM) 파일과 함께 플러그인의 조합을 이용하여 프로젝트를 빌드한다. 한번 빌드 과정에 익숙해지면 메이븐으로 빌드되는 프로젝트를 살펴보는데 드는 시간을 매우 줄일 수 있다. 양질의 프로젝트 정보를 제공한다 프로젝트 소스코드에서 생성된 POM 파일에는 유용한 정보가 있다. 이를테면 다음과 같은 정보를 제공한다. Sourc..

    스프링 객체 검증 (Validation) 적용하기

    스프링 객체 검증 (Validation) 적용하기

    환경 스프링 부트 2.x 의 환경을 기준으로 한다. 의존성 설치하기 스프링 부트 버전에 맞는 spring-boot-starter-validation 의존성을 설치한다. 링크 의존성의 설치는 빌드 도구에 따라 다르다. maven, gradle 등 각 도구에 맞게 설치해주자. dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' } 객체에 애노테이션 추가하기 javax.validation.constraints 에 있는 애노테이션을 사용한다. public class MeetupCreationDto { @NotBlank(message = "모임의 이름을 입력해주세요.") private String name; ..

    git switch 명령어란?

    git switch 란? 브랜치를 변경(switch)하는 명령어이다. 생기게 된 이유 사실 브랜치를 옮기는데는 git checkout 이라는 기존의 명령어가 있었다. 그러나 이 명령어는 너무 많은 기능을 가지고 있어 문제가 됐다. 한 명령어가 너무 많은 기능을 가지게 되면 소위 객체지향에서 말하는 GOD Object 와 같은 설계가 탄생할 수 있기 때문에 git 시스템은 버전 업그레이드를 거치며 git switch 라는 명령어를 새로 만들게 되었다. 각각의 명령어는 어떤 책임을 가져가게 되었는가? checkout: 브랜치를 이동하거나 워킹 트리의 파일을 복원한다. switch: 브랜치를 이동한다. restore: 워킹 트리의 파일을 복원한다. 기존의 checkout이 명료한 명령어들로 나뉘었다. 단, 기..

반응형