Monotonic Stack
·
Computer Science/Algorithms
모노토닉 스택 (Monotonic Stack) 원소가 Increasing / Decreasing으로 정렬되어 있는 배열을 의미한다. 정렬되어 있지 않은 배열을 Monotonic 하게 만들거나 Monotonic Stack에 새로운 원소가 입력되었을 때, 정렬하는 과정에서 발생하는 정보들이 유용하다. 추천 문제 [백준] 옥상 정원 꾸미기 : https://www.acmicpc.net/problem/6198 [백준] 오큰수 : https://www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acm..
Comparable과 CompareTo
·
Backend/Java
CompareTo() compareTo() 함수는 두개의 값을 비교하여 int 값으로 반환해주는 함수이다. compareTo() 함수에는 “문자열의 비교”와 “숫자의 비교” 두 방식이 존재한다. 숫자의 비교 : 크다(1), 같다(0), 작다(-1)의 결과값을 리턴 문자열 비교 : 같다(0), 그 외 양수/음수값 같이 참 재미난 결과 리턴 비교대상에 문자열이 포함되어 있을 경우 1. 기준값에 비교대상이 포함되어 있을 경우 서로의 문자열 길이의 차이값을 리턴해준다. 예를 보면, “ab”(2) - “a”(1) = 1 “ab”(2) - “ab”(2) = 0 “”(0) - “ab”(2) = -2 “ab”(2) - “”(0) = 2 public class Test { public static void main(St..
[Spring Security] 내부 흐름 - 2
·
Backend/Spring Security
2024.02.17 - [Backend/Spring Security] - Spring Security 내부 흐름(1)에서 Spring Security 내부 흐름에 대해 간략하게 살펴봤다. 이번에는 디버깅을 통해 내부 코드를 파헤쳐보자.  Spring Security 내부 흐름 - 1이 글은 아래 링크의 강의를 바탕으로 정리된 글입니다. https://www.udemy.com/course/spring-security-6-jwt-oauth2-korean/ spring security 내부 흐름 과정 1단계 유저가 로그인 페이지에 본인의 자격증명을 입력 (브kimdozzi.tistory.com   Spring Security를 다루는 과정에서 핵심적인 부분만 확인하고 넘어가는 점을 유의해주세요 !   Spri..
[Spring Security] 내부 흐름 - 1
·
Backend/Spring Security
spring security 내부 흐름 과정1단계유저가 로그인 페이지에 본인의 자격증명을 입력 (브라우저 또는 모바일 애플리케이션의 도움을 받음)유저는 본인의 자격 증명과 함께 요청을 백엔드 웹 애플리케이션에 전달. 이 과정에서 spring security의 도움을 받아 데이터를 보호받는다.spring security filter전달된 정보는 spring security filters에서 받게 된다. security filter는 백엔드 서버에 들어오는 모든 요청을 감시하는 역할을 한다. 동작 과정은 다음과 같다.엔드유저가 접근하고자하는 경로 확인애플리케이션에 구성해둔 경로와 설정에 따라 이 필터들은 보호된 자원인지, 공개적으로 접근가능한지 판별하게 된다.결과에 따라 로그인 페이지를 표시하게 되고, 유저..
[querydsl] 수정, 삭제 배치 쿼리 사용 시 주의할 점
·
Backend/JPA
주의해야할 점 bulk연산을 수행하면, db와 영속성 컨텍스트의 값이 서로 다르다. 쿼리 수행 전 member1 = 10 → DB member1 member2 = 20 → DB member2 member3 = 30 → DB member3 member4 = 40 → DB member4 long execute = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); 쿼리 수행 후 member1 = 10 → DB 비회원 member2 = 20 → DB 비회원 member3 = 30 → DB member3 member4 = 40 → DB member4 queryFactory .selectFrom..
[querydsl] @queryProjection vs Projections.constructor
·
Backend/JPA
@QueryProjection vs Projections.constructor constructor : 실제 유저가 코드를 실행하는 순간이 되어서야 문제를 찾을 수 있음, 어떤 파라미터가 필요한지 찾기 어려움 @QueryProjection : 컴파일 단계에 에러를 해결할 수 있다. → querydsl의 의존적으로 설계하게 됨 둘 다 장단점이 있으므로, 본인 프로젝트의 아키텍처에 맞는 선택을 하면 됨
Content type 'application/octet-stream' not supported 에러
·
Backend/Spring Boot
controller에서 multipartFile 타입의 이미지와 json 타입의 dto를 같이 받기 위해 requestpart를 사용하면서 만난 오류이다. dto는 requestbody를 통한 전달이 아닌 form-data로 전달을 해주어야 했고, 그 상황에서 json 타입의 데이터를 보내는 방식에서 문제가 생겼다. form-data 타입의 key-value 값으로 json을 보내줄 때는 content-type을 application/json으로 직접 명시해주자 !! 문제 해결 :)
SOLID 5가지 원칙
·
Backend/Java
SRP 단일 책임 원칙(Single responsibility principle) 하나의 클래스는 하나의 책임만 가져야 한다. 하나의 책임은 모호하다. 클 수도 있고, 작을 수도 있으며, 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것 UI 변경, 객체의 생성과 사용을 분리 OCP 개방-폐쇄 원칙(Open/closed principle) 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀 있어야 한다. 다형성을 활용해보기 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 지금까지 배운 역할과 구현의 분리를 생각해보기 문제점 MemberService 클라이언트가 구현 클래스를 직접 선택 MemberRepository..
mariadb build 시 트러블 슈팅 해결하기 (포트 변경 및 vim 설치하기)
·
DevOps/docker
bash에 vim을 설치하게 된 이유는 docker에 mariadb를 설치하고 datagrip으로 접속을 시도했다. db접속을 위해 Test Connetion을 시도하였으나, 아래와 같은 오류 발생 ! Could not connect to localhost:3307 : unexpected end of stream, read 0 bytes from 4 (socket was closed by server). 이를 해결하기 위해 default로 설정된 포트를 변경해주려 한다.(접근하려는 PORT와 설정된 PORT가 불일치하므로) 그러기 위해선 my.cnf 파일수정이 필요하다. ps 명령어를 통해 연결된 포트를 확인해본다. 3306은 mysql로 되어있기 때문에(다른 걸 써도 무방하다. 본인의 취향에 맞게 설정..
prepareKotlinBuildScriptModel Task fails in a Java project 오류 해결
·
Backend/Spring Boot
tasks.register("prepareKotlinBuildScriptModel"){ } build.gradle에 추가해주기 ! 해결 완!
[postman] post 방식으로 file 전송 시 working directory 오류 해결하기
·
etc
settings > General > working directory에서 아래와 같이 'Read files ... '를 활성화 시켜주자. 다시 실행해보면 정상적으로 작동한다.
[수학] 소수 구하기
·
Computer Science/Algorithms
소수 판별 알고리즘 1. 1과 자기 자신을 제외한 나머지 수 중에서 약수가 있는 -> 시간 복잡도 O(n) 1을 제외한 2부터 n-1까지 탐색하면서 i로 나누어 떨어지는 수가 있는지 확인 static boolean isPrime(int N) { if (N < 2) return false; for (int i=2; i 시간 복잡도 : O(루트 n) 만약 N이 12라 할때, 12의 제곱근은 약 3.46이다. 12의 약수는 1, 2, 3, 4, 6, 12 이다. 여기서 1과 12를 제외했을 때 이는 2 * 6, 3 * 4, 4 * 3, 6 * 2의 결과이다. 따라서 N의 제곱근까지 나누어 떨어지는지 여부를 조사하면 더 빠르게 소수판별을 할 수 있다. static boolean prime(int n) { if(..