@RestControllerAdivce vs @Around("within(@org.springframework.web.bind.annotation.RestController *)")
·
Spring
Trouble shooting프로젝트에서 에러코드가 자꾸 500번대로 나가는 이슈가 발생했다. 현재 프로젝트는 ResponseEntityExceptionHandler(관점지향 - 역할과 책임의 분리)를 상속해 예외처리를 하고 있는 상태였다. 분명 RunTimeException을 상속해 GeneralException을 만들어 커스텀 예외를 처리하게끔 했는데도 이 ExceptionHandler에서 처리가 되고 있는 것을 확인할 수 있었다. 물론 RuntimeException을 GeneralExcetion 상속하고 있긴하지만 분명히 더 구체적인 하위 클래스부터 처리가 된다고 알고 있었기 때문에 이는 문제가 아니라고 생각했다.해결 디버깅 모드로 돌려보니 로깅을 위해 사용하던 LoggingAspect 클래스에서 ..
elasticsearch 용어와 개념 정리
·
Elasticsearch
1. 용어RDB와 비교해서 비교하면 더 헷갈리수 있을 것 같아, 순수 엘라스틱서치만 분석해보자 Index : 데이터를 저장하는 논리적인 단위이다. 이안에 실제로 데이터가 저장되는 것은 아니다. 데이터의 유형을 분리해주는 단위라 생각해라.Field : 데이터의 속성이다. 인덱스는 다양한 field로 구성되어있다.Document : 실제 데이터의 값. 속성값을 모두 갖고 있을수도 있고, 없을 수도 있다. 비정형 데이터의 특징이다.Shard : 데이터가 저장되는 물리적인 단위이다. Index는 여러개의 샤드로 나뉜다. 기본은 5개이다. 하나의 인덱스를 생성하면 자동으로 5개의 샤드도 생성된다.Node : Elasticsearch를 구성하는 하나의 단위 프로세스. 여러 인덱스가 모여 하나의 노드를 구성하고 다른..
private subnet에 위치한 RDS 인텔리제이 연결
·
AWS
1. 로컬 테스트기존 RDS를 지우고 다시 vpc private subnet에 RDS를 생성하였다. 그러다 보니 로컬에서 서버를 돌리기 위해 기존 yml 파일이나 인텔리제이 Database source도 수정이 필요했다. 2. 방법고뇌와 구글을 통해 생각한 방법은 다음과 같다. public subnet에 위치한 DB 만들기이걸 젤 먼저 처음 생각하긴 했는데, 생각해보니 비용과 나중에 DB 덤프를 할때 머리를 박을거 같아 패싱하였다. aws direct connet"AWS Direct Connect를 사용하면 AWS Virtual Private Cloud (VPC)와 안전하게 연결할 수 있습니다. 이를 통해, VPC 내의 리소스에 대해 더 빠르고 안정적인 연결을 설정할 수 있습니다." 라고 aws에서 알려..
swagger 403 에러응답
·
기타
1.  Post, Put ,Patch시 401 에러!프로젝트 진행중 patch 요청 시 401 에러가 뜨니 해결 요청을 받게 되었다. Swagger를 사용중이라 Swgger에 들어가 요청을 날려보니 403 에러코드가 오면 요청이 실패하는 것을 알게 되었다.  2.  401?, 403?왜 응답코드가 달랐을까? 결론적으로 말하자면 서로의 테스트 환경이 달랐다. dev.웹서버에서 직접 요청을 보내며 테스트를 진행중이었고, 나는 Postman을 사용해서 테스트를 해보지만, swagger로 테스트 중일 것이란 생각에 swagger에서 요청을 보냈던 것이다. (소통의 중요성;;;)이러한 사실을 뒤에 알았고, 일단 403 에러를 처리하기 위해 노력했다. jwt token 문제라는 내용이 있어 확인해보았지만 postm..
백준 11000번 : 강의실 배정(자바)
·
알고리즘
문제수강신청의 마스터 김종혜 선생님에게 새로운 과제가 주어졌다.김종혜 선생님한테는 Si에 시작해서 Ti에 끝나는 N개의 수업이 주어지는데, 최소의 강의실을 사용해서 모든 수업을 가능하게 해야 한다. 참고로, 수업이 끝난 직후에 다음 수업을 시작할 수 있다. (즉, Ti ≤ Sj 일 경우 i 수업과 j 수업은 같이 들을 수 있다.)수강신청 대충한 게 찔리면, 선생님을 도와드리자!입력첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000)이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si 출력강의실의 개수를 출력하라.💡풀이입력이 20만개이다. N^2미만의 시간복잡도를 가져가야 한다. 그리디 알고리즘을 사용했는데 입력들의 수업 시작 시간을 기준으로 정렬하였다. 그리고 우선순위 큐를 만들고 끝나는 ..
연관관계 (단방향과 양방향) 정리
·
Spring
데이터베이스의 설계는 쉽지 않다. 데이터를 객체로 사용하는 spring에서도 고려를 하며 관계를 설계 해야한다. 일반적으로 데이터 베이스는 PK를 가진 테이블을 설계하고 PK키를 FK로 갖는 테이블을 나중에 설계한다. 하지만 JPA는 방향성을 결정하는 것조차 어렵다.예를 들어 아래와 같은 테이블이 두개 존재한다고 가정하자. 회원id(PK)Longnamevarcharpasswordvarcharcreated_atDATETIMEmodified_atDATETIME 게시물id(PK)Longtitlevarcharwriter_id(FK)Longcontentsvarcharcreated_atDATETIME 게시물은 작성자의 id를 FK로 가지고 있다. 그러면 회원 객체가 게시물을 참조하는 것일까? 아니면 게시물들이 회원..
Restful 하구마잉
·
기타
rest 방식이란 무엇인가? url을 사용해서 웹 개발을하는 방식? 하나의 url을 통해서 여러 행위나 목적을 달성하는 방식? 틀린말이라고는 할 수 없지만 뭔가 크게 와닿지는 않는 느낌이다. 요즘은 다 Restful api 개발을 필수적인 경험으로 생각하는  것 같다. 그만큼 Rest가 주는 이점과 변화가 크다는 의미로 느껴진다. Rest는 사실 url을 사용하는 하나의 방법이다. 그러한 방법들을 고려해서 url을 사용해 api를 만든다면 우리는 그것을 Restful(레스트스러운) api라고 부른다. 기존의 url을 사용할 때는 url에 행위와 목적을 나타냈다. 예를 들어 CRUD를 구현할 때 /board/create, /board/modify 라는 식으로 url을 사용하고 데이터는 GET/POST 등을..
백준 7576번: 토마토(자바)
·
알고리즘
문제철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다.창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지, 그 최소 일수를 알고 싶어 한다.토마토를 창고에 보관하는 격자모양의 상자들의 크..
스트림을 알아보자!!!
·
자바
정말 아무것도 모르고 스트림을 사용할 때가 있었다. 람다조차 모를때 코드가 간편해진다는 이유로 기존 코드를 스트림으로 변환했던 기억이 있다. 그리고 블로그 글을 봐도 잘 이해가 가지 않았다... 나와 비슷한 사람을 위해(또는 나를 위해) 간단히 정리해보자! 스트림이란?스트림이란 '데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소'로 정의할 수 있다. 이게 도대체 무슨 말인가.... 비루한 머리로 해석해보자면 데이터 처리를 할때,,, 안되겠다 하나하나 알아보자 연속된 요소 : 컬렉션과 마찬가지로 스트림은 특정 요소 형식으로 이루어진 연속된 값 집합의 인터페이스를 제공한다. 컬렉션은 자료구조이므로 컬렉션에서는 시간과 공간의 복잡성과 관련된 요소 저장 및 접근 연산이 주를 이룬다. (ArrayList..
람다를 이용하자!
·
자바
알고리즘을 풀며 Comparator 인터페이스를 사용할 때 주로 클래스로 구현하거나 익명 클래스를 사용하여 정렬을 하였다. public class AppleComparator implements Comparator { public int compare(Apple a1, Apple a2){ return a1.getWeight().compareTo(o2.getWegiht()); }}inventory.sort(new AppleComparator()); 혹은inventory.sort(new Comparator() { public int compare(Apple a1, Apple a2){ return a1.getWeight()-a2.getWeight(); }}); 이런 익명클래스를 이용하..
돌_멩
여러취미