일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이펙티브 자바
- 백준
- dataframe
- 데이터 flow
- springboot
- Redis
- docker
- 다익스트라
- 위상정렬
- pandas
- DP
- BFS
- java
- 세그먼트 트리
- 포트앤어댑터 아키텍처
- 자바
- UML
- equals
- 스프링
- spring security
- series
- 문자열
- JPA
- 비트마스크
- 헥사고날 아키텍처
- dfs
- disjoint set
- 알고리즘
- 파이썬
- ddd
- Today
- Total
목록개발 (95)
코딩못하는사람
1.문제점 AWS 프리티어 EC2는 정말 고마운 서비스이기도 하지만, 무료이니 만큼 성능이 나오지 않는다. 프로젝트 jar 파일 빌드할때마다 서버가 다운되는 경우가 많았고 Docker가 Out-Of-Memory 되는 경우가 많았다. 그렇게 인스턴스를 재부팅할때마다 너무 화가나서 말로만 들었던 scale out을 해보기로 결심했다. 이 프리티어 서비스를 최대한 활용하기 위해 서비스를 세분화하고 여러개의 프리티어 인스턴스에 나누어 올리고 nginx의 로드밸런싱 기능을 통해 부하를 나누는 분산 아키텍쳐를 생각하게 되었다. 2. 아키텍쳐 구상 프로젝트의 첫 아키텍쳐는 nginx의 리버스 프록시 기능을 사용해 nginx가 각각의 request를 받아 각각의 포트로 프록시 해주는 방식으로 구성했다.( nginx안의..
https://programmers.co.kr/learn/courses/30/lessons/81303 코딩테스트 연습 - 표 편집 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO" programmers.co.kr 1.접근 삭제와 삽입 연산이 잦으므로 배열이나 일반 ArrayList가 아닌 LinkedList를 사용해야겠다고 생각했다. 하지만 LinkedList를 이용한 풀이는 시간초과를 받았는데 Up 과 Down이 잦은 문제라 그랬다. 단방향 LinkedList는 한칸 앞(이전 노드)으로 이동하려면 처음(head)부터 리..
문제점: Review 엔티티에 대해서 테스트 코드를 작성하던중 모두 성공했지만 엔티티 삭제 테스트에서 엔티티를 삭제해도 삭제되지 않는 상황을 마주쳤다. 리뷰 엔티티는 간단하게 다음과 같은 연관관계를 가지고 있다. 접근: JPA 연관관계가 설정이 복잡하다면 삭제 되지 않는다는 기억이 있었다. 김영한 강사님의 Cacade,orphanRemoval 강의를 듣고 개념을 다시 잡았다. 원인: @OneToOne이나 @OneToMany에서 붙혀주는 영속성 전이 Cascade 때문에 일어난 문제였다. 필드에 cascade = CascadeType.ALL을 붙혀주면 그 필드와 연관된 엔티티를 persist 해주지 않아도 persist한 효과가 나면서 영속성이 된다. 하지만 Cascade를 사용하면 편리하긴하지만 주의해야..
https://www.acmicpc.net/problem/22115 22115번: 창영이와 커피 커피는 종류별로 하나씩 준비되어 있기 때문에, 동일한 커피를 여러 개 마실 수 없음에 유의하라. www.acmicpc.net 1.접근 백트래킹으로 생각하고 풀었다가 시간초과를 맞았다. k가 커질 수록 시간이 급격히 늘어나는 코드였다. 얻어야하는 카페인양과 커피들의 카페인양을 보고 냅색문제처럼 최적 부분 구조로 나누어 풀 수 있다는걸 알았다. 2.풀이 각 커피에 카페인이 1, 2, 3, 4, 5 가 들어있고 마셔야하는 카페인이 15라고 가정해보자. 만약 5가 커피의 최소 개수를 위해 꼭 마셔야하는 커피라면 15에서 5를 뺀 10의 카페인을 1,2,3,4커피를 가지고 마시는 경우 +1이 최소 개수의 커피를 마시는..
https://www.acmicpc.net/problem/22116 22116번: 창영이와 퇴근 A1,1에서 AN,N까지, 경로상의 최대 경사의 최솟값을 출력한다. www.acmicpc.net 1.접근 인접한 격자로 가려면 경사의 절댓값을 지날 수 있어야 한다. 두가지 풀이가 생각났다. 1.이진탐색 경사의 범위가 1 ≤ Ar,c ≤ 1,000,000,000 이므로 가능한 경사의 값을 이진탐색으로 찾아서 값을 찾아가며 (1,1)->(n,n)으로 DFS를 돌려서 찾는 방법. 2.우선순위 큐 가장 경사가 적은값들만 찾아가면서 n,n이 나올때까지 탐색으로 찾아들어가는 방법 2.풀이 1.이진탐색 DFS로 그래프를 순회하며 (1,1)->(n,n)을 찾아간다. 지정한 경사보다 낮은 경사값들만 찾아 들어가다가 n,n에..
아이템43] 람다보다는 메서드 참조를 사용하라 람다의 장점은 익명클래스보다 코드가 간결해진다는 장점을 가진다. 하지만 여기서 메서드 참조(Method reference)를 활용하면 한단계 더 간결해진 코드를 만들 수 있다. 코드로 예시를 보자. Map에 키가 없다면 키와 숫자 1을 매핑하고, 키가 존재하면 기존 매핑값을 증가시키는 코드이다. map.merge(key, 1, (count, incr) -> count + incr); //Map에서 제공하는 merge 메서드 merge 메서드는 키,값,함수를 인자로 받는다. 깔끔해 보이지만 매개변수 count와 incr이 하는일 없이 코드를 차지한다. 자바 8에서는 Integer 클래스 및 기본타입 래퍼클래스은 이 람다와 기능이 같은 정적 메서드 sum 을 제..
아이템 42]익명클래스보다는 람다를 사용하라 자바 8에 와서 추상 메서드 하나짜리 인터페이스는 의미를 인정받아 간결하게 코드를 작성할 수 있게 해주는 방식이 도입되었다. 함수형 인터페이스라 부르는 인터페이스들의 인스턴스를 람다식(lambda expression,혹은 람다)을 사용해 만들 수 있게 된 것이다. 람다는 익명 클래스와 개념은 비슷하지만 코드는 훨씬 간결하고 자질구레한 코드들이 사라지고 어떤 동작을 하는지 명확하게 보인다는 장점을 가진다. 익명 클래스를 사용할 때와 람다를 사용했을 때의 코드를 비교해보자. 문자열을 길이순으로 정렬하는 코드이다. 1.익명 클래스의 인스턴스를 함수객체로 사용하는 방식 Collection.sort(words, new Comparator() { public int co..
Redis (Remote Dictionary Server)란? 보통 Remote에 있는 In-Memory Data Structure Store (인 메모리 데이터 구조)를 가진 key-value 구조 데이터 관리 시스템이다. 보통 DB는 하드 디스크나 SSD에 저장하여 디스크를 돌며 원하는 자료를 찾기 때문에 상대적으로 많은 시간이 소요된다.하지만 Redis는 메모리(RAM)에 데이터를 저장하기 때문에 용량은 적지만 디스크 스캐닝, 쿼리 없이 데이터를 빠르게 가져올 수 있다. Redis는 크게 String, Set ,Sorted Set, Hash,List 자료구조를 지원한다. 이러한 자료구조를 어플리케이션에 잘 맞춰 활용하면 좋은 성능을 낼 수 있다. Cache란? Cache는 나중에 요청올 결과를 미리..
문제점 스프링 시큐리티를 활용하기 위해서는 DB에 해쉬로 암호화된 패스워드를 저장해야 한다. 따라서 BCryptPasswordEncoder에 encode 메서드를 통해 해쉬암호화를 사용하여 패스워드를 저장했다. 문제는 패스워드 변경 관련 로직 및 테스트 코드 작성에서 발생했다. @Test public void 회원정보_업데이트_테스트() throws Exception { //given User user = userRepository.findByName("test").orElseThrow(NoSuchUserException::new); UpdatePasswordDTO updatePasswordDTO = new UpdatePasswordDTO("12345", "1234", "1234"); //when use..
아이템40]@Override 애너테이션을 일관되게 사용하라. @Override 애너테이션은 상위 타입 메서드를 재정의했음을 알려준다. 이 애너테이션을 일관되게 사용하면 여러가지 악명높은 버그를 예방해준다. public class Bigram { private final char first; private final char second; public Bigram(char first, char second) { this.first = first; this.second = second; } public boolean equals(Bigram b) { return b.first == first && b.second == second; } public int hashCode() { return 31 * firs..