psyoona의 등록된 링크

 psyoona로 등록된 네이버 블로그 포스트 수는 50건입니다.

[Design Patterns] Factory Design Pattern [내부링크]

Intro Factory design pattern은 객체를 생성하는 기능을 Factory class 에 위임한다. 그러면 Factory class는 주어진 변수에 따라서 다른 객체를 생성할 수 있다. Category · 생성 패턴(Creational Pattern) Content Factory design pattern은 별도의 Factory class를 만들고 그 안의 멤버 method를 사용해서 객체를 생성한다. Factory pattern은 일반적으로 작은 프로젝트나 class들이 단순할 경우에는 굳이 사용할 필요가 없다. 즉, 프로젝트 규모가 크고 비즈니스 class들이 있는 경우에 유용할 수 있다. 코드를 통해 설명을 하자면, 주어진 매개변수에 의해서 서로 다른 객체가 나올 수 있는 경우이다. .NET Framework에System.Net.WebReque.......

[Design Patterns] Prototype Design Pattern [내부링크]

Intro Prototype Design Pattern은 객체 생성 비용이 비싼 경우에 사용하는 디자인 패턴으로, 미리 prototype을 생성해둔 뒤, Clone해서 사용하는 방법이다. Category · 생성 패턴 (Creational Pattern) Content 프로토타입을 만들어둔 뒤, 필요한 옵션들만 추가/변경해서 객체를 만들 때 Prototype Design Pattern을 사용할 수 있다. 프로토타입 객체를 생성한 뒤 Clone만 하면 되는데, Clone을 하기 위해서는 모든 class의 조상인 Object의 method를 사용한다. System.Object class 안에서는 MemberwiseClone method인데, 객체를 shallow copy한다. 경우에 따라서는 Deep clone를 해야 될 수도 있다. Deep clone을 하기 위해서는 MemberwiswClo.......

[Design Patterns] Object Pool Design Pattern [내부링크]

Intro 객체 생성 비용이 비싼 경우에 사용할 수 있는 패턴 중에 Object Pool Design Pattern이 있다. Category · 생성 패턴 (Creational Pattern) Content Pool이란 단어에서 알 수 있듯이 어딘가에 임시 보관을 해놓고, 필요한 경우에 가져다 쓸 수 있음을 알 수 있다. 어딘가에 저장해놓기 위해서 별도의 Pool을 생성하는데, Pool을 생성할 때는 병렬처리에 문제가 되지 않는 타입을 사용해야 한다. 그 중 한가지로 System.Collections.Concurrent의 ConcurrentBag이 있다. 사용 방법은 System.Collections.Generic의 List와 유사한데, 병렬처리를 하더라도 TryTake method를 통해서 문제가 되지 않도록 처리할 수가 있다. 실제 ObjectPool Pat.......

[Design Patterns] Adapter Design Pattern [내부링크]

Intro 기존의 라이브러리나 시스템, 클래스 등을 재사용하려고 하는데, 현재 시스템과 맞지 않는 경우에 Adapter interface를 사용해서 호환되도록 할 수 있다. Category · 구조 패턴 (Structural Pattern) Content 기존 시스템을 사용하려고 하는데, 현재 구조와는 맞지 않아서 사용할 수 없는 경우가 있다. 이런 경우에 사용할 수 있는 디자인 패턴이 Adapter Design Pattern이다. Adapter 라는 단어에서 알 수 있듯이 중간에서 연결을 해주는 기능을 한다. 예를 들면 전기 콘센트에서 핸드폰 충전을 시킬 수 있는 '충전 어댑터'가 이에 해당하지 않을까 싶다. 전기에너지를 핸드폰이 사용할 수 있도록 도와주기 때문이다. 즉, 기존.......

[JavaScript] Signature pad library 사용 [내부링크]

Intro User browser에서 singature를 직접 그릴 수 있는 기능이 필요해서 찾아보던 중, signature pad library를 찾았다. 이 글에서는 signature pad에 대해 간략히 소개한다. Goal · Signature pad library 사용 Content signature pad를 사용하기 위해서는 html canvas tag가 필요하다. 그리고 해당 canvas를 parameter로 넘겨서 signature pad를 instance화하면 바로 사용할 수가 있다. panel과 panel-defulat class는 bootstrap3에서 기본제공되는 class이니, bootstrap3을 사용하고 있다면 굳이 두 classes를 추가하지 않아도 된다. 문제는 signature-pad > canvas 선택자이다. 여기에 width와 height가 들어가는데, 이렇게 class로 지정.......

[C#] Class library 사용하여 dll 참조하기 [내부링크]

Intro VB.Net framework 4.0 기반으로 만들어진 프로젝트를 보수해야 하는 일이 생겼다. Transparent하는 기능을 C#으로는 만들어 뒀는데, 위 환경에서 사용해야 했다. C#과 VB는 framework만 맞으면 호환이 가능하기 때문에 dll를 만들면 되는데, 이 글에서는 해당 방법을 정리한다. Goals · C# dll 생성하여 library 참조하기 Content 1. Class library를 생성하기 위해서 Visual Studio를 실행한다. 2. 우측 하단의 Create a new Project를 click한다. 3. class library로 검색하면 여러가지가 나오는데, .NET Framework를 선택한다. 4. 자신에게 필요한 Framework version을 선택 후 Create한다. 5. 프로젝트가 load되면 필요한 코드를 작성.......

[JavaScript] script defer attribute 적용 [내부링크]

Intro Web form으로 구성된 project에서 TxTextControl undefined javascript error가 발생했다. 해당 error가 발생한 이유 및 해결방법을 찾아보다가 defer라는 attribute에 대해 알게 되었다. Goal · defer 이해 Content defer라는 단어에서도 알 수 있듯이 해당 attribute를 script tag에서 사용하면 javascript의 실행 순서를 늦춰준다. 여기서 중요한 점은 javascript를 별도의 js file로 구성했을 때 issue가 될 수 있는 부분은 다운로드할 때와 실행할 때이다. 일반적으로는 다운로드가 완료되고 stack이 비어있으면 즉시 실행이 되겠지만, 이 실행 속도를 늦춰야 하는 경우가 있다. 현재 유지보수 중인 TxTextControl은 web form project.......

[T-SQL] Group by와 Partition by의 차이점 [내부링크]

Intro Group by와 Partition by는 데이터를 집계할 때 주로 사용된다. 대개 역할이 비슷한데, 어떤 차이점이 있을까? Goals · Group by와 Partition by의 차이점 이해 Content Group by를 사용하면 중복된 데이터가 제거된다. 예를 들어 학생별 과목점수 테이블을 생각해보자. 이 테이블에서 학생별 평균점수를 구하려면 다음과 같이 query문을 작성할 수 있다. 그러면 다음과 같은 결과를 얻을 수 있다. 이 예제에서 알 수 있듯이, Group by를 사용하면 중복된 데이터가 제거됨을 알 수 있다. 이어서 Partition by를 알아보면, 이런 식으로 사용할 수 있다. 그런데 실제로 실행을 해보면, 평균 점수는 구했지만 중복된 데이터가 존재한다. 즉, 의.......

[Web] URL과 URI의 차이점 [내부링크]

Intro 개발을 하다보면 어떤 문서에서는 URL이라고 하고, 어떤 문서에서는 URI라고 표기를 한다. URL과 URI는 비슷한 개념인 것 같은데 어떤 차이점이 있을까? Goals · URL과 URI 차이점 이해 Content URL은 Uniform Resource Locator)의 약자로 실제 자원이 존재하는 위치를 가리킨다. URI는 Uniform Resource Identifier)의 약자로 자원의 위치와 더불어 자원의 고유 식별자를 의미한다. 즉, URI에는 URL이 포함되어 있다. 예를 들어 http://yoonslab.com/Board/ShowArticle?boardNo=22 라는 URI를 보자. 이 URI를 구분하면 다음과 같다. 위 URI는 Board까지가 path이고, ShowArticle은 html page이다. 그러므로 Board까지가 URL이라고 볼.......

[T-SQL] 데이터베이스 이메일 설정하기 [내부링크]

Intro 이 글에서는 데이터베이스 메일을 설정하여 이메일 보내는 기능을 테스트한다. Goals · 데이터베이스 메일 기능 사용 Content 데이터베이스 메일 기능을 사용하기 위해서 우선 사용 중인 SQL Server의 version을 확인해야 한다. 만약 express version이 설치된 경우 데이터베이스 메일 기능을 사용할 수 없다. 버전을 확인하는 방법은 다음과 같다. Express version이 설치된 경우 다음과 같은 텍스트를 확인할 수 있다. 참고로 Developer edition을 설치하면 이 기능을 포함한 모든 기능을 사용할 수 있다. Developer edition은 다음 url에서 설치할 수 있다. https://www.microsoft.com/ko-kr/sql-server/sql-server-downloads 이제 데이.......

[C#] Delegate 사용 시 이벤트 구독 해제 [내부링크]

Intro Delegate를 사용해서 이벤트를 구독한 경우 해당 object를 dispose하기 전에 구독 해제하는 방법을 알아보자. Goals · Delegate event 구독 해제 · Delegate event 구독 해제를 해야 하는 이유 Content 본문에 앞서, delegate를 사용하여 이벤트 구독을 했을 때 왜 구독 해제를 직접 해줘야 할까? 이에 대한 설명을 msdn에서 찾을 수 있었다. 위 설명 중에서 중요한 부분은 여기다. 'In order to prevent resource leaks, you should unsubscribe from events before you dispose of a subscriber object.' 메모리 누수를 방지하기 위해서는 객체를 dispose하기 전에 이벤트 구독을 취소해야 된다는 말이다. 그렇다면 왜 메모리.......

[T-SQL] Deaklock issue 정리 및 로그 확인 방법 [내부링크]

Intro 프로덕션 환경에서 error report system을 통해 'Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim' 이라는 error message를 받았다. 바로 deadlock 문제인데, 이 글에서는 이 문제에 대해 설명 및 로그 확인 방법을 소개한다. Goals · Deadlock 이해 · Deadlock 로그 확인 방법 Content Deadlock은 한국말로 '교착상태'로 서로 원하는 리소스에 락을 걸고 다음 리소스에 락을 걸기 위해 기다리고 있는 상태이다. 예를 들면 다음과 같다. A, B sessions가 있고, Permissions와 Employees table이 있다고 가정하자. A session은 transacti.......

[T-SQL] Deadlock 발생 예제 [내부링크]

Intro 지난 글에서는 deadlock이 발생했을 때 확인하는 방법을 정리했습니다. 이번 포스팅에서는 deadlock을 발생시키는 예제를 확인해보겠습니다. Goals · Deadlock을 발생시키는 방법 Content 바로 예제를 살펴보겠습니다. 위 스크립트를 해석하면 다음과 같습니다. 1. Jobs라는 table을 생성합니다. 2. Deadlock이 발생할 수 있는 조건 중 하나는 index로 설정된 경우입니다. CREATE UNIQUE CLUSTERED INDEX를 통해 JobNo로 index를 생성합니다. 3. 데이터를 INSERT합니다. 4. INSERT된 데이터를 확인합니다. 위 예제대로 했다면 총 4,999개의 데이터가 출력되면 정상입니다. 이제 SSMS에서 New query를 클릭해서 다음 스크립트를 수행합니다.......

[C#] String interpolation(문자열 보간)과 String.Format 성능 비교 [내부링크]

Intro String interpolation은 제가 주로 사용하는 기능입니다. 비슷한 기능을 하는 string.Format도 있지만, 가독성이 떨어지기 때문에 별로 선호하지 않습니다. 가독성이 중요하지만, 성능에서 혹시 차이가 발생하지는 않을까?라는 의문이 들어 이번 포스팅에서는 두 기능의 성능 차이를 알아보겠습니다. Goals · Interpolation과 Format의 성능 비교 Content 두 기능의 성능을 테스트하기 위한 코드는 다음과 같습니다. [첫번째 실행결과] [두번째 실행결과] [세번째 실행결과] 위 실행결과를 토대로, 100,000번 수행했을 때 interpolation이 약간 더 빠른 성능을 보여줍니다. 그런데 혹시나, interpolation을 먼저 수행하게 되면서 속도에 영.......

[T-SQL] event_file의 최대 파일 크기 및 최대 파일 수 변경하기 [내부링크]

Intro SQL Server 초기 설치 시, system_health의 event_file의 기본 최대 파일 크기는 5MB, 최대 파일 수는 4로 설정되어 있습니다. 즉, 로그가 최대 20MB까지만 기록이 되는데, 실제 production 환경에서 발생하는 event를 기록하기에는 너무 적은 수치입니다. 이번 포스팅에서는 event_file의 최대 파일 크기 및 최대 파일 수를 변경하는 방법을 알아보겠습니다. Goals · event_file의 최대 파일 크기 및 최대 파일 수 변경 Content 1. SSMS를 실행한 뒤, system_health를 마우스 우클릭한 뒤, 세션 중지를 클릭한다. 2. 세션이 중지되면 system_health를 마우스 우클릭한 뒤, 속성을 클릭한다. 3. 세션 속성에서 데이터 스토리지를 클릭한다.......

[C#] Directory, File name 변경하는 프로그램 [내부링크]

Intro 특정 규칙으로 만들어진 directory와 file name을 변경해야 하는 업무가 생겼다. directory와 file의 개수를 모두 합치면 약 6,000여개. 이걸 하나씩 변경하는 것은 불가능하다고 판단되었기에 directory와 file name을 한번에 변경하는 프로그램을 만들었다. Goals · Directory, file name 변경 Content 이 프로그램은 매우 단순한 프로그램이다. Directory와 File name이 모두 xxxx 와 extension으로만 되어 있었기 때문에 directory와 file name을 parsing한 다음에 1000을 더해서 Move method로 이름만 변경하면 되기 때문이다. 처음에는 Direcotry와 File name을 동시에 변경하려고 했으나, directory 안에는 xxxx로 시작하는 확장자.......

[T-SQL] 트랜잭션 격리 수준(Transaction isolation level) [내부링크]

Intro T-SQL에서는 database를 설치할 때 READ COMMITED이 적용된다. 그 외에도 READ UNCOMMITED, REPEATABLE READ, SERIALIZABLE, READ COMMITED SNAPSHOT, SNAPSHOT이 있는데, 이 글에서는 해당 내용들에 정리한다. Goals · T-SQL에서 사용할 수 있는 트랜잭션 격리 수준 이해 Content 1. READ COMMITED Intro에서도 소개했듯이 기본 설정되는 격리 수준이다. A, B 두개의 세션이 있다고 가정했을 때, A session에서 transaction 내 데이터를 변경하고 있을 대, B가 A의 데이터에 SELECT만 하려고 해도 대기 현상이 발생한다. 이로 인해 DEADLOCK이 발생할 수 있다. 만약 A 세션에서 트랜잭션이 종료된다면, 접근이 가능하다. 정리하자면 READ .......

[Git] git reflog 사용 방법 [내부링크]

Intro Git을 사용하다보면 실수로 작업해놓았던 branch를 삭제할 수가 있다. 이런 경우에 gir reflog를 사용하면 삭제했던 commit을 복원할 수 있다. Goals · git reflof 사용방법 Content git reflog는 Reference logs의 약자로, local repository에서 branch와 reference가 업데이트된 시기가 기록된 것을 보여주는 명령어다. git reflog를 사용하기 위한 테스트 방법은 다음과 같다. 1. test branch를 생성해서 특정 txt file을 생성한다. 2. Commit을 한다. (commit message는 '유실된 commit'으로 했습니다.) 3. master branch로 checkout한다. 4. test branch를 삭제한다. 이런 상황이 발생하면 test branch에서 생성한 commit에.......

[Git] Git compare url 생성하기 [내부링크]

Intro git diff 명령어를 사용하면 변경된 파일과 수정사항을 확인할 수 있다. 하지만 command로 확인하기에는 조금 불편한 부분이 있다. Git을 사용한다면 GitHub이나 Bitbucket과 같은 원격 repository를 사용할 것인데, 이 글에서는 원격 repository에서 url을 생성해서 보는 방법에 대해 정리한다. Goals · 원격 repository에서 diff 사용하기 Content 우선 GitHub에서는 다음과 같이 사용할 수 있다. [owner]는 대괄호를 제거하고 owner를 대입한다. [Project name]은 대괄호를 제거하고 Project name을 대입한다. [old commit]은 대괄호를 제거하고 오래된 commit을 대입한다. [new commit]은 대괄호를 제거하고 새로운 commit을 대입한다.......

[Design Patterns] Singleton design pattern [내부링크]

Intro Singleton design pattern은 한 프로그램 내에서 한 개의 class가 단 한번만 instance화 되어야 하는 디자인 패턴이다. 즉, 프로그램의 어디에서도 접근할 수 있지만 그와 동시에 중복으로 접근해서는 안된다는 의미이다. 일반적인 환경에서는 굳이 Singleton pattern을 적용하지 않아도 문제가 되지 않겠지만 multi thread 환경에서는 문제가 될 수 있다. 언제 어떤 thread가 접근해서 해당 instance를 바꿔놓을지 모르기 때문이다. Goal · C#으로 Singleton design pattern 구현 Content Design pattern에서 Singleton pattern의 카테고리는 생성 패턴(Creational patterns)에 속한다. 생성 패턴이란 이름에서도 알 수 있듯이, 특정 클래.......

[Design Patterns] Builder Design Pattern [내부링크]

Intro Builder pattern은 복잡한 객체를 생성할 때 사용한다. Builder class에는 객체를 생성하기 위한 여러 step 혹은 부가 기능을 만들어두고, Director class에서 Builder의 여러 스텝들을 필요에 따라 조합하여 객체를 build할 수 있다. Category · 생성 패턴 (Creational Pattern) Content Intro에서 설명한 것처럼 Builder pattern을 구현하기 위해서는 일반적으로 Builder, ConcreteBuilder, Product, Director class를 사용한다. Builder에서는 build를 하기 위해 필요한 여러 step을 inteface로 만든다. Interface로 만들어두면, 상속을 받는 class에서는 반드시 해당 method들을 포함해야 한다. ConcreteBuilder는 Builder interface를.......

[C#] WaitAll과 WhenAll의 차이점 정리 [내부링크]

Intro C#에서는 비동기 처리를 할 때 Thread보다는 Task를 사용합니다. 이 글에서는 Task를 이용해서 비동기를 처리할 때 WaitAll과 WhenAll의 차이점에 대해 알아보겠습니다. Goals · Task WaitAll 이해 · Task WhenAll 이해 Content MSDN에서는 WaitAll을 다음과 같이 설명합니다. Waits for all of the provided Task objects to complete execution. 위 문장을 그대로 해석하면, 생성된 모든 Task 실행이 끝날 때까지 기다린다는 의미입니다. Task를 생성하면 개별 thread로 처리가 되는데, 그러면 Main thread는 해당 작업들을 기다리지 않고 프로그램이 종료될 수 있기 때문입니다. 예를 들어 다음 코드를 보겠습니다. 위 코드를 실행한 결.......

[IIS] Custom error page를 만들 수 없는 error code가 발생하는 상황 [내부링크]

Intro IIS에서 특정 error code는 custom error page를 만들 수 없습니다. 이 글에서는 custom error page를 만들 수 없는 error code가 어떤 상황에서 발생하는지 알아보겠습니다. Goals · Custom error page를 만들 수 없는 error code Content Custom error page를 만들 수 없는 error code는 400, 403.9, 411, 414, 500, 500.11, 500.14, 500.15, 501, 503, 505입니다. 각 error code는 다음과 같은 상황에서 발생할 수 있습니다. Descriptiion을 읽어보면 아시겠지만, 대체로 일반적인 상황에서 발생할 수 있는 에러들이 아닙니다. 또는 서버에서 request가 처리될 수 없는 상태이기 때문에 custom page를 보여줄 수 없는 경우들도 있습니다.......

[T-SQL] 대칭키로 암호화된 값을 저장하기 [내부링크]

Intro 대칭키는 해시값처럼 단순 비교가 아닌, 암호화된 상태로 저장을 했다가 필요할 경우 복호화해서 사용해야 하는 경우에 사용합니다. 예를 들면 api key 같은 경우 암호화해서 저장을 한 뒤, api server로 보낼 때는 다시 복호화를 해줘야 합니다. 이번 포스팅에서는 t-sql에서 AES 256 알고리즘을 사용하여 대칭키를 생성하고, 복호화하는 방법에 대해 알아보겠습니다. Goals · AES-256 알고리즘을 사용한 암호화 및 복호화 Content 대칭키 암호화를 하기 위해서는 인증서를 만들거나 password를 사용하는 방법이 있는데, 이 글에서는 password를 사용해보겠습니다. 우선 SYMMETRIC KEY를 생성해야 합니다. 예제에서 SYMMETRIC KEY는 syfir.......

[C#] Batch file 실행 시 에러 발생 여부 확인 [내부링크]

Intro C# 코드를 사용하여 batch file을 실행했을 때, 해당 process의 StandardOutput/StandardInput을 사용하여 stream을 읽어야 하는 경우가 있다. 이때, 에러가 발생한 경우에는 stream을 통해서 읽을 수가 없었다. 이 글에서는 error를 handling 할 수 있는 방법을 소개한다. Goals · Batch file process에서의 error handling Content 위 Summary는 msdn에서 발췌했다. 간략하게 설명하자면 batch file process에서 정상 실행인 경우 StandardOutput을 사용하고, error가 발생한 경우 StandardError를 사용한다는 내용이다. 그렇기 때문에 StandardInput이 아닌 StandardError를 사용해서 error를 받아내는 방법도 있으나, 그렇게 하면 Stan.......

[Git] Git checkout, switch, restore 차이점 [내부링크]

Intro Git 2.23.0 version에서 switch와 restore가 추가되었다. switch와 restore는 checkout이 분리된 명령어라고 하는데, 어떤 차이점이 있을까? Goals · git checkout, switch, restore 차이점 이해 Content 우선 git checkout에 대해 정확히 알 필요가 있다. git checkout은 두가지 기능을 하는 명령어이다. 첫번째는 branch를 변경하는 기능이고, 두번째는 modified인 file을 unmodified로 변경하는 기능이다. 즉, 분명하게 역할이 다른 기능이 동일한 명령어로 처리되고 있었다. 2.23.0 version에서는 이런 문제를 해결하고자, switch와 restore가 추가되었다. 이제 branch를 변경할 때는 git switch [branch name]을 사용하면 된다. 예를.......

[Git] 변경된 파일 리스트 출력하기 [내부링크]

Intro 이 글에서는 Git에서 변경된 파일 이름만 추출하는 방법을 알아보겠습니다. 추가로 한글 깨짐 현상에 대한 문제 해결 방법도 다루겠습니다. Goals · 변경된 파일 이름만 출력하기 · 한글 깨짐 현상 해결 Content 변경된 파일 리스트를 출력하기 위해서는 git diff 명령어를 사용하면 된다. 현재 수정된 파일이 있다고 가정을 하고, 다음 명령어를 입력해본다. 위 명령어를 실행하면 다음과 같은 텍스트가 출력될 수 있습니다.(변경된 파일이 무엇인지에 따라 리스트는 달라질 수 있습니다.) git diff 명령어에 --name-only option만 사용을 하면 간단하게 출력을 할 수 있습니다. 하지만 여기서 문제가 있습니다. 저는 테스트를 위해서 한.......

[Git] 여러 commit을 하나로 합치기 [내부링크]

Intro Git은 commit 기반이다. 그래서 review를 받다보면 commit의 수가 늘어날 수가 있는데, 이 글에서는 여러 개의 commit을 하나로 합치는 방법을 소개합니다. Goals · 여러 개의 commit을 하나로 합치기 Content 우선 테스트를 위한 커밋을 먼저 보겠습니다. 위 세 개의 commits을 하나의 commit을 합치기 위해, git rebase 명령어를 사용합니다. -i는 --interactive의 alias option으로 대화형으로 실행할 수 있는 옵션입니다. HEAD~3은 HEAD로부터 3개까지 수정 대상에 포함시키겠다는 의미입니다. 위 명령어를 입력하면 다음과 같이 vim editor가 나옵니다. 위 화면에 나온 주석들은 사용할 수 있는 option을 보여줍니다. 여기서 사용할 o.......

[Git] Git stash 사용법 [내부링크]

Intro A 기능을 개발하던 중, B 기능의 우선순위가 높아져 먼저 개발을 해야 하는 경우가 있습니다. 이런 경우에 A 기능을 개발하던 코드를 commit을 해놔도 상관은 없지만, 그렇게 할 경우 나중에 commit을 깔끔하게 유지하기 위해 추가 작업이 필요할 수 있습니다. Git에서는 이런 상황에서 사용할 수 있는 기능으로 stash를 제공합니다. 이 글에서는 git stash를 사용하는 방법을 소개합니다. Goals · Git stash 사용법 Content 현재 1.txt와 2.txt를 수정한 상태라고 가정을 해보자. git status를 입력하면 아래와 같이 나올 것이다. 1.txt와 2.txt를 임시 저장하기 위해 다음 command를 입력한다. git stash만 입력해도 되지만, 위와 같이 사.......

[Common] CI/CD란 무엇일까 [내부링크]

Intro CI/CD는 Continuous Integration/Continuous Delivery의 약자인데, 정확히 어떤 의미인지 알아보겠습니다. Goal · CI/CD 개념 이해 Content 드림코딩 엘리님은 CI/CD를 다음과 같이 정의했다. Application 개발 단계부터 배포까지 모든 단계들을 자동화를 통해서 조금 더 효율적이고 빠르게 배포하는 것 얄코 라디오에서는 다음과 같이 정의했다. 코딩 이후 최종 배포까지 하는 과정에서 진행하는 일들로 보통은 '자동화한다.'는 의미로 사용된다. 서로 정의한 바는 다르지만, 공통점은 자동화라고 생각한다. 개발부터 배포까지 어떻게 자동화를 해낼 것인가이다. 하지만 회사마다 개발부터 배포까지의 프로세스가 다를 수 있기.......

[Security] catch절에서 jquery의 html method 사용 [내부링크]

Intro Snyk code를 사용해서 취약점 분석을 하던 중 3rd party library javascript catch절에서 jquery의 html method를 사용하는 부분을 발견했다. 이는 XSS(Cross-site Scripting)공격이 발생할 수 있는 부분으로 솔루션이 필요한 상황이었다. Content 예시 코드는 다음과 같았다. 이 코드가 문제가 되는 이유는 exception에서 html을 사용했기 때문이다. 이미 예외라는 상황이 발생을 했는데, 어떤 예외 상황이 발생했는지 알 수 없다. 진짜 어플리케이션의 로직에 문제가 있었을 수도 있지만, 최악의 경우 해커의 공격시도였을 수도 있기 때문이다. 이때, exception에 XSS 공격을 담은 string이 들어왔다면, client browser에 해당 악성 스크.......

[CSS] CSS 우선순위 정리 [내부링크]

Intro CSS는 우선순위가 정해져 있습니다. CSS가 의도한 대로 적용되게 하기 위해서는 우선순위를 생각해서 작성해야 하기 때문에 이 순서를 정리해보겠습니다. Goals · CSS 우선 순위 Content CSS 우선순위는 다음과 같습니다. 1. !important를 붙이는 경우 2. HTML tag에 style attribute로 지정한 경우 3. HTML tag에 id로 지정한 경우 4. HTML tag에 class로 지정한 경우 5. HTML tag 이름으로 지정한 경우 6. 상위 element에 의해 상속된 경우 번호가 낮을수록 우선순위가 높습니다. 따라서 !important를 사용하는 경우 다른 영역에서 지정된 CSS는 모두 무시됩니다. 그렇다면 동일하게 !important가 적용되어 있는 경우에는 어떻게 될까요.......

[HTML] Viewport meta tag 내용 정리 [내부링크]

Intro 모바일웹이나 반응형웹 페이지를 제작할 때, HTML에 viewport meta tag를 사용해야 합니다. Viewport meta tag가 무엇인지 간략하게 알아보겠습니다. Goals · Viewport meta tag 이해 Content Viewport meta tag는 다음과 같이 사용합니다. 여기서 별도로 수정할 필요 없이 그대로 가져다 사용하셔도 무방합니다. width=device-width는 장치에 따라 페이지 너비를 적용하기 위한 설정입니다. initial-scal=1.0은 웹 브라우저에서 페이지 로시 확대 or 축소를 어느정도로 할 것인지를 설정합니다. 100%기본으로 사용하기 위해서는 1.0을 넣으면 됩니다. 다음과 같은 html이 있다고 했을 때, 어떤 결과가 나오는지 알아보겠습니다.......

[T-SQL] HASHBYTES를 사용하여 암호 저장하기 [내부링크]

Intro 데이터베이스에 암호를 저장할 때는 일반적으로 암호화를 해서 저장합니다. 이 글에서는 HASHBYTES를 사용해서 암호를 저장하는 방법을 소개합니다. Goals · HASHBYTES 사용 방법 Content HASHBYTES function은 총 2개의 파마리터를 받습니다. 첫번째 파라미터는 적용할 알고리즘이고, 두번째 파라미터는 암호화시킬 값입니다. 아래와 같이 테스트를 해볼 수 있습니다. 그러면 다음 값이 SELECT됩니다. 첫번째 파라미터로 사용할 수 있는 알고리즘은 다음과 같습니다. · MD2 · MD4 · MD5 · SHA · SHA1 · SHA2_256 · SHA2_512 두번째 파라미터 'password'에 실제 패스워드를 전달하면 됩니다. 위 결과는 'password' str.......

[C#] Ping check하는 source code [내부링크]

Intro 웹사이트를 운영하다 보면, 해당 사이트에 문제가 생긴 경우 빠르게 대처하기 위해서 잘 동작하고 있는지 체크해야 할 필요가 있습니다. 이 글에서는 Ping을 check하는 소스코드를 공유합니다. Goals · Ping check 소스코드 이해 Content C#에서는 System.Net.Sockets에 있는 TcpClient를 사용하면 ping을 check할 수 있습니다. TcpClient를 instance화 한뒤, BeginConnect method에 url, port, callback method, parameter를 전달하면 됩니다. 이후 callback method에서는 TcpClient instance의 Connected 값이 true/false인지 여부를 체크하면 됩니다. 연결이 되었으면 true가 return되고, 연결이 되지 않은 경우 false가 return됩니다. .......

[Programmers] 모음사전 C# 문제풀이 [내부링크]

Problem 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다. 단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요. Restrictions · word의 길이는 1 이상 5 이하입니다. · word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다. Solution 이 문제는 주어진 문.......

[C#] RijndaelManaged를 사용한 암호화/복호화 [내부링크]

Intro 어플리케이션 안에 특정 사용자의 비밀번호를 static한 값이 필요한 경우, 변수에 assign을 해두면 해킹당할지도 모른다는 두려움이 있습니다. 이 글에서는 어플리케이션에 암호를 직접 기록해둘 때, 암호화시켜서 필요할 때 복호화해서 사용할 수 있는 RijndaelManaged class 사용방법을 소개합니다. Goals · RijndaelManaged class 사용 방법 Content RijndaelManaged class는 AES 알고리즘을 사용합니다. 비트의 키 길이는 128, 192 또는 256까지 지원이 되는데, 프로젝트 구성에 따라 차이가 있습니다. .Net Framework를 사용하는 경우 위 세가지 중에서 선택해서 사용할 수 있으나 기본값으로 128 비트를 사용합니다. 반면 .Neet Core.......

[Programmers] 삼각 달팽이 C# 문제풀이 [내부링크]

Problem 정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요. Restrictions · n은 1 이상 1,000 이하입니다. Solution 이 문제는 2차원배열에서 필요한 index에 접근하여 값을 설정하고, 값이 설정된 값(0이 아닌 값)만 순서대로 가져오면 된다. 예제에서 n = 4인 경우를 보면 다음과 같이 접근하면 된다. 위 숫자 0, 1, 2, 3이 i를 의미한다. i가 0인 동안에는 각 행(x)을 증가시킨다. i가 1인 동안에는 열(y)을 증가시킨다. i가.......

[Programmers] 주식가격 C# 문제풀이 [내부링크]

Problem 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return하도록 solution 함수를 완성하세요. Restrictions · prices의 각 가격은 1 이상 10,000 이하인 자연수입니다. · prices의 길이는 2 이상 100,000 이하입니다. Solution 이 문제는 지문을 이해하는 것이 무엇보다 어려웠다. 가격이 떨어지지 않은 기간을 묻는다고 되어 있는데, 만약 단 한순간이라도 가격이 떨어졌다면 더이상 볼 필요가 없다. 즉, 떨어지기 직전까지만 카운트를 하면 되고, 떨어졌다가 다시 원가보다 오르는 경우는 고려하지 않는다. 이 전제조건만 알 수 있다면, 쉽게 풀 수 있는 문제이다. [소.......

[Windows] Hyper-V를 사용한 가상머신 만들기 [내부링크]

Intro Windows 10 Pro부터는 VM ware나 Virtual box를 사용하지 않더라도 자체적으로 제공하는 기능인 Hyper-V를 사용해서 가상머신을 생성할 수 있습니다. 이 글에서는 Hyper-V 설정 방법 및 가상머신을 생성하는 과정을 알아보겠습니다. Goals · Hyper-V 활성화 · 가상머신 생성 Content Hyper-V를 활성화하기 위한 requirements는 다음과 같습니다. · Windows 10 Enterprise, Pro or Education · 64-bit processor with second level address translation (SLAT) · CPU support for VM Monitor Mode Extension (VT-c on Intel CPUs). · Minimum of 4 GB memory. 과정에서는 설치하려는 운영체제의 iso file이 필요합니다. 이 글에서는 Windows.......

[Security] Penetration test 정리 [내부링크]

Intro Penetration test를 직역하면 침투 테스트이다. 회사에서 Penetration test에 대해 조사할 일이 생겨서 짧게 정리해두려 한다. Goals · Penetration test 이해 Content Penetration test는 침투 테스트라는 말 그대로 실제 어플리케이션에 하는 침투 테스트를 의미한다. 침투 테스트라고 하니까 뭔가 새로운 개념같지만 그렇지는 않다. 우리나라에서는 오래 전부터 "모의 해킹"이 있었는데, "모의 해킹"이란 말 자체가 실제 하는 일과 맞지 않았다고 한다. 해외에서는 이미 Penetration test라는 말을 사용하고 있었고, 이에 따라 우리나라에서도 "모의 해킹"이라는 말 대신 "침투 테스트"라는 단.......

[Network] 프록시(Proxy) 개념 정리 [내부링크]

Intro Penetration test를 하기 위한 tool 중 Burp Suite가 있다. 이 어플리케이션은 프록시를 활성화시킨 뒤, request를 위/변조 할 수 있다. 이번 포스팅에서는 프록시가 무엇인지 정리한다. Goals · 프록시(Proxy) 이해 Content 프록시는 컴퓨터 네트워크에서 중간자 역할을 한다. 예를 들어 클라이언트와 서버가 있을 때, 중간에 프록시 서버를 통해서 통신을 할 수 있다. 이런 구조의 이점 중 하나는 캐시다. 일반적으로 웹 브라우저를 사용하게 되면 html, javascript, css, image 등은 캐시가 된다. 캐시가 되면 동일한 file을 server에서 다시 가져올 필요가 없다. 하지만 한 PC에서만 적용이 되기 때문에 다른 PC에서는 동일한 파일이라.......

[Programmers] n^2 배열 자르기 C# 문제풀이 [내부링크]

Problem 정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. 1. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. 2. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 2-1. 1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다. 3. 1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다. 4. 새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1], ..., arr[right]만 남기고 나머지는 지웁니다. 정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요. Restrictions ·.......

[Programmers] 방문 길이 C# 문제풀이 [내부링크]

Problem 게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다. U: 위쪽으로 한 칸 가기 D: 아래쪽으로 한 칸 가기 R: 오른쪽으로 한 칸 가기 L: 왼쪽으로 한 칸 가기 캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다. 예를 들어, "ULURRDLLU"로 명령했다면 1번 명령어부터 7번 명령어까지 다음과 같이 움직입니다. 8번 명령어부터 9번 명령어까지 다음과 같이 움직입니다. 이때, 우리는 게임 캐릭터가 지나간 길 중 캐릭터가 처음 걸어본 길의 길이를 구하려고 합니다. 예를 들어 위의 예.......

[Programmers] 쿼드압축 후 개수 세기 C# 문제풀이 [내부링크]

Problem 0과 1로 이루어진 2n x 2n 크기의 2차원 정수 배열 arr이 있습니다. 당신은 이 arr을 쿼드 트리와 같은 방식으로 압축하고자 합니다. 구체적인 방식은 다음과 같습니다. 1. 당신이 압축하고자 하는 특정 영역을 S라고 정의합니다. 2. 만약 S 내부에 있는 모든 수가 같은 값이라면, S를 해당 수 하나로 압축시킵니다. 3. 그렇지 않다면, S를 정확히 4개의 균일한 정사각형 영역(입출력 예를 참고해주시기 바랍니다.)으로 쪼갠 뒤, 각 정사각형 영역에 대해 같은 방식의 압축을 시도합니다. arr이 매개변수로 주어집니다. 위와 같은 방식으로 arr을 압축했을 때, 배열에 최종적으로 남는 0의 개수와 1의 개수를 배열에 담아서 return 하도.......

[HTML] DOCTYPE 내용 정리 [내부링크]

Intro HTML 문서를 작성할 때 최상단에 <!DOCTYPE html>을 사용한다. 이 tag를 사용하는 이유는 무엇일까? Goal · DOCTYPE 이해 Content DOCTYPE은 웹문서가 어떤 버전의 HTML 언어로 작성되었는지 결정하는 기능이다. DTD(Document Type Declaration)라고도 한다. 예를 들어 HTML5에서는 <!DOCTYPE html> 이렇게 선언한다. 현재 가장 많이 사용되고 있는 표준이기 때문에 선언 방식이 간단한 것 같다. 물론 이전 버전의 웹문서들도 있다. 이전 버전의 웹문서들을 선언하기 위해서는 다소 복잡하다. 예전 버전의 선언방식이 사라지지 않는 이유는 호환성 때문이라고 한다. 이전에 만들어진 문서라고 해서 브라우저에 표시되지 않으면.......

[IT] 메타버스(Metaverse) 내용 정리 [내부링크]

요즘 메타버스(Metaverse)가 뉴스에 자주 등장한다. 메타버스는 무엇을 의미할까? 메타버스는 가상현실(VR)과 증강현실(AR), 사물인터넷(IoT) 등 ICT 기술과 결합해 현실감을 극대화한 실감미디어(XR) 서비스를 의미한다. - [아주 쉬운 뉴스 Q&A] 메타버스란? 차현아 기자 하지만 이것만으로는 잘 와닿지 않는다. 그래서 좀더 찾아보니 메타버스라는 말 자체는 1992년에 닐 스티븐슨이 발표한 소설 '스노우 크래쉬'에서 처음 사용된 단어라고 한다. 소설 속에서 주인공은 고글과 이어폰을 끼고 가상세계에서 활동한다고 하는데, 이러한 모습 때문에 가상현실과 현실이 융합된 세계를 메타버스라고 하는 것으로 보인다. 미국 비영리.......

[T-SQL] Database detach 및 attach [내부링크]

Intro 이 글에서는 database를 detach 및 attach하는 방법을 설명한다. Goals · Database detach & attach Content Database를 detach하기 전에 mdf, ldf file의 위치를 알아야 한다. 위치를 SELECT하기 위한 script는 다음과 같다. [target_database]에는 위치를 알아내고 싶은 database 이름을 대입한다. 위 script를 실행하면 보통 2줄이 SELECT될 것이다. SELECT된 physical_name을 기록해둔다. 이제 database를 detach하기 위해서 다음 script를 실행한다. 위와 마찬가지로 target_database에 detach할 database 이름을 대입한다. 성공적으로 detach가 되었다면, 다시 database를 attach하기 위해 아래 script를 실행한다. 이렇게 하면.......

[Git] Git worktree 사용방법 [내부링크]

Intro Git은 기본적으로 한 개의 branch에서만 작업이 가능하다. 하지만 경우에 따라서는 여러 개의 branch를 왔다갔다 하면서 작업을 해야 할 수가 있는데, 이런 때에 Git worktree를 사용하면 된다. Goals · Git worktree 사용법 Content Git worktree는 git clone을 한 것과 유사한 효과를 낼 수 있다. 다른 점이 있다면, repository를 복사함과 동시에 branch도 새로 만든다는 점이다. 예를 들어 1.txt라는 file이 있다고 가정해보자. 현재 master branch이며, git worktree를 사용해서 hotfix branch를 생성해보자. 'git worktree add hotfix' command를 입력하면 된다. 'git worktree list'를 입력해서 현재 worktree를.......

[Programmers] 점프와 순간 이동 C# 문제풀이 [내부링크]

Problem OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈트는 건전지로 작동되는데, 순간이동을 하면 건전지 사용량이 줄지 않지만, 앞으로 K 칸을 점프하면 K 만큼의 건전지 사용량이 듭니다. 그러므로 아이언 슈트를 착용하고 이동할 때는 순간 이동을 하는 것이 더 효율적입니다. 아이언 슈트 구매자는 아이언 슈트를 착용하고 거리가 N 만큼 떨어져 있는 장소로 가려고 합니다. 단, 건전지 사용량을 줄이기 위해 점프로 이동하는 것은 최소로 하려고 합니다. 아이언 슈트 구매자가 이동하려는.......