[Spring] @NoArgsConstructor는 언제 사용할까?
·
프로젝트
개요프로젝트를 진행하면서 @NoArgsConstructor는 습관적으로 사용하면서도 정확한 이유를 설명하지 못하는 부분이 있었다. 이번 기회에 언제, 왜 사용해야 하는지 제대로 이해하고, 같은 실수를 반복하지 않기 위해 정리해보려 한다.@NoArgsConstructor 란?먼저 @NoArgsConstructor 어노테이션이 어떤 어노테이션인지 알아보자. @NoArgsConstructor는 빈 생성자를 자동으로 만들어 주는 Lombok 어노테이션이다.Lombok을 사용하기위해서는 아래와 같이 build.gradle 파일에 의존성을 추가해야 한다.dependencies { compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projec..
[GitHub] 이슈 템플릿 & PR 템플릿 설정하기
·
프로젝트
개요친구랑 같이 프로젝트를 하기로 하고, 같이 깃허브를 통해 협업을 하기로 하였다. 좀 더 체계적이고, 꼼꼼하게 협업을 진행하기 위해서 이슈 및 PR 템플릿을 설정하기로 하였다.이슈 템플릿 먼저 Settings에 들어가서 스크롤을 밑으로 조금만 내려보면 위와 같이 Features 부분을 볼 수 있다.여기서 초록색 버튼인 Set up templates을 눌러보자. 누르면 다음과 같은 화면이 나오게 된다.Add template을 클릭해보면 3가지 옵션이 나온다. Bug report: 버그 제보용 기본 템플릿Feature request: 기능 요청용 기본 템플릿Custom template: 사용자 정의 템플릿 기본 템플릿도 좋지만, 어차피 커스텀이 필요하므로 Custom template을 사용하자. 그러면 아..
[백준 2504] 괄호의 값 (JAVA)
·
코딩 테스트 준비 (JAVA)
문제링크 : https://www.acmicpc.net/problem/2504접근법문제를 보자마자 Stack 자료구조를 이용하여 문제를 풀면 되겠다고 생각하였고, 생각보다 단순한 문제여서 바로 코드를 작성을 시작하였다.문자를 처리하는 문자이다 보니, 처음에는 Stack를 사용해서 문자 단위로 처리하려고 했지만, 괄호의 중첩과 값 계산을 동시에 처리하기가 생각보다 복잡하여 제대로 구현하기가 쉽지 않았고, 좀 더 쉽게 할 수 있는 방법이 있나 고민하던 중 더 쉽게 풀 수 있는 방법을 발견하였다. 괄호의 값이 '( )' = 2, '[ ]' = 3이고, 정답은 항상 양수라는 점을 활용하여 Stack을 활용하여 구현을 하였다.여는 괄호를 스택에 삽입할 때 각 괄호값('( )' = 2, '[ ]' = 3)의 음수..
[백준 2169] 로봇 조종하기 (JAVA)
·
코딩 테스트 준비 (JAVA)
문제링크 : https://www.acmicpc.net/problem/2169접근법 목적지 까지의 최대값을 구하는 문제로 dp를 사용하면 해결 가능하다.테두리에 있는 값들을 제외하면 각각의 칸은 세가지 방향(왼쪽, 위쪽, 오른쪽)에서 올 수 있다. 세가지 경우를 동시에 고려하여 값을 구하려 했지만, 도저히 해결할 수 있는 방안이 떠오르지 않아좌우 이동의 방향성을 분리하여 처리 하였다.선언 : dp1[i][j] : (i, j)에 왼쪽에서 오른쪽으로 이동하며 도달하는 최대값dp2[i][j] : (i, j)에 오른쪽에서 왼쪽으로 이동하며 도달하는 최대값전처리 : 왼쪽 위 (1, 1)에서 시작하기 때문에, 두 배열(dp1, dp2) 모두 첫번째 줄은 항상 오른쪽으로 이동 좌우 경계(i = 0 or m+1) -I..
[백준 12919] A와 B 2 (JAVA)
·
코딩 테스트 준비 (JAVA)
문제링크 : https://www.acmicpc.net/problem/12919잘못된 접근법 (시간초과)시간복잡도 때문에 어떤식으로 풀지 고민을 많이 하였지만, 완전탐색 말고는 방법이 없어 보여 완전탐색(BFS)으로 구현하였다.시간복잡도가 O(2^T)지만, 문자가 A와 B뿐이라 겹치는 경우가 매우 많을거라 생각하여 메모이제이션 기법을 사용하면 시간 복잡도를 대폭 줄이고, 시간 내에 통과할 수 있을 것 같았다.하지만 시간초과로 실패하였다. 메모이제이션 : 이미 탐색한 문자열은 HashSet에 저장하여 중복 탐색 방지 재귀 : 현재 문자열에서 두 가지 연산을 수행하여 다음 상태로 이동 (S → T) 완전탐색 : 목표 길이에 도달할 때까지 가능한 모든 문자열을 생성하여 목표 문자열 포함 여부 확인 impo..
[백준 1092] 배 (JAVA)
·
코딩 테스트 준비 (JAVA)
문제링크 : https://www.acmicpc.net/problem/1092접근법문제를 보자마자 그리디 알고리즘으로 풀면 되겠다 생각하였다. 매 시간(1분)마다 각 크레인이 들 수 있는 가장 무거운 박스를 우선적으로 선택하여, 모든 박스가 크레인에 실릴 때 까지 반복문을 돌려 해결하였다. 정렬: 크레인의 무게 제한과 박스의 무게를 모두 오름차순으로 정렬전처리: 각 크레인이 들 수 있는 가장 무거운 박스의 인덱스를 미리 계산하여 저장예외 처리: 가장 강한 크레인도 가장 무거운 박스를 들 수 없다면 "-1" 출력 후 종료그리디 선택: 매 턴마다 각 크레인이 들 수 있는 박스 중 가장 무거운 것부터 탐색하여 아직 운반되지 않은 박스를 선택 최적화: 더 이상 들 수 있는 박스가 없는 크레인은 건너뛰고, 박스 ..
비대칭 키 암호화 방식
·
Server
비대칭 키 암호화비대칭 키 암호화 방식은 이름 그대로 서로 다른 두개의 키를 사용하는 암호화 방식입니다.누구나 볼 수 있는 공개키와 본인만 알고 있는 개인키를 사용합니다.두 키는 수학적으로 연결되어 있어서 한쪽으로 암호화된 데이터를 다른 쪽으로만 복호화가 가능합니다. 암호화 3원칙비대칭 키 암호화 방식을 알아보기 전에 CIA Triad라고 불리는 암호화 3원칙에 대해 정리해 보려 합니다.이 세 가지 원칙은 정보보안의 가장 기본이 되는 원칙으로, 어떤 보안 시스템이든 이 기준을 중심으로 설계를 하는 것이 중요합니다. 1. 기밀성 (Confidentiality) 어떤 정보에 제약을 두거나 접근을 제한하는 약속이나 일련의 규칙말 그대로 "정보를 인가되지 않은 사람에게 노출되지 않도록 보호해야 한다" 입니다.e..
JWT (JSON WEB TOKEN)
·
Server
JWT (JSON WEB TOKEN)JWT는 JSON 객체에 정보를 담아 이를 토큰으로 암호화하여 전송할 수 있는 기술을 의미합니다.클라이언트와 서버 간의 안전한 정보 교환을 위해 사용하는 토큰이라고 생각 하시면 됩니다. 기본 흐름JWT 생성 & 검증JWT의 구성JWT는 헤더, 페이로드 서명 구조로 이루어져 있고, 각각은 .(점)으로 구분 됩니다. 1. HeaderJWT임을 명시사용된 암호화 알고리즘2. Payload정보 ( 사용자의 이름, 이메일, 권한, 토큰 만료시간 등)3. Signature암호화알고리즘((BASE64(Header)) + (BASE64(Payload)) + 비밀키)❗️주의점내부 정보를 단순 BASE 방식으로 인코딩하기 때문에 외부에서 쉽게 디코딩 할 수 있기 때문에 패스워드와 같은 ..
비트마스크 (BitMask) 란?
·
카테고리 없음
알고리즘 문제를 풀다 보면 시간 복잡도 최적화는 필수적이다.최근 풀었던 한 문제에서 시간 복잡도 때문에 해결하지 못했었는데, 정답 코드를 보니 비트마스크를 활용하고 있었다.코딩 테스트를 준비하며 비트마스크라는 생소한 개념을 처음 접하게 되었고, 이를 확실히 이해하고 정리하기 위해 블로그에 기록하게 되었다.비트마스크란?비트 마스크는 숫자를 2진수(0과 1) 형태로 표현하여 데이터를 효율적으로 저장하고 조작하는 방법이다.2진수는 0 또는 1을 이용하므로 하나의 비트(bit)가 표현할 수 있는 경우는 두 가지이다. → 컴퓨터는 전기 신호의 *켜짐(1)* 과 *꺼짐(0)* 상태를 표현하기 위해 이진수를 사용하기 때문에 이러한 접근이 가능하다. 비트 마스크의 장점1. 메모리 절약비트 마스크는 데이터를 비트(0..