일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 백준
- 다익스트라
- springboot
- dataframe
- docker
- equals
- 자바
- 데이터 flow
- 스프링
- 포트앤어댑터 아키텍처
- pandas
- 세그먼트 트리
- 위상정렬
- JPA
- disjoint set
- series
- Redis
- 비트마스크
- 헥사고날 아키텍처
- spring security
- 이펙티브 자바
- DP
- ddd
- 알고리즘
- 문자열
- UML
- dfs
- java
- Today
- Total
목록개발 (95)
코딩못하는사람
스프링 시큐리티를 활용하여 인증,인가를 처리할 때 @AuthenticationPrincipal를 쓰면 쉽게 UserDetails를 구현하여 만든 Principal 인스턴스를 얻을 수 있었다. 쉽게 사용했지만 어떻게 동작하는지 궁금해져 찾아 보았다. Spring Security에서 AuthenticationFilter를 거쳐 인증을 완료하게 되면 Authentication 인터페이스를 구현한 UsernamePasswordAuthenticationToken을 SecurityContextHolder에 설정하게 된다. @AuthenticationPrincipal는 스프링 시큐리티의 AuthenticationPrincipalArgumentResolver 클래스를 활용하여 SecurityContextHolder에 ..
동시성 문제란? 두 개 이상의 세션이 공통된 자원에 대해서 읽고 쓰는 작업을 할 때 발생할 수 있는 문제이다. 기본적으로 동시성 문제는 완전한 해결이 있는 것이 아닌 타협이 있다. 성능을 포기하고 정확성을 높이느냐, 정확성을 타협하고 성능을 높이느냐이다(ex 트랜잭션 격리 단계) JPA에서도 JPA Transaction의 동시성을 제어하고자 하는 방법이 있다. JPA는 객체를 조회하면 영속성 컨텍스트에 캐시하기 때문에 "일관성 없는 읽기"의 문제는 없다. 주로 해결해야 하는 문제는 "갱신 손실"이다. 갱신 손실을 해결하기 위한 두가지 방법이 있다. Optimistic Lock(낙관적 잠금) 세션1이 데이터를 읽어 왔더라도 다른 세션인 세션2도 해당 데이터에 자유롭게 접근할 수 있다. 하지만 세션2가 Wr..
Filter란? Dispatcher Servlet에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공해준다.말 그대로 client와 Dispatcher Servlet사이에 필요한 작업을 할 수 있도록 필터를 사용하는 것이다. - init() : 필터 초기화 - doFilter() : 전, 후처리용 메소드, 내부에서 filterChain.doFilter를 호출하여 해당 비즈니스처리를 계속해서 수행한다. - destory() : 필터 종료이후 실행. Intercepter란? Spring이 제공하는 기술로,Dispatcher Servlet을 통과하고 handler mapping을 완료한 후 Controller에 들어가기 전과 후에 요청과 응답을 참조하거나 가..
NoSQL이란? 정형 데이터가 아닌 반정형,비정형화 데이터가 빠르게 늘어나면서 빅데이터와 클라우드 환경에서 기존 RDBMS로 트래픽을 감당하기 어려워졌다. 그에 따라 스키마를 유연하게 만들고, 작업의 완전성을 보장해주는 ACID 기능을 희생하여 뛰어난 확장성이나 성능의 특성을 가진 비관계형,분산 데이터 베이스들을 보편적으로 NoSQL이라고 한다. 기존 RDBMS와의 차이점 1. 관계형 모델을 사용하지 않으며 테이블간의 조인 기능 없음 -조인할 필요 없이 이미 모든 값을 가지고 저장된다. 2. 확장성, 가용성, 높은 성능 3. 대부분 여러 대의 데이터베이스 서버를 묶어서(클러스터링) 하나의 데이터베이스를 구성 4. 관계형 데이터베이스에서는 지원하는 Data처리 완결성(Transaction ACID 지원) ..
https://www.acmicpc.net/problem/1800 1800번: 인터넷 설치 첫 번째 줄에 N(1 ≤ N ≤ 1,000), 케이블선의 개수 P(1 ≤ P ≤ 10,000), 공짜로 제공하는 케이블선의 개수 K(0 ≤ K < N)이 주어진다. 다음 P개의 줄에는 케이블이 연결하는 두 컴퓨터 번호와 그 가격이 차 www.acmicpc.net 1.접근 간단한 문제인거같아 DFS로 목적지에 도달했을때 stack을 정렬해서 값을 찾아냈는데 시간초과를 받았다.(정렬을 너무 많이 사용하게 되서) 'x원으로 해결이 안되는데 x-1원으로 가능할까?' 라는 질문글에 있던 힌트를 보고 문제를 해결할 수 있었다. 2.풀이 이분탐색을 해가면서 다익스트라를 돌릴때마다 가능한 값이면 정답에 저장하도록 했다. 문제에서..
발단 저번 우아한 Redis 강연을 듣고 공부하면서(https://cantcoding.tistory.com/70) Redis의 Sorted Set기능이 눈에 들어왔다. 현재 진행하고 있는 프로젝트에서 서비스 사용시 주어지는 포인트 시스템이 있는데, 그 포인트와 닉네임을 key-value 형태 Sorted Set에 저장하여 랭킹보드를 구현하면 재밌을거같다는 생각이 들어서 실제 적용하였다. Redis 설치 필자는 AWS EC2 서버에 Docker 를 통하여 Redis를 설치하였다. (http://redisgate.kr/redis/education/docker_intro.php ) 저 레퍼런스에 들어가면 쉽게 따라할 수 있다. 레디스 서버 실행하기 docker run --name myredis -d -p 63..
스프링 부트란? 스프링을 통하여 개발을 할때는 설정이 반이다 라는 말이 있을정도로 개발 환경설정이 힘들었다고 한다. 하지만 스프링부트는 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성해준다. 어떤점들이 있을까? 1.Tomcat같은 내장 웹서버를 자동으로 내장해줘서 웹 서버 설치가 필요없다. 기존에 웹서버를 설치해서 관리해주어야했던 불편함이 없어졌다. 2.손쉬운 빌드 구성을 위한 starter 종속성 제공 starter 종속성을 가져오면 관련 종속성을 모두 끌어와주면서 설정을 편리하게 해준다. 예를들어 starter-security를 설정하게 된다면 security관련 작업에 필요한 모든 의존성을 설정해준다. 3. 스프링과 외부 라이브러리 자동 구성 스프링의 버전과 특정 라이브러리의 버전이 호환이..
스프링이 어떤점이 감동이고 잘 만들어졌길래 사람들이 그렇게 좋아하고 많이 쓰일까? 라는 질문을 던졌을때 대답이 잘 안나오는거보니 나는 그저 스프링 '사용자'였나보다. 스프링이 왜 나왔고 어떤점이 좋은지 알아보자. 내가 읽은 책에서 스프링을 OOP 프레임워크라고 부른다. 이유가 뭘까? 자바는 대표적인 객체지향 언어중에 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 독립된 단위인 "객체"들의 모임으로 보자는 뜻이다. 각각의 객체는 메시지를 주고받을 수 있고 데이터를 처리할 수 있다. 객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들어 준다. 객체지향의 다형성이라는 특징은 프로그램을 레고 블럭을 조립하듯이, 컴퓨터에 원하는 키보드,마우스를 갈아 끼..
-SOLID란? 클린코드의 저자인 로버트 마틴이 객체지향 지향 프로그래밍 설계의 다섯가지 기본 원칙으로 제시한 것이다. SRP 단일 책임 원칙 OCP 개방-폐쇄 원칙 LSP 리스코프 치환 원칙 ISP 인터페이스 분리 원칙 DIP 의존관계 역전 원칙 응집도는 높이고 결합도는 낮추라는 원칙을 재정립한 것이다. 개발자들 마다 해석의 차이가 있다고 하지만, 객체지향을 이해하고 디자인 패턴 및 스프링을 이해하는데 큰 도움이 되는 SOLID를 나에게 맞는 예시를 들어 생각하며 정리하자. SRP 단일 책임 원칙 "한 클래스는 하나의 책임만 가져야 한다," 스프링으로 프로젝트를 만들때를 생각해보자. 우리는 주요 클래스들을 컨트롤러 단, 서비스 단, 레포지토리 단 으로 나눠서 개발을 한다. 이렇게 주요 기능별로 나눠서 ..
1.문제점 JPA를 통한 개발을 하다보면 한번쯤 만날 수 밖에없는 에러이다. JPA를 사용하여 DB에 저장된 리소스를 불러와서 반환하는 경우, 혹은 사용할 때 발생했던 에러이다. 2.접근 JPA에 대한 이해가 부족하다 생각하여 JPA강의와 강의자료를 다시 보며 개념을 스터디 했다. JPA의 전반적인 동작 과정 트랜잭션,영속성 컨텍스트,Proxy,Lazy Loading에 대한 이해가 있어야 에러를 이해하고 수정할 수 있다. 3.원인 간단한 예시를 들어서 설명해보겠다. Member와 Message가 연관관계를 맺고 있고 1:N관계를 가지고 있다. Message 엔티티에서는 Member Fetch 전략을 Lazy로 설정해 준 상태이다. 어플리케이션의 메시지 단건 조회 API의 과정은 다음과 같다 그럼 이제 오..