목록workspace/server_application (122)
HwangHub
datasource url에 localhost:3306/mydb와 같이 입력해 뒀는데, datasource url을 해석하지 못하는 에러가 발생했다. 일단 datasource url은 정확했다. (당연히 여러 원인이 있겠지만) 사실 127.0.0.1이 localhost와 동일한 의미인데, 혹시나 하고 127.0.0.1로 해보니 연결은 되는 걸 확인할 수 있었다. 아무래도 127.0.0.1을 localhost(루프백 호스트)로 인식하는 게 제대로 동작하고 있지 않는 것 같았다. 문제 파악하기 어디서 문제가 있나 살펴보던 중 pom.xml에서 xmlns:xsi에 http://www.w3.org/2001/XMLSchema-instance로 지정되어 있었는데, xsi가 http로 지정되어 있으니까 다른 xmln..
항상 스프링부트 + gradle 조합으로 개발하다보니, maven을 이용한 프로젝트를 진행해보지 않았었다. 이번에 싸피를 하면서 myBatis와 maven 프로젝트를 하게 될 것 같은데, 이번 기회에 pom.xml 혐오를 멈춰보고자 한다. 우선, 불편함을 지우지 위해서는 어느정도 pom.xml과 서로 알아가는 시간이 필요할 것 같아서 들여다 보기 시작했다. gradle로 빌드 파일을 설정해오면서 봤던 의존성 설정이나 빌드 설정 등은 대략 이해가 가는데, project 태그의 xmlns 부분은 어색하게 느껴졌다. 따라서 이를 한번 알아보기로 했다. POM이란? POM은 Project Object Model을 의미한다. maven으로 빌드를 진행하는 프로젝트의 설정 파일을 pom.xml이라고 하여 작성한다...
문제 상황 게시판에 단순 접근하거나 게시글 검색을 한 결과에서는 body 내용이 간소화되어서 제공되어야 한다. 문제는, 우리 게시글들은 DB 속 게시글 테이블의 body 칼럼에 html이 들어간다는 거다. 이걸 단일 게시글 조회할때엔 프론트에서 문서화해서 보여주지만, 게시글 목록에서는 body 내용을 하나하나 모두 보여주지 않고 간소화시켜서 제공해주므로, 본문 내 이미지들을 요약문에서 보여주기엔 적절하지 않다. 따라서 이를 처리해줘야 한다. AS-IS 아래는 게시글 목록 dto 생성자이다. 저기에 있는 저 body에 들어가는 문자열을 처리해줘야 한다. public PostSimpleData(...) { this.postId = postId; this.authorId = authorId; this.main..
제목에서 알 수 있듯, 2024-01-09 20:20:30.603778와 같이 LocalDateTime 형식의 데이터를 "yyyy. M. d" 형식으로 파싱하여 제공하려고 한다. 기획 요구사항에서 "2024. 01. 09."도 아니고, "2024. 1. 9."도 아니라 정확히 "2024. 1. 9"와 같은 형식을 요구하였기에, 해당 처리를 어떻게 할지 알아보았다. 알아보니, 이러한 형식은 자주 사용되는 형식이라 자바에서는 자주 사용하는 날짜 형식에 대하여 FormStyle이라는 enum 클래스를 운영하는 것을 알게 되었다. 내가 원하는 DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)이라는 메서드를 지원하는 걸 알게 되었다. 그래서 아래와 같이 짰었다. AS..
게시글 수정 API를 작성하고 있었다. 게시글 수정을 구현하기 위해서는 다음 정보들을 한 번에 받는다. AS-IS public record PostUpdateRequestDto( String title, // 제목 String body, // 내용 String thumbnail, // 썸네일 String category // 게시글 카테고리 ) { } 위 dto properties의 유효성 조건은 다음과 같다. 제목과 내용, 카테고리는 비어있으면 안된다. 썸네일은 없으면 기본 이미지로 제공된다. 이런 유효성 검사는 javax(or jakarta)에서 기본적으로 @NotNull, @NotEmpty, @NotBlank라는 어노테이션을 지원한다. 그렇다면 이 세가지 중 어떤걸 써야 할까? 영어를 한국어로 바꾸..
Lettuce Lettuce(레디스 자바 클라이언트) 적용 ; 일종의 자바 환경에서의 레디스 접근 라이브러리 (spring data redis에 lettuce 내장되어 있음) 커넥션 핸들링 제공 (나는 standalone 연결중) 동기, 비동기, 리액티브 API 제공 클러스터를 지원(별도 설정 필요), but 우리는 standalone으로 사용중이라 필요 없음 RedisTemplate redistemplate은 Redis 서버와 상호작용하기 위한 Java 언어용 템플릿입니다. Redis는 인메모리 데이터 저장소로서 키-값 쌍을 저장하고 검색하는 데 사용되며, redistemplate은 Java 애플리케이션에서 이러한 Redis 서버와 통신하는 데 도움을 주는 도구입니다. Spring Data Redis ..
BST를 탐색하는 시간복잡도가 O(logN)이라고 한다. 이를 어떻게 유도할 수 있나? 유도 과정 기본적으로 크기가 N인 ordered array가 있다고 해 보자. Binary search tree의 매커니즘과 동일하게 생각해보면, 우리는 숫자의 범위를 절반씩 잘라가는 행위를 결국에는 남은 숫자의 개수가 1이 될 때 까지 반복할 것이다. 이렇게 반복한 횟수를 k번이라 해 보자. (즉, 여기서 k가 의미하는 것은 결국 해당 연산을 몇 번 수행하냐를 의미하게 되며, 이는 BST의 탐색 연산 횟수와 같다.) 이를 수식화하면 N * (1/2)^k = 1 라고 표현할 수 있다. 이는 N = 2^k와 같다. 따라서 양 변에 밑이 2인 log를 취하면 log N = k 라는 결과가 나온다. 이는 N개의 숫자를 갖는..
문제 인지 현재 프로젝트에 다음과 같은 문제가 있다. 우리 프로젝트에서는 레디스를 사용하여 commentCount, likeCount를 관리하고 있다. 이를 기준으로 한 sort(랭킹)을 위해서 사용한다. 하지만 정상적으로 redis가 업데이트 되고 있지 않는 것으로 확인되었다. 상황 파악 우리 프로젝트에서 레디스가 어떻게 사용되고 있는지 먼저 파악하였다. 기본적으로 직렬화할 때 TIMESTAMPS 형식을 disable 함 직렬화할 때 자바의 LocalDateTime으로 적용시킴 타입 검사할 때 non-final이 기본값으로 되도록 설정 Lettuce(레디스 자바 클라이언트) 사용 적용 자료구조 : String key-value 형태로 저장중 (우리는 로 저장) string의 prefix 가 "postC..
Entity의 PK를 @GeneratedValue(strategy = GenerationType.AUTO)로 해두었을 때 발생한 문제이다. 이 문제는 hibernate_sequence라는 테이블에서 PK를 조회하는데 해당 테이블이 존재하지 않아서 발생한다. hibernate_sequence 테이블이란? Hibernate5는 GenerationType.AUTO로 PK 생성 전략을 설정하면 다음 순서로 처리한다. @Id로 매핑된 Entity의 Field Type이 UUID라면 UUID Generator를 사용하여 생성한다. Integer나 Long 과 같은 numerical 타입이라면 Hibernate 설정 파일을 스캔하여 identifierGenerator를 사용하고 있는지 검사한다. 만약 사용하지 않으면..
ISSUE 운영중인 서버의 DB 스키마를 변경해야 했다. 로직을 수정하다보니 기존 스키마에 불필요한 칼럼이 존재함을 알게 된 것이다. 경우에 따라서는 칼럼을 추가해야 하는 경우도 있었다. 현재 운영 서버는 ddl-auto : none 으로 설정하고 사용하고 있다. 따라서 스키마 수정만을 위해 ddl-auto : update 처리하고 restart하는건 벼룩 잡겠다고 집을 태우는 것과 유사한 느낌이라고 판단했다. 잘 운영되고 있는 서버를 로직 수정도 아닌 상황에서 내려야 하며, ddl-auto에 의존하게 되면 어떻게 sql이 작성될지 알기 어렵다는 게 문제다. 즉, 리스크가 있는 선택이라는 거다. SQL 몇 줄 쓰는게 어려운 일도 아닌데, 참 바보같게도 과거에는 ddl-auto에 의존적으로 스키마 구성을 ..