본문 바로가기

전체 글984

IntelliJ Test 목록 전체 테스트 진행 시 IDE 내부에서 어떤 테스트가 성공했는지 다음과 같은 화면을 원할 때가 있다. 이를 위해선 다음과 같은 설정이 필요하다. Ctrl + Alt + S를 통해 설정창을 열어준다. Build 시 Gradle이 아닌 IntelliJ IDEA로 변경해 주면 원하는 테스트 목록이 출력될 것이다. 또한 테스트 속도도 더 빠르기 때문에 이를 추천한다. 2023. 7. 4.
JUnit5 @JvmStatic @BeforeAll, @AfterAll 어노테이션은 @Test 메서드가 실행되기 전에 전, 후로 한 번 실행되어야 하는 메서드를 지정하는 데 사용됩니다. 이 메서드는 static이여야 하며, 테스트 클래스 내에서 한 번만 호출됩니다. 그래서 보통 테스트 환경의 초기화나 설정과 같은 작업을 수행하는 데 사용됩니다. 자바가 아닌 코틀린을 이용해 테스트를 작성하기 위해선 다음과 같이 지정해야 합니다. import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.Test import org.junit.jupiter.api.Assertions.* class ExampleTest { companion object { @BeforeAll @JvmStatic.. 2023. 7. 4.
git stash git stash에 대해 알아보기 이전 참고 글을 통해 몇 가지 지식을 얻었다. commit의 단위 commit의 단위에 대한 나만의 기준이 없었다. 오늘 분량을 끝내서 commit을 하거나, 로컬의 변경사항이 급하게 적용되어야 하는 경우 main branch에 병합하기 위해 사용했던 것 같다. git의 Commit의 기준을 논리적 단위라고 했을 때 이 논리적 단위의 자세한 내막은 어떻게 될까? 변경 사항이 특정 작업이나 기능과 관련된 경우, 새로운 작업 및 기능이 추가된 경우 해당 작업이나 기능에 대한 사항을 하나의 commit으로 묶을 수 있습니다. 즉 프로젝트의 기능 단위로 변경사항을 구성하고, 의미 있는 작업 단위로 버전 관리를 할 수 있도록 구성하는 것입니다. 이 기준은 개발팀이 정할 수 있습니.. 2023. 7. 3.
Backing Property 코틀린에서 백킹 프로퍼티는 프로퍼티의 값을 저장하고 가져오기 위해서 내부적으로 사용하는 보조 프로퍼티입니다. 기본적으로 private 한 접근범위를 가지며, 기본값은 동일한 이름의 프로퍼티의 값을 저장하기 위한 필드입니다. 간단한 테스트코드를 작성하는 도중 객체의 값을 확인해야 하는 경우가 생겼습니다. if (calculator.number != 8) { throw IllegalStateException() } 위 코드는 내부 프로퍼티가 외부로 노출되어 에러 발생 여부를 포함하는 구조입니다. 이를 대체하기 위해 data class를 검토해 볼 수 있지만 setter를 포함하고 싶지 않다면 백킹 프로퍼티를 고려해 볼 수 있습니다. class Calculator( private var _number: Int.. 2023. 7. 3.
git commit 되돌리기 Git에서 코드를 수정하고 커밋하여 push 하는 일반적인 절차는 다음과 같습니다: 1. 저장소 복제(Clone): 원격 저장소를 로컬로 복제합니다. 아래 명령어를 사용합니다: git clone 2. 수정: 로컬에서 코드를 수정합니다. 원하는 변경사항을 작성합니다. 3. 변경 내용 확인: 변경된 파일들의 상태를 확인하기 위해 아래 명령어를 사용합니다: git status 4. 스테이징: 수정한 파일들을 스테이징 영역에 추가합니다. 아래 명령어를 사용합니다: git add # 특정 파일 추가 git add . # 모든 수정된 파일 추가 5. 커밋: 스테이징 영역에 추가된 파일들을 커밋합니다. 아래 명령어를 사용합니다: git commit -m "커밋 메시지" 6. 푸시(Push): 커밋한 변경사항을 원격 .. 2023. 7. 3.
ROT13(11655) 알고리즘 문제 푸는 거 생각보다 재밌다. 문제요약 ROT13은 카이사르 암호의 일종으로 영어 알파벳을 13 글자씩 밀어서 만듦. 알파벳은 26자. 암호화하기 위해 13글자를 밀고 복호화를 위해 다시 ROT13을 사용하면 됨. ROT13은 알파벳 대문자와 소문자에만 적용 가능, 알파벳이 아닌 경우 암호화가 되면 안 됨. 입력 첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열(길이는 100을 넘지 않음) 출력 S를 ROT13으로 암호화한 내용을 출력 풀이 우선 문자열을 순회하면서 알파벳 여부를 확인하는 함수가 필요하다. bool isAlphabet(char ch){ return ((ch >= 'a' && ch = 'A' && ch = 'a' && ch = 'A' && ch = 'a' && .. 2023. 7. 2.
농구 경기(1159) 문제 요약 성의 첫 글자가 같은 선수 5명을 선발. 만약 성의 첫 글자가 같은 선수가 5명보다 적다면, 기권. 뽑을 수 있는 성의 첫 글자를 모두 구하기. 입력 선수의 수 : N (1 n; vector names(26, 0); vector result; for(int i=0; i > name; char lastName = name[0]; names[lastName - 'a']++; } for(int i=0; i= 5){ result.push_back(i + 'a'); } } if(result.empty()){ cout name; names[name[0] - 'a']++; } for(int i=0; i= 5){ result += (i + 'a'); } }.. 2023. 7. 2.
Palindrome Palindrome, 한국어로 회문이라는 뜻으로 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 물자열 등이다. 보통 낱말 사이에 있는 띄어쓰기나 문장 부호는 무시한다. 입력받은 단어가 팰린드롬인지 아닌지 확인하려면 어떻게 해야 할까? 문자열을 뒤집으면 된다. 이는 실제 구현된 함수를 이용하면 매우 간단하게 구현할 수 있다. #include using namespace std; string str; int main() { cin >> str; auto tmp = str; reverse(tmp.begin(), tmp.end()); if(str == tmp){ cout 2023. 7. 2.
트럭 주차 문제를 해석해 보자. 트럭을 총 세 대 가지고 있고, 한 대 주차 시 분당 A원, 두 대 주차 시 분당 B원, 세 대 주차 시 분당 C원이다. 세 대의 트럭이 고유한 도착 시간과 떠난 시간을 가지고 있다. 트럭이 겹치는 구간에 적용할 비용과 그렇지 않고 독자적으로 주차했을 때 비용들을 구해 합쳐야 한다. 입력의 시간은 1과 100 사이다. 이를 어떻게 효율적으로 저장하고 계산하는 알고리즘을 만들 수 있을까? 1. 주차한 트럭 수만큼 적용될 비용을 저장해야 한다. 분당 요금을 계산하는 과정에서 지속적으로 호출될 가능성이 높다. 이를 체크하고 몇 대면 얼마를 특정 요금을 나타내는 자료구조에 추가하도록 해야 하지 않을까? 2. 분당 요금을 계산하는 경우 해당 시간에 몇 대가 주차되었는지 확인하고 요금을 부과해.. 2023. 7. 1.
문자열 카운팅. 문자열 및 숫자가 입력 값에 대해 몇 개가 존재하는지 검사해야하는 경우 추천하는 자료구조와 선택의 이유는 다음과 같다. 1. 배열 배열은 int 형으로 변환이 가능한 경우 추천한다. 다만 문자열이더라도 아스키 코드로 변환이 가능한 경우에는 배열을 사용하는 것이 유리할 수 있다. 2. Map map 자료구조는 쌍을 이루는 자료구조이다. 이는 String 혹은 입력의 크기가 1000만을 넘어가거나, 각 입력이 10만, 100만 과 같이 순차적으로 분리되어 들어오는 경우 추천한다. 이에 대한 연습 문제로 백준 10808번 문제를 풀어본다. 문제 해석. 문제 : 각 알파벳이 단어에 몇 개 포함되어 있는지 구하는 프로그램 입력은 알파벳 소문자 단어 ( 100을 넘지 않음) 출력은 알파벳 단어에 포함되어 있는 알파.. 2023. 7. 1.
Video Protocol 보호되어 있는 글 입니다. 2023. 6. 29.
Live/VoD 보호되어 있는 글 입니다. 2023. 6. 29.
OAuth 2.0 Spring Security 연동, 기능 파악 노션에 작성하고 복사 붙여 넣기 하는 게 더 이쁜 것 같다... 현재까지 개발 상황 : https://github.com/sungil-yu/oauth GitHub - sungil-yu/oauth: Spring Boot 3.1, JDK 17, OAuth 2.0, OIDC Practice Spring Boot 3.1, JDK 17, OAuth 2.0, OIDC Practice. Contribute to sungil-yu/oauth development by creating an account on GitHub. github.com 2023.06.21 - [Spring|Spring-boot] - OAuth 2.0 동작방식, 개발환경 구성, 클라이언트 등록, 프런트 개발 OAuth 2.0 동작방식, 개발환경 구.. 2023. 6. 27.
2309 백준의 2309 문제를 읽었을 때 조합이 생각났다. 9명 중 7명을 뽑아 키의 합이 100인 경우 통과이며, 가능한 정답이 여러 개인 경우가 있다고 했기 때문에 정답 시 프로그램을 종료 시켜야한다. 이를 기반으로 코드를 작성해보자. #include using namespace std; int k = 7; int n = 9; int a[9]; void combi(int start, vector b){ if(b.size() == k){ int sum = 0; for(int height : b) sum += height; if(sum == 100){ sort(b.begin(), b.end()); for(int height : b) cout a[i]; vector b; combi(-1, b); return 0;.. 2023. 6. 26.
개발 용어 나도 개발자이긴 한데, 무슨 용어인지 가끔 문서를 읽을 때 이해할 수 없는 단어가 있는 경우가 있다. 이러한 단어를 약간 정리하려고 한다. backlog - 백로그는 제품 개발에 필요한 요구사항을 모두 모아 우선순위를 부여해놓은 목록을 말한다. - story : 백로그에 담겨질 요구사항으로, 고객의 요구사항을 간단한 시나리오로 표현한 것 release - 릴리즈는 몇 개의 요구사항이 적용되어 부분적으로 기능이 완료된 제품을 제공하는 것 middleware - 미들웨어는 주로 상하 관계나 동종 관계로 구분할 수 있는 프로그램들 사이에서 매개 역할을 하거나 프레임워크 역할을 하는 일련의 중간 계층 프로그램을 일컫는다. TOC( total cost of ownership) - 총 소유 비용이란 PC나 서버 등.. 2023. 6. 26.
prefix sum 누적합에 대한 공부를 진행했다. 이를 다른 말로 구간 쿼리, 여기선 구간 sum 쿼리라고 한다고 한다. 이러한 문제를 푸는 방법은 prefix sum, 펜윅트리 방식들이 있다고 한다. 내가 연습한 예제는 static 배열이여서 prefix sum이 적합하다고 하셨고, 동적 배열, 즉 배열의 각 요소가 동적으로 변경되는 경우는 펜윅트리를 사용해야 한다고 한다. 우선 다음과 같은 문제가 발생한다고 생각해보자. N개의 자연수이고, M개의 질문을 한다고 가정하자. 예를 들면 10개의 자연수를 주고 3개의 질문을 하는데, 이 질문에는 범위가 포함되어 있다. 2부터 5까지 제공된 수의 합을 구하라, 1~10까지의 제공된 수의 합을 구하라. 등등의 질문이 연속적으로 나온다. 단순하게 접근했을 때 n개의 입력을 받고,.. 2023. 6. 25.
sort func ex1 3개의 멤버변수 정렬. 3개의 멤버변수를 갖는 구조체가 있다. 각 변수 x, y, z는 int 타입이며, 정렬 시 다음 조건을 만족한다. 1. x는 1순위 오름차순 2. y는 2순위 내림차순 3. z는 3순위 오름차순. 우선 구조체를 정의한다. struct Triangle{ int x,y,z; Triangle(int x, int y, int z) : x(x), y(y), z(z){} Triangle(){ x = 0, y =0 , z=0; } bool operator t.y; } return x < t.x; } }; 테스트를 위해 main 함수 내부에서 s.. 2023. 6. 25.
pair, tuple pair와 tuple은 타입이나 자료구조가 아니다. 이는 utility 라이브러리 헤더의 템플릿 클래스입니다. C++에서 `pair`와 `tuple`은 두 가지 다른 데이터 구조로, 서로 다른 용도와 특징을 가지고 있습니다. pair - pair는 두 개의 요소를 담는 데이터 구조입니다. 각 요소는 서로 다른 자료형일 수 있습니다. - std::pair 템플릿 클래스로 제공되며, `` 헤더 파일에 정의되어 있습니다. - 주로 두 개의 값을 하나로 묶어야 할 때 사용됩니다. 예를 들어, 키-값 쌍이나 두 개의 연관된 데이터를 표현할 때 유용합니다. - 요소는 .first와 .second 멤버로 접근할 수 있습니다. 예를 들어, `myPair.first`는 첫 번째 요소에 접근하고, `myPair.secon.. 2023. 6. 24.
문자열 숫자 변환 입력받은 문자열 기반으로 문자형 타입이 숫자의 형식을 가지고 있는지 판별할 필요가 있다. 함수 `atoi`는 C++에서 C 언어의 표준 라이브러리 함수로서, 문자열을 정수로 변환하는 역할을 합니다. C++에서 `atoi` 함수를 사용하려면 `` 헤더 파일을 포함해야 합니다. `atoi` 함수의 시그니처는 다음과 같습니다: int atoi(const char* str); - 반환값: `atoi` 함수는 변환된 정수 값을 반환합니다. 문자열이 유효한 정수로 변환되지 않을 경우 0을 반환합니다. - 파라미터 종류: `atoi` 함수는 단일 파라미터로 문자열의 포인터(`const char*`)를 받습니다. 이 문자열은 정수로 변환될 수 있는 형태여야 합니다. 주의할 점은 `atoi` 함수는 변환할 수 없는 문자.. 2023. 6. 24.
c++ split split 함수를 만들어본다. 다음과 같은 상황을 고려해야 한다. 1. 함수는 입력 문자열과 구분자를 매개변수로 받아야 합니다. 구분자는 문자열을 분리할 때 사용될 문자 또는 문자열입니다. vector split(string input, string delimiter) 2. 함수는 vector 을 반환해야 합니다. 각 분리된 문자열은 벡터의 요소로 저장되어야 합니다. vector split(string input, string delimiter){ vector ret; return ret; } 3. 입력 문자열을 구분자를 기준으로 분리해야 합니다. 문자열을 구분할 때 구분자가 나타나는 위치를 찾는 방법이 필요합니다. 문자열에서 구분자를 찾는 방법으로는 일치하는 문자열 또는 일치하는 문자열의 위치를 찾는 .. 2023. 6. 23.
순열 순서가 필요한 경우 다음 참고하여 빠르게 구현하도록 한다. next_permutation 함수: C++ 표준 라이브러리의 헤더에 있는 next_permutation 함수는 순열(Permutation)을 생성하기 위해 사용됩니다. next_permutation 함수는 현재 순열을 기준으로 다음 순열을 생성하고, 순열이 더 이상 존재하지 않을 때는 false를 반환합니다. int main() { int a[] = {1,2,3}; do{ for(int i : a) cout 2023. 6. 23.
Recursion #Recursion 재귀함수는 자신을 재참조하는 함수를 일컫는다. 예를 들면 Top - Bottom으로 진행되는 경우 이를 split 할 때 사용하기도 한다. 재귀함수에는 반드시 종료조건(기저사례)를 작성해야 한다. 그렇지 않으면 무한 루프가 발생한다. 또한 재귀함수는 사이클이 발생하는 경우에는 사용하면 안 된다. 이 경우도 동일한 이유다. 매개변수의 상태를 변경시켜 기저사례까지 도달하여 문제를 해결하는 경우 보통 사용한다. # DP DP 문제를 푸는 경우 함수의 참조가 적은 경우 재귀 함수로 문제를 해결하는 것이 더 효율적일 수 있다. 이러한 경우가 아니라면 반복문을 사용하는 것이 더 효율적이다. #예시 1. 팩토리얼 팩토리얼 n! 의미는 그 이전의 항을 모두 곱하는 것이다. int factorial(.. 2023. 6. 23.
STL Standard Template Library, 자료구조, 함수, 알고리즘과 같은 함수를 포함한 라이브러리이다. 알고리즘에서는 정렬, 탐색과 같은 함수로 이루어져 있다. C++에서 컨테이너는 사전에 정의된 자료구조를 이야기 한다. Sequence Container : 데이터를 단순히 저장해 놓는 자료구조를 뜻한다. array, vector, deque, forward_list, list ,, associative container : 자료가 저장되면서 자동으로 정렬되는 자료구조를 말합니다. unordered associative container : 자동정렬이 되지 않는 자료구조. container adapter : 시퀀스 컨테이너를 이용해 만든 자료구조를 뜻한다. 기본적으로 어느정도의 자료구조는 지원해.. 2023. 6. 23.
OAuth 2.0 동작방식, 개발환경 구성, 클라이언트 등록, 프론트 개발 개발환경 OAuth 2.0 Naver, Google, Facebook OAuth2.0 연동 docker Spring Security 3.1 Spring Data JPA JDK 17 Spring boot 3.1 MySQL OIDC thymeleaf 테스트 개발환경 JUnit5 H2 DB 목표 1. JDK 17의 도입된 새로운 문법 및 API를 활용한다. 2. OAuth 2.0의 개념 및 플로우를 학습한다. 3. Spring Security의 사용법이 변경됨으로 인해 이를 익히고 적용한다. 4. dockerFile을 개발환경 실습환경으로 구분해 작성하고 docker-compose를 통해 배포한다. 5. Spring boot 3.1 도입으로 인해 변경사항 및 릴리즈 내용을 학습한다. 6. SSR의 타임리프를 .. 2023. 6. 21.
개인정보처리방침, 이용약관 홈페이지에 회원가입 기능이 존재하는 경우 개인정보처리방침과 이용약관이 필요하다. 대표적으로 네이버 사이트 footer에는 다음과 같이 링크가 존재한다. 이러한 문서양식은 어떻게 구해야하는지 궁금해서 다음과 같이 찾아보았다. 먼저 이용약관은 다음과 같다. https://policy.naver.com/policy/privacy.html 개인정보처리방침 네이버 개인정보 처리방침 (Ver.11.2) 네이버는 이용자 개인정보 보호를 여러 경영요소 가운데 최우선의 가치로 두고 있습니다. 이전 개인정보처리방침 보기 네이버에서만 제공하는 특별한 개인 policy.naver.com 이용약관을 만들기위해선 https://www.ftc.go.kr/ 다음 사이트를 방문하자. 정보공개의 표준약관에 들어가면 다음과 같이 검색할 .. 2023. 6. 21.
Initialize Database Using SQL Script in Spring Boot Initialize a Database Using JPA JPA에는 DDL 생성 속성이 존재한다. 엔티티에 매핑되는 테이블이 데이터베이스에 없는 경우 애플리케이션 초기화 단계에서 적절하게 테이블을 생성해 준다. 물론 종료 시 삭제, 업데이트, 아무런 일도 하지 않도록 설정할 수 있다. spring.jpa.generate-ddl이라는 external properties을 통해 DDL 기능을 끄고 킬 수 있다. spring.jpa.hibernate.ddl-auto (enum)은 다양한 행동을 지정한다. Spring boot는 내장 데이터베이스가 감지된 경우만 created-drop 옵션으로 동작합니다. 그 외에는 none으로 기본값을 가집니다. 이러한 schema creation을 활성화시키기 위해선 org.. 2023. 6. 21.
learning from open source https://codecatalog.org/ 2023. 6. 18.
DataBase 선택 가이드 (짧) 관계형 데이터베이스 관리 시스템 종류: oracle, mysql, postgresql, ms server.. 특징: 정형화 데이터, ACID, SQL, 고정된 스키마, 비용, 수평적 확장(샤딩) 접합성 : 데이터의 완전성이 중요한 경우, 고도의 정형화 데이터 문서 저장소 종류 : 몽고 DB, Couchbase 특징 : 데이터를 JSON, BSON, XML에 저장, 비관계형, 유연한 스키마, 빠른 속도, 수평 확장 용이, ACID 준수 희생, 질의가 한 문서 내에서만 가능 접합성 : 비정형, 반정형 데이터가 있는 경우, 분석, 빠른 프로토타입 작업 키-값 저장소 종류 : Redis, Memcached 특징 : 키는 값에만 연관된 고유 식별자이다. 키는 DBMS에 허용하는 모든 것, 값은 blob으로 저장되.. 2023. 6. 15.
SPF? DKIM? DMARC? 그렇습니다. 메일 서버를 구축하고 있는데, 실제 메일이 스팸처리가 되어 이를 방지하는 방법을 미리 알아보려고 합니다. 스팸메일의 문제점은 수신 거부를 해도 스팸 발송자가 발신자 정보를 지속적으로 위/변조하여 발송한다는 것인데요. 이런 행위를 이메일 위장, 또는 이메일 스푸핑(Spoofing)이라고 합니다. SPF(메일서버등록제, Sender Policy Framework) 레코드는 이를 방지하기 위한 인증 기술로, 메일서버 정보를 사전에 DNS에 공개 등록하여 메일에 표시된 발신자 정보가 실제 메일 서버 정보와 일치하는지 확인합니다. 대용량 메일을 발송하는 경우나 메일 서버의 신원이 불분명한 경우 국내 메일 서비스 업체나, Gmail을 포함한 여러 업체에서 해당 메일을 스팸으로 처리하는 것 같습니다. 우.. 2023. 6. 15.
daemon 사용자가 직접적으로 제어하지 않고, 백그라운드에서 여러 작업을 처리하는 프로그램이다. 서비스란, 서버 /클라이언트 모델에서 출발하여, 요청에 응답하는 프로그램을 말한다.(주로 데몬 형태로 구동되긴 한다) 실제 예시를 살펴보자. 웹서버, 파일 서버는 데몬형태로 구동되는 서비스 프로그램이다. 이에 반해 syslogd. rsyslogd, cupsd, lpd, inetd와 같은 시스템 로깅, 프린터, 네트워크서비스 등은 사용자 상호작용 없이 구동된다. 윈도에서는 데몬이라는 용어를 사용하지 않고 서비스라는 이름을 사용한다. 우분투의 서비스 데몬을 살펴보자. oncerun@DESKTOP-GAC7M8H:~$ service --status-all [ - ] apparmor [ ? ] apport [ - ] consol.. 2023. 6. 14.