일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JPA
- nestjs
- Kafka
- nestjs스터디
- 자료구조공부
- 코테공부
- nestjs공부
- 플러터 공부
- JPA스터디
- 자바공부
- querydsl
- JPA 공부
- 프로그래머스
- 스프링부트
- JPA공부
- 스프링
- 스프링 공부
- 기술면접공부
- 기술공부
- DDD
- 플러터 개발
- Axon framework
- 스프링부트공부
- 코테준비
- 알고리즘공부
- K8S
- Flutter
- 스프링공부
- 카프카
- JPA예제
- Today
- Total
목록분류 전체보기 (715)
DevBoi
투 포인터의 대표 적인 예제는 아래와 같다. 리스트 A가 있고, 타겟값 S가 있다. 이 리스트에서 두수의 합이 타겟값 S가 되는 걸 찾는다고 가정하면? 리스트 1개씩 비교해 가면서 체크를 할수있겠지만. 리스트의 크기에 따라, 시간 복잡도는 정비례하게된다. 그러면 이럴 경우에는 ? 리스트를 정렬하고 투포인터 알고리즘을 사용하면 된다. 사용 방법은 아래 순서와 같다. 1. 리스트를 오름차순으로 정렬한다. 2. 포인터 left는 리스트의 시작점을 포인터 right는 리스트의 끝점을 가리킨다. 3. left 와 right가 만날때까지 다음을 반복한다. 3-1. left + right 의 합이 타겟 값과 같으면 출력, 3-2. left + right 가 타겟 값보다 작으면 left 1증가 3-3 left + ri..
1. Hash Table 해쉬 테이블, 즉 해시 맵에서 개발자들이 사용하지만, 실제 내부 동작에 대해서는 잘 모르는 경우가 많다. 예를 들어서, hash 에 smith, 1234 가 들어있다고 가정하자 key는 smith 이고, 중간에 hash function 을 통해서, buckets에 들어간다. 이 해쉬 펑션은 value의 index를 알아내기 위한것이고, 해당 펑션 수행이후 값에 대한, index주소를 알아내서 값을 알아오게 된다. 잘 정리된 그림을 보면 바로 이해가 된다. 이 구조로 저장과, 삭제가 아주 빠르다. hash function 은 key를 array size로 나눈다. 그렇기 때문에 충돌 방식이 발생한다. 1,11,21 은 같은, 주소를 갖게 되는 것이다. 이러한 충돌 방식은 여러 구현..
직렬화(serialization)란? 자바에서 입출력을 할때 스트림이라는 통로를 통해, 데이터가 이동한다. 객체는 바이트형이 아니라서 파일에 저장 하거나 네트워크로 전송이 불가하다 따라서 객체를 스트림을 통해 입출력 하려면, 바이트 배열로 변환해야 하는데, 이를 직렬화라고 한다. 반대는 역직렬화 박싱과 언박싱이란? 박싱은 기본 자료형을 wrapper class로 바꾸어주는 것을 박싱 반대를 언박싱이라고 한다. Synchronized(동기화)란? 동기화는 여러개의 쓰레드가 하나의 자원에 접근하려 할때 주어진 순간에 단 하나의 쓰레드만 접근 가능하도록 하는것이다. 둘 이상의 쓰레드가 공동의 자원을 공유하는 경우, 순서가 잘 맞추어 다른 쓰레드가 자원을 사용하고 있는 동안 한 쓰레드가 절대 자원을 변경 할수 ..
JPA는 느끼다싶이 객체를 넘겨서 대부분의 데이터작업을 진행한다. 그런데, 쿼리가 복잡하거나, 통계성쿼리가 필요하다면? 이건 객체로 푸는 것보다 쿼리로 푸는것이 맞다. 이때 JPA에서는 JPQL이라는 녀석으로 극복할수있게해준다. 근데, JPQL은 조금 다르다. 예를들어, MEMBER 테이블에서, 해당 대상을 전부 가져오는 걸 생각해보자 테이블 대상이라면, select * from member 뭐 이런식으로나, select id from member 이런식으로, 짠다. jpql도 역시 객체 지향쿼리여도 sql짜듯이 짜면된다. 강점은 언뜻 보기에 두가지 정도가있다. 1. 쿼리를 객체에 맞춰서 짜고, 방언에 따라, mysql,oracle등으로 자동 변환. 2. 페이징 관련 속성 set식으로, 자동 생성 쉽게 ..
JAVA에서 싱글톤 패턴을 쓰는 이유 싱글톤 : 최초 한번만 메모리를 할당하고, 그 메모리에, 객체를 만들어 사용하는 디자인 패턴 1) 객체를 여러번 생성하지 않아도 되기 때문에, 비용이 적다. 2) 객체가 무조건 한번만 생성되는 것을 보장 3) 한번 만들어서 여러곳에서 사용하면 수정하기 힘들다. 4) 테스트하기 어렵다 5) 많이 사용하게 된다면, 다른 객체들과 결합도가 높아져, 객체지향 프로그래밍의 의미를 벗어나게된다. 또한 수정의 경우, 사이드 이팩트 발생 환경이 높아지고, 멀티 쓰레드 환경에서 동기화 문제가 발생한다. 6.Thread 가 3개 생성 되었을 때 t1, t2, t3의 순서가 보장 되는 코드를 짜 보세요. 이건 Tread Safe한 상황에 대한 코드를 짜는것에 대한 테스트이다. 우선 Tr..
1. http랑 https 차이? http 란 hyper text transfer protocol이고, 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다. 80포트를 사용하고, TCP/IP위에서 작동한다. 상태를 가지고 있지 않는 StateLess 프로토콜이고, Method,Path,Version,Headers,Body 등으로 구성된다. Http로 비밀번호나 주민번호를 주고 받으면, 3자가 조회할수있기때문에, Https등장https 는 끝에 secure가 붙은 것.Http에 암호화가 추가된 프로토콜이다.https는 http와 다르게 443포트를 사용하고, 네트워크에서 제 3자가 볼수있도록 공개키 암호화를 지원하고있다. 공개키 / 개인키는 서로를 위한 1쌍의 키이다.공개키 : 모두에게 공개..
최단 경로에 대한 알고리즘을 정리해보자. 엇 최단 경로면 BFS 아닌가? 응 아니야~ 그러면 시작해보자 특정 시작노드에서부터 가중치를 더해가면서 계산하는 다익스트라 알고리즘이라는 것을 써야한다. 다익스트라 알고리즘이란? BFS랑 유사하지만 조금 다른 개념이다. BFS는 단순 가장가까운 노드부터 계산해서 큐에 넣고 빼서 체크를 했다면 다익스트라는 가까운 노드만 업데이트를 하는것이다. 그래서, 우선순위 큐는 minHeap방식을 활용해서 가장 짧은 거리를 가진 노드 정보만 꺼내고 업데이트한다. 좀더 자세히 알아보자 * 최단 경로 https://www.acmicpc.net/problem/1753 1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1≤V≤20,000, 1≤E≤300,..
1. Hash/ salt 방식 차이 패스워드 암호화 저장 방식이다. 우선 Hash 는 단방향 암호화 방식이고, 이를 통해 저장된 데이터를 다이제스트라고 한다. 또한 해싱은 단방향이다. 한마디로 단방향 해시함수는 다이제스트를 복호화, 즉 원본 데이터를 구할수 없어야 말 그대로 단방향이다. 그러면 이 해싱 방식은 가장 안전한 방식일까? 그렇지 않다. 단방향 암호화 방식은 동일한메시지는 동일한 다이제스트를 갖는다. 그러면, 해커의 입장에서는 하나씩 대입해보면서 자신이 가지고있는 암호화 테이블 즉 , 레인보우 테이블을 가지고 비교하면서, 암호화 된 대상을 나름대로 대입 복호화를 할수 있다. 해결 방법으로는 두번 해싱 하는 방법이 있다. 예를 들면, 해싱해서얻은 암호화된 데이터를 한번더 해싱해서, 값을 가지고있는..
Spring boot start app에서, JPA관련 CRUD 조회,생성 저장을 해보자 우선 테이블은 Entity를 사용하고, Pk는 컬럼 별로, Id를 달고, 테이블명이나 컬럼명은 다를 경우, 별도 어노테이션을 통해서 매핑 해주면된다. Member와 user에 대한 테이블 생성이 완료되었을 경우 CRUDrepository 라는 별도로 제공해주는 것을 상속받은 customRepo를 만들고, findAll(조회) save를 통해서,저장을 해본다. app이 실행할때, 해당 메소드가 돌기떄문에, 성공적으로 쿼리가 도는 것을 확인할수있다. 근데 여기서 문제, 데이터 베이스에서 find한 값을가져와서, 속성만 set을 해주면 자동 수정 저장이 될까? 이걸 한번 테스트 해보고싶었다. 특정 조건에 맞는 객체를 가져..
JPA 는 개발자가 SQL을 쓰지 않고, 개발을 할수 있게 해준다. 즉, 객체에 SET,GET을 하는 것으로 SELECT, INSERT 작업을 할수 있게해준다. JPA는, Learning curve가 심해서, 자세히 모르고, 실무에 도입하게 되면 망한당 우선 SQL중심적인 개발이, 현재 중요한 키워드이다. CRUD를 짜고, SQL을 짜고.... 애플리케이션 개발이... 객체 지향인데 SQL에 목을 메게된다. SQL 개발의 문제는..? 1. 필드추가할때 한개의 필드가 추가되면, 전체 SQL이 도는 곳에 전체 필드를 추가해줘야한다. 즉 SQL 의존적 개발을 하게된다. 2. 패러다임의 불일치 객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성등 많은 걸 지원해준다. 객체와 관계형 데이터 베이스의..