일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BFS
- programmers
- 백트래킹
- Spring
- Algorithm
- 해시
- 스프링
- 백준
- 해시맵
- 그리디
- ReactiveProgramming
- 네트워크
- Network
- 부분수열의합
- 프로그래머스
- Backtracking
- boj
- 이분탐색
- DFS
- HashMap
- 구현
- 동적계획법
- 깊이우선탐색
- dynamic programming
- 브루트포스
- 알고리즘
- DP
- greedy
- 너비우선탐색
- DynamicProgramming
- Today
- Total
목록2025/09 (6)
옌의 로그
운영 중인 서비스에서 유저가 구매한 상품을 카드형태의 ui로 예쁘게.. 웹페이지로 제공하는 기능이 있었는데, 해당 페이지는 링크로 외부에 공유할 수 있어야 했다. 해당 페이지에서 사용되는 정보를 받는 api는 public으로 열 수 없는 정보들이라, url 생성시 쿼리스트링으로 필요데이터를 다 박는 형태로 처음에 구현이되었었다.https://ourdomain.com/share?userName=micky&productId=5&color=#9e8c8b&,,, // 등등 무지 길다(url 생성은 FE쪽에서 처리한 부분이라 이런식으로 구현되어있는지 몰랐다가, url 이 너무 길다는 qa 티켓이 올라와서 나도 같이 보게되었다. ㅋㅋ) 문제점민감 정보 노출userName, productId와 같은 정보가 URL에 ..
본 포스팅은 스프링으로 시작하는 리액티브 프로그래밍책을 참고하여 작성하였습니다. ( _ _) Blocking I/OI/O란?I/O(Input/Output)는 컴퓨터 시스템이 외부 세계(사용자, 디스크, 네트워크, 다른 프로그램 등)와 데이터를 주고받는 모든 과정을 뜻한다. 쉽게 말하면, "프로그램이 자기 안에서 계산만 하는 게 아니라, 밖과 소통하는 행위".Input: 외부에서 데이터를 받아오는 것예) 키보드 입력, 파일 읽기, 네트워크 요청 수신Output: 데이터를 외부로 내보내는 것예) 화면 출력, 파일 쓰기, 네트워크 응답 전송즉, System.out.println("Hello") 같은 콘솔 출력도 I/O고, DB 쿼리 실행도 I/O 만약 client가 서버에 데이터 요청을 했을 때, 서버가 추..
(ApplicationEventPublisher에 대한 고찰 글에서 다루지 않았던, Async, Transactional 관련 AOP 얘기를 더 해보자 한다,,) 운영 서비스에서 핵심 비즈니스 로직 이후에 알림, 로그 저장, 외부 연동 같은 부가 작업들을 처리해야 하는 경우가 많은데, 이런 부가 작업은 서비스 응답 속도나 안정성에 영향을 주지 않도록 비동기 + 트랜잭션 분리로 처리하는 것이 이상적이다. 그렇다면 어떻게 사용하는게 맞는걸까 ? AOP(Aspect-Oriented Programming)란?AOP는 관점 지향 프로그래밍이라고 하며, 로깅, 보안, 트랜잭션 같은 공통 기능(횡단 관심사)을 핵심 비즈니스 로직과 분리해서 관리할 수 있도록 도와주는 개념이다. (예시: 실행시간 측정 코드)@Aro..
현재 회사에서 진행중인 프로젝트가 api 서버를 먼저 만들고 admin 서버를 추후에(지금ㅋ) 만들고 있는데,그러다 보니 조회만 할 땐 문제없던 엔티티들이 어드민에서 CRUD를 하려니 JPA를 활용할 수 없는 등 문제가 발생해서(ㅠㅠ)그 중 고민했던 내용을 포스팅하고자 한다 List로 관리하는 경우(JPA에서 연관관계를 맺을 때 가장 흔하게 사용하는 방식)@Entitypublic class Author { @OneToMany(mappedBy = "author") private List events = new ArrayList(); @OneToMany(mappedBy = "author") private List awards = new ArrayList(); // ...} 장점순..
최근 API 응답 속도 개선을 위해 일부 조회성 API에 @Cacheable을 사용해보았다. Redis를 캐시 저장소로 설정하고, DTO를 JSON으로 저장하는 방식이었는데…단순해 보이던 이 작업이 생각보다 다양한 직렬화 문제를 만나게 해주었음 ㅋㅋ(ㅠ) @Cacheable로 데이터 캐싱하기application.yml에 캐시 매니저 등록하기spring: cache: type: redis redis: host: localhost port: 6379 # password: yourpassword (필요 시) 캐싱할 데이터에 @Cacheable 설정@Cacheable(cacheNames = "MY_DTO_CACHE", key = "#id")public MyDto getMyDto(Long..
문제[프로그래머스] 추석트래픽(2018 KAKAO BLIND RECRUITMENT)사용 알고리즘- 윈도우 슬라이딩해결방법각 로그의 종료 시각과 처리 시간을 이용해 시작~종료 구간을 밀리초 단위 Interval로 변환한다.모든 로그 구간을 리스트에 저장한다. logList각 로그의 종료 시각을 기준으로 [end, end+999] 윈도우를 만들고, 이 구간과 겹치는 로그 개수를 센다.모든 윈도우에서의 최대 겹침 개수를 정답으로 반환한다.더보기- 연속된 구간(subarray, substring 등)을 효율적으로 탐색하거나 계산할 때 사용하는 알고리즘 기법- 핵심은 고정된 크기(또는 가변 크기)의 윈도우를 데이터 위에 올려두고, 한 칸씩 "밀면서(slide)" 계산을 이어가는 방식 개념 정리윈도우(Window)..